์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- jvm ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ
- private subnet ec2 ๋ก์ปฌ ์ ์
- redis ํ ์คํธ์ฝ๋
- ํ๋ก๊ทธ๋๋จธ์ค ์ปฌ๋ฌ๋ง๋ถ
- s3 ์ด๋ฏธ์ง ๋ค์ด๋ก๋
- nGrinder
- ํ๋ก๊ทธ๋๋จธ์ค
- docker ps -a
- ํ๋ก๊ทธ๋๋จธ์ค ํฉ์นํ์์๊ธ
- Entity
- Codedeploy ์ค๋ฅ
- docker compose
- ์ ํจ์ค ๋น๋ ์ค๋ฅ
- ์๋ฐ
- ์คํํ๋ ๋ฏธ์ค
- docker
- s3 log ์ ์ฅ
- ๋ค์ค ์ปจํ ์ด๋
- ํ์ดํผ๋ฐ์ด์
- ์๋ฒ ํฐ์ง๋ ๋์ปค ์ฌ์คํ
- redis ์กฐํ
- aws ์ฟ ํฐ
- aws saa ํฉ๊ฒฉ
- s3 ์ด๋ฏธ์ง ์ ์ฅ
- docker-compose kafka
- ์ ํจ์ค ์ค์ผ์ค๋ฌ
- Kafka
- JPA
- prod docker-compose
- AWS Certified Solutions Architect - Associate
- Today
- Total
๐๐ข๐๐ โ๐๐๐ ๐๐๐ก๐๐ ๐๐๐๐โง
[Spring] DI (์ ์์ฑ์ ์ฃผ์ ์ ์ฌ์ฉํด์ผ ํ๋๊ฐ?) ๋ณธ๋ฌธ
[Spring] DI (์ ์์ฑ์ ์ฃผ์ ์ ์ฌ์ฉํด์ผ ํ๋๊ฐ?)
๐คRyusun๐ค 2022. 12. 27. 15:04DI (Dependency Injection)
- ์์กด์ฑ ์ฃผ์ (์์กด ๊ด๊ณ ์ฃผ์ )
- ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ์ง ์๊ณ ์ธ๋ถ์์ ์์ฑํ ํ ์ฃผ์ ์์ผ ์ค๋ค.
์ฅ์
- ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ฌ์ค๋ค.
- ํ ์คํธ๊ฐ ์ฉ์ดํด์ง๋ค.
- ๊ฐ์ฒด ๊ฐ์ ์์กด๊ด๊ณ๋ฅผ ์์ ๊ฑฐ๋ ์ค์ผ ์ ์๋ค.
- ๊ฒฐํฉ๋(coupling)์ ๋ฎ์ถ๋ฉด์ ์ ์ฐ์ฑ๊ณผ ํ์์ฑ์ ํฅ์ํ ์ ์์ต๋๋ค.
- DI๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ ๊ฐ์ฒด ๋ด๋ถ์์ ๋ค๋ฅธ ๊ฐ์ฒด ์์ฑ ์ ๋ ๊ฐ์ฒด ๊ฐ์ ๊ฐํ ๊ฒฐํฉ๋๊ฐ ์๊น๋๋ค. ๋ฐ๋ผ์ ํ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ๊ฒ ๋๋ฉด ๊ฒฐํฉ๋ ๊ฐ์ฒด๋ ์ํฅ์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
- ํ์ง๋ง DI๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ธ๋ถ์์ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ฃผ์ ๋ฐ์ผ๋ฏ๋ก ์์กด๊ด๊ณ๊ฐ ์ฝํด์ง๊ณ ์ ์ฐํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
- ์ฝ๋ ๊ฐ๋ ์ฑ์ด ๋์์ง๋ค.
์์กด์ฑ ์ฃผ์ ์ 3๊ฐ์ง ๋ฐฉ๋ฒ
1. ์์ฑ์ ์ฃผ์
(Constructor Injection)
2. ํ๋ ์ฃผ์
(Field Injection)
3. ์์ ์ ์ฃผ์
(Setter Injection)
1. ์์ฑ์ ์ฃผ์ (Construction Injection)
ํด๋์ค์ ์์ฑ์๊ฐ ํ๋์ด๊ณ , ๊ทธ ์์ฑ์๋ก ์ฃผ์
๋ฐ์ ๊ฐ์ฒด๊ฐ ๋น์ผ๋ก ๋ฑ๋ก๋์ด ์๋ค๋ฉด @Autowire๋ ์๋ต ๊ฐ๋ฅํฉ๋๋ค.
2. ํ๋ ์ฃผ์ (Field Injection)
ํ๋์ @Autowired ์ด๋
ธํ
์ด์
๋ง ๋ถ์ฌ์ฃผ๋ฉด ์๋์ผ๋ก ์์กด์ฑ ์ฃผ์
๋ฉ๋๋ค.
๋จ์
- ์ฝ๋๊ฐ ๊ฐ๊ฒฐํ์ง๋ง ์ธ๋ถ์์ ๋ณ๊ฒฝํ๊ธฐ ํ๋ค๋ค.
- ํ๋ ์์ํฌ์ ์์กด์ ์ด๊ณ ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ์ข์ง ์๋ค.
3. ์์ ์ ์ฃผ์ (Setter Injection)
Setter๋ฉ์๋์ @Autowired ์ด๋
ธํ
์ด์
์ ๋ถ์ด๋ ๋ฐฉ๋ฒ์
๋๋ค.
๋จ์
- ์์ ์ ์ฃผ์ ์ ์ฌ์ฉํ๋ฉด setter๋ฉ์๋๋ฅผ public์ผ๋ก ์ด์ด๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ธ์ ์ด๋์๋ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํด์ง๋๋ค.
โญ์์ฑ์ ์ฃผ์ ์ ์ฌ์ฉํ์.
- ๋ค์ํ DI ๋ฐฉ๋ฒ ์ค์์ Spring Framework reference๋ ์์ฑ์ ์ฃผ์ ๋ฐฉ๋ฒ์ ๊ถ์ฅํฉ๋๋ค.
Core Technologies
In the preceding scenario, using @Autowired works well and provides the desired modularity, but determining exactly where the autowired bean definitions are declared is still somewhat ambiguous. For example, as a developer looking at ServiceConfig, how do
docs.spring.io
๊ทธ ์ด์ ๋ ๋ฌด์์ผ๊น์?
1. ๊ฐ์ฒด์ ๋ถ๋ณ์ฑ ํ๋ณด
์์ ์ ์ฃผ์
์ด๋ ์ผ๋ฐ ๋ฉ์๋ ์ฃผ์
์ ์ด์ฉํ๋ฉด ๋ถํ์ํ๊ฒ ์์ ์ ๊ฐ๋ฅ์ฑ์ ์ด์ด๋์ด ์ ์ง๋ณด์์ฑ์ ๋จ์ด๋จ๋ฆฝ๋๋ค. ์์ฑ์ ์ฃผ์
์ ๊ฐ์ฒด ์์ฑ ์ ๋ฑ 1๋ฒ ํธ์ถ๋๋ฏ๋ก ์ดํ์ ๋ณ๊ฒฝ๋ ์ผ์ด ์์ต๋๋ค.
์ฆ, ๋ถ๋ณํ๊ฒ ์ค๊ณ ๊ฐ๋ฅํ์ฌ ์์ฑ์ ์ฃผ์
์ ํตํด ๋ณ๊ฒฝ์ ๊ฐ๋ฅ์ฑ์ ๋ฐฐ์ ํ๊ณ ๋ถ๋ณ์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
2. ์ค๋ฅ ๋ฐฉ์ง
ํ ์คํธ๊ฐ ํน์ ํ๋ ์์ํฌ์ ์์กดํ๋ ๊ฒ์ ์นจํฌ์ ์ด๋ฏ๋ก ์ข์ง ๋ชปํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๊ฐ๋ฅํ ์์ ์๋ฐ๋ก ํ ์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์๋ฐ, ์์ฑ์ ์ฃผ์ ์ด ์๋ ๋ค๋ฅธ ์ฃผ์ ์ผ๋ก ์์ฑ๋ ์ฝ๋๋ ์์ํ ์๋ฐ ์ฝ๋๋ก ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ด๋ ต์ต๋๋ค.
3. final ํค์๋ ์์ฑ ๋ฐ Lombok๊ณผ์ ๊ฒฐํฉ
์์ฑ์ ์ฃผ์ ์ ์ฌ์ฉํ๋ฉด ํ๋ ๊ฐ์ฒด์ final ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ปดํ์ผ ์์ ์ ๋๋ฝ๋ ์์กด์ฑ์ ํ์ธํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด์ ๋ค๋ฅธ ์ฃผ์ ๋ฐฉ๋ฒ๋ค์ ๊ฐ์ฒด์ ์์ฑ(์์ฑ์ ํธ์ถ) ์ดํ์ ํธ์ถ๋๋ฏ๋ก final ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ํ final ํค์๋๋ฅผ ๋ถ์ด๋ฉด Lombok๊ณผ ๊ฒฐํฉ๋์ด ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ ์ ์์ต๋๋ค. ์๋ ์์์ ๊ฐ์ด @AllArgsConstructor๋ฅผ ์ฌ์ฉํ๋ฉด ์์ฑ์ ์ฃผ์ ์ฝ๋๋ฅผ ์๋ตํ ์ ์์ต๋๋ค.
4. ์ํ ์ฐธ์กฐ ์๋ฌ ๋ฐฉ์ง
์์ฑ์ ์ฃผ์ ์ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ๋ ์์ (๊ฐ์ฒด์ ์์ฑ ์์ )์ ์ํ ์ฐธ์กฐ ์๋ฌ๋ฅผ ์๋ฐฉํ ์ ์์ต๋๋ค. @Autowired๋ฅผ ์ด์ฉํ ํ๋ ์ฃผ์ ์์ ์ด๋ฌํ ๋ฌธ์ ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ๋ ์์ ์ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋ ์ด์ ๋ ๋น์ ์์ฑ๊ณผ ์กฐ๋ฆฝ(@Autowired) ์์ ์ด ๋ถ๋ฆฌ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.@Autowired๋ ๋ชจ๋ ๊ฐ์ฒด์ ์์ฑ์ด ์๋ฃ๋ ํ์ ์กฐ๋ฆฝ(์์กด๊ด๊ณ ์ฃผ์ )์ด ์ฒ๋ฆฌ๋ฉ๋๋ค.
[์ฐธ์กฐ]
https://dev-coco.tistory.com/70
https://velog.io/@znftm97/Spring-DIDependency-Injection-%EC% A0%95% EB% A6% AC
'๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ด๐ป > ๐๐ฉ๐ซ๐ข๐ง๐ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] Jpa๋ฅผ ์ด์ฉํ ์กฐํ์ ์ฆ๊ฐ ๊ธฐ๋ฅ ๊ตฌํ (0) | 2023.01.27 |
---|---|
[Spring] Entity,์์์ฑ ์ปจํ ์คํธ (1) | 2022.12.31 |
[Spring] JPA, ORM (0) | 2022.12.20 |
[Spring] TestCode, TDD, JUnit, assertJ (0) | 2022.12.19 |
[Spring] AOP (2) | 2022.12.11 |