** ๐ JSP MVC2 ์ํคํ
์ฒ ๋ฉ๋ชจ๋ฆฌ + ๋ฉด์ ์ฌํ ํ์ต ๋ชฉ์ฐจ **
๐ง PART 0. ์ ์ฒด ๊ฐ์ ๋ฐ ๋ฉด์ ํค์๋ ์ ๋ฆฌ
- MVC2์ ํ์ ๋ฐฐ๊ฒฝ: MVC1 โ MVC2๋ก์ ์งํ
- JSP Model2 ์ํคํ
์ฒ ํต์ฌ ์ปดํฌ๋ํธ ์ ์
- ๋ฉ๋ชจ๋ฆฌ/GC ๊ด์ ์ ์ค๊ณ ์ฒ ํ (Servlet ์๋ช
์ฃผ๊ธฐ์์ ์ฐ๊ณ)
- ๋ฉด์ ํค์๋ ์ฌ์ ์ ๋ฆฌ: Forward / Redirect / RequestDispatcher / ServletContext vs RequestScope ๋ฑ
๐ PART 1. Controller ๋ ์ด์ด์ ๋ฉ๋ชจ๋ฆฌ/์ฑ๋ฅ/๋ฉด์ ํฌ์ธํธ
1.1 DispatcherServlet ๋์ ์๋ฆฌ & ๋ฉ๋ชจ๋ฆฌ ํ๋ฆ
- ์๋ธ๋ฆฟ ์ด๊ธฐํ (
init()
) vs ์์ฒญ ์ฒ๋ฆฌ (service()
, doGet()
๋ฑ)
- ์๋ธ๋ฆฟ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ: ํด๋์ค ๋ก๋ฉ, static ํ๋, ์ฐ๋ ๋ ํ
1.2 ์์ฒญ ๋ผ์ฐํ
(URL โ ๋ฉ์๋ ๋งคํ)
- URL ํจํด ๋งคํ ์ข
๋ฅ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฐจ์ด (
/*
, /controller/*
)
- @WebServlet vs web.xml ๋งคํ ๋น๊ต
- Annotation ๊ธฐ๋ฐ ๋ผ์ฐํ
ํ๋ ์์ํฌ ์ค๊ณ (์: @RequestMapping ๊ตฌํ ์ ์ฃผ์์ )
1.3 Request, Response, Session ๊ฐ์ฒด ์๋ช
์ฃผ๊ธฐ
- HttpServletRequest ๋ฉ๋ชจ๋ฆฌ ์ค์ฝํ ์ ๋ฆฌ (RequestScope, SessionScope, ApplicationScope)
- ๋ฉด์ ํฌ์ธํธ: ์ค์ฝํ ๊ฐ ๋ณ์ ์ถฉ๋ ์ ์ฒ๋ฆฌ ์ ๋ต
๐ PART 2. Model ๋ ์ด์ด์ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ์ ๋์์ธ
2.1 DAO/DTO/Service ๊ตฌ์กฐ์ ์์กด์ฑ ๊ด๋ฆฌ
- DAO ์ธ์คํด์ค ์์ฑ ์ ๋ต: ์ฑ๊ธํค ํจํด ์ ์ฉ ์ ๋ฉ๋ชจ๋ฆฌ ์ด์
- DB ์ปค๋ฅ์
ํ(CP) ๋์
์ ๋ฉ๋ชจ๋ฆฌ/GC ์ต์ ํ ์๋ฆฌ
2.2 JDBC ์ปค๋ฅ์
& ๋ฆฌ์์ค ๋์ ๋ฐฉ์ง ์ ๋ต
- try-with-resources๋ฅผ ํตํ ์๋ Close์ GC ์ต์ ํ
- Statement / ResultSet ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ํด์ ํ์ด๋ฐ
- ๋ฉด์ ์ง๋ฌธ: PreparedStatement ์ฌ์ฌ์ฉ๊ณผ SQL ์ธ์ ์
๋ฐฉ์ง์ ๋ฉ๋ชจ๋ฆฌ/๋ณด์ ์ธก๋ฉด
2.3 DTO ๊ฐ์ฒด์ ์ค๊ณ ๊ด์
- Serializable ๊ตฌํ vs Jackson ์ฌ์ฉ ์ ์ฑ๋ฅ ์ฐจ์ด
- ๋ถ๋ณ ๊ฐ์ฒด(Immutable DTO) ์ค๊ณ ์ด์ ์ GC ์ํฅ
๐งพ PART 3. View(JSP) ๋จ์ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ฑ๋ฅ ๊ณ ๋ ค ์ฌํญ
3.1 JSP ์ปดํ์ผ โ ์๋ธ๋ฆฟ ๋ณํ ๊ณผ์
- JSP โ ์๋ธ๋ฆฟ ๋ณํ ํ์ด๋ฐ (์ต์ด ์์ฒญ ์ or ๋ฐฐํฌ ์)
- _jspService() ๋ฉ์๋ ๊ตฌ์กฐ ๋ถ์
- ๋ฉ๋ชจ๋ฆฌ ์ JSP๊ฐ ๋ณด๊ด๋๋ ์์น (์น ์ปจํ
์ด๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ๋ถ์)
3.2 ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(JSTL)์ ๋ฉ๋ชจ๋ฆฌ ํน์ง
- ํ๊ทธ ๊ฐ์ฒด๊ฐ ๋งค ์์ฒญ๋ง๋ค ์์ฑ๋๋ ๊ตฌ์กฐ ์ค๋ช
- ์ฌ์ฉ์ ์ ์ ํ๊ทธ(TagLib)์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฌ์ฉ ์ ๋ต
3.3 EL ํํ์๊ณผ ๋ฉ๋ชจ๋ฆฌ
- EL์ ๋ด๋ถ ์บ์ฑ ๊ตฌ์กฐ
- ๋ฉด์ ํฌ์ธํธ:
<c:forEach>
์ for ๋ฌธ ์ฌ์ฉ ์ ๋ฉ๋ชจ๋ฆฌ ์ฐจ์ด
๐ PART 4. ์ธ์
๊ด๋ฆฌ, ์บ์ ์ ๋ต, ๋ณด์๊ณผ ๋ฉ๋ชจ๋ฆฌ
4.1 ์ธ์
(Session) ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์
- ์ธ์
์ ์ง ์๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ ๋ฆญ ๋ฐฉ์ง ์ ๋ต
- ๋๊ท๋ชจ ์ฌ์ฉ์๋ฅผ ๊ณ ๋ คํ ์ธ์
ํด๋ฌ์คํฐ๋ง ์ ๋ต
4.2 ์๋ต ์บ์(Cache-Control)์ ์๋ฒ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ
- HTTP ์บ์ ํค๋์ GC์ ์๊ด๊ด๊ณ
- ๋ฉด์ ํฌ์ธํธ: ์ ์ ๋ฆฌ์์ค vs ๋์ ํ์ด์ง ์บ์ ์ ๋ต
4.3 ๋ณด์ + ๋ฉ๋ชจ๋ฆฌ ๊ด์ : XSS/CSRF vs Filter ์ฒ๋ฆฌ ์ ๋ฉ๋ชจ๋ฆฌ ์ํฅ
- ํํฐ ์ฒด์ธ์ ๋ฉ๋ชจ๋ฆฌ ํ๋ฆ
- ๋ณด์ ํํฐ์์์ request/response wrapper ๊ฐ์ฒด์ ์ฌ์ฉ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์๋น
๐ฆ PART 5. ํ์ผ ์
๋ก๋/๋ค์ด๋ก๋์ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ์ ์ต์ ํ
5.1 MultipartRequest (cos.jar / commons-fileupload)
- ์์ ํ์ผ ์ ์ฅ vs ๋ฉ๋ชจ๋ฆฌ ์ ์ฅ ์ ๋ต
- ํฐ ํ์ผ ์
๋ก๋ ์ OutOfMemoryError ๋ฐฉ์ง๋ฒ
5.2 ๋ค์ด๋ก๋ ์ ํ์ผ ์คํธ๋ฆผ ๋ฒํผ๋ง ์ ๋ต
- ByteBuffer ์ฌ์ฉ vs Stream ์ง์ ์ฒ๋ฆฌ
- ํ์ผ ๋ค์ด๋ก๋ ์ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง ์ ๋ต (flush/close ํ์ด๋ฐ)
๐ง PART 6. ์ฑ๋ฅ ํ๋ ๋ฐ GC ์ต์ ํ ์ ๋ต
6.1 JSP ํ๋ก์ ํธ์์์ ๋ฉ๋ชจ๋ฆฌ ํ๋ ํญ๋ชฉ
- Tomcat JVM ์ต์
ํ๋ (
Xmx
, Xms
, XX:+UseG1GC
๋ฑ)
- JSP precompile ์ ๋ต๊ณผ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น ๋ฐฉ์ง
6.2 GC ๋ก๊ทธ ๋ถ์์ ํตํ ๋ฉ๋ชจ๋ฆฌ ๋ณ๋ชฉ ์ถ์
- Full GC ๋น๋ ํ์ธ
- ๋ฉด์ ํฌ์ธํธ: GC๋ก ์ธํ ์์ฒญ ์ง์ฐ ์ฌ๋ก ๋ถ์
๐ค PART 7. ๋ฉด์ + ์ค๋ฌด ๋์ด๋ ๋ฌธ์ ์ฒดํฌ๋ฆฌ์คํธ
RequestDispatcher.forward()
vs response.sendRedirect()
๋ฉ๋ชจ๋ฆฌ ์ฐจ์ด?
- static ํ๋์ DB ์ปค๋ฅ์
์ ์ ์ฅํ๋ฉด ์ ๋๋ ์ด์ ๋?
- JSP์์ ๊ฐ์ฒด ๊ณต์ ์ Thread-Safe ํ์ง ์์ผ๋ฉด ์๊ธฐ๋ ๋ฌธ์ ๋?
- Filter ์ฒด์ธ ์์ ๋ณ๊ฒฝ์ด ๋ฉ๋ชจ๋ฆฌ์ ๋ฏธ์น๋ ์ํฅ์?
- ์๋ธ๋ฆฟ์์ JSON ์๋ตํ ๋์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ๋ฐฉ๋ฒ์?
๐ PART 8. JSP MVC2 ์์คํ
์ ๊ตฌ์กฐ์ ๋ฆฌํฉํ ๋ง
8.1 Memory Safe MVC ๊ตฌ์กฐ๋ก ๊ฐ์ ํ๊ธฐ
- Controller, Service, DAO์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ ๋ณด์ฅ ํจํด
- ServletContextListener๋ฅผ ํ์ฉํ ์์ ๋ก๋ฉ ์ต์ ํ
8.2 Spring MVC์์ ๊ตฌ์กฐ ๋น๊ต ๋ฐ JSP ๋ชจ๋ธ2์ ํ๊ณ
- Spring์ IoC, AOP ๊ตฌ์กฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ฏธ์น๋ ๊ธ์ ์ ์ํฅ
- JSP MVC2์์ DI๊ฐ ๋ถ๊ฐ๋ฅํ ๊ตฌ์กฐ์ ๋ณ๋ชฉ ์ง์