Spring MVC์ ๋ํด์ ๊ณต๋ถํ๋ ์ค DispatcherServlet์์ Handler๋ฅผ ๋งคํํ๋๊ฑด ์๊ฒ ๋๋ฐ ์ธ์ url๊น์ง ๋งคํํด์ ํด๋น method๋ฅผ ์คํํ๋๊ฑฐ์ง? ๋ผ๊ณ ๊ถ๊ธ์ฆ์ด ๋ค์ด์ ์์๋ณด๊ฒ ๋์์ต๋๋ค! ์์ ๊ณผ์ ์ ์ดํดํ๋ ค๋ฉด ๋จผ์ FrontController์ ์ญํ ์ ํ๋ ๋จผ์ DispatcherServlet์ doDispatch()๋ฅผ ๋ณด๊ฒ ์ต๋๋ค. (1) DispatcherServlet์ doDispatch() ์์ ํ๋์ค์ ๋ณด๋ฉด getHandler() ๋ฅผ ํตํด request์ ๋ง๋ handler๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ ๊ฐ์๋ฐ ํ๋ฒ ํ์ธํด๋ณด๊ฒ ์ต๋๋ค. (2) DispatcherServlet์ getHandler() ์ฐ์ HandlerExecutionChain์ returnํ๋ฉฐ HandlerMapping..
๐ Backend
๋จ๊ณ๋ณ๋ก ์ฑ์ฅํ์!1. Path Variable @GetMapping("/{userId}") public String findUser(@PathVariable String userId){ return "get userId=" + userId; } ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐ๋ ๋ฐฉ๋ฒ ์ค ํ๋์ธ๋ฐ url ๊ฒฝ๋ก ๋ด์ ๋ฆฌ์์ค๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ด๋ค. 2. Query Parameter @ResponseBody @RequestMapping("/order") public String requestParamRequired( @RequestParam(required = true) String username, @RequestParam(required = false) Integer age){ log.info("username={}, age={}", ..
1. Servlet? ์๋ฐ ํ๋ซํผ ๊ธฐ๋ฐ์์ ๋์ ์ธ ์ปดํฌ๋ํธ ๋จ์๋ก ๋ง๋ค์ด์ง ์น Application์ ๊ตฌํํ๋ ์๋ฐ ํด๋์ค ์ผ๋ฐ ์๋ฐ ํ๋ก๊ทธ๋จ๊ณผ ๋ค๋ฅด๊ฒ ๋
์์ ์ผ๋ก ์คํ๋์ง ๋ชปํ๊ณ Tomcat๊ณผ ๊ฐ์ JSP/Servlet ์ปจํ
์ด๋์์ ์คํ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์๋ฒ์ ์์ฒญํ๋ฉด ์น ์๋ฒ๋ ์์ฒญํ ์ ๋ณด์ ์๋ต๊ฒฐ๊ณผ๋ฅผ ์น ๋ธ๋ผ์ฐ์ ๋ก ํํํ๊ฒ ๋๋ค. ์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ฐ๋ผ ์น ์๋ฒ์ ๋์ ์ผ๋ก ๋ก๋๋์ด ๋์ํ๋ ํด๋์ค๊ฐ Servlet์ด๋ค. Server Side Applet์ด๋ผ๊ณ ํ๋ฉฐ ๋ธ๋ผ์ฐ์ ์์ ์์กดํ๋ฉด GUI๋ฅผ ๊ฐ์ง Applet๊ณผ๋ ๋ค๋ฅด๊ฒ ์๋ฒ์์ ์ด์๋๋ฉฐ javax.servlet.Servlet ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด์ด๋ค. CGI(Common Gateway Interface)์ ๋จ์ ์ ๋ณด..
1. Bean scope๋? ๋น์ด ์กด์ฌํ ์ ์๋ ๋ฒ์๋ฅผ ๋ปํ๋ค. ์คํ๋ง ๋น์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธํค scope๋ก ์์ฑ๋๋ค. 2. ์คํ๋ง์ด ์ง์ํ๋ ์ค์ฝํ ์ข
๋ฅ (1) ์ฑ๊ธํค: ๊ธฐ๋ณธ ์ค์ฝํ์ด๋ฉฐ, ์คํ๋ง ์ปจํ
์ด๋์ ์์๊ณผ ์ข
๋ฃ๊น์ง ์ ์ง๋๋ ๊ฐ์ฅ ๋์ ๋ฒ์์ scope (2) ํ๋กํ ํ์
: ์คํ๋ง ์ปจํ
์ด๋๋ ํ๋กํ ํ์
๋น์ ์์ฑ๊ณผ ์์กด๊ด๊ณ ์ฃผ์
๊น์ง๋ง ๊ด์ฌํ๊ณ ๋์ด์ ๊ด๋ฆฌํ์ง ์๋ ์งง์ ๋ฒ์์ scope (3) ์น ์ฑ๊ธํค ์ค์ฝํ๋ฅผ ์ ์ธํ ์ค์ฝํ๋ ์ง์ง ํ์ํ ๊ณณ์์๋ง ์ฌ์ฉํด์ผ ์ ์ง๋ณด์๊ฐ ํธํ๋ค ๋ผ๋ ๋ง์ ์์์ผ๋ก ํ๋ฒ ์ ๋ฆฌํด๋ณด์! 3-1. Prototype Scope ์คํ๋ง ์ปจํ
์ด๋์ ์กฐํํ๋ฉด ์คํ๋ง ์ปจํ
์ด๋๋ ํญ์ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํด์ ๋ฐํํ๋ค. ํด๋ผ์ด์ธํธ๊ฐ prototype scope์ ๋น์ ์์ฒญํ๋ฉด ๊ทธ๋์..
4๊ฐ์ง ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค. 1. ์์ฑ์ ์ฃผ์
2. setter ์ฃผ์
3. ํ๋ ์ฃผ์
4. ์ผ๋ฐ ๋ฉ์๋ ์ฃผ์
1. ์์ฑ์ ์ฃผ์
์์ฑ์๋ฅผ ํตํด์ ์์กด๊ด๊ณ๋ฅผ ์ฃผ์
๋ฐ๋ ๋ฐฉ๋ฒ์ด๋ค. ์์ฑ์ ํธ์ถ์์ ์ 1๋ฒ๋ง ํธ์ถ๋๋ ๊ฒ์ด ๋ณด์ฅ๋๋ฏ๋ก ์ฃผ๋ก ๋ถ๋ณ์ด๋ ํ์ ์์กด๊ด๊ณ์ ์ฌ์ฉํ๋ค. ์์กด๊ด๊ณ๋ฅผ public set๋ฉ์๋๋ฅผ ํตํด์ ์์ ํ์ง ๋ชปํ๊ฒ ํ ๋ ์ฌ์ฉํ๋ค. ์์ฑ์๊ฐ 1๊ฐ์ผ๋๋ @Autowired๋ฅผ ๋ถ์ฌ์ฃผ์ง ์์๋ ๋๋ค. ์ปดํฌ๋ํธ ์ค์บ์ด ๋ ๋ Spring Bean์ ๋ฑ๋กํ๊ธฐ์ํด new๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด์ ๊ฐ์ด ์์ฑ์๊ฐ ํธ์ถ๋์ด ์ฃผ์
๋๋ค. final ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์์ด์ ์์ฑ์์์ ๊ฐ์ด ์ค์ ๋์ง ์๋ ์ค๋ฅ๋ฅผ ์ปดํ์ผ ์์ ์ ๋ง์์ค๋ค. @Component public class OrderServiceImpl impleme..
IOC(Inversion Of Control) ๊ธฐ์กด ํ๋ก๊ทธ๋จ์ ํด๋ผ์ด์ธํธ ๊ตฌํ ๊ฐ์ฒด๊ฐ ํ๋ก๊ทธ๋จ์ ์ ์ด ํ๋ฆ์ ์ค์ค๋ก ์กฐ์ข
ํ๋ค. ์ฆ, ์ค์ค๋ก ํ์ํ ์๋ฒ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ์์ฑ, ์ฐ๊ฒฐ, ์คํํ๋ค๋ ๋ง์ด๋ค. ํ์ง๋ง, ์ ์ด ํ๋ฆ์ ๋ํ ๊ถํ์ ์ธ๋ถ ๋ค๋ฅธ ๊ณณ์์ ์์ ํ๊ณ ์์ด ์ธ๋ถ์์ ์ ์ด ํ๋ฆ์ ๊ด๋ฆฌํด์ฃผ๋ ๊ฒ์ IOC ์ ์ด์ ์ญ์ ์ด๋ผ๊ณ ํ๋ค. ์ด ๊ฐ๋
์ ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ๋ถํ ๋ ์ ์ฉํ ์ ์๋๋ฐ ์์ฑํ ์ฝ๋๋ฅผ ์ธ๋ถ์์ ์ ์ด๋ฅผ ํด์ฃผ๊ณ ๋์ ์คํํ๋ฉด ํ๋ ์์ํฌ ์์ฑํ ์ฝ๋๋ฅผ ๋ด๊ฐ ์ง์ ์ ์ด์ ํ๋ฆ์ ๋ด๋นํ๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ DI(Dependency Injection) ๋คํ์ฑ ๊ฐ๋
์ ์ด์ฉํด์ ํ Service ๊ฐ์ฒด๊ฐ ํ ์ธํฐํ์ด์ค์ ์์กดํ๊ณ ์์ ๋ Service ํด๋์ค ๋ด์์ ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ฅผ ์ง์ ํด์ค๋ค๋ฉด ๋..