** ๐Ÿ“ŒPART 1.1 DispatcherServlet ๋™์ž‘ ์›๋ฆฌ & ๋ฉ”๋ชจ๋ฆฌ ํ๋ฆ„ **

๐Ÿ“Œ ์ฃผ์ œ: โ€œ์„œ๋ธ”๋ฆฟ์€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?โ€


๐ŸŸข 1๋‹จ๊ณ„: ์„œ๋ธ”๋ฆฟ์€ ๋ญ์•ผ? ์ค‘ํ•™์ƒ๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ์„ค๋ช…

๐Ÿ“ฆ ์„œ๋ธ”๋ฆฟ(Servlet)์€ ์ž๋ฐ”๋กœ ๋งŒ๋“  ์›น์„œ๋ฒ„์šฉ ํ”„๋กœ๊ทธ๋žจ์ด์•ผ.

์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ฑฐ๋‚˜, ์ฃผ์†Œ์ฐฝ์—์„œ ์–ด๋–ค ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ–ˆ์„ ๋•Œ

๊ทธ๊ฑธ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•ด ์ฃผ๋Š” โ€œ์›น ์„œ๋ฒ„ ์ชฝ์˜ ๋‡Œโ€ ๊ฐ™์€ ์—ญํ• ์ด์•ผ.


โš™๏ธ 2๋‹จ๊ณ„: ์„œ๋ธ”๋ฆฟ ๋™์ž‘ ์ˆœ์„œ ์ •๋ฆฌ (init โ†’ service โ†’ doGet/doPost)

๐Ÿ“Œ ์ „์ฒด ํ๋ฆ„ ์š”์•ฝ

[์›น์„œ๋ฒ„ ์‹œ์ž‘ ์‹œ]
๐Ÿ‘‰ ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๊ฐ€ ํ•œ ๋ฒˆ ๋งŒ๋“ค์–ด์ง โ†’ init() ์‹คํ–‰๋จ

[์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค]
๐Ÿ‘‰ service() ํ˜ธ์ถœ๋จ โ†’ ๋‚ด๋ถ€์—์„œ doGet() ๋˜๋Š” doPost()๋กœ ๋ถ„๊ธฐ๋จ

[์›น์„œ๋ฒ„ ์ข…๋ฃŒ ์‹œ]
๐Ÿ‘‰ destroy() ์‹คํ–‰๋จ

๐Ÿ” 1) init(): ๋”ฑ 1๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋Š” ์ค€๋น„ ๋‹จ๊ณ„

@Override
public void init() throws ServletException {
    System.out.println("๐Ÿ“Œ ์ตœ์ดˆ 1ํšŒ ์„œ๋ธ”๋ฆฟ ์ดˆ๊ธฐํ™”");
}

๐Ÿง  ๋ฉด์ ‘ ํฌ์ธํŠธ:

์„œ๋ธ”๋ฆฟ์€ ์‹ฑ๊ธ€ ์ธ์Šคํ„ด์Šค(single instance)์ด๋ฉฐ, init์€ ๋”ฑ 1๋ฒˆ๋งŒ ํ˜ธ์ถœ๋จ (๊ธฐ์–ตํ•ด๋‘์„ธ์š”!)


๐Ÿ” 2) service(): ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋จ

@Override
protected void service(HttpServletRequest req, HttpServletResponse res) {
    System.out.println("๐Ÿ“Œ ๋ชจ๋“  ์š”์ฒญ ์ง„์ž…์  (GET/POST ์ƒ๊ด€์—†์ด ๋“ค์–ด์˜ด)");
}

๐Ÿ” 3) doGet() / doPost(): ์‹ค์ œ ์—…๋ฌด ์ˆ˜ํ–‰

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) {
    System.out.println("โœ… GET ์š”์ฒญ ์ฒ˜๋ฆฌ");
}

๐Ÿ” 4) destroy(): ์ข…๋ฃŒ ์‹œ ์ž์› ์ •๋ฆฌ

