Gallery
Search
EC2ํธ ์ฐธ๊ณ ์๋ฃ
EC2 Console์์ MySQL ์ด๊ธฐ ์ค์ ์ฐธ๊ณ
RDS ์ฐ๊ฒฐํ๊ธฐ ํฌํจํธ ์ฐธ๊ณ
EC2์ github pull๋, TEST ๊ฐ ์ถฉ๋์ด ๋๋ค ์ ๊ฑฐํ์, application.properties๋ฅผ ์ง์ ์ฐพ์๊ฐ์ ์์ฑํด์ค์ผํจ
TESTํ์ผ์ ๋น๋ํ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋๋ณด๋ค. ์ญ์ ํ๊ฒ์ ๋ค์ pull๋ฐ๊ณ ๋๋ฆฌ๋ ๋น๋๊ฐ ๋๋ค.
ํ์ง๋ง ๋ฐํ์๋จ๊ณ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋๋ฐ,
application.properties ํ์ผ ์์ฒด๊ฐ github์์ ์ ์ธ๋์๊ธฐ ๋๋ฌธ,
๋ณด์๋์ github์ ์์ฌ๋ฆฌ๋๋ฐ,
EC2 ์๋ฒ์ปด์์ pull๋ฐ์ผ๋ฉด ์ด๊ฒ์์ฒด๊ฐ ์์ผ๋ ๋น๋ํ๋ฉด JDBC์ ๋ณด ๋ฑ๋ฑ์ ๋ชป์ฐพ์๊ฑฐ๋ค.
.gitignore๋ก ์ ์ธํ๊ฒ์ด ์๋ค๋ฉด, bootjar ๋น๋์ ํ์ํ๊ฒ์ ์ง์ ์ฐพ์๊ฐ์ ์์ฑํด์ค์ผํ๋ค.

