
**“์๋ธ๋ชจ๋(Submodule)”**์ Git์์ ์ฌ์ฉํ๋ ๊ฐ๋
์ผ๋ก, ํ Git ์ ์ฅ์ ์์ ๋ค๋ฅธ Git ์ ์ฅ์๋ฅผ ํฌํจ์ํค๋ ๋ฐฉ๋ฒ์ด์์.
์กฐ๊ธ ์ฝ๊ฒ ์ค๋ช
ํ์๋ฉด, ํ๋ก์ ํธ ์์ ๋ ๋ค๋ฅธ ๋
๋ฆฝ์ ์ธ ํ๋ก์ ํธ๋ฅผ ๋ผ์ ๋ฃ๋ ๊ฒ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
๐ ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋ฆฌ
| ๋ฉ์ธ ์ ์ฅ์(Main Repository) | ์ฌ๋ฌ๋ถ์ด ์์ ํ๋ ์ฃผ๋ ํ๋ก์ ํธ ์ ์ฅ์ |
| ์๋ธ๋ชจ๋(Submodule) | ๋ฉ์ธ ์ ์ฅ์ ์์ ํฌํจ๋ ๋ณ๋์ Git ์ ์ฅ์ (๋ ๋ฆฝ์ ์ผ๋ก ๋ฒ์ ๊ด๋ฆฌ๋จ) |
๐ก ์์๋ก ์ดํดํ๊ธฐ
์๋ฅผ ๋ค์ด, ์ฌ๋ฌ๋ถ์ด ์น์ฌ์ดํธ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ ์๋ค๊ณ ํด๋ณผ๊ฒ์.
์ด ํ๋ก์ ํธ๋ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค:
์ฌ๊ธฐ์ shared-library๋ ๋ค๋ฅธ ํ์ด ๊ด๋ฆฌํ๋ ๋ณ๋์ Git ์ ์ฅ์์ผ ์ ์์ด์.
๊ทธ๋ฐ๋ฐ ์ฌ๋ฌ๋ถ ํ๋ก์ ํธ์์๋ ๊ทธ ์ฝ๋๋ฅผ ๊ทธ๋๋ก ์ฐ๊ณ ์ถ๋ค๋ฉด?
๐ ๊ทธ๋ด ๋ git submodule add ๋ช
๋ น์ ์ด์ฉํด ์๋ธ๋ชจ๋๋ก ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
โ๏ธ ์ฃผ์ ๋ช ๋ น์ด
| git submodule add [์ ์ฅ์ ์ฃผ์] [๊ฒฝ๋ก] | ์๋ธ๋ชจ๋ ์ถ๊ฐ |
| git submodule update --init --recursive | ์๋ธ๋ชจ๋ ์ด๊ธฐํ ๋ฐ ์ ๋ฐ์ดํธ |
| git submodule update --remote | ์๊ฒฉ ์ ์ฅ์์ ์ต์ ์ปค๋ฐ์ผ๋ก ์ ๋ฐ์ดํธ |
| git submodule status | ์๋ธ๋ชจ๋ ์ํ ํ์ธ |
โ ๏ธ ์ฃผ์ํ ์
- ์๋ธ๋ชจ๋์ ๋ณ๋์ Git ์ ์ฅ์๋ผ์, ์ปค๋ฐ์ ํ ๋ ์๋ธ๋ชจ๋ ๋ด๋ถ์ ๋ณ๊ฒฝ์ฌํญ์ ์๋์ผ๋ก ๋ฐ์๋์ง ์์ต๋๋ค.
→ ์ฆ, ์๋ธ๋ชจ๋ ์์์ ์ง์ ์ปค๋ฐํด์ผ ํฉ๋๋ค. - ํ์ ์์๋ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ git submodule update --init์ ํด์ค์ผ ์ ์์ ์ผ๋ก ์ฝ๋๊ฐ ๋ฐ์์ง๋๋ค.
โ ์์ฝ
์๋ธ๋ชจ๋ = ํ๋ก์ ํธ ์์ ๋ ๋ค๋ฅธ Git ํ๋ก์ ํธ.
๊ณตํต ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ณ๋ ๊ด๋ฆฌ๊ฐ ํ์ํ ๋ถ๋ถ์ ๊น๋ํ๊ฒ ๋ถ๋ฆฌํ ๋ ์ ์ฉํฉ๋๋ค.
Spring AOP์ ๋ํด ์์๋ณผ๊ฒ์.
AOP๋ ์คํ๋ง์ ํต์ฌ ๊ธฐ๋ฅ ์ค ํ๋๋ก, ๊ณตํต ๊ธฐ๋ฅ(๋ก๊น
, ํธ๋์ญ์
, ๋ณด์ ๋ฑ)์ ๋ชจ๋ํํด ์ฝ๋ ์ค๋ณต์ ์ค์ด๋ ๊ธฐ์ ์ด์์.
๐ฑ AOP๋?
AOP (Aspect Oriented Programming) — “๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ”์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
์ฝ๊ฒ ๋งํ๋ฉด, **ํต์ฌ ๋ก์ง(Core Business Logic)**๊ณผ **๊ณตํต ๊ด์ฌ์ฌ(Cross-Cutting Concern)**๋ฅผ ๋ถ๋ฆฌํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ด์์.
๐ AOP์ ๊ฐ๋ ๊ตฌ์กฐ
| Aspect (๊ด์ ) | ๊ณตํต ๊ธฐ๋ฅ์ ์ ์ํ ๋ชจ๋ (์: ๋ก๊น , ํธ๋์ญ์ , ๊ถํ ์ฒดํฌ ๋ฑ) |
| Join Point (์กฐ์ธ ํฌ์ธํธ) | AOP๊ฐ ์ ์ฉ๋ ์ ์๋ ์ง์ (์: ๋ฉ์๋ ์คํ ์์ ๋ฑ) |
| Pointcut (ํฌ์ธํธ์ปท) | ์ค์ ๋ก AOP๋ฅผ ์ ์ฉํ ์ง์ ์ ์ง์ ํ๋ ํํ์ |
| Advice (์ด๋๋ฐ์ด์ค) | ์คํ ์์ ๋ณ๋ก ๋์ํ ์ฝ๋ (Before, After, Around ๋ฑ) |
| Weaving (์๋น) | Aspect๋ฅผ ์ค์ ์ฝ๋์ ์ ์ฉํ๋ ๊ณผ์ |
๐ก ์์๋ก ์ดํดํ๊ธฐ
์๋ฅผ ๋ค์ด, ์๋น์ค ๋ก์ง๋ง๋ค ๋ก๊น ์ฝ๋๋ฅผ ๋ฃ๋๋ค๊ณ ์๊ฐํด๋ณด์ธ์ ๐
์ด๋ฐ ์ฝ๋๊ฐ ์ฌ๋ฌ ๊ณณ์ ๋ฐ๋ณต๋๋ค๋ฉด ์ ์ง๋ณด์๊ฐ ์ด๋ ต๊ฒ ์ฃ ?
์ด๊ฑธ AOP๋ก ๋ฐ๊พธ๋ฉด ๋ก๊น ๊ธฐ๋ฅ์ ๋ฐ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค:
๐ ์ด์ ๋ชจ๋ com.example.service ํจํค์ง์ ๋ฉ์๋ ์คํ ์ ํ๋ก ์๋์ผ๋ก ๋ก๊ทธ๊ฐ ์ฐํ๋๋ค.
๐งฉ ์คํ๋ง์์ AOP ์ฌ์ฉํ๋ ์ด์
| ์ค๋ณต ์ ๊ฑฐ | ๋ก๊น , ํธ๋์ญ์ , ์์ธ ์ฒ๋ฆฌ ๋ฑ์ ์ค๋ณต ์ฝ๋ ์ ๊ฑฐ |
| ์ ์ง๋ณด์ ์ฉ์ด | ๊ณตํต ๊ธฐ๋ฅ ๋ณ๊ฒฝ ์ ํ ๊ณณ๋ง ์์ |
| ๊ด์ฌ์ฌ ๋ถ๋ฆฌ | ํต์ฌ ๋ก์ง๊ณผ ๋ณด์กฐ ๋ก์ง์ ๊น๋ํ๊ฒ ๋ถ๋ฆฌ |
โ๏ธ ์ด๋๋ฐ์ด์ค(Advice) ์ข ๋ฅ
| @Before | ๋ฉ์๋ ์คํ ์ | ์ ๊ทผ ๋ก๊ทธ ๊ธฐ๋ก |
| @AfterReturning | ์ ์ ์ข ๋ฃ ํ | ๊ฒฐ๊ณผ ๋ก๊ทธ ์ถ๋ ฅ |
| @AfterThrowing | ์์ธ ๋ฐ์ ์ | ์๋ฌ ๋ก๊ทธ ์ ์ฅ |
| @After | ์คํ ํ(์ฑ๊ณต/์คํจ ์๊ด์์ด) | ์ ๋ฆฌ ์์ |
| @Around | ์คํ ์ ํ ์ ์ฒด ์ ์ด | ์คํ ์๊ฐ ์ธก์ |
โ ์์ฝ
Spring AOP
๋ “๊ณตํต ๊ด์ฌ์ฌ ๋ถ๋ฆฌ”๋ฅผ ํตํด
์ฝ๋ ์ค๋ณต์ ์ค์ด๊ณ , ์ ์ง๋ณด์๋ฅผ ์ฝ๊ฒ ๋ง๋๋ ๊ธฐ์ ์ ๋๋ค.์ฃผ๋ก ๋ก๊น , ํธ๋์ญ์ , ๋ณด์, ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๋ฑ์ ํ์ฉ๋ฉ๋๋ค.
๐ณ 1. ์ฉ์ด ์ ๋ฆฌ: ์ข ๋จ vs ํก๋จ
| ์ข ๋จ ๊ด์ฌ์ฌ (End Concern / Core Concern) | ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๊ธฐ๋ฅ, ์ฆ “๋ฌด์์ ํ๋๊ฐ”์ ์ง์คํ๋ ๋ก์ง | ์ฃผ๋ฌธ ์ฒ๋ฆฌ, ํ์ ๊ฐ์ , ๊ฒฐ์ ์ฒ๋ฆฌ ๋ฑ |
| ํก๋จ ๊ด์ฌ์ฌ (Cross-Cutting Concern) | ์ฌ๋ฌ ๊ณ์ธต์ด๋ ๊ธฐ๋ฅ์ ๊ณตํต์ ์ผ๋ก ์ ์ฉ๋๋ ๋ถ๊ฐ ๊ธฐ๋ฅ | ๋ก๊น , ๋ณด์, ํธ๋์ญ์ , ์์ธ ์ฒ๋ฆฌ, ์ฑ๋ฅ ์ธก์ ๋ฑ |
์ฆ,
- ์ข ๋จ์ “๋น์ฆ๋์ค ๋ก์ง์ ๋ณธ์ง์ ์ธ ๊ธฐ๋ฅ”
- ํก๋จ์ “๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ(์ฌ๋ฌ ๊ณณ์ ๊ณตํต์ผ๋ก ํ์ํ ๋ถ๋ถ)”
์ด๋ผ๊ณ ์ดํดํ๋ฉด ๋ฉ๋๋ค.
โ๏ธ 2. ์คํ๋ง ๊ณ์ธต๋ณ ๋ถ๋ฅ
| Controller | ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๊ณ ์๋ต์ ๋ฐํ | โ ์ข ๋จ ๊ด์ฌ์ฌ | ์ฑ์ ๊ธฐ๋ฅ ํ๋ฆ(์ ์ถ๋ ฅ)์ ์ง์ ๋ด๋น |
| Service | ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌ | โ ์ข ๋จ ๊ด์ฌ์ฌ | ํต์ฌ ๋ก์ง์ ์ค์ฌ |
| Repository | ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ ๋ฐ ๊ด๋ฆฌ | โ ์ข ๋จ ๊ด์ฌ์ฌ | ๋น์ฆ๋์ค ์ํ์ ์ํ ํ์ ๋ก์ง |
| Entity | ๋๋ฉ์ธ ๋ฐ์ดํฐ(๋น์ฆ๋์ค ๋ชจ๋ธ) ํํ | โ ์ข ๋จ ๊ด์ฌ์ฌ | ๋น์ฆ๋์ค ๋ฐ์ดํฐ์ ํต์ฌ ๊ตฌ์กฐ |
๋ฐ๋ผ์,
๐ **Controller ~ Entity ๊ณ์ธต์ “์ข
๋จ ๊ด์ฌ์ฌ”**์ ์ํฉ๋๋ค.
์ด๋ค์ ์ ํ๋ฆฌ์ผ์ด์
์ด “๋ฌด์์ ํ๋๊ฐ”๋ฅผ ์ ์ํ๋ ์ฃผ์ถ์ด์์.
๐งฉ 3. ๊ทธ๋ผ AOP๋ ์ด๋์ ์ฐ๋๊ฐ?
AOP๋ ํก๋จ ๊ด์ฌ์ฌ๋ฅผ ๋ชจ๋ํํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ด์ฃ :
- ๋ฉ์๋ ์คํ ๋ก๊ทธ ๋จ๊ธฐ๊ธฐ (@Before, @After)
- ์ฑ๋ฅ ์ธก์ (@Around)
- ํธ๋์ญ์ ์ฒ๋ฆฌ (@Transactional)
- ๋ณด์ ์ฒดํฌ (@PreAuthorize)
์ด๋ฐ ๊ธฐ๋ฅ๋ค์ Controller, Service, Repository ๋ชจ๋์ ์ ์ฉ๋ ์ ์์ง๋ง,
๋น์ฆ๋์ค ๋ก์ง๊ณผ๋ ์ง์ ์ ์ธ ๊ด๋ จ์ด ์๊ธฐ ๋๋ฌธ์ **“ํก๋จ ๊ด์ฌ์ฌ”**๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
โ ๊ฒฐ๋ก
Controller, Service, Repository, Entity = ์ข ๋จ ๊ด์ฌ์ฌ
(์ฆ, ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ํ๋ฆ๊ณผ ๋ก์ง์ ๋ด๋น)AOP๋ก ์ฒ๋ฆฌ๋๋ ๋ก๊น , ๋ณด์, ํธ๋์ญ์ ๋ฑ = ํก๋จ ๊ด์ฌ์ฌ
(์ฆ, ์ฌ๋ฌ ๊ณ์ธต์ ๊ณตํต์ ์ผ๋ก ์ ์ฉ๋๋ ๋ถ๊ฐ ๊ธฐ๋ฅ)
'Project ESG+AI > Tech Basics' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 27์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (1) | 2025.11.14 |
|---|---|
| 26์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (1) | 2025.11.13 |
| 24์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.11.11 |
| 23์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.11.10 |
| 22์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.11.07 |