๐Ÿ๏ธ Spring/Web MVC

๐Ÿง Http ์š”์ฒญ ํ—ค๋” ์กฐํšŒ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpMethod; import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.CookieValue; import org.springframework.web.bind.annotation.RequestHeader; import org.springframe..
๐Ÿง @RequestMapping ์š”์ฒญ๋œ url์— ๋Œ€ํ•ด์„œ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. @RequestMapping("/hello-basic") public String helloBasic() { return "ok"; } @RequestMapping์„ ์ฒ˜๋ฆฌํ•˜๋Š” HandlerMapping๊ณผ HandlerAdapter๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. RequestMappingHandlerMapping RequestMappingHandlerAdapter ๐Ÿง URL ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ๋งคํ•‘ @RequestMapping("/hello") /hello ๋กœ URL ํ˜ธ์ถœ์ด ์˜ค๋ฉด ์ด ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์†์„ฑ์„ ๋ฐฐ์—ด๋กœ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‹ค์ค‘ ์„ค์ •๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. {"/hello", "/hi..
๐Ÿง ์„œ๋ก  ์ด์ „ ๊ธ€์—์„œ ์Šคํ”„๋ง MVC์˜ ์ „์ฒด์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๋•Œ HandlerMapping๊ณผ HandlerAdapter๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ, ์ด๋ฒˆ์—๋Š” ์ด์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿง Controller๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด ์ €ํฌ๊ฐ€ ์ž‘์„ฑํ•˜๋Š” Controller(ํ˜น์€ Handler)๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ์กฐ๊ฑด์ด ๋งŒ์กฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 1. ์š”์ฒญ(Request) URL์ด ๋“ค์–ด์˜ค๋ฉด, ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€์‘๋˜๋Š” Controller(Handler)๋ฅผ HandlerMapping ์†์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 2. HandlerMapping์„ ํ†ตํ•ด ์ฐพ์€ Controller(Handler)๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” HandlerAdapter๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ..
๐Ÿง ์„œ๋ก  ์ด์ „ ๊ธ€์—์„œ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด์„ ํ•™์Šตํ•˜๋ฉฐ ๊ฐ„๋‹จํ•œ ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๊ทธ๋•Œ ๋งŒ๋“ค์–ด ๋‘์—ˆ๋˜ ๊ตฌ์กฐ์™€ ์‹ค์ œ ์Šคํ”„๋ง MVC์˜ ๊ตฌ์กฐ๋ฅผ ๋น„๊ตํ•ด๋ณด๋ฉฐ, ์Šคํ”„๋ง MVC์˜ ๊ตฌ์กฐ์— ๋Œ€ํ•˜์—ฌ ์ดํ•ดํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿง ์Šคํ”„๋ง MVC์˜ ์ „์ฒด ๊ตฌ์กฐ ์ด์ „์— ์ €ํฌ๊ฐ€ ๋งŒ๋“ค์—ˆ๋˜ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. (์‚ฌ์ง„์€ ๊น€์˜ํ•œ ์„ ์ƒ๋‹˜์˜ ์Šคํ”„๋ง MVC 1ํŽธ - ๋ฐฑ์—”๋“œ ์›น ๊ฐœ๋ฐœ ํ•ต์‹ฌ ๊ธฐ์ˆ ์˜ ์ž๋ฃŒ์—์„œ ๋ฐœ์ทŒํ•˜์˜€์Šต๋‹ˆ๋‹ค.) ์Šคํ”„๋ง MVC๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๋งค์šฐ ๋น„์Šทํ•œ ๊ตฌ์กฐ๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. FrontController -> DispatcherServlet ์ด๋ฆ„๋งŒ ๋‹ฌ๋ผ์กŒ์„ ๋ฟ, DispatcherServlet ์—ญ์‹œ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์—ญํ• ..
๐Ÿง ๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ ์•ž์œผ๋กœ ๋“ฑ์žฅํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ(Controller)๋Š” MVC ํŒจํ„ด์—์„œ์˜ Controller๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ Controller์˜ ์—ญํ• ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. HTTP ์š”์ฒญ์„ ๋ฐ›์•„ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. (์ด๋•Œ ๋ณดํ†ต Service ๊ณ„์ธต์˜ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.) ๋ทฐ(View)์— ์ „๋‹ฌํ•  ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜์—ฌ ๋ชจ๋ธ(Model)์— ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿง ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์„ ๋•Œ์˜ ๋ฌธ์ œ์  ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ ์ „์—, ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์™œ ์จ์•ผ ํ•˜๋Š”์ง€, ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ํšŒ์› ๊ด€๋ฆฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ†ตํ•ด ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ํšŒ์› ๊ฐ€์ž… ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ๋Š” Controller..
๐Ÿง HttpServletResponse ์„œ๋ธ”๋ฆฟ์€ ์‘๋‹ต์— ๋Œ€ํ•ด HttpServletResponse๋ฅผ ํ†ตํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. HTTP ์‘๋‹ต ๋ฉ”์‹œ์ง€ ์ƒ์„ฑ HTTP ์‘๋‹ต์ฝ”๋“œ ์ง€์ • ํ—ค๋” ์ƒ์„ฑ ๋ฐ”๋”” ์ƒ์„ฑ ๋˜ํ•œ Content-Type, ์ฟ ํ‚ค, Redirect๋ฅผ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์ค๋‹ˆ๋‹ค. ๐Ÿง ํ—ค๋” ์„ค์ • HttpServletResponse.setHeader() @WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header") public class ResponseHeaderServlet extends HttpServlet { @Override protected void service(HttpServletReq..
๐Ÿง HttpServletRequest ์„œ๋ธ”๋ฆฟ์€ ์•„๋ž˜์™€ ๊ฐ™์€ HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ํŒŒ์‹ฑํ•ด์„œ HttpServletRequest์— ๋‹ด์•„์ค๋‹ˆ๋‹ค. POST /save HTTP/1.1 Host: localhost:8080 Content-Type: application/x-www-form-urlencoded username=kim&age=20 ... ํŒŒ์‹ฑ๋œ ์š”์ฒญ ์ •๋ณด๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿง ํ—ค๋” ์ •๋ณด ์กฐํšŒํ•˜๊ธฐ /** * REQUEST - START LINE ์ •๋ณด ์กฐํšŒ */ private void printStartLine(HttpServletRequest request) { System.out.println("--- REQUEST-LINE - start ---"); System.out.println..
๋ง ๋ž‘
'๐Ÿ๏ธ Spring/Web MVC' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (3 Page)