Spring/Spring ๊ธฐ๋ณธ
ํ๋กํ ํ์
์ค์ฝํ - ์ฑ๊ธํค ๋น๊ณผ ํจ๊ป ์ฌ์ฉ์ ๋ฌธ์ ์ ์คํ๋ง ์ปจํ
์ด๋์ ํ๋กํ ํ์
์ค์ฝํ์ ๋น์ ์์ฒญํ๋ฉด ํญ์ ์๋ก์ด ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์์ฑํด์ ๋ฐํํ๋ค. ํ์ง๋ง ์ฑ๊ธํค ๋น๊ณผ ํจ๊ป ์ฌ์ฉํ ๋๋ ์๋ํ ๋๋ก ์ ๋์ํ์ง ์์ผ๋ฏ๋ก ์ฃผ์ํด์ผ ํ๋ค. ์์ clientBean ์ด๋ผ๋ ์ฑ๊ธํค ๋น์ด ์์กด๊ด๊ณ ์ฃผ์
์ ํตํด์ ํ๋กํ ํ์
๋น์ ์ฃผ์
๋ฐ์์ ์ฌ์ฉํ๋ ์๋ฅผ ๋ณด์. void prototypeFind() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrototypeBean.class, ClientBean.class); clientBean ์ ์ฑ๊ธํค์ด๋ฏ๋ก, ๋ณดํต ์คํ๋ง ์ปจํ
์ด๋ ์์ฑ ์์ ์ ํจ๊ป ์์ฑ๋๊ณ , ์์กด๊ด๊ณ ์ฃผ์
..
Spring/Spring ๊ธฐ๋ณธ
๋น ์ค์ฝํ๋? ์คํ๋ง ๋น์ด ์คํ๋ง ์ปจํ
์ด๋์ ์์๊ณผ ํจ๊ป ์์ฑ๋์ด์ ์คํ๋ง ์ปจํ
์ด๋๊ฐ ์ข
๋ฃ๋ ๋ ๊น์ง ์ ์ง๋๋ค๊ณ ํ์ตํ๋ค. ์ด๊ฒ์ ์คํ๋ง ๋น์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธํค ์ค์ฝํ๋ก ์์ฑ๋๊ธฐ ๋๋ฌธ์ด๋ค. ์ค์ฝํ๋ ๋ฒ์ญ ๊ทธ๋๋ก ๋น์ด ์กด์ฌํ ์ ์๋ ๋ฒ์๋ฅผ ๋ปํ๋ค. ๋ค์ํ ์ค์ฝํ ์ง์ ์ฑ๊ธํค: ๊ธฐ๋ณธ ์ค์ฝํ, ์คํ๋ง ์ปจํ
์ด๋์ ์์๊ณผ ์ข
๋ฃ๊น์ง ์ ์ง๋๋ ๊ฐ์ฅ ๋์ ๋ฒ์์ ์ค์ฝํ์ด๋ค. ํ๋กํ ํ์
: ์คํ๋ง ์ปจํ
์ด๋๋ ํ๋กํ ํ์
๋น์ ์์ฑ๊ณผ ์์กด๊ด๊ณ ์ฃผ์
๊น์ง๋ง ๊ด์ฌํ๊ณ ๋๋ ๊ด๋ฆฌํ์ง ์๋ ๋งค์ฐ ์งง์ ๋ฒ์์ ์ค์ฝํ์ด๋ค. ์น ๊ด๋ จ ์ค์ฝํ request: ์น ์์ฒญ์ด ๋ค์ด์ค๊ณ ๋๊ฐ๋ ๊น์ง ์ ์ง๋๋ ์ค์ฝํ์ด๋ค. session: ์น ์ธ์
์ด ์์ฑ๋๊ณ ์ข
๋ฃ๋ ๋ ๊น์ง ์ ์ง๋๋ ์ค์ฝํ์ด๋ค. application: ์น์ ์๋ธ๋ฆฟ ์ปจํ
์คํธ์ ๊ฐ์ ๋ฒ์..
Spring/Spring ๊ธฐ๋ณธ
๋น ์๋ช
์ฃผ๊ธฐ ์ฝ๋ฐฑ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์
ํ์ด๋, ๋คํธ์ํฌ ์์ผ์ฒ๋ผ ์ ํ๋ฆฌ์ผ์ด์
์์ ์์ ์ ํ์ํ ์ฐ๊ฒฐ์ ๋ฏธ๋ฆฌ ํด๋๊ณ , ์ ํ๋ฆฌ์ผ์ด์
์ข
๋ฃ ์์ ์ ์ฐ๊ฒฐ์ ๋ชจ๋ ์ข
๋ฃํ๋ ์์
์ ์งํํ๋ ค๋ฉด, ๊ฐ์ฒด์ ์ด๊ธฐํ์ ์ข
๋ฃ ์์
์ด ํ์ํ๋ค. ์ด๋ฒ์๊ฐ์๋ ์คํ๋ง์ ํตํด ์ด๋ฌํ ์ด๊ธฐํ ์์
๊ณผ ์ข
๋ฃ ์์
์ ์ด๋ป๊ฒ ์งํํ๋์ง ์์ ๋ก ์์๋ณด์. ์ฐธ๊ณ : ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์
ํ ๋๋ณด๊ธฐ WAS(Web Application Server)์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ด์ ์ฐ๊ฒฐ์๋ ๋ง์ ๋น์ฉ์ด ๋ ๋ค ์๋ฒ๊ฐ DB์ ์ฐ๊ฒฐํ๊ธฐ ์ํ Connecting ๋น์ฉ์ด ๊ฐ์ฅ ํฐ ๋น์จ์ ์ฐจ์งํ๋ค. ์ด์ฒ๋ผ Connection์ ์์ฑํ๋ ์์
์ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์
์ด๋ค. ์ด๋ฅผ ๋ณด์ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก Connection Pool์ด๋ค. ์ปค๋ฅ์
ํ(Connection ..
Spring/Spring ๊ธฐ๋ณธ
์กฐํํ ๋น์ด ๋ชจ๋ ํ์ํ ๋, List, Map ์๋์ ์ผ๋ก ์ ๋ง ํด๋น ํ์
์ ์คํ๋ง ๋น์ด ๋ค ํ์ํ ๊ฒฝ์ฐ๋ ์๋ค. ์๋ฅผ ๋ค์ด์ ํ ์ธ ์๋น์ค๋ฅผ ์ ๊ณตํ๋๋ฐ, ํด๋ผ์ด์ธํธ๊ฐ ํ ์ธ์ ์ข
๋ฅ(rate, fix)๋ฅผ ์ ํํ ์ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์. ์คํ๋ง์ ์ฌ์ฉํ๋ฉด ์์ ๋งํ๋ ์ ๋ต ํจํด์ ๋งค์ฐ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์๋ค. @Test void findAllBean() { ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class,DiscountService.class); new AnnotationConfigApplicationContext() ๋ฅผ ํตํด ์คํ๋ง ์ปจํ
์ด๋๋ฅผ ์์ฑํ๋ค. AutoAppConfig.class , DiscountS..
Spring/Spring ๊ธฐ๋ณธ
์กฐํ ๋น์ด 2๊ฐ ์ด์ - ๋ฌธ์ @Component public class FixDiscountPolicy implements DiscountPolicy { @Component public class RateDiscountPolicy implements DiscountPolicy { DiscountPolicy ์ ํ์ ํ์
์ธ FixDiscountPolicy , RateDiscountPolicy ๋๋ค ์คํ๋ง ๋น์ผ๋ก ์ ์ธ ์คํ๋ง ๋น ์กฐํ์์ ํ์ตํ๋ฏ์ด ํ์
์ผ๋ก ์กฐํํ๋ฉด ์ ํ๋ ๋น์ด 2๊ฐ ์ด์์ผ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.me..
Spring/Spring ๊ธฐ๋ณธ
์์ฑ์ ์ฃผ์
์ ์ ํํด๋ผ! ๊ณผ๊ฑฐ์๋ ์์ ์ ์ฃผ์
๊ณผ ํ๋ ์ฃผ์
์ ๋ง์ด ์ฌ์ฉํ์ง๋ง, ์ต๊ทผ์๋ ์คํ๋ง์ ํฌํจํ DI ํ๋ ์์ํฌ ๋๋ถ๋ถ์ด ์์ฑ์ ์ฃผ์
์ ๊ถ์ฅํ๋ค. ๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค. ๋ถ๋ณ ๋๋ถ๋ถ์ ์์กด๊ด๊ณ ์ฃผ์
์ ํ๋ฒ ์ผ์ด๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ข
๋ฃ์์ ๊น์ง ์์กด๊ด๊ณ๋ฅผ ๋ณ๊ฒฝํ ์ผ์ด ์๋ค. ์คํ๋ ค ๋๋ถ๋ถ์ ์์กด๊ด๊ณ๋ ์ ํ๋ฆฌ์ผ์ด์
์ข
๋ฃ ์ ๊น์ง ๋ณํ๋ฉด ์๋๋ค.(๋ถ๋ณํด์ผ ํ๋ค.) ์์ ์ ์ฃผ์
์ ์ฌ์ฉํ๋ฉด, setXxx ๋ฉ์๋๋ฅผ public์ผ๋ก ์ด์ด๋์ด์ผ ํ๋ค. ๋๊ตฐ๊ฐ ์ค์๋ก ๋ณ๊ฒฝํ ์ ๋ ์๊ณ , ๋ณ๊ฒฝํ๋ฉด ์๋๋ ๋ฉ์๋๋ฅผ ์ด์ด๋๋ ๊ฒ์ ์ข์ ์ค๊ณ ๋ฐฉ๋ฒ์ด ์๋๋ค. ์์ฑ์ ์ฃผ์
์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ๋ฑ 1๋ฒ๋ง ํธ์ถ๋๋ฏ๋ก ์ดํ์ ํธ์ถ๋๋ ์ผ์ด ์๋ค. ๋ฐ๋ผ์ ๋ถ๋ณํ๊ฒ ์ค๊ณํ ์ ์๋ค. final ํค์๋ ์์ฑ์ ์ฃผ์
์ ์ฌ์ฉํ๋ฉด ํ๋์ ..
Spring/Spring ๊ธฐ๋ณธ
์ต์
์ฒ๋ฆฌ ์ฃผ์
ํ ์คํ๋ง ๋น์ด ์์ด๋ ๋์ํด์ผ ํ ๋๊ฐ ์๋ค. ๊ทธ๋ฐ๋ฐ @Autowired ๋ง ์ฌ์ฉํ๋ฉด required ์ต์
์ ๊ธฐ๋ณธ๊ฐ์ด true ๋ก ๋์ด ์์ด์ ์๋ ์ฃผ์
๋์์ด ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์๋ ์ฃผ์
๋์์ ์ต์
์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค. Member๋ ์คํ๋ง ๋น์ด ์๋๋ค. @Autowired(required = false) public void setNoBean1(Member noBean1) { System.out.println("noBean1 = " + noBean1); } @Autowired(required=false) : ์๋ ์ฃผ์
ํ ๋์์ด ์์ผ๋ฉด ์์ ์ ๋ฉ์๋ ์์ฒด๊ฐ ํธ์ถ ์๋จ @Autowired public void setNoBean2(@Nullable Member noBe..
Spring/Spring ๊ธฐ๋ณธ
๋ค์ํ ์์กด๊ด๊ณ ์ฃผ์
๋ฐฉ๋ฒ ์์กด๊ด๊ณ ์ฃผ์
์ ํฌ๊ฒ 4๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค. ์์ฑ์ ์ฃผ์
์์ ์ ์ฃผ์
(setter ์ฃผ์
) ํ๋ ์ฃผ์
์ผ๋ฐ ๋ฉ์๋ ์ฃผ์
์์ฑ์ ์ฃผ์
@Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; ์ด๋ฆ ๊ทธ๋๋ก ์์ฑ์๋ฅผ ํตํด์ ์์กด ๊ด๊ณ๋ฅผ ์ฃผ์
๋ฐ๋ ๋ฐฉ๋ฒ์ด๋ค. ์์ฑ์ ํธ์ถ์์ ์ ๋ฑ 1๋ฒ๋ง ํธ์ถ๋๋ ๊ฒ์ด ๋ณด์ฅ๋๋ค. ๋ถ๋ณ, ํ์ ์์กด๊ด๊ณ์ ์ฌ์ฉ ์ค์! ์์ฑ์๊ฐ ๋ฑ 1๊ฐ๋ง ์์ผ๋ฉด @Autowired๋ฅผ ์๋ตํด๋ ์๋ ์ฃผ์
๋๋ค. ๋ฌผ..