Toby Spring 6
Toby Spring Boot
ํ ๋น๋์ ํ ๋น์ ์คํ๋ง 6 - ์ดํด์ ์๋ฆฌ ๊ฐ์๋ฅผ ์์ฝํ ๋ด์ฉ์ ๋๋ค.
Intro
JDK
$ sdk # sdk man ํฐ๋ฏธ๋ ์ด๊ธฐ > sdk list java # java ๊ด๋ จ ๋ชจ๋ ์ค์น ๊ฐ๋ฅํ ๋ฒ์ ํ์ธ > sdk list java | grep installed # ์ค์น๋ ๋ฒ์ ๋ง ํ์ธ > sdk install java [jdk name] # ์๋ฐ ์ค์น > sdk use java [jdk name] # ํด๋์์ ํด๋น ๋ฒ์ ์ฌ์ฉ > sdk env init # ํ๋ก์ ํธ ํด๋์ ์ฌ์ฉ JDK ์ ์ฅ > sdk env # ํ๋ก์ ํธ ํด๋์ ์ฌ์ฉ JDK ๋ณต๊ตฌ
API
์ค๋ธ์ ํธ์ ์์กด๊ด๊ณ
์ค๋ธ์ ํธ
ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด ๋ง๋ค์ด์ ธ์ ์์ง์ด๋ ๊ฒ(=๊ฐ์ฒด)
์ค๋ธ์ ํธ๋ ์ผ์ ํ๋ฉฐ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ธฐ๋ฅ์ ์ํ
์๋ฐ์ ์ค๋ธ์ ํธ๋ ํด๋์ค์ ์ธ์คํด์ค ๋๋ ๋ฐฐ์ด
ํด๋์ค
์ฐ๋ฆฌ๊ฐ ์์ฑํ๋ ์ฝ๋
์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค์ด๋ด๊ธฐ ์ํด ํ์ํ ์์ธํ ์ ๋ณด(์ค๊ณ๋, ํ๋กํ ํ์ , ๋ชจ๋ธ ..)
์ธ์คํด์ค
์ถ์์ ์ธ ๊ฒ(ex. ํด๋์ค)์ ๋ํ ์ค์ฒด
.
์์กด๊ด๊ณ
๋ฐ๋์ ๋ ๊ฐ ์ด์์ ๋์์ด ์กด์ฌ
ํ๋๊ฐ ๋ค๋ฅธ ํ๋๋ฅผ ์ฌ์ฉ, ํธ์ถ, ์์ฑ, ์ธ์คํด์คํ, ์ ์ก ๋ฑ์ ํ ๋ ์์กด๊ด๊ณ์ ์๋ค๊ณ ์ด์ผ๊ธฐ
ํด๋์ค ์ฌ์ด์ ์์กด๊ด๊ณ๊ฐ ์์ ๋ ์์กด ๋์์ด ๋ณ๊ฒฝ๋๋ฉด ์ด๋ฅผ ์ฌ์ฉํ๋ ํด๋์ค์ ์ฝ๋๋ ์ํฅ์ ๋ฐ๋๋ค.
์ค๋ธ์ ํธ ์ฌ์ด์ ์์กด๊ด๊ณ๋ ์คํ๋๋ ๋ฐํ์์ ์์กด๊ด๊ณ๊ฐ ๋ง๋ค์ด์ง๊ณ ์คํ ๊ธฐ๋ฅ์ ์ํฅ์ ๋ฐ์ง๋ง, ํด๋์ค ๋ ๋ฒจ์ ์์กด๊ด๊ณ์๋ ๋ค๋ฅผ ์ ์๋ค.
.
๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ(Separation of Concerns)
๊ด์ฌ์ฌ๋ ๋์ผํ ์ด์ ๋ก ๋ณ๊ฒฝ๋๋ ์ฝ๋์ ์งํฉ
API๋ก ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ JSON์ ์ค๋ธ์ ํธ์ ๋งคํํ๋ ๊ด์ฌ๊ณผ ์๋ต ๊ฐ์ฒด๋ฅผ ์ค๋นํ๋ ๋ก์ง์ ๊ด์ฌ์ด ๋ค๋ฅด๋ค.
๋ณ๊ฒฝ์ ์ด์ ์ ์์ ์ ์ดํด๋ณด๊ณ ์ด๋ฅผ ๋ถ๋ฆฌํ์.
.
์์์ ํตํ ํ์ฅ
๊ฐ์ฒด์ ๋ณ๊ฒฝ ์์ด ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ํ์ฅํ๊ฒ ๋ง๋ค๋ ค๋ฉด ์์์ ์ด์ฉํ ์ ์๋ค.
์ด๋ป๊ฒ ๊ฐ์ฒด๋ฅผ ์ค๋นํ ๊ฒ์ด๊ฐ์ ์ด๋ป๊ฒ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ๊ฒ์ธ๊ฐ๋ผ๋ ๊ด์ฌ์ฌ๊ฐ ํด๋์ค ๋ ๋ฒจ์์ ๋ถ๋ฆฌ๋๋ค.
์ ๋ณด๋ฅผ ๋ด์ ์ค๋ธ์ ํธ์ธ ExRate๋ฅผ ์์ฑํ๋ ์ฑ ์์ ์๋ธ ํด๋์ค์๊ฒ ์์ํ๋ ๋ฐฉ์์ด๋ค.
๊ฐ์ฒด์งํฅ ๋์์ธ ํจํด์ ๋์ค๋ ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด์ ์ด์ฉํ๋ค.
ํ์ง๋ง, ์๋ฐ๋ ๋ค์ค ์์์ ํ์ฉํ์ง ์์ผ๋ฏ๋ก ๋ค๋ฅธ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ ๊ฒฝ์ฐ ํ์ฅ์ ์ด์ฉํ๊ธฐ ์ด๋ ต๋ค.
๋ํ ์์ ํด๋์ค์ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ํ์ ํด๋์ค๋ฅผ ๋ชจ๋ ๋ณ๊ฒฝํด์ผ ํ๋ฏ๋ก ์์์ ํตํ ํ์ฅ์ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๊ธฐ์ ํ๊ณ๊ฐ ์๋ค.
.
ํด๋์ค์ ๋ถ๋ฆฌ
๊ด์ฌ์ฌ์ ๋ฐ๋ผ ํด๋์ค๋ฅผ ๋ถ๋ฆฌํด์ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๊ตฌ์ฑํ ์ ์๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ํด๋์ค ๋ ๋ฒจ์ ์ฌ์ฉ ์์กด๊ด๊ณ๊ฐ ๋ง๋ค์ด์ง๊ธฐ ๋๋ฌธ์ ๊ฐํ ์ฝ๋ ์์ค์ ๊ฒฐํฉ์ด ์๊ธด๋ค.
์ค์ ๋ก ์ฌ์ฉํ ํด๋์ค๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ด๋ฅผ ์ด์ฉํ๋ ์ชฝ์ ์ฝ๋๋ ๋ฐ๋ผ์ ๋ณ๊ฒฝ์ด ๋์ด์ผ ํ๋ค.
์์์ ํตํ ํ์ฅ์ฒ๋ผ ์ ์ฐํ ๋ณ๊ฒฝ๋ ๋ถ๊ฐ๋ฅํด์ง๋ค.
์์ํ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ ํด๋์ค์ ๋ฉ์๋ ์ด๋ฆ๊ณผ ๊ตฌ์กฐ๋ ์ ๊ฐ๊ฐ์ผ ์ ์๋ค.
๊ทธ๋์ ํด๋์ค๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๋ง์ ์ฝ๋๊ฐ ๋ฐ๋ผ์ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ค.
ํด๋์ค๊ฐ ๋ค๋ฅด๋ค๋ ๊ฒ์ ์ ์ธํ๋ฉด ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๊ฐ ์ ๋ ๋ฐฉ๋ฒ์ด ์๋๋ค.
.
์ธํฐํ์ด์ค ๋์
๋ ๋ฆฝ์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๊ณ ์๋น์ค๊ฐ ์ฌ์ฉํ ๋ฉ์๋ ์ด๋ฆ์ ์ ํด๋๋ค.
์ด๋ฅผ ๊ฐ ํด๋์ค๊ฐ ๊ตฌํํ๊ฒ ๋ง๋ค๋ฉด ์ด๋ฅผ ์ฌ์ฉํ๋ ์ชฝ์์ ์์กดํ๋ ํด๋์ค๊ฐ ๋ณ๊ฒฝ๋๋๋ผ๋ ์ฌ์ฉํ๋ ๋ฉ์๋ ์ด๋ฆ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋์ง ์๋๋ค.
ํ์ง๋ง, ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ง๋๋ ์์ฑ์๋ฅผ ํธ์ถํ๋ ์ฝ๋์๋ ํด๋์ค ์ด๋ฆ์ด ๋ฑ์ฅํ๊ธฐ ๋๋ฌธ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ํด๋์ค๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์๋น์ค ์ฝ๋๋ ์ผ๋ถ๋ถ์ด์ง๋ง ๋ฐ๋ผ์ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ค.
์ฌ์ ํ ์์์ ํตํ ํ์ฅ๋งํผ์ ์ ์ฐ์ฑ๋ ๊ฐ์ง์ง ๋ชปํ๋ค.
.
๊ด๊ณ์ค์ ์ฑ
์์ ๋ถ๋ฆฌ
์ธํฐํ์ด์ค ๋์ ์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋๋ก ์์ฑํ์ง๋ง ๊ตฌํ ํด๋์ค์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด ์๋น์ค๋ ์ฌ์ ํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํน์ ํด๋์ค์ ์์กดํ๋ ์ฝ๋๊ฐ ๋๋ค.
์์ ์ด ์ด๋ค ํด๋์ค์ ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ค๋ฉด ๊ด๊ณ์ค์ ์ฑ ์์ ์ง์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ด๋ค.
์ด ๊ด๊ณ์ค์ ์ฑ ์์ ์์ ์ ํธ์ถํ๋ ์์ ์ค๋ธ์ ํธ์๊ฒ ๋๊ธธ ์ ์๋ค.
์ด๋ ๊ฒ ๋๋ฉด ์ฝ๋ ๋ ๋ฒจ์ ์์กด๊ด๊ณ์์ ์์ ๋ก์์ง๋ค.
์ดํ์๋ ์ค์ง ์ธํฐํ์ด์ค์๋ง ์์กดํ๋ ์ฝ๋๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ด๋ค ๊ตฌํ ํด๋์ค์ ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋๋ผ๋ ์๋น์ค์ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ค.
๊ด๊ณ์ค์ ์ฑ ์์ ๊ฐ์ง ์์ ํด๋์ค(Client)๋ ์์ฑ์๋ฅผ ํตํด์ ์ด๋ค ํด๋์ค์ ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ ์ง ๊ฒฐ์ ํ ๊ฒ์ ์ ๋ฌํด์ฃผ๋ฉด ๋๋ค.
์ค๋ธ์ ํธ ํฉํ ๋ฆฌ
Client๋ ํด๋ผ์ด์ธํธ๋ก์์ ์ฑ ์๊ณผ ์๋น์ค์ ์ธํฐํ์ด์ค ์ค๋ธ์ ํธ ์ฌ์ด์ ๊ด๊ณ์ค์ ์ฑ ์์ ๋ ๊ฐ์ง๋ฅผ ๊ฐ์ง๊ณ ์๋ค. โ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๊ฐ ํ์ํ๋ค.
ํด๋ผ์ด์ธํธ์ ๊ด๊ณ์ค์ ์ฑ ์์ ๊ฐ์ง ์ฝ๋๋ฅผ ObjectFactory๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ถ๋ฆฌํ๋ค.
ObjectFactory๋ ์ฌ์ฉํ ํด๋์ค๋ฅผ ์ ์ ํ๊ณ ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค๋ฉด์ ์์กด๊ด๊ณ๊ฐ ์๋ค๋ฉด ์ด๋ฅผ ์์ฑ์์ ์ ๋ฌํด์ ๋ง๋๋ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ค.

