๐ง 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..
๐๏ธ Spring/Web MVC
๐ง @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..