์ฐ๋ถํฌ ๋ฐฉํ๋ฒฝ ufw ์ค์ ๋ฐ ํ์ฉ, EC2 ๋ฐฐํฌ์ 8080์ ํน์๋ ๋ง์๋์ง ํ์ธํ ๊ฒ
ufw ํ์ฑํํ๊ธฐ
[Spring][HCD 12์ผ์ฐจ]69 ํํ๋ก์ ํธ ๋ฐฐํฌ์ ์ธ์ฆ์ ์ ์ฉ(์ฌ์ค์ตํ์!) [์์ฑ์ค!!
]
์ฐ์ SSL๊น์ง ๊ณ ์ณ์ง๋ฉด ๋น ๋ฅด๊ฒ ์ด๋ถ๋ถํด๋ณด์!
Github Action์ ํตํด PR๋๋ Push๋ฑ์ ํตํด ์ด๋ ํ ์ก์
์ ๋ฐ๋ผ ๋ฐฐํฌ๋น๋๋ฅผ ์๋ํ ์ํค๋๊ฒ์ผ๋ก ๋ณด์ฌ์ง๋ค.
ํ์ฌ ๋ฌธ์ ๋ ์์ ์ฌํญ์ด ์๊ธฐ๋ฉด ๋ด๊ฐ ์ง์ Filezilla๋ฅผ ํตํด EC2 ์ธ์คํด์ค์ jarํ์ผ์ ์
๋ก๋ํ๊ณ , ๊ทธ๊ฑธ ์คํ์ํค๋๋ฐ
์ด ํ๋ ํ๋ ํ๋๋ฅผ github action์ ํตํด ์๋ํ ์ํค๋ ๊ฒ์ด ๋ชฉํ์ธ ๊ฒ์ผ๋ก ๋ณด์ฌ์ง๋ค. ๊ณ ์น๊ณ ์ด๋ค ๋ถ๋ถ๋ค์ด, ์ด๋ค ์ค์ ๋ค์ด ์ด ํ๋๋ค์ ์๋ํ์ํค๋์ง ํ์ธํด์ผ ํ๋ค. ์ ์ ์์ฑ์ค!!
[Spring][HCD ์ถ๊ฐ 3์ผ์ฐจ]72 CI/CD ํ์ดํ๋ผ์ธ? [์์ฑ์ค!!
]
๋จ์ ํ
์คํธ ํด๋ณด๊ธฐ
Repository ๋จ์ ํ
์คํธ ํด๋ณด๊ธฐ
Service ๋จ์ ํ
์คํธ ํด๋ณด๊ธฐ
Controller ๋จ์ ํ
์คํธ ํด๋ณด๊ธฐ
ํตํฉ ํ
์คํธ ํด๋ณด๊ธฐ
[Spring][HCD 10์ผ์ฐจ]67 ํ
์คํธ์ฝ๋ ์์ฑํด๋ณด๊ธฐ [์์ฑ์ค!!
]
ํ
์คํธ์ฝ๋ ๋ถ์กฑํ ๋ถ๋ถ ์๊ฐ
๊ฒ์ ๊ธฐ๋ฅ ํ
์คํธ ์ฝ๋ ๊ตฌํ ์ค
@ExtendWith(MockitoExtension.class)๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์
MockitoAnnotations.initMocks(this)๋ฅผ + @BeforeEach ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
๊ฐ๋จํ๊ฒ ๊ฒ์์ ์ฑ๊ณต๊ณผ ์คํจ์ ๋ํ ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์๋ค.
์ด ์ฝ๋์์์ ๋ฌธ์ ์ ์ Entity์ ์ง์ Setter ๋ฉ์๋๊ฐ ํ์ํ ์ ์ด์๋ค. ์ด๋ ํ
์คํธ ์ฝ๋๋ฅผ ์ํด์ ์ค์ ํ๋ก์ ํธ์ Entity ํด๋์ค์ @Setter๊ฐ ํ์ํด์ง๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ๋ณํ ์ํฌ ์ ์๋ ๊ฐ๋ฅ์ฑ์ด ๋์์ ธ์ ํ
์คํธ์ฝ๋์ ์๋์๋ ๋ค๋ฅด๊ฒ ์๋ํ์ง ์์ DB ์กฐ์์ด ๋ฐ์ํ ์ ์์ด ์ฌ๋ฐ๋ฅด์ง ์๋ค.
๋ฐ๋ผ์ Mockito ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํด๋ณด์๋ค.
Mock๊ฐ์ฒด๋ฅผ ํตํด์ ๋ชจ์ Menu, Store๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ, ๊ฐ์ฒด์ ํ๋ ๋ํ ๋ชจ์ ํ๋๊ฐ์ ์
๋ ฅํ๋ฉด์ ๋ง์น DB์ ์๋ ๋ฐ์ดํฐ์ฒ๋ผ ํ
์คํธ๋ฅผ ์งํ ํ ์ ์๋ค.
๊ธฐ๋ณธ์ ์ธ ์ฑ๊ณต ์คํจ ๋ณด๋ค ๋ง์ ์์ธ ๋ฐ ์ ํจ์ฑ๊ฒ์ฌ ์ ๊ด๋ จ๋ ํ
์คํธ ์ผ์ด์ค๋ฅผ ๋ง๋ค์ด๋ณผ ํ์๊ฐ ์๋ค.
[Spring][HCD ์ถ๊ฐ 2์ผ์ฐจ]71 ๊ฒ์๋ถ๋ถ ํ
์คํธ์ฝ๋ ์์ฑํด๋ณด๊ธฐ
HTTP๋?
HTTP๋ Hyper Text Transfer Protocol์ ์ค์๋ง๋ก ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ํต์ ํ๋๋ฐ ์ ํด๋์ ๊ท์ฝ์ด๋ผ ํ ์ ์๋ค.
HTTP์ ์์ ์ฑ?
HTTP ํต์ ์ ํน๋ณํ ๋ณด์์ด ์๋ค. ์๋ฅผ๋ค์ด ์
์๋ฅผ ๊ฐ์ง์ฌ๋์ด HTTP์ ์ ํธ๋ฅผ ์ฝํํ๋ค๋ฉด ํต์ ๋ด์ฉ์ด ์ธ๋ถ์ ๋๋ฌ๋๊ฒ ๋๋ค. ํด๋น ํต์ ์ฌ์ฉ์์ ๊ฐ์ธ์ ๋ณด๋ ์ค์ํ ๋ณด์์ด ๊ทธ๋๋ก ๋ณด์ฌ์ง ์ ์๋ค.
HTTPS ๊ฐ๋จ ์ฌ์ฉ์ด์
HTTP๋ ์ ์ก๊ณ์ธต์ TCP์์์ ๋์ํ๋ค. ์ฌ๊ธฐ์ SSL(Secure Sockets Layer)๋ผ๋ ๋ณด์ ๊ณ์ธต์ด ์ ์ก ๊ณ์ธต ์์ ์ฌ๋ผ๊ฐ๋ค. HTTPS๋ TCP์์โSSL์์โHTTP๋ฅผ ์น์ด์ ํต์ ํ๋๊ฒ์ผ๋ก ๋ณด์์ด ๋ณด์ฅ๋ ํต์ ์ ํ๋ ํ๋กํ ์ฝ์ด๋ค.
[Spring][HCD ์ถ๊ฐ 1์ผ์ฐจ]70-1 HTTPS ์ ์ฉ ์ด์
๋ด ๋๋ฉ์ธ์ ๊ฐ๋น์์์ ๊ตฌ๋งคํ๊ณ , Route 53์์ ํธ์คํ
์์ญ์ผ๋ก ์ฐ๊ฒฐํด์ผํ๋ค.
๋๋ฉ์ธ ์์ฒด๋ฅผ AWS์์ ๊ตฌ๋งคํ์ผ๋ฉด ํฐ ๋ฌธ์ ๊ฐ ์์์๊ฒ ๊ฐ์๋ฐ, ์ธ๋ถ์์ ๊ตฌ๋งคํ ๋๋ฉ์ธ์ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์
Route 53์ ๋๋ฉ์ธ์ DNS ์๋น์ค๋ก ๋ง๋ค๋ ค๋ฉด(ํผ๋ธ๋ฆญ ํธ์คํ
์์ญ์ ๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ฉ์ธ์ ์ธํฐ๋ท ํธ๋ํฝ์ ๋ผ์ฐํ
ํ๊ธฐ ์ํด) ๋๋ฉ์ธ ๋ฑ๋ก์ ์
๋ฐ์ดํธํ์ฌ ์ด๋ฌํ ์ด๋ฆ ์๋ฒ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.