์์น๊ณผ ํจํด
๊ฐ์ฒด์งํฅ ์ค๊ณ์์น๊ณผ ๊ฐ์ฒด์งํฅ ๋์์ธ ํจํด
๊ฐ๋ฐฉ-ํ์ ์์น(Open-Closed Principle)
ํด๋์ค๋ ๋ชจ๋์ ํ์ฅ์๋ ์ด๋ ค ์์ด์ผ ํ๊ณ ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํ๋ค.
ํด๋์ค๊ฐ ๊ธฐ๋ฅ์ ํ์ฅํ ๋ ํด๋์ค์ ์ฝ๋๋ ๋ณ๊ฒฝ๋์ง ์์์ผ ํ๋ค.
๋์ ์์ง๋์ ๋ฎ์ ๊ฒฐํฉ๋(High Coherence and low coupling)
์์ง๋๊ฐ ๋๋ค๋ ๊ฒ์ ํ๋์ ๋ชจ๋์ด ํ๋์ ์ฑ ์ ๋๋ ๊ด์ฌ์ฌ์ ์ง์ค๋์ด ์๋ค๋ ๋ป.๋ณํ๊ฐ ์ผ์ด๋ ๋ ํด๋น ๋ชจ๋์์ ๋ณํ๋ ๋ถ๋ถ์ด ํฌ๋ค.
์ฑ ์๊ณผ ๊ด์ฌ์ฌ๊ฐ ๋ค๋ฅธ ๋ชจ๋๊ณผ๋ ๋ฎ์
๊ฒฐํฉ๋, ์ฆ ๋์จํ๊ฒ ์ฐ๊ฒฐ๋ ํํ๋ฅผ ์ ์งํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
์ ๋ต ํจํด(Strategy Pattern)
์์ ์ ๊ธฐ๋ฅ ๋งฅ๋ฝ(Context)์์, ํ์์ ๋ฐ๋ผ์ ๋ณ๊ฒฝ์ด ํ์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ธํฐํ์ด์ค๋ฅผ ํตํด ํต์งธ๋ก ์ธ๋ถ๋ก ๋ถ๋ฆฌ์ํค๊ณ , ์ด๋ฅผ ๊ตฌํํ ๊ตฌ์ฒด์ ์ธ ์๊ณ ๋ฆฌ์ฆ ํด๋์ค๋ฅผ ํ์์ ๋ฐ๋ผ์ ๋ฐ๊ฟ์ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ๋์์ธ ํจํด.
Collections.sort()๋ ์ ๋ ฌ์ ์ฌ์ฉํ ์ ๋ต ์ค๋ธ์ ํธ๋ฅผ ์ ๋ฌ ๋ฐ์์ ์ฌ์ฉํ๋ค.
์ ์ด์ ์ญ์ (Inversion of Control)
์ ์ด๊ถ ์ด์ ์ ํตํ ์ ์ด๊ด๊ณ ์ญ์ - ํ๋ ์์ํฌ์ ๊ธฐ๋ณธ ๋์ ์๋ฆฌ
์ ์ด๊ถ์ด ์๋น์ค โ ํด๋ผ์ด์ธํธ โ ObjectFactory ๋ก ์ด์
์คํ๋ง ์ปจํ
์ด๋์ ์์กด๊ด๊ณ ์ฃผ์
Dependency Injection
Introduction to the Spring IoC Container and Beans
BeanFactory
์คํ๋ง์ BeanFactory๊ฐ ์์์ ๋ง๋ ObjectFactory๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ๋์ฒดํ๋ค.
BeanFactory๋ ObjectFactory์ ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํด์ ๋์ํ๊ฒ ๋ง๋ ๋ค.
Bean
์คํ๋ง ์ปจํ ์ด๋๋ ๋น(bean)์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ์ค๋ธ์ ํธ๋ฅผ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ค.