@Override
public void destroy() {
    System.out.println("๐Ÿงน ๋ฉ”๋ชจ๋ฆฌ ์ •๋ฆฌ (์„œ๋ฒ„ ์ข…๋ฃŒ)");
}

๐Ÿง  3๋‹จ๊ณ„: ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ โ€” ์„œ๋ธ”๋ฆฟ์€ ๋ฉ”๋ชจ๋ฆฌ์— ์ด๋ ‡๊ฒŒ ์˜ฌ๋ผ๊ฐ„๋‹ค!

๐Ÿงฉ ๋ฉ”๋ชจ๋ฆฌ ํ๋ฆ„ ์š”์•ฝ

ํ•ญ๋ชฉ ๋‚ด์šฉ
ํด๋ž˜์Šค ์˜์—ญ ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค ์ž์ฒด (๋”ฑ 1๊ฐœ๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ)
ํž™ ์˜์—ญ ์š”์ฒญ ์ฒ˜๋ฆฌ ์ค‘ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜๋“ค
์Šคํƒ ์˜์—ญ ๊ฐ ์š”์ฒญ๋งˆ๋‹ค ์ƒ์„ฑ๋˜๋Š” ๋กœ์ปฌ ๋ณ€์ˆ˜
์“ฐ๋ ˆ๋“œ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„๊ฐ€ ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ๋กœ ์ฒ˜๋ฆฌ

๐Ÿ“Œ ๋„์‹์œผ๋กœ ๋ณด๊ธฐ

[์„œ๋ฒ„ ๊ธฐ๋™ ์‹œ]
๐Ÿ“ BoardController.class โ†’ ๋ฉ”๋ชจ๋ฆฌ์— 1๋ฒˆ ๋กœ๋”ฉ
   โ”” init() ์‹คํ–‰

[์‚ฌ์šฉ์ž 1 ์š”์ฒญ]
๐Ÿงต Thread A โ†’ service() โ†’ doGet() ์‹คํ–‰

[์‚ฌ์šฉ์ž 2 ์š”์ฒญ]
๐Ÿงต Thread B โ†’ service() โ†’ doPost() ์‹คํ–‰

๐Ÿง  4๋‹จ๊ณ„: ์“ฐ๋ ˆ๋“œ ํ’€ + ๋™์‹œ ์‚ฌ์šฉ์ž ์ฒ˜๋ฆฌ ๋ฐฉ์‹

๐Ÿ’ก ์„œ๋ธ”๋ฆฟ์€ โ€œ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œโ€๋กœ ๋™์ž‘ํ•œ๋‹ค๋Š” ๊ฑธ ๊ธฐ์–ตํ•˜์„ธ์š”!

  • ํ•˜๋‚˜์˜ ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ
  • ์š”์ฒญ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ(Thread)๊ฐ€ ๋งŒ๋“ค์–ด์ ธ์„œ ๋™์‹œ์— ์ฒ˜๋ฆฌ๋จ
  • ์ž๋ฐ” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(Tomcat)๋Š” ์“ฐ๋ ˆ๋“œ ํ’€(Thread Pool) ๊ตฌ์กฐ ์‚ฌ์šฉ
    • ๋ฏธ๋ฆฌ ์“ฐ๋ ˆ๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค์–ด ๋†“๊ณ  ์š”์ฒญ์ด ์˜ฌ ๋•Œ ๊บผ๋‚ด ์”€

๐Ÿง  ๋ฉด์ ‘ ํฌ์ธํŠธ:

โ€œ์„œ๋ธ”๋ฆฟ์€ ์“ฐ๋ ˆ๋“œ ์„ธ์ดํ”„(Thread-safe)ํ•œ๊ฐ€์š”?โ€

โ†’ ์•„๋‹ˆ์š”! ๊ณต์œ  ๋ณ€์ˆ˜(static, ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜) ์‚ฌ์šฉํ•  ๋• ๋™๊ธฐํ™” ํ•„์š”


