[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 17. ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์˜์กด๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž… / ์ž๋™, ์ˆ˜๋™์˜ ์˜ฌ๋ฐ”๋ฅธ ์‹ค๋ฌด ์šด์˜ ๊ธฐ์ค€
ยท
Spring/Spring ๊ธฐ๋ณธ
์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์˜์กด๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž… ์‹œ์ž‘ํ•˜๊ธฐ @Configuration public class AppConfig { @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } ์ง€๊ธˆ๊นŒ์ง€ ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•  ๋•Œ๋Š” ์ž๋ฐ” ์ฝ”๋“œ์˜ @Bean์ด๋‚˜ XML์˜ ๋“ฑ์„ ํ†ตํ•ด์„œ ์„ค์ • ์ •๋ณด์— ์ง์ ‘ ๋“ฑ๋กํ•  ์Šคํ”„๋ง ๋นˆ์„ ๋‚˜์—ดํ–ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋“ฑ๋กํ•ด์•ผ ํ•  ์Šคํ”„๋ง ๋นˆ์ด ์ˆ˜์‹ญ, ์ˆ˜๋ฐฑ๊ฐœ๊ฐ€ ๋˜๋ฉด ์ผ์ผ์ด ๋“ฑ๋กํ•˜๊ธฐ๋„ ๊ท€์ฐฎ๋‹ค ๊ทธ๋ž˜์„œ ์Šคํ”„๋ง์€ ์„ค์ • ์ •๋ณด๊ฐ€ ์—†์–ด๋„ ์ž๋™์œผ๋กœ ์Šคํ”„๋ง ..
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 16. @Configuration๊ณผ ์‹ฑ๊ธ€ํ†ค
ยท
Spring/Spring ๊ธฐ๋ณธ
@Configuration๊ณผ ์‹ฑ๊ธ€ํ†ค AppConfig ์ฝ”๋“œ @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } memberRepository ํ˜ธ์ถœ ์‹œ new MemoryMemberRepositroy() ํ˜ธ์ถœ @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); memberService ๋นˆ์„ ๋งŒ๋“œ๋Š” ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด memberRepository() ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด new MemoryMemberRepository() ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. @Bean public OrderServ..
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 15. ์‹ฑ๊ธ€ํ†ค ์ปจํ…Œ์ด๋„ˆ
ยท
Spring/Spring ๊ธฐ๋ณธ
์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์‹ฑ๊ธ€ํ†ค ๋Œ€๋ถ€๋ถ„์˜ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ณดํ†ต ์—ฌ๋Ÿฌ ๊ณ ๊ฐ์ด ๋™์‹œ์— ์š”์ฒญ์„ ํ•œ๋‹ค. @Test @DisplayName("์Šคํ”„๋ง ์—†๋Š” ์ˆœ์ˆ˜ํ•œ DI ์ปจํ…Œ์ด๋„ˆ") void pureContainer() { AppConfig appConfig = new AppConfig(); // 1. ์กฐํšŒ : ํ˜ธ์ถœํ•  ๋•Œ ๋งˆ๋‹ค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ MemberService memberService1 = appConfig.memberService(); // 2. ์กฐํšŒ : ํ˜ธ์ถœํ•  ๋•Œ ๋งˆ๋‹ค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ MemberService memberService2 = appConfig.memberService(); AppConfig๋Š” ์š”์ฒญ์„ ํ•  ๋•Œ ๋งˆ๋‹ค ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ๋‹ค. // ์ฐธ์กฐ๊ฐ’์ด ๋‹ค๋ฅธ ๊ฒƒ์„ ํ™•..
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 14. BeanDefinition
ยท
Spring/Spring ๊ธฐ๋ณธ
์Šคํ”„๋ง ๋นˆ ์„ค์ • ๋ฉ”ํƒ€ ์ •๋ณด - BeanDefinition ์Šคํ”„๋ง์€ ์–ด๋–ป๊ฒŒ ์ด๋Ÿฐ ๋‹ค์–‘ํ•œ ์„ค์ • ํ˜•์‹์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ? ๊ทธ ์ค‘์‹ฌ์—๋Š” BeanDefinition ์ด๋ผ๋Š” ์ถ”์ƒํ™”๊ฐ€ ์žˆ๋‹ค. ์‰ฝ๊ฒŒ ์ด์•ผ๊ธฐํ•ด์„œ ์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ๊ฐœ๋…์ ์œผ๋กœ ๋‚˜๋ˆˆ ๊ฒƒ์ด๋‹ค! XML์„ ์ฝ์–ด์„œ BeanDefinition์„ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค. ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์ฝ์–ด์„œ BeanDefinition์„ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์ž๋ฐ” ์ฝ”๋“œ์ธ์ง€, XML์ธ์ง€ ๋ชฐ๋ผ๋„ ๋œ๋‹ค. ์˜ค์ง BeanDefinition๋งŒ ์•Œ๋ฉด ๋œ๋‹ค. BeanDefinition ์„ ๋นˆ ์„ค์ • ๋ฉ”ํƒ€์ •๋ณด๋ผ ํ•œ๋‹ค. @Bean , ๋‹น ๊ฐ๊ฐ ํ•˜๋‚˜์”ฉ ๋ฉ”ํƒ€ ์ •๋ณด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด ๋ฉ”ํƒ€์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์Šคํ”„๋ง ๋นˆ์„ ์ƒ์„ฑํ•œ๋‹ค. public class AnnotationConfigApplicationCo..
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 13. BeanFactory์™€ ApplicationContext
ยท
Spring/Spring ๊ธฐ๋ณธ
BeanFactory์™€ ApplicationContext AnnotationConfigApplicationContext : ๊ตฌํ˜„ ํด๋ž˜์Šค ๊ฐ์ฒด BeanFactory ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์ตœ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค๋‹ค. ์Šคํ”„๋ง ๋นˆ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค. getBean() ์„ ์ œ๊ณตํ•œ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ–ˆ๋˜ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์€ BeanFactory๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ApplicationContext BeanFactory ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์ƒ์†๋ฐ›์•„์„œ ์ œ๊ณตํ•œ๋‹ค. ๋นˆ์„ ๊ด€๋ฆฌํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ BeanFactory๊ฐ€ ์ œ๊ณตํ•ด์ฃผ๋Š”๋ฐ, ๊ทธ๋Ÿฌ๋ฉด ๋‘˜์˜ ์ฐจ์ด๊ฐ€ ๋ญ˜๊นŒ? ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ๋นˆ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ์€ ๋ฌผ๋ก ์ด๊ณ , ์ˆ˜ ๋งŽ์€ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค. ApplicatonContext๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ถ€๊ฐ€๊ธฐ๋Šฅ ๋ฉ”์‹œ์ง€์†Œ์Šค๋ฅผ..
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 12. ์Šคํ”„๋ง ๋นˆ ์กฐํšŒ - ์ƒ์† ๊ด€๊ณ„
ยท
Spring/Spring ๊ธฐ๋ณธ
์Šคํ”„๋ง ๋นˆ ์กฐํšŒ - ์ƒ์† ๊ด€๊ณ„ ๋ถ€๋ชจ ํƒ€์ž…์œผ๋กœ ์กฐํšŒํ•˜๋ฉด, ์ž์‹ ํƒ€์ž…๋„ ํ•จ๊ป˜ ์กฐํšŒํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋ชจ๋“  ์ž๋ฐ” ๊ฐ์ฒด์˜ ์ตœ๊ณ  ๋ถ€๋ชจ์ธ Object ํƒ€์ž…์œผ๋กœ ์กฐํšŒํ•˜๋ฉด, ๋ชจ๋“  ์Šคํ”„๋ง ๋นˆ์„ ์กฐํšŒํ•œ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” @Configuration ์ด ๋ถ™์€ TestConfig ๋ฅผ ์„ค์ •(๊ตฌ์„ฑ) ์ •๋ณด๋กœ ์‚ฌ์šฉํ•œ๋‹ค. TestConfig.class @Configuration static class TestConfig { @Bean public DiscountPolicy rateDiscountPolicy() { return new RateDiscou..
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 11. ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋นˆ ์กฐํšŒํ•˜๊ธฐ
ยท
Spring/Spring ๊ธฐ๋ณธ
์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋œ ๋ชจ๋“  ๋นˆ ์กฐํšŒ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์‹ค์ œ ์Šคํ”„๋ง ๋นˆ๋“ค์ด ์ž˜ ๋“ฑ๋ก ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž. ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ public class ApplicationContextInfoTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext ๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ผ ํ•œ๋‹ค. AppConfig.class ๋ฅผ ๊ตฌ์„ฑ ์ •๋ณด๋กœ ์ง€์ •ํ–ˆ๋‹ค. ๋ชจ๋“  ๋นˆ ์ถœ๋ ฅํ•˜๊ธฐ @Test @DisplayName("๋ชจ๋“  ๋นˆ ์ถœ๋ ฅํ•˜๊ธฐ") void findAllBean() { String[] beanDefinitionNames = ac.getBeanDefinitionNames(); for (S..
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 10. ์Šคํ”„๋ง์œผ๋กœ ์ „ํ™˜ํ•˜๊ธฐ / ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ
ยท
Spring/Spring ๊ธฐ๋ณธ
์Šคํ”„๋ง์œผ๋กœ ์ „ํ™˜ํ•˜๊ธฐ ์ง€๊ธˆ๊นŒ์ง€ ์ˆœ์ˆ˜ํ•œ ์ž๋ฐ” ์ฝ”๋“œ๋งŒ์œผ๋กœ DI๋ฅผ ์ ์šฉํ–ˆ๋‹ค. ์ด์ œ ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•ด๋ณด์ž. @Configuration public class AppConfig { AppConfig์— ์„ค์ •์„ ๊ตฌ์„ฑํ•œ๋‹ค๋Š” ๋œป์˜ @Configuration ์„ ๋ถ™์—ฌ์ค€๋‹ค. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” @Configuration ์ด ๋ถ™์€ AppConfig ๋ฅผ ์„ค์ •(๊ตฌ์„ฑ) ์ •๋ณด๋กœ ์‚ฌ์šฉํ•œ๋‹ค. @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } ๊ฐ ๋ฉ”์„œ๋“œ์— @Bean ์„ ๋ถ™์—ฌ์ค€๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ApplicationContext ๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ผ ํ•œ๋‹ค. ApplicationC..