์์กด๊ด๊ณ ์ฃผ์ (Dependency Injection)
IoC๋ ์คํ๋ง์ ๋์์๋ฆฌ๋ฅผ ์ ํํ๊ฒ ์ค๋ช ํ๊ธฐ์๋ ๋๋ฌด ์ผ๋ฐ์ ์ธ ํ๋ ์์ํฌ ๋์์๋ฆฌ๋ฅผ ์ค๋ช ํ๋ ์ฉ์ด์ด๋ค.
๊ทธ๋์ ์คํ๋ง๊ณผ ๊ฐ์ด ์ค๋ธ์ ํธ์ ์์กด๊ด๊ณ์ ๋ํ ์ฑ ์์ ์คํ๋ง๊ณผ ๊ฐ์ ์ธ๋ถ ์ค๋ธ์ ํธ๊ฐ ๋ด๋นํ๋๋ก ๋ง๋๋ ๊ฒ์ ์ค๋ช ํ๋, ์์กด๊ด๊ณ ์ฃผ์ (
Dependency Injection) ํจํด, ์ค์ฌ์DI๋ผ๊ณ ๋ถ๋ฆฌ๋ ์ฉ์ด๊ฐ ๋งํด ํ์ธ๋ฌ์ ์ํด์ ์ ์๋์๊ณ ์คํ๋ง ๊ฐ๋ฐ์๋ค ์ฌ์ด์์, ๋ ์ด ์์น์ ๋ฐ๋ผ์ ํ๋ ์์ํฌ๋ฅผ ๋ง๋ค๊ฑฐ๋ ๊ฐ๋ฐ ๋ฐฉ์์ ์ ๋ช ํ๋ ๋ค๋ฅธ ์ธ์ด์ ๊ธฐ์ ์์๋ ๋๊ฒ ์ฌ์ฉ๋๊ณ ์๋ค.์คํ๋ง์ด ์ฒ์ ๋ฑ์ฅํ๋ ์๊ธฐ์๋ IoC๋ผ๋ ์ฉ์ด๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ดํ์ DI๋ฅผ ์ฌ์ฉํ๋ฉด์๋ IoC๋ผ๋ ์ฉ์ด๋ ๊ฐ์ด ์ฐ์ด๊ธฐ๋ ํ๋ค.
์คํ๋ง์ IoC/DI ์ปจํ ์ด๋๋ผ๋ ์์ผ๋ก ์ค๋ช ํ๋ ๋ฌธ์๋ ๋ง์ด ์๋ค.
์ปจํ ์ด๋
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค์ด์ ๋ด์๋๊ณ ํ์ํ ๋ ์ฌ์ฉํ๋๋ก ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ๋ด๋น
๋ณดํต ์ค๋ธ์ ํธ๋ฅผ ๋ณด๊ดํ๋ ๊ฒ๋ฟ ์๋๋ผ ์๋ช ์ฃผ๊ธฐ(lifecycle)๊น์ง ๋ด๋น
์คํ๋ง ์ปจํ ์ด๋๋ ๋น์ด๋ผ๊ณ ๋ถ๋ฅด๋ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ณ ์์กด๊ด๊ณ๋ฅผ ์ค์ ํ๋ ๊ฒ๊น์ง ๋ด๋น
๋น ์ค๋ธ์ ํธ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๋ด๋นํ๋ ๊ธฐ๋ฅ๋ ์ ๊ณต
๊ตฌ์ฑ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ
@Configuration, @Bean ์ ๋ ธํ ์ด์ ์ด ๋ถ์ ๊ตฌ์ฑ์ ๋ณด ํด๋์ค์ ๋ฉ์๋๋ฅผ ํตํด์ ๋ง๋ค์ด์ง ์ค๋ธ์ ํธ์ ์์กด๊ด๊ณ๋ฅผ ์ ์ํ๋ ์ฝ๋๋, ๊ฐ์ ๊ตฌ์ฑ์ ๋ณด๋ฅผ ์ ๊ณต ๋ฐ์ ์ ์๋ค๋ฉด ๋ค์ํ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ ์ํ ์ ์๋ค.
์์ ์ ๋ง์ด ์ฌ์ฉํ๋ XML์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ @Component ์ ๋ ธํ ์ด์ ์ด ๋ถ์ ํด๋์ค๋ฅผ ๋ชจ๋ ์ฐพ์๋ณด๋ ๋น ์ค์บ๋ ๋ฐฉ์๊ณผ ์์ฑ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ณด๊ณ ์์กด ๋น ์ค๋ธ์ ํธ๋ฅผ ์ ํํ๋๋ฐ ํ์ํ ํ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ ์ฌ์ฉํ ์๋ ์๋ค.
๋น ์ ๋ณด๋ฅผ ์ค์บ๋์ ์ํด์ ๋์ ์ผ๋ก ๋ง๋ค์ด๋ด๋ ๊ฒฝ์ฐ์๋ @ComponentScan ์ ๋ ธํ ์ด์ ์ด ์ฌ์ฉ๋๋ค.
์ค์ ๋ก๋ ๋น ์ค์บ๋ ๋ฐฉ์๊ณผ @Configuration/@Bean์ ๊ฐ์ง ๊ตฌ์ฑ์ ๋ณด ํด๋์ค ๋ ๊ฐ์ง ๋ฐฉ์์ ํผํฉํด์ ์ฌ์ฉํ๋ค.
์ฑ๊ธํค ๋ ์ง์คํธ๋ฆฌ(Singleton Registry)
์ฑ๊ธํค ํจํด์ ๋ค์๊ณผ ๊ฐ์ ๋จ์ ์ ๊ฐ์ง๋ค.
private ์์ฑ์๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์์ํ ์ ์๋ค
์ฑ๊ธํค์ ํ ์คํธํ๊ธฐ ํ๋ค๋ค
์๋ฒ ํ๊ฒฝ์์๋ ์ฑ๊ธํค์ด ํ๋๋ง ๋ง๋ค์ด์ง๋ ๊ฒ์ ๋ณด์ฅํ์ง ๋ชปํ๋ค
์ฑ๊ทธํค์ ์ฌ์ฉ์ ์ ์ญ ์ํ๋ฅผ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋์งํ์ง ๋ชปํ๋ค
์คํ๋ง์ ํ๋์ ์ค๋ธ์ ํธ๋ง ๋ง๋ค์ด์ ธ์ผ ํ๋ค๋ ํ์๋ฅผ ์ถฉ์กฑํ๋ฉด์๋ ์ฑ๊ธํค ํจํด์ ์ฌ์ฉํด์ ๋ง๋ค์์ ๋์ ๋จ์ ์ ๊ฐ์ง์ง์๋๋ก ์ปจํ ์ด๋ ๋ ๋ฒจ์์ ํ๋์ ์ค๋ธ์ ํธ๋ง ๋ง๋ค์ด์ง๋ ๊ฒ์ ๋ณด์ฅํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
์ด๋ ๊ฒ ์ฑ๊ธํค ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค๊ณ ๊ด๋ฆฌํ๋ ์คํ๋ง ์ปจํ ์ด๋๋ฅผ ์ฑ๊ธํค์ ๋ฑ๋กํ๊ณ ๊ด๋ฆฌํ๋ค๋ ์๋ฏธ์์ ์ฑ๊ธํค ๋ ์ง์คํธ๋ฆฌ๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
์คํ๋ง์ ๋น์ด ์์ฑ๋๊ณ ์ ์ฉ๋๋ ๋ฒ์๋ฅผ ๋น์ ์ค์ฝํ(scope)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์คํ๋ง์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น ์ค๋ธ์ ํธ๊ฐ ์ฑ๊ธํค ์ค์ฝํ๋ฅผ ๊ฐ์ง๋๋ก ํ๋ค.
ํ์์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ์ ๋น ์ค๋ธ์ ํธ๊ฐ ๋ง๋ค์ด์ง๋๋ก ํ ์๋ ์๋ค.
DI์ ๋์์ธ ํจํด
๋์์ธ ํจํด์ ๊ตฌ๋ถํ๋ ๋ ๊ฐ์ง ๋ฐฉ์
์ฌ์ฉ ๋ชฉ์ (purpose)
์ค์ฝํ(scope)
์ค์ฝํ์ ์ํด์ ๋ถ๋ฅํ๋ฉด ํ์ฅ์ฑ์ ๊ฐ์ง ํด๋์ค ํจํด๊ณผ ์ค๋ธ์ ํธ ํจํด์ผ๋ก ๋๋ ์ ์๋ค.
ํด๋์ค ํจํด: ์์(inheritance)์ ์ด์ฉ
์ค๋ธ์ ํธ ํจํด: ํฉ์ฑ(composition)์ ์ด์ฉ

๋๋ถ๋ถ์ ๋์์ธ ํจํด์ ์ค๋ธ์ ํธ ํจํด์ด๋ค.
๊ฐ๋ฅํ๋ฉด ์ค๋ธ์ ํธ ํฉ์ฑ์ ์์๋ณด๋ค ๋ ์ ํธํ๋ผ๋ ๋์์ธ ํจํด์ ๊ธฐ๋ณธ ๊ฐ์ฒด์งํฅ ์๋ฆฌ๋ฅผ ๋ฐ๋ฅธ ๊ฒ์ด๋ค.
์ ๋ต ํจํด์ ์ค๋ธ์ ํธ ํฉ์ฑ์ ์ด์ฉ
๋ฐ์ฝ๋ ์ดํฐ ํจํด : ์ค๋ธ์ ํธ์ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ/์ฑ ์์ ๋์ ์ผ๋ก ๋ถ์ฌํ๋ ๋์์ธ ํจํด
์์กด์ฑ ์ญ์ ์์น(Dependency Inversion Principle)
(1). ์์ ์์ค์ ๋ชจ๋(ex. package)์ ํ์ ์์ค์ ๋ชจ๋์ ์์กดํด์๋ ์ ๋๋ค.
๋ ๋ชจ๋
์ถ์ํ์ ์์กดํด์ผ ํ๋ค.
(2). ์ถ์ํ๋ ๊ตฌ์ฒด์ ์ธ ์ฌํญ์ ์์กดํด์๋ ์ ๋๋ค.
๊ตฌ์ฒด์ ์ธ ์ฌํญ์
์ถ์ํ์ ์์กดํด์ผ ํ๋ค.
DIP๋ ๋จผ์ ์ธํฐํ์ด์ค๋ฅผ ํตํด์ ์ถ์ํ์ ์์กดํ๋๋ก ์ฝ๋๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ธํฐํ์ด์ค ์์ ๊ถ์ ์ญ์ ๋ ํ์ํ๋ค
Separate Interface Pattern
์ธํฐํ์ด์ค์ ๊ทธ ๊ตฌํ์ ๋ณ๊ฐ์ ํจํค์ง์ ์์น์ํค๋ ํจํด
์ธํฐํ์ด์ค๋ฅผ ์ด๋ฅผ ๊ตฌํํ ํด๋์ค์ ๊ฐ์ ํจํค์ง๊ฐ ์๋ ์ด ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ์ ๊ฐ์ ํจํค์ง์ ์์นํ๊ฒ ํ๋ค.
๋ง์ฝ ์ด๋ฅผ ์ฌ์ฉํ๋ ํด๋์ค๊ฐ ์ฌ๋ฟ์ธ ๊ฒฝ์ฐ์๋ ๋ณ๊ฐ์ ํจํค์ง๋ก ์ธํฐํ์ด์ค ๊ตฌ๋ถํด๋ ์ ์๋ค.