์ด ๋ถ๋ถ์์ ๊ฐ์ด๋๋ฅผ ์๋ชป ๋ฐ๋ผ๊ฐ๋ฉด์ ๋ฌธ์ ๊ฐ ์์์ ์ง๋ ๋ชจ๋ฅธ๋ค. ๋ค์ ํธ์คํ
์์ญ์ ์ญ์ ํ๊ณ ์๋ก ์์ฑํด๋ณด๋ ค๊ณ ํ๋ค.

[Spring][HCD ์ถ๊ฐ 1์ผ์ฐจ]70-2 ACM-Route53-EC2 ๋ฐฐํฌ์ HTTPS ์ด์ ํธ๋ฌ๋ธ์ํ
- ๋๋ฉ์ธ๊ณผ Route53๋ถํฐ ๋ค์ ์ฐ๊ฒฐํ๊ธฐ
https:// ๋ก ์ ์์ ์ผ๋ก ์ ์์ด ์๋๋ค. ์ค์ ์ด ๋ญ๊ฐ ์๋ชป๋์๋ค. [์์ฑ์ค!!
]
๋ฐฐํฌ ๋จ๊ณ์์ https ์ค์ ์ ์ํด์ SSL ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ์๋๋ฐ ๋ฐฉ๋ฒ์ ๋๊ฐ์ง๊ฐ ์์๋ค.
1.
์๋ง์กด AWS ์๋น์ค ์ค Aws Certificate Manager (ACM) ์ ํตํด์ ๋ฌด๋ฃ๋ก SSL ๋ฐ๊ธ ๋ฐ๊ธฐ.
2.
๋๋ฉ์ธ ๋ฐ ํธ์คํ
์
์ฒด(ex: cafe24, ๊ฐ๋น์ ๋ฑ)์ผ๋ก ๋ถํฐ SSL ์ ๋ฃ ๋ฐ๊ธ ๋ฐ๊ธฐ.
์ด๋ฒ์ ์ ์ฉ์์ผ ๋ณธ ๊ฒ์ ACM์ ํตํด์ SSL์ ๋ฐ๊ธ ๋ฐ๊ณ , ์๋ง์กด ์ธํ๋ผ ํ๊ฒฝ ๋ด์์ ์ ์ฉ์ํค๋ ๋ฐฉ๋ฒ์ด์๋ค. ๋ฐฐํฌ ์ปดํจํฐ ์์ฒด๊ฐ EC2์ ์ธ์คํด์ค์ด๊ธฐ ๋๋ฌธ์, ๋ญ๊ฐ ์๋์ผ๋ก ์ ์ฉ์์ผ ์ฃผ๋ ๊ฒ ๊ฐ์๋ค. ํ์ง๋ง ๋ญ๊ฐ ์์ํ๊ธดํ๋ค. ์๋ง์กด ์๋น์ค๋ ๋ญ๊ฐ ํธ์คํ
์ด๋ฐ ์ฉ์ด๋ฅผ ์ฌ์ฉํ์ง ์์์ ์ฝ๊ฐ์ ํผ๋์ด ์์๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ถ๋ถ ํด๋ผ์ฐ๋ ํ๊ฒฝ์ผ๋ก ์กฐ๊ธ ์์ ๋ถํฐ ํ๊ตญ์์ ์ฌ์ฉ๋์ค๋ cafe24๊ฐ์ ํธ์คํ
์
์ฒด์ ๋ฐฉ์๋ค์ด ๋ค์ด์๊ธด ํ์ง๋ง ๋ญ๊ฐ ํ๊ฐ๋ฆฐ๋ค..
ํ์ง๋ง cafe24, ๊ฐ๋น์ ๊ฐ์ ํ๊ตญ ์
์ฒด๋ค์ ์๋น์ค ํํ๋ ๋๋ถ๋ถ ๋น์ทํ๊ฒ ๋๊ปด์ก๋ค.
์ด์ฐ ๋์๋ , AWS ์๋น์ค ๋ด์์ ํด๊ฒฐ๋๋ ๋ฌธ์ ๋ก ๋ณด์ฌ์ ธ์ ๋ด๊ฐ ์ ์ฒด์ ์ผ๋ก ์ด์คํ๊ฒ ์๊ณ ์๋ ๋ถ๋ถ๊ณผ ์ข์ ๊ฐ์ด๋๋ฅผ ๋น๊ตํ๋ฉฐ ์ฐจ์ด์ ์ ๋ณด๋ฉด์, ๊ฐ์ด๋๋ฅผ ์ฒ์ฒํ ๋ค์ ๋ฐ๋ผ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ฐพ์๋ณด๊ณ ์ ํ๋ค.
๋ด๊ฐ ๊ฐ ์๋น์ค๋ง๋ค ํด์ผํ ๊ฒ๊ณผ ๊ทธ ์๋น์ค์ ํต์ฌ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
โข
ACM์์, ์ธ์ฆ์๋ฐ๊ธ ๋ฐ ๊ตฌ๋งคํ ํน์ ๋๋ฉ์ธ์ SSL ์ ์ฉ
โข
Route 53์์, ์ธ์คํด์ค์ ์๋ฒ ์คํ ์ ์ฐ๊ฒฐ๋๋ ํฌํธ
โฆ
EC2 ์ฝ์์ ์
์ฅ์์๋ localhost์ง๋ง,
โฆ
๊ทธ ์ปดํจํฐ๋ EC ์ธ์คํด์ค ์๋น์ค์์ ํด๋น ์ปดํจํฐ์ ๋ด๋ถ, ์ธ๋ถ IP์ 8080ํฌํธ์ ์ฐ๊ฒฐ๋๋ค.
โฆ
๊ทธ ์ค ์ธ๋ถ์์ ์ ๊ทผ ํ ์ ์๋ ์ธ๋ถ IP์ :8080 ํฌํธ๋ก ์ ์ ํ๋ฉด ์คํ๋๊ณ ์๋ ์น์๋ฒ(์คํ๋งํ๋ก์ ํธ)์ ํ๋ก ํธ ํ์ด์ง์ ์ ๊ทผ(์์ฒญ)ํ๊ฒ ๋๋ค.
โฆ
๊ทธ๋ผ, ํฌํธ ๋ฒํธ ๊ท์น์ ๋ฐ๋ผ ์ผ๋ฐ์ ์ผ๋ก 80๋ฒ ํฌํธ๋ ์๋ต ๊ฐ๋ฅํ๋ฏ๋ก,
โฆ
EC2 ์ธ์คํด์ค์ ์ธ๋ถ IP์ฃผ์๋ฅผ ๋ค๋ฅธ ์ปดํจํฐ์์ ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์ ์ํ๋ฉด, 80๋ฒํฌํธ๋ฅผ ์์ฒญํ๊ฒ ๋๋ค.
โฆ
๋ช
์์ ์ผ๋ก EC2 ์ธ์คํด์ค์ ์ธ๋ถ IP์ฃผ์ + :8080 ํฌํธ๋ฅผ ์
๋ ฅํ๊ฒ ๋๋ค๋ฉด,
โฆ
ํด๋น EC2 ์ธ์คํด์ค๊ฐ ์น์๋ฒ๋ฅผ ์คํ์ค์ด๋ผ๋ฉด ํด๋น ํ๋ก์ ํธ์ ๋ฉ์ธ ํ์ด์ง๋ฅผ ๋ณผ ์ ์๋ค.(โฆ:8080/ ์ด๋ ์์ฒญ์ ๋ํ ์๋ต ํ์ปจํธ๋กค๋ฌ์ โ/โ์ ๋งตํ๋ API)
โฆ
๊ทธ๋ผ, ํด๋น ํํ์ด์ง๋ฅผ ๋ค์ด๊ฐ๊ธฐ ์ํด์๋ 8080ํฌํธ๋ฅผ ํญ์ ์จ์ค ์ ์๊ธฐ ๋๋ฌธ์, ํฌํธํฌ์๋ฉ์ผ๋ก 8080ํฌํธ๋ฅผ 80๋ฒ๋ก ์ฐ๊ฒฐํ๋ฉด, ์ธ๋ถ ip์ฃผ์:80ํฌํธ๋ก ํด๋น ํํ์ด์ง๋ฅผ ๋ณผ ์ ์๋ค.
โฆ
๋ํด์ ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ฅ๊ณผ ์ผ๋ฐ์ ์ธ ํฌํธ์ ๋ํ ๊ท์น์์๋ โ :80 โ ํฌํธ๋ ์๋ตํ๋ฉด 80๋ฒ ํฌํธ๋ฅผ ์ฐพ์๊ฐ๋๋ก ๋์ด์๊ธฐ ๋๋ฌธ์ ์ด๋ง์ ๊ณง ํด๋น IP์ธ๋ถ ์์ดํผ๋ง์ผ๋ก ๊ทธ ์๋ฒ ์ปดํจํฐ๊ฐ ์คํํ๊ณ ์๋ ํํ์ด์ง๋ก ๋ค์ด๊ฐ ์ ์๋ค๋ ๋ง์ด๋ค.
โฆ
๋ฐ๋ผ์, ํด๋น ์ธ๋ถ IP๋ฅผ ๊ตฌ๋งคํ ๋๋ฉ์ธ ๋ฑ ๊ณผ ์ฐ๊ฒฐ ์ํค๋ฉด,
โฆ
๋๋ฉ์ธ ์ฃผ์๋ง์ผ๋ก๋ ํด๋น ํํ์ด์ง๋ฅผ ์ ์ ํ๊ฒ ๋๋ค๋ ๊ฒ์ด๋ค.
โข
EC2์์, ์ธ์คํด์ค ์ธ๋ถ์์ดํผ์ ์ฐ๊ฒฐ
โฆ
๋ก๋ ๋ฐธ๋ฐ์์ ์ญํ , ๊ตฌ์ฑ์ ๋ค์ ์ดํด๋ด์ผ ํ๋ค.
โฆ
EC2์์์ ๋ฐฉํ๋ฒฝ ์ค์ ๋ ๋ค์ ํ์ธํด์ผ ํ๋ค.
์ ๊ณผ์ ์ ๊ธ๋ก๋ ์ข ๋ณต์กํด๋ณด์ด์ง๋ง ๊ทธ๋ฅ ๊ณ์๋์๊ฐ๋ ์ปดํจํฐ ํ๋์ ์ธํฐ๋ท์ด ์ฐ๊ฒฐ๋์ด์๊ณ ํ๋คํธ์ํฌ๊ฐ ์๋(192.168.0.1~255 : xxxx) ์ธ๋ถ ๋ค๋ฅธ ์์น์์ ์ PC์ ์ ์(์ธ๋ถ ip๋ฅผ ํตํด)ํ๋ฉด ๋๋ค๋ ๋ด์ฉ์ผ๋ก ์ดํดํ๊ณ ์๋๋ฐ, ์๋ชป๋๊ฑฐ๋ ๋ถ์กฑํ ๋ถ๋ถ์ด ๋ง๋ค. ๊ฑฐ๊ธฐ์ SSL ์ธ์ฆ์๊ฐ ์ถ๊ฐ๋์ด ์กฐ๊ธ ํผ๋์ด ์๋ค. ์ด๋ป๊ฒ ์ ์ฉ๋๋์ง ์กฐ๊ธ ์ ๋ฆฌ๊ฐ ์ ๋ ๊ฐ์ด๋, ๋๋ ๋์ ํ๊ฒฝ๊ณผ ๋ชฉํ์ ์ ์ฌํ ์ฌ๋ก๋ฅผ ์ฐพ์๋ด๋ ๊ฒ์ด ์ฐ์ ์ด๋ค.
์ฐธ๊ณ ๊ฐ๋ฐ ๋ธ๋ก๊ทธ๋ค
[Spring][HCD ์ถ๊ฐ 1์ผ์ฐจ]70 ACM-Route53-EC2 ๋ฐฐํฌ์ HTTPS ์ด์ ํธ๋ฌ๋ธ์ํ
์ค.. ์ฐ์ ๋คํธ์ํฌ CS์ ๋ํด ์ข ๋ ์ ํํ ์์๋ณด๊ธฐ
ํ
์คํธ ์ฝ๋๋?
TDD๋?
Mock? ๊ฐ์ง?
๋จ์ ํ
์คํธ๋?
๋จ์ ํ
์คํธ๋?
ํตํฉ ํ
์คํธ๋?
[Spring][HCD 11์ผ์ฐจ]68 ํ
์คํธ ์ฝ๋? TDD๋? ๋ชจ์?Mock? Mockito? ๋จ์ํ
์คํธ? ํตํฉํ
์คํธ? [์์ฑ์ค!!
]
AOP๋?
โข
'ํต์ฌ๊ธฐ๋ฅ': ๊ฐ API ๋ณ ์ํํด์ผ ํ ๋น์ฆ๋์ค ๋ก์ง์ด๋ค.
โฆ
ํ์ฌ ํ๋ก์ ํธ๋ก๋ ํ์ ๊ฐ์
, ๊ฐ๊ฒ ๋ฑ๋ก, ์ฃผ๋ฌธ, ๊ฐ๊ฒ ํค์๋ ๊ฒ์, ๋ฉ๋ด ๋ฑ๋ก ๋ฑ ๊ธฐ๋ณธ์ ์ธ ์๋น์ค์ ๊ธฐ๋ฅ๋ค์ด๋ค.
โข
โ๋ถ๊ฐ๊ธฐ๋ฅโ: ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ
โฆ
์ดํ๋ฆฌ์ผ์ด์
์ ์ฌ๋ฌ ๋ถ๋ถ์์ ๋ฐ๋ณต์ ์ผ๋ก ๋ฐ์ํ๋ ๊ธฐ๋ฅ์ผ๋ก ๋ฉ์ธ ๊ธฐ๋ฅ ์ด์ ๋๋ ์ดํ์ ์คํ๋์ผ ํ๋ ๊ฒ์ด๋ค.
โฆ
AOP๋ ์ด๋ฌํ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ๋ชจ๋ํํ๊ณ ์ถ์ํํ ๊ฒ์ผ๋ก ์ฃผ์ ๊ด์ฌ์ฌ๋ ๋ณด์, ๋ก๊น
, ํธ๋์ญ์
๊ด๋ฆฌ ๋ฑ๊ณผ ๊ฐ์ ๊ฒ๋ค์ ํฌํจํ ์ ์๋ค.
ํต์ฌ ๊ธฐ๋ฅ๊ณผ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ๊ตฌ๋ถํ๋ ๊ธฐ์ค์?
์ด๊ฒ์ด AOP์ ๋ฐฉํฅ์ด๋ค. AOP๋ย Aspect Oriented Programming์ ์ฝ์๋กย ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
์ด๋ค ๋ก์ง์ ๊ธฐ์ค์ผ๋ก ํต์ฌ์ ์ธ ๊ด์ , ๋ถ๊ฐ์ ์ธ ๊ด์ ์ผ๋ก ๋๋์ด์ ๋ณด๊ณ ๊ทธ ๊ด์ ์ ๊ธฐ์ค์ผ๋ก ๊ฐ๊ฐย ๋ชจ๋ํํ๊ฒ ๋ค๋ ๊ฒ์ด๋ค.

