[์Šคํ”„๋ง MVC] - 6. MVC ํŒจํ„ด - ์ ์šฉ , ํ•œ๊ณ„
ยท
Spring/Spring MVC
MVC ํŒจํ„ด - ์ ์šฉ ์„œ๋ธ”๋ฆฟ์„ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์‚ฌ์šฉํ•˜๊ณ , JSP๋ฅผ ๋ทฐ๋กœ ์‚ฌ์šฉํ•ด์„œ MVC ํŒจํ„ด์„ ์ ์šฉํ•ด๋ณด์ž. Model์€ HttpServletRequest ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. request๋Š” ๋‚ด๋ถ€์— ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, request.setAttribute() , request.getAttribute() ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ , ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. ํšŒ์› ๋“ฑ๋ก ํผ - ์ปจํŠธ๋กค๋Ÿฌ @WebServlet(name = "mvcMemberFormServlet", urlPatterns = "/servlet-mvc/members/new-form") public class MvcMemberFormServlet extends HttpServlet { @Override protected void service(Http..
[์Šคํ”„๋ง MVC] - 5. ์„œ๋ธ”๋ฆฟ๊ณผ JSP์˜ ํ•œ๊ณ„ / MVC ํŒจํ„ด์˜ ๋“ฑ์žฅ
ยท
Spring/Spring MVC
์„œ๋ธ”๋ฆฟ์œผ๋กœ ํšŒ์› ๊ด€๋ฆฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งŒ๋“ค๊ธฐ @WebServlet(name = "memberSaveServlet",urlPatterns = "/servlet/members/save") public class MemberSaveServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("MemberSaveServle..
[์Šคํ”„๋ง MVC] - 4. HTTP ์‘๋‹ต ๋ฐ์ดํ„ฐ ( ํ…์ŠคํŠธ / HTML / API )
ยท
Spring/Spring MVC
HttpServletResponse HTTP ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•œ๋‹ค . //[status-line] response.setStatus(HttpServletResponse.SC_OK); setStatus() : ์ƒํƒœ ์ฝ”๋“œ ์ง€์ • ํ•˜๊ธฐ //response.setHeader("Content-Type", "text/plain;charset=utf-8"); response.setContentType("text/plain"); response.setCharacterEncoding("utf-8"); [์ฟ ํ‚ค ํŽธ์˜ ๋ฉ”์„œ๋“œ] private void cookie(HttpServletResponse response) { // Set-Cookie: myCookie=good; Max-Age=600; // response.setHe..
[์Šคํ”„๋ง MVC] - 3. HTTP ์š”์ฒญ ๋ฐ์ดํ„ฐ ( GET / POST / API )
ยท
Spring/Spring MVC
HTTP ์š”์ฒญ ๋ฐ์ดํ„ฐ HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž. ์ฃผ๋กœ ๋‹ค์Œ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค. GET - ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ /url?username=hello&age=20 ๋ฉ”์‹œ์ง€ ๋ฐ”๋”” ์—†์ด, URL์˜ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•ด์„œ ์ „๋‹ฌ ์˜ˆ) ๊ฒ€์ƒ‰, ํ•„ํ„ฐ, ํŽ˜์ด์ง•๋“ฑ์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹ POST - HTML Form content-type: application/x-www-form-urlencoded ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์— ์ฟผ๋ฆฌ ํŒŒ๋ฆฌ๋ฏธํ„ฐ ํ˜•์‹์œผ๋กœ ์ „๋‹ฌ username=hello&age=20 ์˜ˆ) ํšŒ์› ๊ฐ€์ž…, ์ƒํ’ˆ ์ฃผ๋ฌธ, HTML Form ์‚ฌ์šฉ HTTP message body์— ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๋‹ด์•„์„œ ์š”์ฒญ HTTP API์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ, JSON, XML, TEXT ๋ฐ..
[์Šคํ”„๋ง MVC] - 2. ์„œ๋ธ”๋ฆฟ ๋“ฑ๋กํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ
ยท
Spring/Spring MVC
์Šคํ”„๋ง ๋ถ€ํŠธ ํ™˜๊ฒฝ์—์„œ ์„œ๋ธ”๋ฆฟ ๋“ฑ๋กํ•˜๊ณ  ์‚ฌ์šฉํ•ด๋ณด์ž. @ServletComponentScan @SpringBootApplication public class ServletApplication { @ServletComponentScan ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์„œ๋ธ”๋ฆฟ์„ ์ง์ ‘ ๋“ฑ๋กํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก @ServletComponentScan ์„ ์ง€์›ํ•œ๋‹ค. @WebServlet(name = "helloServlet", urlPatterns = "/hello") public class HelloServlet extends HttpServlet { @WebServlet ์„œ๋ธ”๋ฆฟ ์• ๋…ธํ…Œ์ด์…˜ name: ์„œ๋ธ”๋ฆฟ ์ด๋ฆ„ urlPatterns: URL ๋งคํ•‘ @Override protected void service(HttpServletRe..
[์Šคํ”„๋ง MVC] - 1. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ดํ•ด
ยท
Spring/Spring MVC
์„น์…˜ 1. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ดํ•ด ์›น - HTTP ๊ธฐ๋ฐ˜ ( HyperText Transfer Protocol ) ์›น์ƒ์—์„œ ๋„คํŠธ์›Œํฌ๋กœ ์„œ๋ฒ„๋ผ๋ฆฌ ํ†ต์‹ ์„ ํ• ๋•Œ ์–ด๋– ํ•œ ํ˜•์‹์œผ๋กœ ์„œ๋กœ ํ†ต์‹ ์„ ํ•˜์ž๊ณ  ๊ทœ์ •ํ•ด ๋†“์€ "ํ†ต์‹  ํ˜•์‹" ํ˜น์€ "ํ†ต์‹  ๊ตฌ์กฐ" ๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. HTTP ๊ธฐ๋ณธ์ ์œผ๋กœ request(์š”์ฒญ)/response(์‘๋‹ต) ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ HTTP request๋ฅผ ์„œ๋ฒ„์— ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„๋Š” HTTP response๋ฅผ ๋ณด๋‚ด๋Š” ๊ตฌ์กฐ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ๋ชจ๋“  ํ†ต์‹ ์ด ์š”์ฒญ๊ณผ ์‘๋‹ต์œผ๋กœ ์ด๋ฃจ์–ด ์ง„๋‹ค. request(์š”์ฒญ) response(์‘๋‹ต) ์›น ์„œ๋ฒ„, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„(WAS) ์ฐจ์ด ์›น ์„œ๋ฒ„๋Š” ์ •์  ๋ฆฌ์†Œ์Šค(ํŒŒ์ผ) WAS๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง ์„œ๋ธ”๋ฆฟ HTTP ์š”์ฒญ/์‘๋‹ต ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ ์›น์„ ..
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 27. ์Šค์ฝ”ํ”„์™€ ํ”„๋ก์‹œ
ยท
Spring/Spring ๊ธฐ๋ณธ
์Šค์ฝ”ํ”„์™€ ํ”„๋ก์‹œ ํ”„๋ก์‹œ ๋ฐฉ์‹์„ ์‚ฌ์šฉ @Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS) public class MyLogger { ์ ์šฉ ๋Œ€์ƒ์ด ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค๋ฉด TARGET_CLASS ๋ฅผ ์„ ํƒ ์ ์šฉ ๋Œ€์ƒ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฉด INTERFACES ๋ฅผ ์„ ํƒ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด MyLogger์˜ ๊ฐ€์งœ ํ”„๋ก์‹œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด๋‘๊ณ  HTTP request์™€ ์ƒ๊ด€ ์—†์ด ๊ฐ€์งœ ํ”„๋ก์‹œํด๋ž˜์Šค๋ฅผ ๋‹ค๋ฅธ ๋นˆ์— ๋ฏธ๋ฆฌ ์ฃผ์ž…ํ•ด ๋‘˜ ์ˆ˜ ์žˆ๋‹ค. ์›น ์Šค์ฝ”ํ”„์™€ ํ”„๋ก์‹œ ๋™์ž‘ ์›๋ฆฌ ์ง„์งœ myLogger ๊ฐ€ ์•„๋‹Œ ๊ฐ€์งœ(๊ป๋ฐ๊ธฐ,ํ”„๋ก์‹œ) myLogger ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ์— ์ง‘์–ด ๋„ฃ์–ด๋‘”๋‹ค ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ ๋‚ด๊ฐ€ ๊ธฐ๋Šฅ์„ ์‹ค์ œ ํ˜ธ์ถœํ•˜๋Š” ์‹œ์ ์— ์ง„์งœ๋ฅผ ์ฐพ์•„์„œ ๋™์ž‘ํ•œ๋‹ค (๋งˆ์น˜ Provider ๋™..
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 26. ์›น ์Šค์ฝ”ํ”„
ยท
Spring/Spring ๊ธฐ๋ณธ
์›น ์Šค์ฝ”ํ”„ ์›น ์Šค์ฝ”ํ”„๋Š” ์›น ํ™˜๊ฒฝ์—์„œ๋งŒ ๋™์ž‘ํ•œ๋‹ค. ์›น ์Šค์ฝ”ํ”„๋Š” ํ”„๋กœํ† ํƒ€์ž…๊ณผ ๋‹ค๋ฅด๊ฒŒ ์Šคํ”„๋ง์ด ํ•ด๋‹น ์Šค์ฝ”ํ”„์˜ ์ข…๋ฃŒ์‹œ์ ๊นŒ์ง€ ๊ด€๋ฆฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. ์›น ์Šค์ฝ”ํ”„ ์ข…๋ฅ˜ request: HTTP ์š”์ฒญ ํ•˜๋‚˜๊ฐ€ ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐˆ ๋•Œ ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ์Šค์ฝ”ํ”„ ๊ฐ๊ฐ์˜ HTTP ์š”์ฒญ๋งˆ๋‹ค ๋ณ„๋„์˜ ๋นˆ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ๊ด€๋ฆฌ๋œ๋‹ค. session: HTTP Session๊ณผ ๋™์ผํ•œ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” ์Šค์ฝ”ํ”„ application: ์„œ๋ธ”๋ฆฟ ์ปจํ…์ŠคํŠธ( ServletContext )์™€ ๋™์ผํ•œ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” ์Šค์ฝ”ํ”„ websocket: ์›น ์†Œ์ผ“๊ณผ ๋™์ผํ•œ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” ์Šค์ฝ”ํ”„ request: HTTP ์š”์ฒญ ํ•˜๋‚˜๊ฐ€ ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐˆ ๋•Œ ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ์Šค์ฝ”ํ”„ ๊ฐ๊ฐ์˜ HTTP ์š”์ฒญ๋งˆ๋‹ค ๋ณ„๋„์˜ ๋นˆ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ๊ด€๋ฆฌ๋œ๋‹ค. ๋™์‹œ์—..