์์กด์ฑ ์ญ์ ์์น์ ์ ๋ฐ๋ฅด๋ ์ฝ๋๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ.
(1) ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค์ด์ ์ถ์ํํ๊ธฐ.
(2) ๋ชจ๋ ์ฝ๋๊ฐ ์ถ์ํ์๋ง ์์กดํ๋๋ก ๋ง๋ค๊ธฐ.
(3) ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๊ฐ ์๋ ๋ชจ๋๋ก ์ด์ (์ญ์ )์ํค๊ธฐ.
ํ
์คํธ
์๋์ผ๋ก ์ํ๋๋ ํ ์คํธ(Automated Test)
์๋์ผ๋ก ๊ฐ๋ฐํ ์ฝ๋๋ฅผ ํ ์คํธํ๋ ๋ฐฉ๋ฒ์ ๋ฒ๊ฑฐ๋กญ๊ณ ํ์ฉํ๋๋ฐ ํ๊ณ
์ฝ๋๋ก ๋ง๋ค์ด์ ธ ์ธ์ ๋ ์คํํด์ ํ ์คํธํ ์ ์๋ ์๋์ผ๋ก ์ํ๋๋ ํ ์คํธ๊ฐ ํ์
์ด๋ฅผ ํตํด์ ์ง์์ ์ธ ๊ฐ์ ๊ณผ ์ ์ง์ ์ธ ๊ฐ๋ฐ์ด ๊ฐ๋ฅ
๊ฐ๋ฐ์๊ฐ ๋ง๋๋ ํ ์คํธ
ํ ์คํธ๋ฅผ ์ฝ๋๋ก ๋ง๋ค๊ณ ์๋์ผ๋ก ์ํ๋๋ ํ ์คํธ๋ฅผ ์คํํด์ ์์ฑํ ์ฝ๋์ ๋ํ ํผ๋๋ฐฑ
ํ ์คํธ ์์ฑ๊ณผ ์คํ์ด ๊ฐ๋ฐ์ ํ๋ ๊ณผ์ ์ ์ผ๋ถ
ํ ์คํ ํ๋ ์์ํฌ๋ฅผ ์ด์ฉํด์ ํ ์คํธ ์์ฑ๊ณผ ์คํ ๊ณผ์ ์ ํจ์จ์ ์ผ๋ก ์งํ
.
JUnit ํ
์คํธ
JUnit์ ์ผํธ ๋ฒก๊ณผ ์๋ฆญ ๊ฐ๋ง๊ฐ ์ฒ์ ๊ฐ๋ฐํ ๊ฐ์ฅ ๋ํ์ ์ธ ์๋ํ๋ ํ ์คํธ ์ํ ๋๊ตฌ
์๋ฐ ์ธ์ ๋ค๋ฅธ ์ธ์ด๋ก๋ ์ ์ฌํ๊ฒ ๊ฐ๋ฐ๋์ด์ง๋ฉด์ ์ด๋ฅผ ํตํ์ด xUnit์ด๋ผ๊ณ ๋ถ๋ฆผ
JUnit 5
์คํ๋ง ํ๋ ์์ํฌ ์์ฒด ํ ์คํธ์ ์ฌ์ฉ๋๊ณ , ์คํ๋ง์ ์ด์ฉํด์ ๊ฐ๋ฐํ๋ ํ๋ก์ ํธ์์๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ
Junit์ ๊ธฐ๋ณธ์ ์ธ ๋์๋ฐฉ์์ผ๋ก ๊ฐ ํ ์คํธ๋ฅผ ์คํํ ๋๋ง๋ค ๋งค๋ฒ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑ
๋ชจ๋ ํ ์คํธ๊ฐ ๋ค๋ฅธ ํ ์คํธ์ ์ํฅ์ ๋ฐ์ง ์๊ณ , ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๋๋ก
.
PaymentService ํ ์คํธ
์๋ํ๋ ํ ์คํธ๋ ์ธ์ ๋ ์คํํ ์ ์๊ณ ํญ์ ๋์ผํ ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ์ป์ด์ผ ํ๋ค.
๋๋ก๋ ์ธ๋ถ ์์คํ ์ ๋ํ ํ ์คํธ, ํ์ฌ ์๊ฐ๊ณผ ๊ฐ์ด ์ฝ๋์์ ์ฝ๊ฒ ์ ์ดํ ์ ์๋ ๊ฐ์ ์ด์ฉํ๋ ํ ์คํธ๋ฅผ ์์ฑํด์ผ ํ๋๋ฐ, ์ด๋ฐ ๊ฒฝ์ฐ์ ์ผ๊ด๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํ๋ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ๊ฐ ์ฝ์ง ์๋ค.
ํ
์คํธ์ DI
ํ
์คํธ ๋์ญ(Test Double, Imposter), ์คํ
(Stub), ๋ชฉ(Mock)
.
์คํ๋ง DI๋ฅผ ์ด์ฉํ๋ ํ ์คํธ
์คํ๋ง ์ปจํ ์ด๋๋ฅผ ๊ตฌ์ฑํ๊ณ ์ฌ๊ธฐ์ ํ ์คํธ์ ํ์ํ ๋์๊ณผ ์์กด ์ค๋ธ์ ํธ๋ฅผ ์ค์ ํ๊ฑฐ๋ ํ ์คํธ์์ ์ฐธ๊ณ ํ ๋น ์ค๋ธ์ ํธ๋ฅผ ๊ฐ์ ธ์ค๊ฒ ํ ์ ์๋ค.
์คํ๋ง์ ๋ฐฉ๋ํ ์์ ํ ์คํ ์ง์ ๊ธฐ์ ์ ์ ๊ณตํ๋ค.
.
JUnit์์ ์คํ๋ง ์ปจํ
์ด๋๋ฅผ ๋ง๋ค์ด ํ
์คํธ๋ฅผ ์ํํ ๋ @ExtendWith๊ณผ @ContextConfiguration์ ์ด์ฉํ๋ค.
@ExtendedWith
JUnit5 ํ ์คํธ ํด๋์ค๊ฐ ์คํ๋ง ํ ์คํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋๋ก ์ง์
@ContextConfiguration๊ณผ ๊ฒฐํฉ๋ ํฉ์ฑ ์ ๋ ธํ ์ด์ ์ธ@SpringJUnitConfig์ ์ด์ฉํ ์๋ ์๋ค.
@ContextConfiguration
Autowired
ํ ์คํธ ์ฝ๋์ @Autowired๊ฐ ๋ถ์ ์ธ์คํด์ค ๋ณ์๋ฅผ ์ ์ธํ๋ฉฐ ์คํ๋ง ํ ์คํธ์ ์ํด์ ์ธ์คํด์ค ๋ณ์์ ํ์ ๊ณผ ์ผ์นํ๋ ์คํ๋ง ์ปจํ ์ด๋์ ๋น ์ค๋ธ์ ํธ๋ฅผ ์ฃผ์ ํด์ค๋ค.
@Autowired ์ธ์๋ ์คํ๋ง์์ ์ง์ํ๋ ์ฌ๋ฌ๊ฐ์ง ์ข ๋ฅ์ ์ ๋ ธํ ์ด์ ์ ์ง์ํ๋ค.
.
ํ์ต ํ ์คํธ(Learning Test)
์ผํธ ๋ฒก์ ํ ์คํธ์ฃผ๋๊ฐ๋ฐ์ด๋ผ๋ ์ฑ ์์ ์๊ฐ๋ ํ ์คํธ ๋ฐฉ๋ฒ์ ํ ๊ฐ์ง
ํ์ต ํ ์คํธ๋ ๋ด๊ฐ ๋ง๋ค์ง ์์ ์ฝ๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ, API ๋ฑ์ ๋ํ ํ ์คํธ
ํ์ต ํ ์คํธ์ ๋ชฉ์ ์ ์ฌ์ฉํ API๋ ํ๋ ์์ํฌ์ ๊ธฐ๋ฅ์ ํ ์คํธ๋ก ์์ฑํ๊ณ ์คํํด๋ณด๋ฉด์ ์ฌ์ฉ๋ฐฉ๋ฒ์ ๋ฐ๋ฅด๊ฒ ์ดํดํ๋์ง ํ์ธ
ํ์ต ํ ์คํธ๋ ์ผํธ ๋ฒก์ ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ๊ณผ ๋ก๋ฒํธ ๋งํด์ ํด๋ฆฐ ์ฝ๋์์ ์๊ฐ
.
๋๋ฉ์ธ ๋ชจ๋ธ ์ํคํ ์ฒ ํจํด
๋๋ฉ์ธ ๋ก์ง, ๋น์ฆ๋์ค ๋ก์ง์ ์ด๋์ ๋ ์ง ๊ฒฐ์ ํ๋ ํจํด
(1) ํธ๋์ญ์ ์คํฌ๋ฆฝํธ - ์๋น์ค ๋ฉ์๋(PaymentService.prepare)
(2) ๋๋ฉ์ธ ๋ชจ๋ธ - ๋๋ฉ์ธ ๋ชจ๋ธ ์ค๋ธ์ ํธ(Payment)
.
๊ฐ๋ฐ์๊ฐ ๋ง๋๋ ํ ์คํธ
๊ฐ๋ฐํ ์ฝ๋์ ๋ํ ๊ฒ์ฆ ๊ธฐ๋ฅ์ ์ฝ๋๋ก ์์ฑ
์๋์ผ๋ก ํ ์คํธ๋ฅผ ์ํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ํ์ธ
ํ ์คํ ํ๋ ์์ํฌ๋ฅผ ํ์ฉ
ํ ์คํธ ์์ฑ๊ณผ ์คํ๋ ๊ฐ๋ฐ ๊ณผ์ ์ ์ผ๋ถ์ด๋ค
ํ
ํ๋ฆฟ
ํ ํ๋ฆฟ(Template)
๊ณ ์ ๋ ์์ ํ๋ฆ ์์ ๋ณ๊ฒฝํ ์ ์๋ ์ฝ๋๋ฅผ ์ฝ๋ฐฑ ํํ๋ก ์ ๋ฌํด์ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ค์ด์ง ์ค๋ธ์ ํธ
ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด(Template Method Pattern)
์์์ ์ด์ฉํด์ ๊ณ ์ ๋ ํ ํ๋ฆฟ๊ณผ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ํ ๋ฉ์๋ ๋ฑ์ผ๋ก ๋ถ๋ฆฌํ๋ ํจํด
๊ณ ์ ๋ ํ์ ๋ก์ง์ ๊ฐ์ง ํ ํ๋ฆฟ ๋ฉ์๋๋ฅผ ์ํผํด๋์ค์ ๋๊ณ , ๋ฐ๋๋ ๋ถ๋ถ์ ์๋ธํด๋์ค์ ๋ฉ์๋์ ๋๋ ๊ตฌ์กฐ
ํ๋์ ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ธํฐํ์ด์ค ํ์ (SAM)์ ์ค๋ธ์ ํธ ๋๋ ๋๋ค ์ค๋ธ์ ํธ
์ฝ๋ฐฑ(Callback)
์คํ๋๋ ๊ฒ์ ๋ชฉ์ ์ผ๋ก ๋ค๋ฅธ ์ค๋ธ์ ํธ์ ๋ฉ์๋์ ์ ๋ฌ๋๋ ์ค๋ธ์ ํธ
ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋์ง๋ง ๊ฐ์ ์ฐธ์กฐํ๊ธฐ ์ํ ๊ฒ์ด ์๋๋ผ ํน์ ๋ก์ง์ ๋ด์ ๋ฉ์๋๋ฅผ ์คํ์ํค๋ ๊ฒ์ด ๋ชฉ์
ํ ํ๋ฆฟ์ ๋ฉ์๋ ์ฃผ์ ๋ฐฉ์์ผ๋ก ์ ๋ฌ
๋ฉ์๋ ํธ์ถ ์ฃผ์ (method call injection)
DI์ ์ผ์ข ์ผ๋ก ์ปจํ ์ด๋์ ๊ตฌ์ฑ ์ ๋ณด์ ํฌํจ๋์ง ์๊ณ ๋ฉ์๋ ์คํ ์์ ์ ์์กด ์ค๋ธ์ ํธ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์ฃผ์ ํ๋ ๋ฐฉ์์ผ๋ก ๋์
์คํ๋ง์ ๋ฃฉ์ ๋ฉ์๋ ์ฃผ์ (lookup method injection)๊ณผ๋ ๋ค๋ฅด๊ณ , ๋ฐํ์ ์์์ ํตํด์ ๋ฉ์๋์ ๊ตฌํ ์ฝ๋๋ฅผ ์ง์ ์ฃผ์ ํ๋ ๋ฐฉ์
ํ ํ๋ฆฟ ์ฝ๋ฐฑ ํจํด(Template Callback Pattern)
์ฝ๋ ์ค์์ ๋ณ๊ฒฝ์ด ๊ฑฐ์ ์ผ์ด๋์ง ์์ผ๋ฉฐ ์ผ์ ํ ํจํด์ผ๋ก ์ ์ง๋๋ ํน์ฑ์ ๊ฐ์ง ๋ถ๋ถ(
ํ ํ๋ฆฟ)์ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝ๋๋ ์ฑ์ง์ ๊ฐ์ง ๋ถ๋ถ(์ฝ๋ฐฑ)์ผ๋ก๋ถํฐ ๋ ๋ฆฝ์์ผ์ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ ์ ์๋๋ก ํ๋ ๋ฐฉ๋ฒํ ํ๋ฆฟ๊ณผ ์ฝ๋ฐฑ์ ์ฌ์ฉํ๋ ๋ฐฉ์์ ํ๋ ์์ํฌ์ ์ ์ฉ๋๋ ์ ์ด์ ์ญ์ ์ผ๋ก ์ค๋ช ๊ฐ๋ฅ
์ปจํ ์คํธ์ ์ ๋ต(์ฝ๋ฐฑ)์ ๊ต์ฒดํด์ ์ฐ๋ ์ ๋ต ํจํด์ ํน๋ณํ ์ผ์ด์ค๋ก ๋ณผ ์๋ ์์
์ฝ๋ฐฑ์ ์ธํฐํ์ด์ค๋ก ๋ง๋ค์ด์ง๊ณ ๋๋ถ๋ถ ํ๋์ ๋ฉ์๋๋ง ๊ฐ์ง
์ฝ๋ฐฑ์ ์ด์ฉํด์ ํ์ฅ์ฑ์ ์ถ๊ตฌํ๋ ๋ฐฉ์์ ์คํ๋ง์ ๋ง๋ ๋ก๋ ์กด์จ์ด ์ด J2EE Design And Development์์ ์ฒ์ ์๊ฐ
์ฑ ์์ ์๋ก๋ ํ ํ๋ฆฟ์ JDBC๋ฅผ ๋ค๋ฃจ๋ ์ฝ๋์ ์ ์ฉํ๋๋ก ๋ง๋ค์ด์ง JdbcTemplate์ด๊ณ , ํ์ ์คํ๋ง ํ๋ ์์ํฌ๊ฐ ๋ง๋ค์ด์ง ๋ ํฌํจ