โœ… 5๋‹จ๊ณ„ ์š”์•ฝ: ์ „์ฒด ํ๋ฆ„ ์š”์•ฝ + ๋ฉด์ ‘ ์งˆ๋ฌธ ๋Œ€๋น„

๊ตฌ๋ถ„ ์„ค๋ช… ๋ฉด์ ‘ ํฌ์ธํŠธ
init() ์ตœ์ดˆ 1ํšŒ ์‹คํ–‰, ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ์ฒด ์ƒ์„ฑ ์–ธ์ œ ํ˜ธ์ถœ๋˜๋‚˜์š”? GC ๋Œ€์ƒ์ธ๊ฐ€์š”? (X)
service() ์š”์ฒญ๋งˆ๋‹ค ํ˜ธ์ถœ, GET/POST ํŒ๋‹จ ์™œ ์ง์ ‘ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•˜๋‚˜์š”?
doGet() GET ์š”์ฒญ ์ฒ˜๋ฆฌ ์‚ฌ์šฉ์ž์˜ URL ์ง์ ‘ ์ž…๋ ฅ ์š”์ฒญ
doPost() POST ์š”์ฒญ ์ฒ˜๋ฆฌ form ํƒœ๊ทธ submit ์ฒ˜๋ฆฌ
Thread ์š”์ฒญ๋งˆ๋‹ค ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋‹ค๋ฆ„ ๋™์‹œ์„ฑ ์ด์Šˆ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ

๐ŸŽ“ ์‹ค๋ฌดยท๋ฉด์ ‘ ์˜ˆ์ œ ์งˆ๋ฌธ

  1. ์„œ๋ธ”๋ฆฟ์€ ์™œ ์‹ฑ๊ธ€ ์ธ์Šคํ„ด์Šค์ธ๊ฐ€์š”?
  2. init()์€ ์–ธ์ œ ํ˜ธ์ถœ๋˜๊ณ , destroy()๋Š” ์–ธ์ œ ํ˜ธ์ถœ๋˜๋‚˜์š”?
  3. ์‚ฌ์šฉ์ž 1000๋ช…์ด ๋™์‹œ์— ์š”์ฒญํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์–ด๋–ค ์ผ์ด ๋ฒŒ์–ด์ง€๋‚˜์š”?
  4. ์„œ๋ธ”๋ฆฟ์—์„œ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜(static ์ œ์™ธ)๋ฅผ ์“ฐ๋ฉด ์•ˆ ๋˜๋Š” ์ด์œ ๋Š”?
  5. ์“ฐ๋ ˆ๋“œ ํ’€์˜ ํฌ๊ธฐ๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋‚˜์š”?

โœ… PART 1.2 ์š”์ฒญ ๋ผ์šฐํŒ… (URL โ†’ ๋ฉ”์„œ๋“œ ๋งคํ•‘)


๐ŸŸข 1๋‹จ๊ณ„. ์š”์ฒญ ๋ผ์šฐํŒ…์ด ๋ญ์•ผ? (๊ธฐ์ดˆ ๊ฐœ๋…)

๐Ÿ“ฆ ์ •์˜

์‚ฌ์šฉ์ž๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์–ด๋–ค ์ฃผ์†Œ(URL) ๋ฅผ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด,

๊ทธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” Java ์„œ๋ธ”๋ฆฟ์˜ ๋ฉ”์„œ๋“œ๋กœ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ๊ฒƒ์„ โ€œ์š”์ฒญ ๋ผ์šฐํŒ…(Routing)โ€์ด๋ผ๊ณ  ํ•ด.


์˜ˆ์‹œ

[์‚ฌ์šฉ์ž ์š”์ฒญ]
http://localhost:8080/myapp/board/list

[์–ด๋–ค ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋ผ์•ผ ํ• ๊นŒ?]
โ†’ BoardController.java์˜ list() ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰!

