JAN's History
์คํ๋ง๊ณผ JPA๋ฅผ ์ด์ฉํ ์น๊ฐ๋ฐ_์์กด์ฑ ์ฃผ์ ๋ณธ๋ฌธ
๐ค์์กด์ฑ ์ฃผ์ ์์ ๋ฅผ ํตํด ์์กด์ฑ ์ฃผ์ ์ ๋ํด ์์๋ณด์!
์ด๋ฐ์์ผ๋ก MemberPrint๋ฅผ ๊ตฌํํ ๊ฐ์ฒด๊ฐ KoreanMemberPrint, EnglishMemberPrint ๋๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
๊ทธ๋ฆฌ๊ณ PrintInfo๋ผ๋ class์์ ์ฒ์์ KoreanMemberPrint๋ฅผ ์ฌ์ฉํ๋ค๊ฐ EnglishMemberPrint ๋ก ๋ฐ๊พธ๊ณ ์ถ์ ์ํฉ์ด๋ค!
โก๏ธ๊ทธ๋ฌ๋ ์ด๋ด ๋ ์์ค์ฝ๋๋ฅผ ๋ ์์ ํด์ค์ผํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๊ณ , ์ด๋ ์ฝ๋๋ฅผ ์ ์ง๋ณด์ํ๋ ๋ฐ์ ์ ํฉํ์ง ์๋ค.
์ด๋ฐ์์ผ๋ก ๋ถํ์ ๊ฐ์๋ผ์ด๋ค๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค~
โก๏ธ๊ทธ๋์ ๋์ํ๋ ํด๋์ค์ ๋ณ๊ฐ๋ก ๊ฐ์ฒด๋ค์ ์์กด์ฑ์ ์ค์ ํ๋ ์ธ๋ถ ํด๋์ค๊ฐ ํ์ํ๋ค!
๊ทธ๋์ ๋ฑ์ฅํ "์์กด๊ด๊ณ ์ฃผ์ (IoC ์ ์ด์ ์ญ์ )"
- ์์กด๊ด๊ณ ์ฃผ์
๋ฐฉ๋ฒ(Autowired์ ์์น์ ๋ฐ๋ฅธ ์ฃผ์
๋ฐฉ๋ฒ ๊ตฌ๋ถ)
- ์์ฑ์ ์ฃผ์ (๊ฐ์ฅ ์ถ์ฒ๋๋ ๋ฐฉ๋ฒ)
- ์์ ์ ์ฃผ์
- ํ๋ ์ฃผ์
โIoC ์ ์ด์ ์ญ์ ์ด๋ผ๊ณ ๋ถ๋ฅด๋ ์ด์ ๋ ๊ฐ์ฒด์ ์์ฑ ๋ฐ ๊ด๋ฆฌ ์ฑ ์์ ๊ฐ๋ฐ์์์ ํ๋ ์์ํฌ์ ์์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค!
๐ค์์กด๊ด๊ณ ์ฃผ์ ๋ฐฉ๋ฒ(์์ฑ์ ์ฃผ์ )์ ์ด๋ป๊ฒ ํ๋๊ฑธ๊น?
@Autowired๋ฅผ ์ฌ์ฉํ๋ฉด ์คํ๋ง ํ๋ ์์ํฌ๊ฐ ์๋์ผ๋ก ์์ฑ์์ฃผ์ ์ ํด์ค๋๋ค!
์ฆ, @Autowired๋ฅผ ์์ ๋ถ์ด๋ฉด ๊ทธ ํด๋์ค๋ ์ด์ ()์์ ํ๋ผ๋ฏธํฐ ๊ฐ์ ์ฃผ์ ๋ฐ๊ฒ ๋ค๋ ๋ช ์ํ๋ ๊ฒ!
๊ทธ๋ฌ๋ฉด, ์ดํ์ ์์์ฒ๋ผ ์ง์ ์ ์ผ๋ก ์ฃผ์ ํด์ฃผ์ง ์์๋ ์๋์ผ๋ก ์ฃผ์ ์ด ๋ฉ๋๋ค.
- ์์ฑ์ฌ์ ํ๋์ผ ๊ฒฝ์ฐ Autowired๊ฐ ์๋ต๊ฐ๋ฅํ์ง๋ง,
- ๊ธฐ๋ณธ ์์ฑ์์ฒ๋ผ ์์ฑ์๊ฐ 2๊ฐ ์ด์์ธ ๊ฒฝ์ฐ์๋ ์๋ต์ด ๋ถ๊ฐํ๋ค!
์์กด๊ด๊ณ ์ฃผ์ ๋ฐฉ๋ฒ(์์ ์(setter) ์ฃผ์ )
setter๋ฅผ ์ด์ฉํ์ฌ ์์กด๊ด๊ณ ์ฃผ์
- ์ ํ, ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ด ์๋ ์์กด๊ด๊ณ์ ์ฌ์ฉํฉ๋๋ค.
โ๊ทธ๋ฌ๋ ๊ฐ๋ฐ์์ set์ฒ๋ผ ์์ ํ๋ ๋ฉ์๋๋ ์ ์ง๋ณด์ค ์ธก๋ฉด์์ ์ข์ง์๊ธฐ๋๋ฌธ์ ์ง์ํ๋ค.
์์กด๊ด๊ณ ์ฃผ์ ๋ฐฉ๋ฒ: ํ๋(field) ์ฃผ์
ํ๋์ @Autowired ์ด๋ ธํ ์ด์ ์ ํ๊ธฐ
- ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ผ๋ก ํ ์คํธ ์ ๊ฐํธํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ
์ด ์ ์ค์ ์์ฑ์ ์ฃผ์ ์ ์จ๋ผ!
- final ํค์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋คsetter๋ฅผ public์ผ๋ก ์ง์ ํ ํ์ ์์
- ํ ์คํธ์ฝ๋ ์์ฑ์ด ํธ๋ฆฌํ๋ค
- ์์ฑ์ ์ฃผ์
์ ์ฌ์ฉํ ๋ ๋ง์ ์์กด์ฑ ์ฐธ์กฐ๊ฐ ๋ฐ์ํ๋ค๋ฉด ํด๋์ค ์ค๊ณ๊ฐ ์๋ชป๋์๋ค๋ signal๋ก ํด์๋ ์ ์๋ค.
- (ํ๋์ ๊ฐ์ฒด๋ ํ๋์ ์ฑ ์์ ๊ฐ์ ธ์ผ ํจ)
- ์ํ ์ฐธ์กฐ๋ฅผ ๋ฐฉ์งํด์ค๋ค
- ํ๋/์์ ์ ์ฃผ์ ์ Runtime์์, ์์ฑ์ ์ฃผ์ ์ ์ปดํ์ผ ์์ ์ค๋ฅ๊ฐ ๋ฐ๊ฒฌ!
์ํ์ฐธ์กฐ๋? โก๏ธA ๊ฐ์ฒด๋ฅผ B, C ๋ชจ๋๊ฐ ์ฐธ์กฐํ๋ ๊ด๊ณ
- ์ด๋ ์ ์ง๋ณด์ค ์ธก๋ฉด์์ ์์ฃผ ์ข์ง ์์
์์กด ๊ด๊ณ๋ฅผ ์ค์ ํ๋ ์๊ธฐ๋ ์ธ์ ์ธ๊ฐ์?
์์ ์ ์ฃผ์ , ํ๋ ์ฃผ์
- ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ์ดํ์ ์์กด ๊ด๊ณ ์ค์
- โก๏ธ๊ทธ๋์ Runtime ์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ!
์์ฑ์ ์ฃผ์
- ์์ ์ ์์ฑ๊ณผ ์ฐ๊ด๊ด๊ณ ์ค์ ์ด ๋์์ ๋ฐ์๋๋ค.
- A๋ B๊ฐ ํ์ํ๊ณ B๋ A๊ฐ ํ์
- A๋ฅผ ๋ง๋ค๊ธฐ ์ํด B๋ฅผ ์์ฑํ๋ฌ ๊ฐ→B๋ฅผ ์์ฑํ๋ฌ ๊ฐ๋ A๊ฐ ํ์ํ์ฌ A๋ฅผ ์์ฑํ๋ฌ ๊ฐ → …
- ๋ญ์ด ๋จผ์ ๋ ๋ฌ๊ฑ์ด ๋จผ์ ๋ ์ฒ๋ผ..
- โก๏ธ๊ทธ๋์ ์ปดํ์ผ ์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค!
์์กด๊ด๊ณ ์ฃผ์ ์ ํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ!
- @Lazy autowiring์ ์ฌ์ฉํ๋ฉด ๋๋ค.
์์กด๊ด๊ณ ์ฃผ์ ์ ์ํด ์ฌ์ฉํ๋ ์ด๋ ธํ ์ด์
@Autowired
- ์ด๋ฆ์ ํตํด ๋น์ ๊ฒ์
- Spring์๋ง ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ํ ํ๋ ์์ํฌ์์ ์ฌ์ฉ ๋ถ๊ฐ
- @Autowired๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํน์ ๋น์ ์ฐพ์ง ๋ชปํ๋ฉด ์์ธ๋ฅผ ๋์ง(๋จ, required ์์ฑ์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ)
@Resource
- ์๋ฐ ์ง์์์ @Autowired๋ฅผ ์ฐธ๊ณ ํด ๋ง๋ ์ด๋ ธํ ์ด์
- ์ด๋ฆ์ ํตํ ๊ฒ์ ๋ฐฉ์ → POJO๊ฐ ์ฌ๋ฟ์ผ ๋ ๋์์ด ๋ชจํธํ์ง ์๊ณ , ๋ช ํ
- @Autowired + @Qualifier
@Inject
- ์๋ฐ ์ง์์์ @Autowired๋ฅผ ์ฐธ๊ณ ํด ๋ง๋ ์ด๋ ธํ ์ด์
- ํ์ ์ ํตํ ๊ฒ์๋ฐฉ์
- ํ์
์ด ๊ฐ์ POJO๊ฐ ์ฌ๋ฟ์ผ ๋ ์ปค์คํ
์ด๋
ธํ
์ด์
(custom annotation)์ ์์ฑ
- ํ์ ์ด ๊ฐ์ POJO๋ ? ์์๋ก ํ๋์ MemberPrint์ koreanPrint, englishPrint๊ฐ ์๋ ๊ฒ
โก๏ธ๊ทธ๋ฌ๋ ์คํ๋ง์ ์ฌ์ฉํ๋ฉด ๊ทธ๋ฅ @Autowired๋ง ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค
์์ฑ์๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ : Lombok ์ด์ฉ
@RequiredArgsConstructor
- ์ด๊ธฐํ ๋์ง ์์ final ํ๋์ @NonNull ์ด๋ ธํ ์ด์ ์ด ๋ถ์ ํ๋(๋ฐ๋์ ๊ฐ์ด ์ฑ์์ ธ ์์ด์ผํ๋ ๋ถ๋ถ)์ ๋ํ ์์ฑ์๋ฅผ ์์ฑํด์ค๋๋ค.
@Autowired
public PrintInfo(MemberPrint memberPrint) {
this.memberPrint= memberPrint;
}
์์ ๊ฐ์ ์์ฑ์๋ฅผ ๊ฐ๋ฐ์๊ฐ ์์ฑํ์ง ์์๋ @RequiredArgsConstructor๋ฅผ ๋ถ์ด๋ฉด ์์์ ์์ฑํด์ค๋๋ค.
์ปดํฌ๋ํธ ์ค์บ
โช ์คํ๋ง ์ปจํ ์ด๋์์ ๊ด๋ฆฌ๋ ๋น๋ค์ ์ฐพ์
โช ํด๋์ค๋ฅผ ๋น์ผ๋ก ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ ๋ค์ํ์ง๋ง ์ต๊ทผ์๋ ์ด๋ ธํ ์ด์ ์ผ๋ก ๋น์ผ๋ก ๊ด๋ฆฌ๋ ํด๋์ค๋ฅผ ์ง์
โช @ComponentScan ์ด๋ ธํ ์ด์ ์ ์คํ๋ง์๊ฒ ์คํ๋ง ์ปดํฌ๋ํธ๋ฅผ ์ฐพ์์ผ ํ ์์น๋ฅผ ๋ช ์์ ์ผ๋ก ์๋ ค์ค
โช @ComponentScan์ @Configuration๊ณผ ํจ๊ป ์ฌ์ฉ๋จ
@Component๋ฅผ ๋ถ์๋๋ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก๋์ด์ ์๋ ์ชฝ, ์คํ๋ง ์ปจํ ์ด๋์ ๋ฑ๋ก๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
โDB ํ ์ด๋ธ์ ์์ฑํ ๋ @Entity๋ฅผ ๋ฑ๋กํด์ผํ๋ ๊ฒ ์ฒ๋ผ, ์คํ๋ง ์ปจํ ์ด๋์ ๋น์ ๋ฑ๋กํ๋ ํ์๊ฐ ๋น์ท!
SpringBoot์์์ Component Scan
@SpringBootApplication
- @Configuration
- @EnableAutoConfiguration
- @ComponentScan
@SpringBootApplication์ด ๋ถ์ ํด๋์ค์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ ํด๋์ค ์ค์บ ๋์์ด ๋๋ค.
๋ฐ๋ผ์, @SpringBootApplication์ด ๋ถ์ ํด๋์ค๋ฅผ ์๋จ์ ๋๋ ๊ฒ์ด ํ์ํ๋ค!
โก๏ธ์ฆ, ์คํ๋ง์์ @SpringBootApplication์ ๋ถ์ด๋ฉด ์์์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ฌ์ค ๊น์ด ์ ํ์๊น์ง ์๋ค! ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ๋ง ์ดํดํ๊ณ ๋์ด๊ฐ์~
'์คํ๋ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ๋ง๊ณผ JPA๋ฅผ ์ด์ฉํ ์น๊ฐ๋ฐ_AOP (0) | 2024.04.02 |
---|---|
์คํ๋ง๊ณผ JPA๋ฅผ ์ด์ฉํ ์น๊ฐ๋ฐ_์คํ๋งMVC (0) | 2024.04.02 |
์คํ๋ง๊ณผ JPA๋ฅผ ์ด์ฉํ ์น๊ฐ๋ฐ_์คํ๋ง ์๊ฐ (0) | 2024.03.31 |
์คํ๋ง๊ณผ JPA๋ฅผ ์ด์ฉํ ์น๊ฐ๋ฐ_์ฑ๋ฅํ๋ (0) | 2024.03.30 |
์คํ๋ง๊ณผ JPA๋ฅผ ์ด์ฉํ ์น๊ฐ๋ฐ_Querydsl (0) | 2024.03.30 |