ํจํด ์ ์ฉ ์ ๋ฆฌํํ ๋ง
ํจํด ์ ์ฉ
๋ํดํธ ์ฝ๋ฐฑ๊ณผ ํ ํ๋ฆฟ ๋น ์ ์ฉ
์คํ๋ง ์ ๊ณต ํ
ํ๋ฆฟ
RestTemplate
RestTemplate ๋ HTTP API ์์ฒญ์ ์ฒ๋ฆฌํ๋ ํ ํ๋ฆฟ
๊ฐ์ฅ ์ ํ์ ์ธ ์คํ๋ง์ ํ ํ๋ฆฟ๊ณผ ์ฝ๋ฐฑ ๊ธฐ์ ์ ์ฌ์ฉํ ๊ธฐ์
์คํ๋ง์ด ์ ๊ณตํ๋ ๊ฐ์ฅ ์ค๋๋ ๋๊ธฐ ๋ฐฉ์์ REST ํด๋ผ์ด์ธํธ ๊ธฐ์ ์ ํ๋
GET, POST ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋จํ HTTP API๋ฅผ ํธ์ถํ ๋ ์ฌ์ฉํ๊ธฐ์ ํธ๋ฆฌ
๋ค์ํ HTTP API ๊ธฐ์ ์ ์ด์ฉํ๋๋ก ๋ง๋ค ์ ์๋ค.
์ต๊ทผ์ ์คํ๋ง์ ์ถ๊ฐ๋ RestClient์ ์ด์ฉํ๋ฉด ๋ชจ๋ํ API ์คํ์ผ๋ก ๋ HTTP API๋ฅผ ํธ์ถํ๋ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์๊ณ , ์ฌ๋ฌ๊ฐ์ง ์ฝ๋ฐฑ ์ค๋ธ์ ํธ๋ฅผ ์ง์
HTTP Client ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ฅ : ClientHttpRequestFactory
HTTP Client ๊ธฐ์ ์ ์ฌ์ฉํด์ ClientHttpRequest๋ฅผ ์์ฑํ๋ ์ ๋ต
SimpleClientHttpRequest (HttpURLConnection)
JdkClientHttpRequest (HttpClient)
NettyClientRequest
JettyClientRequest
OkHttp3ClientReque
Message Body ๋ณํ ์ ๋ต : HttpMessageConverter
RestTemplate.doExecute()
protected <T> T doExecute(URI url, @Nullable String uriTemplate, @Nullable HttpMethod method, @Nullable RequestCallback requestCallback, @Nullable ResponseExtractor<T> responseExtractor) throws RestClientException {HTTP API ํธ์ถ workflow๋ฅผ ๊ฐ์ง๊ณ ์๋ ํ ํ๋ฆฟ ๋ฉ์๋๋ก ๋ ๊ฐ์ ์ฝ๋ฐฑ์ ๋ฐ์
RequestCallbackvoid doWithRequestใClientHttpRequest requestใ throws IOException;
ResponseExtractorT extractDataใClientHttpResponse responseใ throws IOException;
execute(),getForObject(),postForEntity()๋ฑ ํธ๋ฆฌํ ๋ฉ์๋ ์ ๊ณต
In addition
JdbcTemplate
SQL ์ฟผ๋ฆฌ๋ฅผ ์ํํ๊ฑฐ๋ ๋ฑ๋ก, ์์ , ํ๋ก์์ ํธ์ถ์ ํ ๋ ์ฌ์ฉํ ์ ์๋ ํ ํ๋ฆฟ
JdbcClient
์คํ๋ง 6์๋ JdbcTemplate์ ์ข ๋ ๋ชจ๋ํ๊ฒ ๋ง๋ JdbcClient๊ฐ ์ถ๊ฐ
JdbcTemplate์์ ์ฌ์ฉํ๋ RowMapper์ ๊ฐ์ ์ฝ๋ฐฑ ์ฌ์ฉ ๊ฐ๋ฅ
TransactionTemplate
์คํ๋ง์ ํธ๋์ญ์ ์ถ์ํ ๊ธฐ์ ๊ณผ ํจ๊ป ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ํธ๋์ญ์ ์์ ์ฉ ํ ํ๋ฆฟ
@Transactional์ด ์ ๊ณตํ๋ ํธ๋์ญ์ ๊ฒฝ๊ณ์ค์ ๊ธฐ๋ฅ์ TransactionTemplate์ผ๋ก๋ ๋ชจ๋ ์ ์ฉ ๊ฐ๋ฅ
JDBC, JPA, MyBatis, Hibernate ๋ฑ์ ๋ค์ํ ๋ฐ์ดํฐ ๊ธฐ์ ์ ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅ
JmsTemplate
HibernateTemplate
SqlSessionTemplate
์์ธ
์์ธ๋ ์ ์์ ์ธ ํ๋ฆ์ ์งํ์ ์ด๋ ต๊ฒ ๋ง๋๋ ์ด๋ฒคํธ
์์ธ์ ์ธ ์ํฉ์์๋ง ์ฌ์ฉ
๋ง์ ๊ฒฝ์ฐ ํ๋ก๊ทธ๋จ ์ค๋ฅ, ๋ฒ๊ทธ๋ก ๋ฐ์
์ฌ์๋, ๋์์ ํตํด ์์ธ ์ํฉ์ ๋ณต๊ตฌํด์ ์ ์ ํ๋ฆ์ผ๋ก ์ ํ์ ๋๋น
Error
์์คํ ์
๋น์ ์์ ์ธ ์ํฉ์ด ๋ฐ์ํ์ ๋ ์ฌ์ฉ๋๊ณ ์ฃผ๋ก JVM์์ ๋ฐ์์ผ๋ฐ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์์
๋ณต๊ตฌ๋ฅผ ๊ธฐ๋ํ ์ ์๋ ์ข ๋ฅ์ ์์ธ์ ์ํผ ํด๋์คOutOfMemoryError, ThreadDeath
Exception (checked exception)
Exception์ ์ ํ๋ฆฌ์ผ์ด์ ์ด
๋ณต๊ตฌ๋ฅผ ๊ธฐ๋ํ ์๋ ์๋ ๋ชจ๋ ์์ธ์ ์ํผ ํด๋์ค๋ณต๊ตฌํ ์ ์๋ค๋ฉด RuntimeException์ด๋ ์ ์ ํ ์ถ์ํ ๋ ๋ฒจ์ ์์ธ๋ก ์ ํํด์ ๋์ง๊ธฐ
์ธ์ฒดํฌ ์์ธ/๋ฐํ์ ์์ธ๊ฐ ์๋
์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์๋๋ ์์ธ๋ ์ฒดํฌ ์์ธ๋ก ๋ถ๋ฅ์ฒดํฌ ์์ธ๋
catch๋ฅผ ์ฌ์ฉํด์ ์ก์๋ด๋ ๊ฐ, ๋ฉ์๋์์throws๋ฅผ ์ ์ํด์ ๋ฉ์๋ ๋ฐ์ผ๋ก ๋์ ธ์ผ ํจ
RuntimeException (unchecked exception)
๋ช ์์ ์ธ
์์ธ์ฒ๋ฆฌ๊ฐ ๊ฐ์ ๋์ง ์์catch/throws๋ฅผ ์ฐ์ง ์์๋ ๋ฌธ์ ์์ด ์ปดํ์ผ
JPA
์๋ฐ์์ RDB๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ๊ธฐ์ (JDBC, JPA, MyBatis..)์ DB์์ ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ DataSource๋ฅผ ์ฌ์ฉ
EmbeddedDatabaseBuilder
์ ํ๋ฆฌ์ผ์ด์ ๋ด์ฅํ DB(H2, HSQL, Derby)๋ฅผ ๋น ๋ฅด๊ฒ ์ ์ ํ๊ณ DataSource๋ฅผ ์์ฑํ๋๋ฐ ์ฌ์ฉํ๋ ๋น๋
LocalContainerEntityManagerFactoryBean
EntityManagerFactory๋ฅผ XML ์์ด ์คํ๋ง์ ๋น ์ค์ ์ฉ ํฉํ ๋ฆฌ ๋ฉ์๋์์ ๊ฐ๋จํ ์์ฑํ๋๋ฐ ์ฌ์ฉ
JPA์ EntityManager๋ EntityManagerFactory๊ฐ ์์ด์ผ ๋ง๋ค ์ ์๋ค.

Repository,EntityManagerFactory,DataSource๋ Bean์ผ๋ก ๋ฑ๋ก๋์ด ๊ด๋ฆฌ์คํ๋ง ๋ถํธ์ ์๋ ๊ตฌ์ฑ ๋ฐฉ์์ ์ด์ฉํด JPA ์ฌ์ฉ ์
EntityManagerFactory,DataSource๋น์ ์๋์ผ๋ก ๋ฑ๋ก
EntityManager์ ํธ๋์ญ์
์ฝ๋์ ์ํด์ ์ํฐํฐ ๋งค๋์ ๋ฅผ ์์ฑํ๊ณ ํธ๋์ญ์ ์ ๊ฐ์ ธ์ JPA์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
// Non-managed environment idiom
EntityManager em = emf.createEntityManager();
EntityTransaction tx = null;
try {
tx = em.getTransaction();
tx.begin();
// do some work
...
tx.commit();
}
catch (RuntimeException e) {
if ( tx != null && tx.isActive() ) tx.rollback();
throw e; // or display error message
}
finally {
em.close();
}Order ๋ฆฌํฌ์งํ ๋ฆฌ์ ์์ธ
JDBC๋ฅผ ์ํ์ค์ ๋ฐ์ํ๋ ์์ธ๋ SQLException์ผ๋ก ๋ง๋ค์ด์ ธ์ ๋์ ธ์ง๋ค.
JPA๋ฅผ ์ด์ฉํ๋ ์ฝ๋์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ์ฃผ๋ก JDBC์ SQLException์ ๋ฉํํด์ JPA์ ํ์ค ์์ธ๋ก ๋ง๋ค์ด์ ๋์ ธ์ง๋ค.
jakarta.persistence.PersistenceException ํ์ค JPA์ ์์ธ ์์ JPA์ ๊ตฌํ ๊ธฐ์ (Hibernate ๋ฑ)์ ์์ธ๊ฐ ๋ค์ ๋ฉํ๋์ด์ ๋์ ธ์ง๋ค
DataAccessException ์ถ์ํ
JDBC SQLException
JDBC๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ชจ๋ ๊ธฐ์ ์์ ๋ฐ์ํ๋ ์์ธ
JDBC, MyBatis, JPA ...
DB ์๋ฌ์ฝ๋์ ์์กดํ๊ฑฐ๋, ๋ฐ์ดํฐ ๊ธฐ์ ์ ์์กด์ ์ธ ์์ธ์ฒ๋ฆฌ
DataAccessException
DB์ ์๋ฌ์ฝ๋์ ๋ฐ์ดํฐ ์ก์ธ์ค ๊ธฐ์ ์ ๋ ๋ฆฝ์ ์ธ ์์ธ ๊ตฌ์กฐ
์ ์ ํ ์์ธ ๋ฒ์ญ(exception translation) ๋๊ตฌ๋ฅผ ์ ๊ณต

์คํ๋ง์ ๋ฐ์ดํฐ ์์ธ ์ถ์ํ๊ฐ ์ ์ฉ๋๋ฉด JDBC์ SQLException, JPA์ ์์ธ ๋ฑ์ด ์คํ๋ง์ด ์ ์ํ ์์ธ ๊ณ์ธต๊ตฌ์กฐ์ ์์ธ๋ก ๋ฒ์ญ๋๊ณ , ์ค์ ๋ฐ์ํ ์์ธ๋ ๋ํ๋ ํํ๋ก ์ ๋ฌ
๊ธฐ์ ์ ๋ณํ๊ฐ ์์ธ ์ฒ๋ฆฌํ๋ ์ฝ๋์ ์ํฅ์ ์ฃผ์ง ์๋๋ก ๋ง๋ค์.
์๋น์ค ์ถ์ํ
์๋ฐ ์๋ฒ ๊ธฐ์ (J2Ee/JavaEE)์ ์ฌ๋ฌ ๊ณ์ธต์ผ๋ก ๊ตฌ๋ถํด์ ๊ฐ๋ฐํ๋ ๋ ์ด์ด ์ํคํ ์ฒ๋ฅผ ์ด์ฉ
์๋น์ค
์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น์ด ์กด์ฌํ๋ ๊ณ์ธต ๊ตฌ์กฐ

.
์๋น์ค
ํด๋ผ์ด์ธํธ์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํด์ฃผ๋ ์ค๋ธ์ ํธ๋ ๋ชจ๋
์๋น์ค๋ ์ผ๋ฐ์ ์ผ๋ก ์ํ๋ฅผ ๊ฐ์ง์ง ์์(stateless)
์ํ์๋ ์ฑ๊ธํค ์คํ๋ง ๋น์ ์ฌ์ฉํ๊ธฐ ์ ํฉ(@Component, @Service)
๋ณดํต ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น์ฆ๋์ค ๋ก์ง/๋๋ฉ์ธ ๋ก์ง์ ์ฝ๋๊ฐ ์์นํ๋ ๊ณ์ธต์ ์๋น์ค ๊ณ์ธต(Service Layer)์ด๋ผ๊ณ ๋ถ๋ฅด๊ณ , ๊ทธ ์ธ์๋ ๋ค์ํ ์ด๋ฆ์ผ๋ก ๋ถ๋ฆฐ๋ค.
.
์๋น์ค์ ์ข ๋ฅ
์ ํ๋ฆฌ์ผ์ด์ ์๋น์ค (application service)
๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๊ธฐ ์์ํ๋ ์์์ , ์ข ๋ฃ๊ฐ ๋๋ ๊ฒฝ๊ณ์ ์๋ ์๋น์ค
๋๋ฉ์ธ ์๋น์ค (domain servic)
๋๋ฉ์ธ ๋ชจ๋ธ ํจํด์์ ๋น์ฆ๋์ค ๋ก์ง์ ํน์ ์ํฐํฐ๋ก๋ ํํํ๊ธฐ ํ๋ ๋ก์ง์ ๋ด๋ ์๋น์ค
์ธํ๋ผ ์๋น์ค (infrastructure service)
๋๋ฉ์ธ/์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ์ฐธ์ฌํ์ง ์๊ณ , ๊ธฐ์ ์ ์ ๊ณตํ๋ ์๋น์ค
๋ฉ์ผ, ์บ์, ํธ๋์ญ์ , ๋ฉ์์ง..
์๋น์ค ์ถ์ํ์ ๋์
Application Service
๊ฐ์ฅ ์ค์ํ ๋๋ฉ์ธ/์ ํ๋ฆฌ์ผ์ด์ /๋น์ฆ๋์ค ๋ก์ง (๋๋ฉ์ธ ์ค๋ธ์ ํธ/์ํฐํฐ ํ์ฉ)
@Service๋น์ผ๋ก ๊ตฌ์ฑApplication/Service ๊ณ์ธต์ ์กด์ฌ
์ธํ๋ผ ์๋น์ค์ ๋์์ด ํ์
์ธํ๋ผ ๋ ์ด์ด์ ์กด์ฌํ๋ ๊ธฐ์ ์ ๊ฐ๋ฅํ ์์กดํ์ง ์๋๋ก ๋ง๋ค์ด์ผ ํจ
PaymentService - ExRateService์ ์ ์ฉ๋ DIP
๊ธฐ์ ์ ๋
๋ฆฝ์ ์ธ ์๋น์ค
OrderService
๋ฐ์ดํฐ ์ก์ธ์ค ๊ธฐ์ JPA์ ์์กด
JPA๋ฅผ ์ฌ์ฉํ๋
Repository,Transaction Manager์ ์์กด
Order
@Entity๊ฐ ๋ถ์ JPA ์ํฐํฐ๋ก ์์ฑ์ปดํ์ผ ์์ ์๋ง JPA ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กด
ํด๋์ค ์ฝ๋์๋ JPA ๊ธฐ์ ๊ณผ ๊ด๋ จ๋ ๋ด์ฉ์ด ๋ค์ด๊ฐ์ง ์์
JPA๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋ฐํ์์๋ JPA ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ์ง ์์
Order์์ JPA ๋ฉํ๋ฐ์ดํฐ ๋ถ๋ฆฌ
@Entity์ ์ปดํ์ผํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ๋ง ๊ฐ์ง์ํฐํฐ์ ๋์์๋ ์ํฅ์ ์ฃผ์ง ์๊ธฐ ๋๋ฌธ์ ์ํฐํฐ ํด๋์ค๋ฅผ ๋ค๋ฅธ ๋ฐ์ดํฐ ๊ธฐ์ ์์ ์ฌ์ฉ ๊ฐ๋ฅ
์ ๊ฑฐํ๊ณ ์ถ๋ค๋ฉด ์ธ๋ถ XML ๋์คํฌ๋ฆฝํฐ๋ฅผ ์ฌ์ฉ
Order์์ JPA ๋ฉํ๋ฐ์ดํฐ ๋ถ๋ฆฌ
ํน์ ๊ธฐ์ (JPA)์ ์์กดํ์ง ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์๋น์ค
ํธ๋์ญ์
์๋น์ค ์ถ์ํ
Transaction์ ๋ฐ์ดํฐ ๊ธฐ์ ์ ๋ฐ๋ผ ๋ฐฉ๋ฒ์ด ๋ค๋ฅด๋ค
JDBC
JPA
MyBatis
Jooq
์ถ์ํ
๊ตฌํ์ ๋ณต์กํจ๊ณผ ๋ํ ์ผ์ ๊ฐ์ถ๊ณ ์ค์ํ ๊ฒ๋ง ๋จ๊ธฐ๋ ๊ธฐ๋ฒ
์ฌ๋ฌ ์ธํ๋ผ ์๋น์ค ๊ธฐ์ ์ ๊ณตํต์ ์ด๊ณ ํต์ฌ์ ์ธ ๊ธฐ๋ฅ์ ์ธํฐํ์ด์ค๋ก ์ ์
์ด๋ฅผ ๊ตฌํํ๋ ์ด๋ํฐ๋ฅผ ๋ง๋ค์ด ์ผ๊ด๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๊ฒ
์คํ๋ง ํธ๋์ญ์ ๊ด๋ฆฌ ๊ธฐ์ ์ ํต์ฌ์ ํธ๋์ญ์ ์ถ์ํ
๋ฐ์ดํฐ ์ก์ธ์ค ๊ธฐ์ ์ ์๊ด์์ด ๊ณตํต์ ์ผ๋ก ์ ์ฉ๋๋ ํธ๋์ญ์
์ธํฐํ์ด์ค์ธ PlatformTransactionManager ์ ๊ณต

PlatformTransactionManagerํธ๋์ญ์ ๋งค๋์ ๋ฅผ ์ธํฐํ์ด์ค ํํ๋ก ๋ง๋ค์ด์ ํธ๋์ญ์ ์ ์ํ ๊ณตํต์ ์ธ ํต์ฌ ๊ธฐ๋ฅ์ ์ถ์ํ
public interface PlatformTransactionManager extends TransactionManager { TransactionStatus getTransaction(@Nullable TransactionDefinition definition) throws TransactionException; void commit(TransactionStatus status) throws TransactionException; void rollback(TransactionStatus status) throws TransactionException; }
JpaTransactionManager,DataSourceTransactionManager,JtaTransactionManager,HibernateTransactionManagerํธ๋์ญ์ ์ฌ์ฉ๋ฐฉ๋ฒ์ด ๋ค๋ฅธ ๊ธฐ์ ๋ค์ ์ค๊ฐ์์ ๋ณํํด์ฃผ๋ ์ด๋ํฐ
JDBC ๋ฐ์ดํฐ ์ก์ธ์ค ๊ธฐ์
JdbcClient
Spring 6.1์์ ์ถ๊ฐ
SQL์ ์ฌ์ฉํ๋ JDBC ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ์ ์ฐํ๊ฒ ์์ฑํ๋๋ก ์ง์(์ผ์ข ์ ํ ํ๋ฆฟ/์ฝ๋ฐฑ)
SQL์ ์ฌ์ฉํ๋ ๊ฐ๋จํ ์ฝ๋๋ก ์์ ํ๊ณ , ํธ๋์ญ์ ์ถ์ํ๊ฐ ์ ์ฉ๋ DB ์ก์ธ์ค ์ฝ๋๋ฅผ ์์ฑ ๊ฐ๋ฅ
์คํ๋ง์ JdbcTemplate์ ๋์ฒด
JDBC๋ฅผ ์ง์ ์ฌ์ฉํ๋ ์ฝ๋๋ฅผ ์ด์ฉํ ๋๋ JdbcTransactionManager๋ฅผ Transaction Manager Object๋ก ๋ฑ๋กํด์ ์ฌ์ฉ
ํธ๋์ญ์
ํ
์คํธ
ํธ๋์ญ์ ์ด ํ์ํ ๊ณณ์ ์ ํํ๊ฒ ์ ์ฉ๋์๋์ง ํ ์คํธํ๊ธฐ๋ ๋งค์ฐ ์ด๋ ต๋ค.
ํนํ
JDBC์ฒ๋ผ ์๋ ์ปค๋ฐ์ด ๋๊ฑฐ๋SpringDataJPA์ฒ๋ผ ๊ธฐ๋ณธ ๋ฆฌํฌ์งํ ๋ฆฌ ๊ตฌํ์์ ํธ๋์ญ์ ์ ์์์ ์ ์ฉํด์ฃผ๋ ๊ธฐ์ ์ ์ฌ์ฉํ ๊ฒฝ์ฐ๋ชจ๋ ์์ ์ด ์ฑ๊ณตํ๋ฉด ํ๋์ ํธ๋์ญ์ ์ผ๋ก ์งํ๋ ๊ฒ์ธ์ง ์ฌ๋ฌ๊ฐ์ ํธ๋์ญ์ ์ผ๋ก ์ชผ๊ฐ์ง ๊ฒ์ธ์ง ํ์ธ์ด ์ด๋ ค์
ํธ๋์ญ์ ์ค๊ฐ์ ์คํจํ๋ ์ผ์ด์ค๋ฅผ ๋ง๋ค ์ ์๋ค๋ฉด ๋กค๋ฐฑ ์ฌ๋ถ๋ก ํ์ธ ๊ฐ๋ฅ
ํธ๋์ญ์
ํ๋ก์
์คํ๋ง์ ํธ๋์ญ์
ํ๋ก์๋ ProxyFactoryBean๊ณผ AOP ํ๋ก์๋ฅผ ์ด์ฉํด์ ๋ง๋ค์ด์ง๋ค.
@Transactional and AOP
์คํ๋ง์ด ๋ง๋ค์ด์ฃผ๋ ํธ๋์ญ์ ํ๋ก์
@Tranactional์ด ๋ถ์ ํด๋์ค์ ๋ฉ์๋๊ฐ ํธ๋์ญ์ ์์์ ์คํ๋๋๋ก ํ๋ก์๋ฅผ ์์ฑ
Spring Proxy AOP
AOP๋ ์คํ๋ง์์ ๊ทธ๋ค์ง ์ฑ๊ณตํ์ง ๋ชปํ ํต์ฌ ๊ธฐ์ ์ค์ ํ๋
ํ์ฉ ์ฉ๋๊ฐ ์ ํ์ ์ด๋ฉด์ ๋ง์ ์ฌ์ฉํ๊ธฐ๋ ๋งค์ฐ ์ด๋ ค์
์คํ๋ง์ด ๋ง๋ค์ด ๋์
ํธ๋์ญ์ ๊ณผ๋ณด์๊ธฐ์ ์์๋ ์ ์ฉํ๊ฒ ํ์ฉ์ง์ ํ์ฉํ๋ ค๋ฉด ๊ฝค ๋ง์ ํ์ต์ด ํ์
AOP๋ ์๋๋๋ผ๋ ๋ฐ์ฝ๋ ์ดํฐ/ํ๋ก์ ํจํด์ ๋์์๋ฆฌ๋ฅผ ์ดํดํ๋ฉด ํ์ํ ๊ณณ์ ํ์ฉ ๊ฐ๋ฅ
์คํ๋ง์ผ๋ก ์ด๋ป๊ฒ ๊ฐ๋ฐํ ๊ฒ์ธ๊ฐ?
์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ํ์ํ ์์
์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ์ค๊ณํ๊ณ ์คํ๋ง ๋น ์ ์
๊ตฌ์ฑ์ ๋ณด ๋ฉํ๋ฐ์ดํฐ ์์ฑ
์คํ๋ง ์ปจํ ์ด๋ ์ค๋น

์คํ๋ง ๊ตฌ์ฑ์ ๋ณด ๋ฉํ๋ฐ์ดํฐ
์คํ๋ง ๋น์ ์ ์(ํด๋์ค, ์ด๋ฆ, ์์ฑ์, ํ๋กํผํฐ, ์คํ ์์ด์ด๋ง)
์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ ๊ตฌ์ฑ์ ๋ณด (
@Component,@Autowired)์๋ฐ ๊ธฐ๋ฐ ๊ตฌ์ฑ์ ๋ณด (
@Configuration,@Bean)์๋ ๊ตฌ์ฑ์ ๋ณด(SpringBoot
@AutoConfiguration)
์คํ๋ง์ด ์ ๊ณตํ๋ ์ธํ๋ผ ๋น ํ์ฉ
์คํ๋ง๋ถํธ์ ์๋ ๊ตฌ์ฑ๊ณผ ํ๋กํผํฐ ์ค์ ํตํด ํ์ฉ ๊ฐ๋ฅ
์๋ ๊ตฌ์ฑ์ ์ํด ๋ด๋ถ์์ ๋ง๋ค์ด์ง๋ ๋น์ ๊ตฌ์กฐ๋ฅผ ์ดํด
ํ๋กํผํฐ ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ์ด์ฉํ ์ปค์คํ ๋ง์ด์ง
@Bean์ค๋ฒ๋ผ์ด๋ฉ์ ์ด์ฉํ ๊ตฌ์ฑ@Enable๋ก ์์ํ๋ ๊ธฐ๋ฅ
์คํ๋ง์ ๊ฐ ๋ชจ๋ ๊ธฐ์ ํ์ฉ
์คํ๋ง๊ณผ ์ด์ ๋์๋๋ ์คํ๋ง ๋ถํธ์ ๊ธฐ๋ฅ์ ํจ๊ป ํ์ต
ํ ์คํธ
๋ฐ์ดํฐ ์ก์ธ์ค (JDBC, JPA)
์นMVC
REST Client 4๊ฐ์ง
ํ์คํฌ ์คํ, ์ค์ผ์ค๋ง
์บ์
๋ฆฌ์กํฐ๋ธ
์คํ๋ง ํ๋ก์ ํธ / ์์ฝ์์คํ
Spring Boot
Spring Data
Spring Security
Spring Cloud
Spring Session
Spring Integration
Spring Modulith
Spring Batch
Spring AI
..
๋ฒ์ธ. ์คํ๋ง๊ณผ JDK ์ ๊ทธ๋ ์ด๋
์๋ก์ด ์คํ๋ง ๋ถํธ ํ๋ก์ ํธ๋ฅผ ์์ฑ ํ ์ฐธ๊ณ ํด์ ๋ณ๊ฒฝ
gradle/wrapper/gradle-wrapper.propertiesbuild.gradlesettings.gradle
๋ณ๊ฒฝ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ํ์ธ
Last updated