๊ฐ๋จํ ๋งํ๋ฉด ๋ค๋ฅธ ๋ถ๋ถ์ ๊ณ์ ๋ฐ๋ณตํด์ ์ฐ๋ ์ฝ๋๋ค์ ๋ฐ๊ฒฌํ ์ ์๋ ๋ฐ ์ด๊ฒ์ย ํฉ์ด์ง ๊ด์ฌ์ฌ (Crosscutting Concerns)๋ผ ๋ถ๋ฅธ๋ค.
[Spring][HCD 8์ผ์ฐจ]63 AOP๋?
AOP ํ์ฉํ ๋ถ๋ถ์ ์๊ฐํด๋ณด๊ธฐ
Spring Boot ํ๋ก์ ํธ์์ AOP๋ฅผ ์ ์ฉํ๋ ๋ถ๋ถ๋ค์ด ๋ณดํต ์ด๋ค ๋ถ๋ถ๋ค์ธ์ง ๊ถ๊ธํ๋ค. ์ด๋์์ ์ฌ์ฉํด์ผ๊ฒ ๋ค ๋ผ๋ ๊ฒ ์์ฒด๊ฐ ์๋๋ฆฌ์ค๋ฅผ ๊ณ ๋ คํ๋ ๊ณผ์ ์ธ๋ฐ, ์ด๋ค ์๋๋ฆฌ์ค์ ์ ํฉํ ์ง ๊ฐ์ด ์์๋ค. ํต์์ ์ผ๋ก AOP๋ฅผ ์ ์ฉํ๋ ์ฌ๋ก๋ค์ ์กฐ์ฌํ๋ค.
1.
๋ก๊น
(Logging): ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ AOP ์๋๋ฆฌ์ค ์ค ํ๋๋ ๋ก๊น
์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ๋ฌ ๋ถ๋ถ์์ ๋ก๊ทธ๋ฅผ ์ผ๊ด๋๊ฒ ๋จ๊ธฐ๋ ค๋ ๊ฒฝ์ฐ AOP๋ฅผ ์ฌ์ฉ ํ ์ ์๋ค.
โข
@Before, @After, ๋๋ @Around Advice๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์๋ ํธ์ถ ์ ํ์ ๋ก๊ทธ๋ฅผ ๋จ๊ธธ ์ ์๋ค. ์คํ ์ํ๋ฑ์ ์ ์ ์๋ค.
โข
๋ฉ์๋ ํ๋ผ๋ฏธํฐ์ ๋ฐํ๊ฐ์ ๋ก๊ทธ์ ํฌํจ์ํฌ ์ ์๋ค. ์ ์์ ์ธ ๋ฐ์ดํฐ๊ฐ ์ด๋๋๋์ง ํ์ธ ํ ์ ์๋ค.
2.
ํธ๋์ญ์
๊ด๋ฆฌ(Transaction Management): ํธ๋์ญ์
์ ๊ด๋ฆฌํ๊ธฐ ์ํด AOP๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ํน์ ๋ฉ์๋ ๋๋ ํด๋์ค์ ํธ๋์ญ์
๊ด๋ฆฌ ๋ก์ง์ ์ ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์
์ ์์ํ๊ณ ์ปค๋ฐ ๋๋ ๋กค๋ฐฑํ ์ ์๋ค.
โข
@Around Advice๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋์ญ์
์์๊ณผ ์ข
๋ฃ ๋ก์ง์ ๊ตฌํํ ์ ์๋ค.
โข
Spring์ @Transactional ์ด๋
ธํ
์ด์
๊ณผ ํจ๊ป ์ฌ์ฉํ์ฌ ํธ๋์ญ์
์ ์ค์ ํ ์ ์๋ค.
3.
์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ(Authentication and Authorization): AOP๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ ๊ด๋ จ ๋ก์ง์ ์ฒ๋ฆฌํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ํน์ ๋ฉ์๋๊ฐ ์คํ๋๊ธฐ ์ ์ ์ฌ์ฉ์ ์ธ์ฆ์ ํ์ธํ๊ณ ๊ถํ์ ๊ฒ์ฌํ ์ ์๋ค.
โข
@Before Advice๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ฆ ๋ฐ ๊ถํ ๊ฒ์ฌ๋ฅผ ์ํํ ์ ์๋ค.
โข
Spring Security์ ์ฐ๊ณํ์ฌ ๋ณด๋ค ๊ณ ๊ธ ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค.
4.
์บ์ฑ(Caching): AOP๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์๋ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ ์ ์๋ค. ์ด๋ฅผ ํตํด ๋์ผํ ๋ฉ์๋ ํธ์ถ์ ๋ฐ๋ณต ์์
์ ์ค์ด๊ณ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์๋ค.
โข
@Around Advice๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์๋ ํธ์ถ ์ ์ ์บ์๋ฅผ ํ์ธํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์บ์์ ์ ์ฅํ ์ ์๋ค.
โข
Spring์ @Cacheable, @CachePut, @CacheEvict์ ํจ๊ป ์ฌ์ฉํ์ฌ ์บ์ฑ์ ๊ตฌํํ ์ ์๋ค.
5.
์์ธ ์ฒ๋ฆฌ(Exception Handling): AOP๋ฅผ ์ฌ์ฉํ์ฌ ์์ธ ์ฒ๋ฆฌ ๋ก์ง์ ์ค์์์ ๊ด๋ฆฌํ ์ ์๋ค. ํนํ, ์ฌ๋ฌ ๋ฉ์๋์์ ๊ณตํต์ผ๋ก ๋ฐ์ํ๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ ์ฉํ๋ค.
โข
@AfterThrowing Advice๋ฅผ ์ฌ์ฉํ์ฌ ์์ธ๊ฐ ๋ฐ์ํ ๋ ๊ณตํต ๋ก์ง์ ์ํํ ์ ์๋ค.
โข
์์ธ ์ฒ๋ฆฌ, ๋ก๊น
๋๋ ์ฌ์ฉ์ ์ง์ ์๋ฌ ๋ฉ์์ง ์์ฑ์ ์ํํ ์ ์๋ค.
6.
๋ฉ์๋ ์คํ ์๊ฐ ์ธก์ (Measuring Method Execution Time): AOP๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์๋์ ์คํ ์๊ฐ์ ์ธก์ ํ๊ณ ์ฑ๋ฅ ํต๊ณ๋ฅผ ์์งํ ์ ์๋ค.
โข
@Around Advice๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์๋ ์คํ ์ ๊ณผ ํ์ ์๊ฐ์ ์ธก์ ํ ์ ์๋ค.
โข
์ฑ๋ฅ ํต๊ณ ๋ฐ์ดํฐ๋ฅผ ์์งํ์ฌ ๋ก๊ทธ ๋๋ ๋ชจ๋ํฐ๋ง ์์คํ
์ ๊ธฐ๋กํ ์ ์๋ค.
์ ์ผ์ด์ค๋ฅผ ์ ์ฉํ๊ธฐ ์ ํ
์คํธ๋ก ์ค๋ณต ์ฝ๋์ ๊ฑฐ ํด๋ณด๊ธฐ
์ปจ๋ฒค์
์ ๋ง์ถ๋ค์น๊ณ ์ฃผ์ ๊ธฐ๋ฅ์ธ MenuService, OrderService, ReviewService, StoreService ํด๋์ค์ ํด๋์ค ๋ด ์ค๋ณต์ ์ ๊ฑฐํ๋ ๋ฉ์๋๋ฅผ ๋ง๋ค์ด ๋์์๋ค. ํ์ง๋ง ์ด ๋ฉ์๋ ์์ฒด๊ฐ ์ 4๊ฐ์ ์๋น์ค ํด๋์ค๋ง๋ค ์ค๋ณต๋๊ธฐ ๋๋ฌธ์ AOP๋ฅผ ํตํด ๋ชจ๋ํ ํ๋ค๋ฉด ํจ๊ณผ์ ์ผ๋ก ์ค๋ณต์ ์ ๊ฑฐ ํ ์ ์๋ค ํ๋จํ๋ค.
[1] ์์กด์ฑ ์ถ๊ฐ
Spring AOP๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์์กด์ฑ์ ์ถ๊ฐํด์ผ ํ๋ค. build.gradle ์ ํด๋น ์์กด์ฑ์ ์ถ๊ฐํด์ค๋ค.
[2] AOP ํ๋ก์ ํ์ฑํ(AOP๋ฅผ ์ฑ์ ํ์ฑํ)
[Spring][HCD 8์ผ์ฐจ]64 AOP ์ ์ฉ
Load more