** ๐PART 1.1 DispatcherServlet ๋์ ์๋ฆฌ & ๋ฉ๋ชจ๋ฆฌ ํ๋ฆ **
๐ ์ฃผ์ : โ์๋ธ๋ฆฟ์ ์ด๋ป๊ฒ ์๋ํ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋๊ฐ?โ
๐ข 1๋จ๊ณ: ์๋ธ๋ฆฟ์ ๋ญ์ผ? ์คํ์๋ ์ดํดํ ์ ์๊ฒ ์ค๋ช
๐ฆ ์๋ธ๋ฆฟ(Servlet)์ ์๋ฐ๋ก ๋ง๋ ์น์๋ฒ์ฉ ํ๋ก๊ทธ๋จ์ด์ผ.
์ฌ์ฉ์๊ฐ ๋ฒํผ์ ๋๋ฅด๊ฑฐ๋, ์ฃผ์์ฐฝ์์ ์ด๋ค ํ์ด์ง๋ฅผ ์์ฒญํ์ ๋
๊ทธ๊ฑธ ๋ฐ์์ ์ฒ๋ฆฌํด ์ฃผ๋ โ์น ์๋ฒ ์ชฝ์ ๋โ ๊ฐ์ ์ญํ ์ด์ผ.
โ๏ธ 2๋จ๊ณ: ์๋ธ๋ฆฟ ๋์ ์์ ์ ๋ฆฌ (init โ service โ doGet/doPost)
๐ ์ ์ฒด ํ๋ฆ ์์ฝ
[์น์๋ฒ ์์ ์]
๐ ์๋ธ๋ฆฟ ๊ฐ์ฒด๊ฐ ํ ๋ฒ ๋ง๋ค์ด์ง โ init() ์คํ๋จ
[์ฌ์ฉ์๊ฐ ์์ฒญํ ๋๋ง๋ค]
๐ service() ํธ์ถ๋จ โ ๋ด๋ถ์์ doGet() ๋๋ doPost()๋ก ๋ถ๊ธฐ๋จ
[์น์๋ฒ ์ข
๋ฃ ์]
๐ destroy() ์คํ๋จ
๐ 1) init()
: ๋ฑ 1๋ฒ๋ง ์คํ๋๋ ์ค๋น ๋จ๊ณ
- ์๋ธ๋ฆฟ์ด ์ต์ด๋ก ์คํ๋ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ
init()
๋ฉ์๋๋ โ์ฒ์ ์ค๋นโ ๋จ๊ณ๋ก ํ ๋ฒ๋ง ํธ์ถ๋จ- ์ด ์์ ์ ์๋ธ๋ฆฟ ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๊ณ ๊ณ์ ์ด์์์
@Override
public void init() throws ServletException {
System.out.println("๐ ์ต์ด 1ํ ์๋ธ๋ฆฟ ์ด๊ธฐํ");
}
๐ง ๋ฉด์ ํฌ์ธํธ:
์๋ธ๋ฆฟ์ ์ฑ๊ธ ์ธ์คํด์ค(single instance)์ด๋ฉฐ, init์ ๋ฑ 1๋ฒ๋ง ํธ์ถ๋จ (๊ธฐ์ตํด๋์ธ์!)
๐ 2) service()
: ์ฌ์ฉ์๊ฐ ์์ฒญํ ๋๋ง๋ค ์คํ๋จ
- ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ์์ฒญํ๋ฉด ๊ฐ์ฅ ๋จผ์ ์คํ๋๋ ๋ฉ์๋
- ๋ด๋ถ์ ์ผ๋ก ์์ฒญ ๋ฐฉ์(GET/POST) ์ ๋ฐ๋ผ
doGet()
๋๋doPost()
ํธ์ถ
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) {
System.out.println("๐ ๋ชจ๋ ์์ฒญ ์ง์
์ (GET/POST ์๊ด์์ด ๋ค์ด์ด)");
}
๐ 3) doGet()
/ doPost()
: ์ค์ ์
๋ฌด ์ํ
- ์ฌ์ฉ์๊ฐ ๋ฒํผ ํด๋ฆญ ๋๋ ์ฃผ์์ฐฝ ์
๋ ฅ โ GET ๋ฐฉ์์ด๋ฉด
doGet()
- ํ์๊ฐ์
์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ๋ POST ๋ฐฉ์์ด๋ฉด
doPost()
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) {
System.out.println("โ
GET ์์ฒญ ์ฒ๋ฆฌ");
}
๐ 4) destroy()
: ์ข
๋ฃ ์ ์์ ์ ๋ฆฌ
- ์๋ฒ๊ฐ ์ข ๋ฃ๋๊ฑฐ๋ ์๋ธ๋ฆฟ์ด ๋ ์ด์ ํ์ ์์ ๋ ์คํ
- DB ์ปค๋ฅ์ ์ด๋ ํ์ผ ๋ฑ ์ ๋ฆฌํ ๋ ์ฌ์ฉ
@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 | ์์ฒญ๋ง๋ค ์ฐ๋ ๋๊ฐ ๋ค๋ฆ | ๋์์ฑ ์ด์ ๋ฐ์ ๊ฐ๋ฅ์ฑ |
๐ ์ค๋ฌดยท๋ฉด์ ์์ ์ง๋ฌธ
- ์๋ธ๋ฆฟ์ ์ ์ฑ๊ธ ์ธ์คํด์ค์ธ๊ฐ์?
init()
์ ์ธ์ ํธ์ถ๋๊ณ ,destroy()
๋ ์ธ์ ํธ์ถ๋๋์?- ์ฌ์ฉ์ 1000๋ช ์ด ๋์์ ์์ฒญํ๋ฉด ๋ฉ๋ชจ๋ฆฌ์์ ์ด๋ค ์ผ์ด ๋ฒ์ด์ง๋์?
- ์๋ธ๋ฆฟ์์ ์ธ์คํด์ค ๋ณ์(static ์ ์ธ)๋ฅผ ์ฐ๋ฉด ์ ๋๋ ์ด์ ๋?
- ์ฐ๋ ๋ ํ์ ํฌ๊ธฐ๊ฐ ๋ถ์กฑํ ๋ ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์?
โ PART 1.2 ์์ฒญ ๋ผ์ฐํ (URL โ ๋ฉ์๋ ๋งคํ)
๐ข 1๋จ๊ณ. ์์ฒญ ๋ผ์ฐํ ์ด ๋ญ์ผ? (๊ธฐ์ด ๊ฐ๋ )
๐ฆ ์ ์
์ฌ์ฉ์๊ฐ ์น ๋ธ๋ผ์ฐ์ ์์ ์ด๋ค ์ฃผ์(URL) ๋ฅผ ์ ๋ ฅํ๊ฑฐ๋ ๋ฒํผ์ ๋๋ฅด๋ฉด,
๊ทธ ์์ฒญ์ ์ฒ๋ฆฌํ๋ Java ์๋ธ๋ฆฟ์ ๋ฉ์๋๋ก ์ฐ๊ฒฐํด ์ฃผ๋ ๊ฒ์ โ์์ฒญ ๋ผ์ฐํ (Routing)โ์ด๋ผ๊ณ ํด.
์์
[์ฌ์ฉ์ ์์ฒญ]
http://localhost:8080/myapp/board/list
[์ด๋ค ์ฝ๋๊ฐ ์คํ๋ผ์ผ ํ ๊น?]
โ BoardController.java์ list() ๋ฉ์๋๊ฐ ์คํ!
๐ ์ด๊ฑธ URL โ ๋ฉ์๋ ๋งคํ์ด๋ผ๊ณ ํด!
๐ข 2๋จ๊ณ. URL ํจํด ๋งคํ ์ข
๋ฅ (/*
, /controller/*
)์ ๋ฉ๋ชจ๋ฆฌ ์ฐจ์ด
1. /
- ๋ชจ๋ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์ (๊ฐ์ฅ ๋ฒ์๊ฐ ๋์)
- ์:
@WebServlet("/")
๐ ์ฃผ์: ์ ์ ๋ฆฌ์์ค๊น์ง ๋ค ๊ฐ๋ก์ฑ์ JSP๋ ์ด๋ฏธ์ง๊ฐ ๋์ ์ ํ ์ ์์
2. /*
- ๋ฃจํธ ๊ฒฝ๋ก ํฌํจ, ์ ์ฒด ์์ฒญ์ ์ฒ๋ฆฌํจ
- JSP ํฌํจ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ๊ฐ๋ก์ฑ๊ธฐ ๋๋ฌธ์ ์์ธ ์ํฉ ์ฃผ์ ํ์
3. /controller/*
/controller/
๋ก ์์ํ๋ URL๋ง ์ฒ๋ฆฌ- ์ค๋ฌด์์ ๊ฐ์ฅ ์์ฃผ ์ฐ์
- ์:
@WebServlet("/controller/*")
๐ ์ด๋ฐ ๊ฒฝ๋ก๋ก ๋ค์ด์ค๋ฉด ์ฒ๋ฆฌ๋จ: /controller/write
, /controller/list
โ ๋ฉ๋ชจ๋ฆฌ์ ์ฐจ์ด
ํจํด | ๋ฉ๋ชจ๋ฆฌ ์ํฅ | ์ค๋ช |
---|---|---|
/ |
๋ฌด๊ฑฐ์ | ๋ชจ๋ ์์ฒญ์ ๊ฐ๋ก์ฑ GC ๋ถํโ |
/* |
์ค๊ฐ | JSP, ์ด๋ฏธ์ง๊น์ง ๊ฐ๋ก์ฑ ์ฃผ์ |
/controller/* |
ํจ์จ์ | ํ์ํ ์์ฒญ๋ง ์ฒ๋ฆฌํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ํจ์จโ |
๐ง ๋ฉด์ ํฌ์ธํธ
-
์ ์ค๋ฌด์์๋
/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>
๐ง ๊ณ ๊ธ ๋ฉด์ ๊ฐ๋
-
์น ์ปจํ ์ด๋๋ ์๋ฒ ์์ ์
web.xml
๋๋@WebServlet
์ ์ฝ๊ณโ ์์ฒญ URL์ ์ด๋ค ์๋ธ๋ฆฟ์ ์ฐ๊ฒฐํ ์ง โ๋ผ์ฐํ ํ ์ด๋ธโ์ ๋ฑ๋กํจ
โ ์ด ๊ณผ์ ์ด ๋น ๋ฅด๊ฒ ๋๋์ผ ์ฑ๋ฅ์ด ์ข์์ง (Tomcat ์ด๊ธฐํ ์๊ฐ๊ณผ ๊ด๋ จ)
๐ง 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 (๋ฆฌํ๋ ์
) ์ผ๋ก ๋ชจ๋ ๋ฉ์๋๋ฅผ ๋ค์ ธ์
@RequestMapping("list")
๊ฐ ๋ถ์ ๋ฉ์๋๋ฅผ ์ฐพ์๋ธ๋ค - URL ์์ฒญ์ด
/board/list
๋ก ์ค๋ฉด โlist()
๋ฉ์๋๊ฐ ์คํ๋๋๋ก ์ฐ๊ฒฐ
๐ง ๊ตฌํ ์ ์ฃผ์์
ํญ๋ชฉ | ์ค๋ช |
---|---|
๋ฉ๋ชจ๋ฆฌ | Reflection์ ๋๋ฆฌ๋ฏ๋ก ์บ์ ์ ๋ต ํ์ |
์๋ | ๋ฉ์๋ ๊ฒ์์ ๋ฐ๋ณตํ์ง ์๋๋ก ์ต์ด ์คํ ์ ๋ผ์ฐํ Map์ผ๋ก ์ ์ฅ |
์ค๋ฌด | Spring์์๋ HandlerMapping , DispatcherServlet ์ด ์ด๊ฑธ ๊ด๋ฆฌํจ |
โ ์ต์ข ์์ฝ: ์ด ํํธ์์ ์ธ์์ผ ํ ๊ฒ
ํญ๋ชฉ | ๋ด์ฉ |
---|---|
/* vs /controller/* |
์ข์ ๋ฒ์ ๋งคํ์ด ์ฑ๋ฅ, ๋ฉ๋ชจ๋ฆฌ์ ์ข๋ค |
@WebServlet vs web.xml |
ํ๋ก์ ํธ ๊ท๋ชจ์ ๋ฐ๋ผ ์ ํ |
Annotation ๋ผ์ฐํ | Reflection์ผ๋ก ๋ฉ์๋ ์ฐ๊ฒฐ, ์บ์ฑ ์ ๋ต ํ์ |
๐ก ๋ฉด์ ์์ ์ง๋ฌธ
- ์๋ธ๋ฆฟ ๋งคํ์
/*
๋ก ํ์ ๋ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋? @WebServlet
๊ณผweb.xml
๋ฐฉ์์ ์ฅ๋จ์ ์?@RequestMapping("list")
์ ์ง์ ๋ง๋ค ๋ ์ด๋ค ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋์?- URL โ ๋ฉ์๋ ๋งคํ์ ํจ์จ์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ ์บ์ฑ ์ ๋ต์?
๐ขPART 1.3 Request, Response, Session ๊ฐ์ฒด ์๋ช ์ฃผ๊ธฐ ์์ ์ ๋ณต
๐ข 1๋จ๊ณ. โ์ค์ฝํ(scope)โ๊ฐ ๋ญ์ผ?
๐ฌ ์ค์ฝํ(Scope)๋ โ๋ฐ์ดํฐ๊ฐ ์ผ๋ง ๋์ ์ด์ ์๋?โ ๋ฅผ ๋งํด.
์ฝ๊ฒ ๋งํ๋ฉด ๋ณ์๋ ๋ฐ์ดํฐ๊ฐ ์ธ์ ์์ฑ๋๊ณ , ์ธ์ ์ฌ๋ผ์ง๋์ง๋ฅผ ๊ตฌ๋ถํ๋ ๊ฑฐ์ผ.
๐งฉ 2๋จ๊ณ. JSP/Servlet์์ ์ฐ๋ 3๊ฐ์ง ์ฃผ์ ์ค์ฝํ
์ด๋ฆ | ์ด์ ์๋ ์๊ฐ | ์ ์ฅ ์์น | ์์ |
---|---|---|---|
RequestScope | ์์ฒญ(request) 1๋ฒ ๋์ | HttpServletRequest |
๊ฒ์ ๊ฒฐ๊ณผ, ๊ธ์ฐ๊ธฐ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ |
SessionScope | ๋ธ๋ผ์ฐ์ ๊ฐ ์ผ์ ธ ์๋ ๋์ (๋ก๊ทธ์ธ ์ธ์ ) | HttpSession |
๋ก๊ทธ์ธ ์ ๋ณด |
ApplicationScope | ์๋ฒ๊ฐ ์ผ์ ธ ์๋ ๋์ | ServletContext |
์ ์ฒด ์ฌ์ดํธ ๊ณตํต ์ค์ |
๐ ๊ฐ๊ฐ ์ค์ฝํ์ ์๋ ๋ฐฉ์ ์์ธํ ๋ณด๊ธฐ
โ 1. RequestScope (์์ฒญ ํ๋๋ง ์ ์ง)
- ์์ฒญ์ ๋ณด๋์ ๋๋ง ์กด์ฌ, ์๋ตํ๋ฉด ์ฌ๋ผ์ง
- ๋ํ ๊ฐ์ฒด:
HttpServletRequest
- ๋ฐ์ดํฐ ์ ์ฅ:
request.setAttribute("msg", "์ฒ๋ฆฌ ์๋ฃ!");
- JSP์์ ์ถ๋ ฅ:
${msg}
๐ฆ ์์
- ๊ธ์ฐ๊ธฐ ์ฑ๊ณต ๋ฉ์์ง ๋ณด์ฌ์ค ๋
- ๊ฒ์ ๊ฒฐ๊ณผ 1ํ ์ถ๋ ฅํ ๋
๐ง ๋ฉด์ ํฌ์ธํธ:
RequestScope๋ ๋ค๋ฅธ JSP๋ก forward ์์๋ง ๋ฐ์ดํฐ๊ฐ ๋์ด๊ฐ.
Redirect๋ ์๋ก์ด ์์ฒญ์ด๋ผ์ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง!
โ 2. SessionScope (๋ก๊ทธ์ธ ์ธ์ ์ ์ง)
- ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ ค ์๋ ๋์ ์ ์ง
- ๋ํ ๊ฐ์ฒด:
HttpSession
- ์ ์ฅ ์์:
HttpSession session = request.getSession();
session.setAttribute("loginId", "hong");
๐ฆ ์์
- ๋ก๊ทธ์ธํ ์ฌ์ฉ์ ์์ด๋ ์ ์ฅ
- ์ฅ๋ฐ๊ตฌ๋ ์ ์ฅ
โณ ์๋ช ์ฃผ๊ธฐ
- ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ๊ฑฐ๋ ๋ก๊ทธ์์ํ๊ฑฐ๋
session.invalidate()
ํ๋ฉด ์ญ์ ๋จ
โ 3. ApplicationScope (์๋ฒ ์ ์ฒด์์ ๊ณต์ )
- ์๋ฒ๊ฐ ๊บผ์ง ๋๊น์ง ์ด์์์ (์์ฃผ ์ค๋)
- ๋ํ ๊ฐ์ฒด:
ServletContext
- ์ ์ฅ ์์:
ServletContext app = request.getServletContext();
app.setAttribute("visitorCount", 1234);
๐ฆ ์์
- ์ ์์ ์
- ๊ธ๋ก๋ฒ ์ค์ ์ ๋ณด (๊ธ์ ์ธ์ฝ๋ฉ, ์ ๋ก๋ ๊ฒฝ๋ก ๋ฑ)
๐ง 3๋จ๊ณ. ๋ฉ๋ชจ๋ฆฌ ๊ด์ ์์ ๋ณด๋ ๊ฐ ์ค์ฝํ
์ค์ฝํ | ๋ฉ๋ชจ๋ฆฌ ์ํฅ | ์ค๋ช |
---|---|---|
Request | ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ด ์ ์ | ์์ฒญ๋ง๋ค GC ๋์, ์ผํ์ฑ |
Session | ์ค๊ฐ ์ ๋ | ์ฌ์ฉ์ ์๊ฐ ๋ง์์ง๋ฉด ์ธ์ ๋ฉ๋ชจ๋ฆฌโ |
Application | ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ด ํผ | ์๋ชป ์ฐ๋ฉด ์ ์ฒด ์๋ฒ ๋ฆฌ์์ค๋ฅผ ๋จน์ |
๐ฏ 4๋จ๊ณ. ์ค์ฝํ ์ถฉ๋ ์ ์ ๋ต (๋ฉด์ ํฌ์ธํธ)
๐ฌ ๋ฌธ์ ์ํฉ:
๋์ผํ ์ด๋ฆ์ ๋ณ์ "msg"
๊ฐ
- Request์ ์์ โ
"์์ฒญ ์ฑ๊ณต!"
- Session์๋ ์์ โ
"๋ก๊ทธ์ธ ๋จ"
- Application์๋ ์์ โ
"์ ์ฒด ์๋ฆผ"
๐ฑ JSP์์ ${msg}
๋ผ๊ณ ํ๋ฉด ์ด๋ค ๊ฐ์ด ๋์ฌ๊น?
๐ EL(Expression Language)๋ ๋ฒ์ ์ฐ์ ์์๊ฐ ์์
์ฐ์ ์์ (๋์ โ ๋ฎ์)
- PageScope (JSP ๋ด๋ถ ๋ณ์)
- RequestScope
- SessionScope
- ApplicationScope
โ ์ถฉ๋ ์ ์ฒ๋ฆฌ ์ ๋ต
์ ๋ต | ์ค๋ช |
---|---|
๋ฒ์๋ฅผ ๋ช ์ํ์ | ${sessionScope.msg} ๋ก ์ ํํ ์ง์ |
๋ณ์๋ช ๋ค๋ฅด๊ฒ | loginMsg , alertMsg ์ฒ๋ผ ์ญํ ๋ง๋ค ๋ค๋ฅด๊ฒ |
๊ฐ์ฒด๋ณ๋ก ๊ด๋ฆฌ | DTO/VO ํด๋์ค ๋ด๋ถ ํ๋๋ก ๊ตฌ๋ถํด์ ๊ด๋ฆฌ |
๐ก ๋ฉด์ ์์ ์ง๋ฌธ ๋ฆฌ์คํธ
request.setAttribute()
๋ก ์ ์ฅํ ๋ฐ์ดํฐ๋ ์ธ์ ์ฌ๋ผ์ง๋์?request
์session
์ ๊ฐ์ ์ด๋ฆ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉด ์ด๋ค ๊ฒ ๋จผ์ ๋ณด์ผ๊น์?ServletContext
์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉด ์ด๋ค ์ํ์ด ์์๊น์?- ๋ก๊ทธ์ธ ์ํ๋ ์ด๋ค ์ค์ฝํ์ ์ ์ฅํ๋ ๊ฒ์ด ์ข์๊ฐ์?
forward()
์redirect()
์ ๋ฐ์ดํฐ ์ ๋ฌ ์ฐจ์ด์ ์?
โ ๋ง๋ฌด๋ฆฌ ์์ฝ ํ
์ค์ฝํ | ๊ฐ์ฒด | ์ ์ง ์๊ฐ | ์ฌ์ฉ ์ฉ๋ |
---|---|---|---|
Request | HttpServletRequest | ์์ฒญ 1๋ฒ | ๊ฒ์ ๊ฒฐ๊ณผ, ์ค๋ฅ ๋ฉ์์ง |
Session | HttpSession | ๋ก๊ทธ์ธ/๋ธ๋ผ์ฐ์ ์ธ์ | ๋ก๊ทธ์ธ ์ ๋ณด, ์ฅ๋ฐ๊ตฌ๋ |
Application | ServletContext | ์๋ฒ ์ด์์๋ ๋์ | ์ฌ์ดํธ ์ค์ , ๊ณตํต ๋ฐ์ดํฐ |
โ๏ธ ์ธ์์ผ ํ ์ค๋ฌด ํฌ์ธํธ
- ๐ธ RequestScope๋ forward() ๊ฐ๋ฅ, Redirect ์ ์ฌ๋ผ์ง
- ๐ธ SessionScope๋ ์ฌ์ฉ์๊ฐ ๋ง์์๋ก ๋ฉ๋ชจ๋ฆฌ ์ฃผ์!
- ๐ธ ApplicationScope๋ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ๊ณต์ ๋จ โ ์ฐ๋ ๋ ๋๊ธฐํ ๊ณ ๋ ค