๋ชฉ๋กSpring๐ฑ (22)
EEALL@ONCE
๋ฉ์๋ ์ฒด์ด๋(Method Chaining)์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ์ฌ์ฉ๋๋ ํจํด ์ค ํ๋๋ก, ๋ฉ์๋๋ฅผ ์ฐ์ด์ด ํธ์ถํ์ฌ ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ฃผ๋ก Java์ ๊ฐ์ ๊ฐ์ฒด ์งํฅ ์ธ์ด์์ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค. ๋ฉ์๋ ์ฒด์ด๋์ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ฅผ ๋ณด๋ค ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ด ๋ฉ์๋ ์ฒด์ด๋์ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ๊ณ ์์ฑ์ ์ค์ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. Person person = new Person() .setName("John") .setAge(30) .setAddress("123 Main St"); ์ฌ๊ธฐ์ `Person` ํด๋์ค์ ๊ฐ ๋ฉ์๋๋ ํด๋น ์์ฑ์ ์ค์ ํ๊ณ , ๋ง์ง๋ง์๋ ์ด๊ธฐํ๋ ๊ฐ์ฒด๊ฐ ๋ฐํ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ๋ฌ ๋ฉ์๋ ํธ์ถ์ ํ๋์ ์ค์ ..
@Builder ์ด๋ ธํ ์ด์ ์ Lombok ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณต๋๋ ์ด๋ ธํ ์ด์ ์ค ํ๋์ ๋๋ค. ์ด ์ด๋ ธํ ์ด์ ์ ์ฃผ๋ก Java ํด๋์ค์ ๋น๋ ํจํด์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋น๋ ํจํด์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ํ๋๋ฅผ ์ค์ ํ๋ ๋ฐ ๋์์ ์ฃผ๋ ํจํด ์ค ํ๋์ ๋๋ค. @Builder ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ํด๋น ํด๋์ค์ ๋ํ ๋น๋ ํด๋์ค๊ฐ ์๋์ผ๋ก ์์ฑ๋๋ฉฐ, ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ํ๋ ๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ์ฃผ๋ก ๋ถ๋ณ(immutable) ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋, ๊ฐ์ฒด ์์ฑ ๊ณผ์ ์ ๋ ๋ช ํํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ๊ฐ๋จํ ์์ ๋ก ์ค๋ช ํ๊ฒ ์ต๋๋ค. ์๋๋ @Builder ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ ํด๋์ค์ ์์ ์ ๋๋ค. import lombok.Builder; import lombok.Getter; @Getter @B..
ํ์ ์์ System.out.println ๋์ ๋ก๊น ์ ์ฌ์ฉํ๋ ์ด์ ๋ ์๋์ ๊ฐ๋ค. ๋ก๊ทธ ๋ ๋ฒจ ๊ด๋ฆฌ: ๋ก๊น ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ก๊ทธ ๋ฉ์์ง๋ฅผ ๋ค์ํ ๋ ๋ฒจ๋ก ๋ถ๋ฅํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก DEBUG, INFO, WARN, ERROR, ๋ฑ์ ๋ ๋ฒจ๋ก ๋ก๊ทธ๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ด๋ค ์ข ๋ฅ์ ๋ฉ์์ง๊ฐ ์ด๋ค ์กฐ๊ฑด์์ ๋ฐ์ํ๋์ง ๋ช ํํ๊ฒ ํ์ ํ ์ ์์ต๋๋ค. ๋์ ์ค์ : ๋ก๊น ๋ ๋ฒจ์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ด์ ํ๋ก๊ทธ๋จ์ ๋ฐํ์์ ๋ก๊น ๋ ๋ฒจ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ด๋ ๋๋ฒ๊น ์์ ์ ์ฉํ๋ฉฐ, ๋ฌธ์ ํด๊ฒฐ์ ์ํด ๋ก๊ทธ ์์ค์ ๋์ด๊ฑฐ๋ ๋ฎ์ถ ์ ์์ต๋๋ค. ๋ก๊น ์์น ์ค์ : ๋ก๊ทธ๋ฅผ ํ์ผ, ์ฝ์, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ ์ฌ๋ฌ ์์น์ ์ถ๋ ฅํ ์ ์์ต๋๋ค. ์ด๋ ๋ก๊ทธ ๋ฉ์์ง๋ฅผ ์ค์ ์ง์คํํ๊ฑฐ๋, ๋ณด์์ ๊ฐํํ๊ฑฐ๋, ๋ชจ๋ํฐ๋ง ๋ฐ ..
setting -> gradle -> build and run using / run tests using ๋ถ๋ถ์ gradle์์ intellij IDEA๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ์คํ ์๋๊ฐ ๊ฐ์ ์ด ๋๋ค. gradle์ ํตํด์ ์คํ๋์ง ์๊ณ ์ธํ ๋ฆฌ์ ์ด๋ก ๋ฐ๋ก ์คํ์ด ๋๋ค.
์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฑ๊ธํค ๊ฐ์ฒด๊ฐ ๋ฑ 1๊ฐ๋ง ์์ฑ๋๊ณ , ๊ณต์ ํ๋๋ก ์ค๊ณ ->์ฑ๊ธํค ํจํด ์ด๋ค ํด๋์ค๊ฐ ์ธ์คํด์ค๋ฅผ ์ค์ง ํ๋๋ง ์์ฑํ๋๋ก ๋ณด์ฅํ๋ ํจํด์ ๋๋ค. ์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์์ ๊ณต์ ํด์ผ ํ๋ ๋ฆฌ์์ค๋ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ฑฐ๋, ๋ถํ์ํ ์ธ์คํด์ค ์์ฑ์ ๋ฐฉ์งํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ( 100๋ฒ ํธ์ถํ์ ์ 1๋ฒ๋ง ๋ง๋ค๊ณ ๊ณต์ ํ๋ ํํ) ์คํ๋ง ํ๋ ์์ํฌ์์ ์ฑ๊ธํค ํจํด์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น(Bean)์ ์ค์ฝํ(scope) ์ค ํ๋๋ก ์ ๊ณต๋ฉ๋๋ค. ์คํ๋ง์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธํค ์ค์ฝํ๋ฅผ ์ฌ์ฉํ์ฌ ๋น์ ๊ด๋ฆฌํ๋ฉฐ, ํ ๋ฒ ์์ฑ๋ ๋น ์ธ์คํด์ค๋ ์ปจํ ์ด๋ ๋ด์์ ๊ณต์ ๋ฉ๋๋ค. ์ฑ๊ธํค ํจํด์ ์ฌ๋ฌ ๊ณณ์์ ํ๋์ ์ธ์คํด์ค๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ฉฐ, ์ฃผ๋ก ์๋์ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํ๋ฉ๋๋ค: 1. **Private ์์ฑ์**: ํด๋์ค์ ์์ฑ..
๋น์ ์ค์ ๋ฉํ ์ ๋ณด๋ ์คํ๋ง ์ปจํ ์ด๋์๊ฒ ์ด๋ค ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ด๋ป๊ฒ ์กฐ๋ฆฝํด์ผ ํ๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์คํ๋ง์์ ๋น ์ค์ ๋ฉํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ ์ธ ๊ฐ์ง์ ๋๋ค. 1. **XML ์ค์ **: ๊ณผ๊ฑฐ์ ์ฃผ๋ก ์ฌ์ฉ๋๋ ๋ฐฉ์์ผ๋ก, XML ํ์ผ์ ๋น์ ์ ์์ ์์กด์ฑ์ ๋ช ์ํฉ๋๋ค. 2. **Java Config**: Java ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋น ์ค์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ์์ ๋๋ค. ์ฃผ๋ก `@Configuration` ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ฉฐ, `@Bean` ์ด๋ ธํ ์ด์ ์ ์ด์ฉํ์ฌ ๋น์ ์ ์ํฉ๋๋ค. 3. **Annotation ๊ธฐ๋ฐ ์ค์ **: ํด๋์ค๋ ๋ฉ์๋์ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ๋น์ ์ค์ ํ๋ ๋ฐฉ์์ ๋๋ค. ์ฃผ์ ์ด๋ ธํ ์ด์ ์ผ๋ก๋ `@Component`, `@Service`, `@Repositor..
1. Java ๊ธฐ๋ฐ ์ค์ AnnotationConfigApplicationContext 2. Xml ๊ธฐ๋ฐ ์ค์ (Resources์ ๋ฑ๋กํด์ผ ๋จ) ์์ฆ์ xml ๊ธฐ๋ฐ ์ค์ ์ ๊ฑฐ์ ์ฐ์ง ์๋๋ค. GenericXmlApplicationContext ์คํ๋ง์ด ์ด๋ ๊ฒ ๋ค์ํ ์ค์ ํ์์ ์ง์ํ ์ ์๋ ์ด์ ๋ BeanDefinition(๋น ์ค์ ๋ฉํ์ ๋ณด)์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ! ์๋ฐ ์ฝ๋ @Bean ๋ xml ์ค์ ์ด๋ ๋ชจ๋ ๋ค BeanDefinition์ ๋ฑ๋ก ๋๋ค. ๋ฐ๋ผ์, ์คํ๋ง ์ปจํ ์ด๋๋ ์ด๋ค ์ค์ ํ์ผ์ธ์ง ์๊ด ์์ด BeanDefinition์ ๊ธฐ๋ฐํด์ ์คํ๋ง ๋น์ ์์ฑํ๋ค.
๋ ๊ฐ๋ฅผ ๊ตฌ๋ถํ๊ธด ์ข ์ด๋ ต๋ค. ์๋๋ฉด, ๋ณดํต BeanFactory๋ฅผ ๋ฐ๋ก ์ฐ๊ธฐ๋ณด๋จ, BeanFactory๋ฅผ ์์ํ ApplicationContext๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ ๋ค ์คํ๋ง ์ปจํ ์ด๋๋ผ๊ณ ๋ถ๋ฅด๊ธด ํ๋ค. 1. BeanFactory (1) ์คํ๋ง ์ปจํ ์ด๋์ ์ต์์ ์ธํฐํ์ด์ค (2) ์คํ๋ง ๋น์ ๊ด๋ฆฌํ๊ณ ์กฐํํ๋ ์ญํ ์ ๋ด๋น. (3) getBean()์ ์ ๊ณต 2. Application Context (1) BeanFactory ๊ธฐ๋ฅ์ ๋ชจ๋ ์์๋ฐ์์ ์ ๊ณต (2) ๋น ํํ ๋ฆฌ๊ฐ ์ ๊ณต ํ์ง ์๋ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ ๊ณต - MessageSource : ๊ฐ ์ธ์ด๋ฅผ ๋ค์ด์ค๋ ๊ฐ๋๋ก ์ถ๋ ฅ ๊ตญ์ ํ(i18n)์ ์ง์ญํ(l10n)๋ฅผ ์ํด ์ฌ์ฉ๋๋ฉฐ, ์ฌ์ฉ์์ ๋ก์ผ์ผ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ธ์ด๋ก ๋ฉ์์ง๋ฅผ ํ์ํ ์ ์๋๋ก ๋์์ค - En..