์คํ๋ง MVC 1ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ์คํ๋ง MVC ์ ์ฒด ๊ตฌ์กฐ ๊ตฌ์กฐ ์ด์ ์ ์ง์ ๋ง๋ค์๋ MVC ํ๋ ์์ํฌ ๊ตฌ์กฐ์ ๊ฑฐ์ ๊ฐ์ ํํ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์คํ๋ง MVC๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ํจํด์ผ๋ก ๊ตฌํ๋์ด ์๋๋ฐ, ์ฌ๊ธฐ์์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ ๋์คํจ์ฒ ์๋ธ๋ฆฟ(Dispatcher Servlet)์ด๋ค. ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ HttpServlet์ ์์๋ฐ์ผ๋ฉฐ, ์๋ธ๋ฆฟ์ผ๋ก ๋์ํ๋ค. ๋ํ ์คํ๋ง ๋ถํธ๋ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ์๋ธ๋ฆฟ์ผ๋ก ์๋ ๋ฑ๋กํจ๊ณผ ๋์์ ๋ชจ๋ ๊ฒฝ๋ก์ ๋ํด ๋งคํ๋๋๋ก ํ๋ค. ์ด๋์ urlPatterns ์์ฑ ๊ฐ์ "/"์ด๊ธฐ ๋๋ฌธ์, ๋ถ๊ฐ์ ์ผ๋ก ๋ฑ๋กํ ์๋ธ๋ฆฟ์ด ๋ ์์ธํ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด ์ฐ์ ์์์ ๋ฐ๋ผ์ ํด๋น ์๋ธ๋ฆฟ๋ ํจ๊ป ๋์ํ๊ฒ ๋๋ ๊ฒ์ด๋ค. ๋์ ์์ ์๋ธ๋ฆฟ์ด ํธ์ถ๋๋ฉด ๋ถ๋ชจ ํด๋์ค์ธ H..
์คํ๋ง MVC 1ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ํจํด ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ์๋ธ๋ฆฟ ํ๋๋ก ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์ ๋ค, ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๊ฐ ์์ฒญ์ ๋ง๋ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์ ํธ์ถํ๋ ๋ฐฉ์์ด๋ค. ๋น์ ํ์๋ฉด ์ ๊ตฌ๋ฅผ ํ๋๋ก ๋ง๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ณตํต ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ณ , ๊ณตํต์ ์ผ๋ก ๊ฑฐ์ณ๊ฐ๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์์ ์๋ธ๋ฆฟ์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋จธ์ง ์ปจํธ๋กค๋ฌ์์๋ ์๋ธ๋ฆฟ์ ์ด์ฉํ์ง ์์๋ ๋๋ค๋ ์ฅ์ ์ด ์๋ค. ์คํ๋ง ์น MVC ๋ํ ํด๋น ํจํด์ ์ฐจ์ฉํ์ฌ DispatcherServlet์ ๊ตฌํํ์๋ค. v1. ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ๋์ ํ์ ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถํ๋ ๋ชจ๋ ์์ฒญ์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ์๋ธ๋ฆฟ์์ ์ผ์ฐจ์ ์ผ๋ก ๋ฐ๊ณ , URI๋ฅผ ์กฐํํ์ฌ ์ค์ ํธ์ถํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ๋๋ค. ์ด๋ ์์ ๊ฒฝ์ฐ 404 ์ํ ์ฝ๋๋ฅผ ๋ฐํํ๊ณ , ์ฐพ์๋ค๋ฉด..
์คํ๋ง MVC 1ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ํ์ ๊ด๋ฆฌ ์น ์ ํ๋ฆฌ์ผ์ด์ @Getter @Setter @NoArgsConstructor public class Member { private Long id; private String userName; private int age; public Member(String userName, int age) { this.userName = userName; this.age = age; } } ์ด๋ฆ๊ณผ ๋์ด๋ฅผ ์ ๋ ฅ๋ฐ์ ํ์ ์ ๋ณด๋ฅผ ์์ฑํ๋ฉฐ, ์์ด๋๋ ์ ์ฅ์์์ ํ ๋นํ๋ ๋ฐฉ์์ด๋ค. ์๋ธ๋ฆฟ์ผ๋ก ํ์ ๊ด๋ฆฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ HttpServlet ์๋ธ๋ฆฟ ํด๋์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก HttpServlet์ ์์๋ฐ์ ๊ตฌํํ๋ค. HttpServlet์๋ service()๋ผ..
์คํ๋ง MVC 1ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. HttpServletRequest ์์ ํฌ์คํ ์์ ์๋ธ๋ฆฟ์ ๊ฐ๋ฐ์๊ฐ ์์ฒญ ๋ฐ ์๋ต ์ ๋ณด๋ฅผ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํ๋ฉฐ, ์ด๋ WAS๊ฐ HTTP ์์ฒญ ์ ์์ฒญ ๋ฐ ์๋ต ๊ฐ์ฒด๋ฅผ ์๋ก ๋ง๋ ๋ค ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ฅผ ํธ์ถํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค๋ ๊ฒ์ ์ค๋ช ํ์๋ค. ์๋ธ๋ฆฟ์ ๊ฐ๋ฐ์๊ฐ HTTP ์์ฒญ ๋ฉ์์ง๋ฅผ ํธ๋ฆฌํ๊ฒ ์ด์ฉํ ์ ์๋๋ก ๊ฐ๋ฐ์ ๋์ ์์ฒญ ๋ฉ์์ง๋ฅผ ํ์ฑ ํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ HttpServletRequest๋ผ๋ ๊ฐ์ฒด์ ๋ด์์ ์ ๊ณตํ๋๋ฐ, ํด๋น ๊ฐ์ฒด๋ฅผ ์ด์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ํธ๋ฆฌํ๊ฒ ์กฐํํ ์ ์๋ค. 1. Start Line: HTTP ๋ฉ์๋, URL, ์ฟผ๋ฆฌ ์คํธ๋ง, ํ๋กํ ์ฝ 2. ํค๋: ํค๋ ์กฐํ 3. ๋ฐ๋: form ํ๋ผ๋ฏธํฐ ํ์ ์กฐํ, ๋ฉ์์ง ๋ฐ๋..
์คํ๋ง MVC 1ํธ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ์น ์๋ฒ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ ์น ์๋ฒ (Web Server) HTTP ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ฉฐ, ์ฃผ๋ก ์ ์ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ๋ค. Nginx๋ Apache๊ฐ ์น ์๋ฒ์ ์ํ๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ (WAS - Web Application Server) HTTP ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ฉฐ, ์น ์๋ฒ์ ๊ธฐ๋ฅ์ ํฌํจํจ๊ณผ ๋์์ ๋์ HTML, HTTP API, JSP์ ๊ฐ์ ํ๋ก๊ทธ๋จ ์ฝ๋๋ฅผ ์คํํด ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ์ํํ ์ ์๋ค. Tomcat์ด ๋ํ์ ์ผ๋ก WAS์ ์ํ๋ค. ์น ์๋ฒ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ ์น ์๋ฒ๋ ์ ์ ๋ฆฌ์์ค๋ฅผ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ์ฃผ๋ก ๋ด๋นํ๋ค๊ณ ํ์ง๋ง, ์น ์๋ฒ๋ ํ๋ก๊ทธ๋จ์ ์คํํ๋ ๊ธฐ๋ฅ์ ํฌํจํ๊ธฐ๋ ํ๊ณ ์น ์ ํ๋ฆฌ์ผ์ด์ ..
์คํ๋ง ํต์ฌ ์๋ฆฌ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ๋น ์ค์ฝํ๋? ๋ง ๊ทธ๋๋ก ๋น์ด ์กด์ฌํ ์ ์๋ ๋ฒ์๋ฅผ ๋ปํ๋ค. ์ง๊ธ๊น์ง๋ ์คํ๋ง ๋น์ด ์คํ๋ง ์ปจํ ์ด๋์ ์์๊ณผ ํจ๊ป ์์ฑ๋์ด ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ์ ์ง๋๋ค๊ณ ํ์ตํ์๋๋ฐ, ์ด๊ฒ์ ์คํ๋ง ๋น์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธํค ์ค์ฝํ๋ก ์์ฑ๋๊ธฐ ๋๋ฌธ์ด๋ค. ์คํ๋ง์ ๋ค์๊ณผ ๊ฐ์ด ๋ค์ํ ์ค์ฝํ๋ฅผ ์ง์ํ๋ค. 1. ์ฑ๊ธํค: ๊ธฐ๋ณธ ์ค์ฝํ๋ก ์คํ๋ง ์ปจํ ์ด๋์ ์์๊ณผ ์ข ๋ฃ๊น์ง ์ ์ง๋๋ ๊ฐ์ฅ ๋์ ๋ฒ์์ ์ค์ฝํ์ด๋ค. 2. ํ๋กํ ํ์ : ์คํ๋ง ์ปจํ ์ด๋๋ ํ๋กํ ํ์ ๋น์ ์์ฑ๊ณผ ์์กด ๊ด๊ณ ์ฃผ์ , ์ด๊ธฐํ๊น์ง๋ง ๊ด์ฌํ๊ณ ๊ทธ ์ด์ ๊ด๋ฆฌํ์ง ์๋ ์งง์ ๋ฒ์์ ์ค์ฝํ์ด๋ค. 3. ์น ๊ด๋ จ ์ค์ฝํ 3-1 request: ์น ์์ฒญ์ด ๋ค์ด์ค๊ณ ๋๊ฐ ๋๊น์ง ์ ์ง๋๋ ์ค์ฝํ์ด๋ค. 3-2 sess..
์คํ๋ง ํต์ฌ ์๋ฆฌ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ์์กด๊ด๊ณ ์ฃผ์ ์์ ์์ผ ํต์ ์ฒ๋ผ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ง์ ์ ํ์ํ ์ฐ๊ฒฐ์ ๋ฏธ๋ฆฌ ํด๋๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ ์์ ์ ์ฐ๊ฒฐ์ ๋ชจ๋ ์ข ๋ฃํ๋ ์์ ์ ์งํํ๋ ค๋ฉด ๊ฐ์ฒด์ ์ด๊ธฐํ์ ์ข ๋ฃ ์์ ์ด ํ์ํ๋ค. ์คํ๋ง์ ์ด๋ฌํ ์ด๊ธฐํ/์ข ๋ฃ ์์ ์ ์ด๋ป๊ฒ ์งํํ ๊น? ์คํ๋ง ๋น์ ๊ธฐ๋ณธ์ ์ผ๋ก '๊ฐ์ฒด ์์ฑ → ์์กด ๊ด๊ณ ์ฃผ์ '์ ๋ผ์ดํ์ฌ์ดํด์ ๊ฐ์ง๋ค. ๋น์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์์กด๊ด๊ณ ์ฃผ์ ์ด ๋ชจ๋ ๋๋ ์ดํ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ค๋น๊ฐ ๊ฐ์ถฐ์ง๋ ๊ฒ์ด๋ฏ๋ก, ๋ฐ์ดํฐ ์ด๊ธฐํ ์์ ์ ์์กด ๊ด๊ณ ์ฃผ์ ์ด ๋ชจ๋ ์๋ฃ๋๊ณ ๋ ๋ค์์ ํธ์ถํด์ผ ํ๋ค. ์ฑ๊ธํค ๋ฐฉ์์์ ์คํ๋ง ๋น์ ๋ค์๊ณผ ๊ฐ์ ์ด๋ฒคํธ ๋ผ์ดํ์ฌ์ดํด์ ๊ฐ์ง๋ค. (1) ์คํ๋ง ์ปจํ ์ด๋ ์์ฑ → (2) ์คํ๋ง ๋น ์์ฑ → (3) ์์กด ..
์คํ๋ง ํต์ฌ ์๋ฆฌ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ์กฐํ ๋น์ด 2๊ฐ ์ด์์ผ ๋ ๋ฌธ์ ์ @Autowired๋ ํ์ ์ผ๋ก ๋น์ ์กฐํํ๊ธฐ ๋๋ฌธ์, ์ค์ ๋ก๋ ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง ac.getBean(DiscountPolicy.class)์ ์ ์ฌํ๊ฒ ๋์ํ๋ค. ์ด๋ DiscountPolicy์ ํ์ ํ์ ์ด ๋ ๊ฐ ์ด์ ์กด์ฌํ ๊ฒฝ์ฐ @Autowired๋ ํ ๊ฐ๊ฐ ์๋ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก๋ ํ์ ํ์ ํด๋์ค์ ๊ฐ์๋งํผ ์ค๋ณต๋ ๋น์ ์ฐพ๊ฒ ๋๊ณ , NoUniqueBeanDefinitionException์ด ๋ฐ์ํ๊ฒ ๋๋ค. ๊ทธ๋ ๋ค๊ณ ํด์ ํ์ ํ์ ์ผ๋ก ๋น์ ์กฐํํ๋ ๊ฒ์ ์๋์ ๊ฐ์ด ๋ ๊ฐ์ง ๋ฌธ์ ์ ์ด ์กด์ฌํ๋ค. 1. DIP๋ฅผ ์๋ฐฐํจ๊ณผ ๋๋ถ์ด ์ฝ๋์ ์ ์ฐ์ฑ์ด ๋จ์ด์ง๋ค. 2. ๋น ์ด๋ฆ์ ๋ค๋ฅด์ง๋ง ํ์ ์ด ๋์ผํ ๊ฒฝ์ฐ ๋ฌธ์ ๋ฅผ..