๐Ÿ‘‰ ์ด๊ฑธ URL โ†’ ๋ฉ”์„œ๋“œ ๋งคํ•‘์ด๋ผ๊ณ  ํ•ด!


๐ŸŸข 2๋‹จ๊ณ„. URL ํŒจํ„ด ๋งคํ•‘ ์ข…๋ฅ˜ (/*, /controller/*)์™€ ๋ฉ”๋ชจ๋ฆฌ ์ฐจ์ด

1. /

๐Ÿ“› ์ฃผ์˜: ์ •์  ๋ฆฌ์†Œ์Šค๊นŒ์ง€ ๋‹ค ๊ฐ€๋กœ์ฑ„์„œ JSP๋‚˜ ์ด๋ฏธ์ง€๊ฐ€ ๋™์ž‘ ์•ˆ ํ•  ์ˆ˜ ์žˆ์Œ


2. /*


3. /controller/*

@WebServlet("/controller/*")

๐Ÿ‘‰ ์ด๋Ÿฐ ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜ค๋ฉด ์ฒ˜๋ฆฌ๋จ: /controller/write, /controller/list


โœ… ๋ฉ”๋ชจ๋ฆฌ์  ์ฐจ์ด

ํŒจํ„ด ๋ฉ”๋ชจ๋ฆฌ ์˜ํ–ฅ ์„ค๋ช…
/ ๋ฌด๊ฑฐ์›€ ๋ชจ๋“  ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑ„ GC ๋ถ€ํ•˜โ†‘
/* ์ค‘๊ฐ„ JSP, ์ด๋ฏธ์ง€๊นŒ์ง€ ๊ฐ€๋กœ์ฑ„ ์ฃผ์˜
/controller/* ํšจ์œจ์  ํ•„์š”ํ•œ ์š”์ฒญ๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจโ†‘

๐Ÿง  ๋ฉด์ ‘ ํฌ์ธํŠธ


๐Ÿง  3๋‹จ๊ณ„. @WebServlet vs web.xml ๋งคํ•‘ ์ฐจ์ด

ํ•ญ๋ชฉ @WebServlet (์• ๋…ธํ…Œ์ด์…˜ ๋ฐฉ์‹) web.xml (์„ค์ • ํŒŒ์ผ ๋ฐฉ์‹)
์ž‘์„ฑ ์œ„์น˜ Java ์ฝ”๋“œ ์œ„์— ์ง์ ‘ ์ž‘์„ฑ XML ์„ค์ • ํŒŒ์ผ์—์„œ ์„ค์ •
๊ฐ€๋…์„ฑ ์ข‹์Œ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์Œ
์œ ์ง€๋ณด์ˆ˜ ํด๋ž˜์Šค ์•ˆ์—์„œ ๋ณด๊ธฐ๊ฐ€ ์‰ฌ์›€ ํฐ ํ”„๋กœ์ ํŠธ์—์„œ ์„ค์ •๋งŒ ๋”ฐ๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
์‹ค๋ฌด ํ™œ์šฉ ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์—์„œ ์„ ํ˜ธ

โœ… ์˜ˆ์ œ: @WebServlet

@WebServlet("/board/*")
public class BoardController extends HttpServlet {
    ...
}

โœ… ์˜ˆ์ œ: web.xml

<servlet>
  <servlet-name>board</servlet-name>
  <servlet-class>controller.BoardController</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>board</servlet-name>
  <url-pattern>/board/*</url-pattern>
</servlet-mapping>

๐Ÿง  ๊ณ ๊ธ‰ ๋ฉด์ ‘ ๊ฐœ๋…


๐Ÿง  4๋‹จ๊ณ„. Annotation ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… ํ”„๋ ˆ์ž„์›Œํฌ ์„ค๊ณ„ (@RequestMapping ์ง์ ‘ ๊ตฌํ˜„)

๐Ÿ’ฌ ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด:

์Šคํ”„๋ง์ฒ˜๋Ÿผ URL๋งˆ๋‹ค ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์—ฐ๊ฒฐํ•˜๊ณ  ์‹ถ์„ ๋•Œ,

@RequestMapping("list") ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ฉ”์„œ๋“œ์— URL์„ ๋ถ™์ด๋Š” ๋ฐฉ์‹์ด ํ•„์š”ํ•ด.


โœ… ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ๋งŒ๋“ค ๊ฒฝ์šฐ

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RequestMapping {
    String value();
}

์˜ˆ์‹œ ์‚ฌ์šฉ

@RequestMapping("list")
public String list(HttpServletRequest req, HttpServletResponse res) {
    ...
}

๐ŸŽฏ ํ•ต์‹ฌ ์„ค๊ณ„ ๊ฐœ๋…


๐Ÿง  ๊ตฌํ˜„ ์‹œ ์ฃผ์˜์ 

ํ•ญ๋ชฉ ์„ค๋ช…
๋ฉ”๋ชจ๋ฆฌ Reflection์€ ๋А๋ฆฌ๋ฏ€๋กœ ์บ์‹œ ์ „๋žต ํ•„์š”
์†๋„ ๋ฉ”์„œ๋“œ ๊ฒ€์ƒ‰์„ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๋„๋ก ์ตœ์ดˆ ์‹คํ–‰ ์‹œ ๋ผ์šฐํŒ… Map์œผ๋กœ ์ €์žฅ
์‹ค๋ฌด Spring์—์„œ๋Š” HandlerMapping, DispatcherServlet์ด ์ด๊ฑธ ๊ด€๋ฆฌํ•จ

โœ… ์ตœ์ข… ์š”์•ฝ: ์ด ํŒŒํŠธ์—์„œ ์™ธ์›Œ์•ผ ํ•  ๊ฒƒ

ํ•ญ๋ชฉ ๋‚ด์šฉ
/* vs /controller/* ์ข์€ ๋ฒ”์œ„ ๋งคํ•‘์ด ์„ฑ๋Šฅ, ๋ฉ”๋ชจ๋ฆฌ์— ์ข‹๋‹ค
@WebServlet vs web.xml ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ์— ๋”ฐ๋ผ ์„ ํƒ
Annotation ๋ผ์šฐํŒ… Reflection์œผ๋กœ ๋ฉ”์„œ๋“œ ์—ฐ๊ฒฐ, ์บ์‹ฑ ์ „๋žต ํ•„์š”

๐Ÿ’ก ๋ฉด์ ‘ ์˜ˆ์ƒ ์งˆ๋ฌธ

  1. ์„œ๋ธ”๋ฆฟ ๋งคํ•‘์„ /*๋กœ ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋Š”?
  2. @WebServlet๊ณผ web.xml ๋ฐฉ์‹์˜ ์žฅ๋‹จ์ ์€?
  3. @RequestMapping("list")์„ ์ง์ ‘ ๋งŒ๋“ค ๋•Œ ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‚˜์š”?
  4. URL โ†’ ๋ฉ”์„œ๋“œ ๋งคํ•‘์„ ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ ์ „๋žต์€?

๐ŸŸขPART 1.3 Request, Response, Session ๊ฐ์ฒด ์ƒ๋ช…์ฃผ๊ธฐ ์™„์ „ ์ •๋ณต


๐ŸŸข 1๋‹จ๊ณ„. โ€œ์Šค์ฝ”ํ”„(scope)โ€๊ฐ€ ๋ญ์•ผ?

๐Ÿ’ฌ ์Šค์ฝ”ํ”„(Scope)๋Š” โ€œ๋ฐ์ดํ„ฐ๊ฐ€ ์–ผ๋งˆ ๋™์•ˆ ์‚ด์•„ ์žˆ๋ƒ?โ€ ๋ฅผ ๋งํ•ด.

์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ๋ณ€์ˆ˜๋‚˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ธ์ œ ์ƒ์„ฑ๋˜๊ณ , ์–ธ์ œ ์‚ฌ๋ผ์ง€๋Š”์ง€๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฑฐ์•ผ.


๐Ÿงฉ 2๋‹จ๊ณ„. JSP/Servlet์—์„œ ์“ฐ๋Š” 3๊ฐ€์ง€ ์ฃผ์š” ์Šค์ฝ”ํ”„

์ด๋ฆ„ ์‚ด์•„ ์žˆ๋Š” ์‹œ๊ฐ„ ์ €์žฅ ์œ„์น˜ ์˜ˆ์‹œ
RequestScope ์š”์ฒญ(request) 1๋ฒˆ ๋™์•ˆ HttpServletRequest ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ, ๊ธ€์“ฐ๊ธฐ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ
SessionScope ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ผœ์ ธ ์žˆ๋Š” ๋™์•ˆ (๋กœ๊ทธ์ธ ์„ธ์…˜) HttpSession ๋กœ๊ทธ์ธ ์ •๋ณด
ApplicationScope ์„œ๋ฒ„๊ฐ€ ์ผœ์ ธ ์žˆ๋Š” ๋™์•ˆ ServletContext ์ „์ฒด ์‚ฌ์ดํŠธ ๊ณตํ†ต ์„ค์ •

๐Ÿ” ๊ฐ๊ฐ ์Šค์ฝ”ํ”„์˜ ์ž‘๋™ ๋ฐฉ์‹ ์ž์„ธํžˆ ๋ณด๊ธฐ


โœ… 1. RequestScope (์š”์ฒญ ํ•˜๋‚˜๋งŒ ์œ ์ง€)

request.setAttribute("msg", "์ฒ˜๋ฆฌ ์™„๋ฃŒ!");
${msg}

๐Ÿ“ฆ ์˜ˆ์‹œ

๐Ÿง  ๋ฉด์ ‘ ํฌ์ธํŠธ:

RequestScope๋Š” ๋‹ค๋ฅธ JSP๋กœ forward ์‹œ์—๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ๋„˜์–ด๊ฐ.

Redirect๋Š” ์ƒˆ๋กœ์šด ์š”์ฒญ์ด๋ผ์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง!


โœ… 2. SessionScope (๋กœ๊ทธ์ธ ์„ธ์…˜ ์œ ์ง€)

HttpSession session = request.getSession();
session.setAttribute("loginId", "hong");

๐Ÿ“ฆ ์˜ˆ์‹œ

โณ ์ƒ๋ช…์ฃผ๊ธฐ


โœ… 3. ApplicationScope (์„œ๋ฒ„ ์ „์ฒด์—์„œ ๊ณต์œ )

ServletContext app = request.getServletContext();
app.setAttribute("visitorCount", 1234);

๐Ÿ“ฆ ์˜ˆ์‹œ


๐Ÿง  3๋‹จ๊ณ„. ๋ฉ”๋ชจ๋ฆฌ ๊ด€์ ์—์„œ ๋ณด๋Š” ๊ฐ ์Šค์ฝ”ํ”„

์Šค์ฝ”ํ”„ ๋ฉ”๋ชจ๋ฆฌ ์˜ํ–ฅ ์„ค๋ช…
Request ๋ฉ”๋ชจ๋ฆฌ ๋ถ€๋‹ด ์ ์Œ ์š”์ฒญ๋งˆ๋‹ค GC ๋Œ€์ƒ, ์ผํšŒ์„ฑ
Session ์ค‘๊ฐ„ ์ •๋„ ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์„ธ์…˜ ๋ฉ”๋ชจ๋ฆฌโ†‘
Application ๋ฉ”๋ชจ๋ฆฌ ๋ถ€๋‹ด ํผ ์ž˜๋ชป ์“ฐ๋ฉด ์ „์ฒด ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค๋ฅผ ๋จน์Œ

๐ŸŽฏ 4๋‹จ๊ณ„. ์Šค์ฝ”ํ”„ ์ถฉ๋Œ ์‹œ ์ „๋žต (๋ฉด์ ‘ ํฌ์ธํŠธ)

๐Ÿ’ฌ ๋ฌธ์ œ ์ƒํ™ฉ:

๋™์ผํ•œ ์ด๋ฆ„์˜ ๋ณ€์ˆ˜ "msg"๊ฐ€

๐Ÿ˜ฑ JSP์—์„œ ${msg} ๋ผ๊ณ  ํ•˜๋ฉด ์–ด๋–ค ๊ฐ’์ด ๋‚˜์˜ฌ๊นŒ?

๐Ÿ‘‰ EL(Expression Language)๋Š” ๋ฒ”์œ„ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์žˆ์Œ

์šฐ์„ ์ˆœ์œ„ (๋†’์Œ โ†’ ๋‚ฎ์Œ)


  1. PageScope (JSP ๋‚ด๋ถ€ ๋ณ€์ˆ˜)

  1. RequestScope

  1. SessionScope

  1. ApplicationScope


โœ… ์ถฉ๋Œ ์‹œ ์ฒ˜๋ฆฌ ์ „๋žต

์ „๋žต ์„ค๋ช…
๋ฒ”์œ„๋ฅผ ๋ช…์‹œํ•˜์ž ${sessionScope.msg} ๋กœ ์ •ํ™•ํžˆ ์ง€์ •
๋ณ€์ˆ˜๋ช… ๋‹ค๋ฅด๊ฒŒ loginMsg, alertMsg์ฒ˜๋Ÿผ ์—ญํ• ๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ
๊ฐ์ฒด๋ณ„๋กœ ๊ด€๋ฆฌ DTO/VO ํด๋ž˜์Šค ๋‚ด๋ถ€ ํ•„๋“œ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ๊ด€๋ฆฌ

๐Ÿ’ก ๋ฉด์ ‘ ์˜ˆ์ƒ ์งˆ๋ฌธ ๋ฆฌ์ŠคํŠธ

  1. request.setAttribute()๋กœ ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋Š” ์–ธ์ œ ์‚ฌ๋ผ์ง€๋‚˜์š”?
  2. request์™€ session์— ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด ์–ด๋–ค ๊ฒŒ ๋จผ์ € ๋ณด์ผ๊นŒ์š”?
  3. ServletContext์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด ์–ด๋–ค ์œ„ํ—˜์ด ์žˆ์„๊นŒ์š”?
  4. ๋กœ๊ทธ์ธ ์ƒํƒœ๋Š” ์–ด๋–ค ์Šค์ฝ”ํ”„์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€๊ฐ€์š”?
  5. forward()์™€ redirect()์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ์ฐจ์ด์ ์€?

โœ… ๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ ํ‘œ

์Šค์ฝ”ํ”„ ๊ฐ์ฒด ์œ ์ง€ ์‹œ๊ฐ„ ์‚ฌ์šฉ ์šฉ๋„
Request HttpServletRequest ์š”์ฒญ 1๋ฒˆ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ, ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€
Session HttpSession ๋กœ๊ทธ์ธ/๋ธŒ๋ผ์šฐ์ € ์„ธ์…˜ ๋กœ๊ทธ์ธ ์ •๋ณด, ์žฅ๋ฐ”๊ตฌ๋‹ˆ
Application ServletContext ์„œ๋ฒ„ ์‚ด์•„์žˆ๋Š” ๋™์•ˆ ์‚ฌ์ดํŠธ ์„ค์ •, ๊ณตํ†ต ๋ฐ์ดํ„ฐ

โœ๏ธ ์™ธ์›Œ์•ผ ํ•  ์‹ค๋ฌด ํฌ์ธํŠธ