์คํ๋ง 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. ๋น ์ด๋ฆ์ ๋ค๋ฅด์ง๋ง ํ์ ์ด ๋์ผํ ๊ฒฝ์ฐ ๋ฌธ์ ๋ฅผ..
์คํ๋ง ํต์ฌ ์๋ฆฌ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ์์กด๊ด๊ณ ์ฃผ์ ๋ฐฉ๋ฒ ์์ฑ์ ์ฃผ์ ์์ฑ์๋ฅผ ํตํด ์์กด ๊ด๊ณ๋ฅผ ์ฃผ์ ๋ฐ๋ ๋ฐฉ๋ฒ์ผ๋ก, ์์ฑ์ ํธ์ถ ์์ ์ ๋ฑ ํ ๋ฒ๋ง ํธ์ถ๋๋ฉฐ ๋ถ๋ณ ํน์ ํ์์ ์ธ ์์กด ๊ด๊ณ ์ฃผ์ ์ ์ฌ์ฉ๋๋ค. ์์ฑ์๊ฐ ํ ๊ฐ๋ง ์์ ๊ฒฝ์ฐ ์คํ๋ง ๋น์ ํํด์ @Autowired๋ฅผ ์๋ตํด๋ ์๋์ผ๋ก ์์กด ๊ด๊ณ๊ฐ ์ฃผ์ ๋๋ค. @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepositor..
์คํ๋ง ํต์ฌ ์๋ฆฌ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ์ฑ๊ธํค ํจํด ํด๋์ค์ ์ธ์คํด์ค๊ฐ 1๊ฐ๋ง ์์ฑ๋๋ ๊ฒ์ ๋ณด์ฅํ๋ ๋์์ธ ํจํด์ด๋ค. ์คํ๋ง์ด ์๋ ์์ํ DI(Dependency Injection) ์ปจํ ์ด๋๋ฅผ ์ด์ฉํ๋ค๊ณ ๊ฐ์ ํด๋ณด์. DI ์ปจํ ์ด๋์ธ AppConfig๋ ์๋ก์ด ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๋ฐํํ๋๋ฐ, ํธ๋ํฝ์ด ์ฆ๊ฐํ ์๋ก ์์ฑ๋๋ ๊ฐ์ฒด๊ฐ ๋ง์์ง์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ ์ฌํด์ง๋ค๋ ๋จ์ ์ด ์กด์ฌํ๋ค. ์ด๋ฌํ ํด๊ฒฐ๋ฐฉ์์ผ๋ก์จ ๊ฐ์ ๊ฐ์ฒด๋ ๋ฑ 1๊ฐ๋ง ์์ฑ๋๋๋ก ํ์ฌ ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ๊ฒ๋ ์ค๊ณํ๋ ๋ฐฉ๋ฒ์ ์ด์ฉํ ์ ์๋๋ฐ, ํด๋น ๋ฐฉ๋ฒ์ด ์ฑ๊ธํค ํจํด์ ์ด์ฉํ๋ ๊ฒ์ด๋ค. public class SingletonService { private static final SingletonService ..
์คํ๋ง ํต์ฌ ์๋ฆฌ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ์คํ๋ง ์ปจํ ์ด๋ ์์ฑ ์๋ ์ฝ๋๋ ์คํ๋ง ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ ์์ ์ฝ๋์ด๋ค. ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext๋ฅผ ์คํ๋ง ์ปจํ ์ด๋๋ผ๊ณ ํ๋ค. ์คํ๋ง ์ปจํ ์ด๋๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์๋ ๋ํ์ ์ผ๋ก ๋ ๊ฐ์ง๊ฐ ์๋ค. XML ๊ธฐ๋ฐ ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ ์๋ฐ ์ค์ ํด๋์ค ์์์์ ์์ ์ฝ๋๊ฐ 2๋ฒ ๋ฐฉ๋ฒ์ ์ด์ฉํ ๊ฒ์ผ๋ก, new ์ฐ์ฐ์๋ฅผ ํตํด ์์ฑ๋ AnnotationConfigApplicationContext๋ ApplicationContext ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด์ด๋ค. ์๋ฐํ ๋ฐ์ง๋ฉด ์คํ๋ง ์ปจํ ์ด๋์๋ ..
์คํ๋ง ํต์ฌ ์๋ฆฌ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค. ์์ ์ค๊ณ ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ๊ณผ ์ค๊ณ ํ์ ํ์๊ฐ์ ๋ฐ ์กฐํ ๊ฐ๋ฅ ์ผ๋ฐ, VIP ๋ฑ๊ธ ๊ตฌ๋ถ ํ์ ๋ฐ์ดํฐ๋ ์์ฒด DB๋ฅผ ๊ตฌ์ถํ ์ง ์ธ๋ถ ์์คํ ๊ณผ ์ฐ๋ํ ์ง ๋ฏธํ์ ์ธ ์ํ ์ฃผ๋ฌธ๊ณผ ํ ์ธ ์ ์ฑ ํ์์ ์ํ์ ์ฃผ๋ฌธํ ์ ์์ ํ์ ๋ฑ๊ธ์ ๋ฐ๋ผ ๋ค๋ฅธ ํ ์ธ ์ ์ฑ ์ ์ฉ ํ์ฌ ํ ์ธ ์ ์ฑ ์ ๋ชจ๋ VIP ๋ฑ๊ธ์ ํ์์๊ฒ 1000์์ ํ ์ธํด์ฃผ๋ ๊ณ ์ ๊ธ์ก ํ ์ธ์ ๋ ผ์ํ๊ณ ์์ผ๋ ์ฐจํ ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ผ๋ฉฐ, ์ํฉ์ ๋ฐ๋ผ ํ ์ธ์ ์์ ์ ์ฉํ์ง ์์ ์ ์์ ํ์ ๋๋ฉ์ธ ์ค๊ณ ํ์ ๋๋ฉ์ธ ํ๋ ฅ ๊ด๊ณ (๊ฐ๋ตํ ๊ด๊ณ๋) ํ์ ํด๋์ค ๋ค์ด์ด๊ทธ๋จ (๊ด๊ณ๋์ ๊ฐ ์์๋ฅผ ํด๋์ค/์ธํฐํ์ด์คํ ํ ๊ฒ) ํ์ ๊ฐ์ฒด ๋ค์ด์ด๊ทธ๋จ (ํด๋ผ์ด์ธํธ๊ฐ ์ค์ ์ด์ฉ ์ ์์ฐจ์ ์ผ๋ก ์ฐ๊ฒฐ๋๋ ๊ด๊ณ๋) ํ์ ์๋น์ค ๊ตฌ..