์ธํ๋ฐ ๊น์ํ๋์ ์คํ๋ง ํต์ฌ ์๋ฆฌ-๊ธฐ๋ณธํธ ๊ฐ์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑํ ๊ธ์ ๋๋ค.
Spring์ด๋?
์คํ๋ง์ ๋ฌธ๋งฅ์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ์ง ์๋ฏธ๋ฅผ ๊ฐ๋๋ค. ์คํ๋ง ์ํ๊ณ ์ ์ฒด๋ฅผ ์๋ฏธํ๊ธฐ๋ ํ์ง๋ง, ์คํ๋ง DI ์ปจํ ์ด๋๋ ์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ์๋ฏธํ๋ ๊ฒฝ์ฐ๋ ์๋ค.
์คํ๋ง์ ์ฌ๋ฌ๊ฐ์ง ๊ธฐ์ ์ ๋ชจ์์ผ๋ก, Spring Boot, Spring Framework, Spring Data ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ๊ณต์ ํํ์ด์ง์ ๊ฐ๋ฉด ์๋ ์ฌ์ง๋ณด๋ค ๋ ๋ง์ ๊ธฐ์ ๋ค์ ํ์ธํ ์ ์๋ค.
๋ง์ ๊ธฐ์ ๋ค ์ฌ์ด์์๋ ๋ํ์ ์ธ ๊ธฐ์ ์ด ์๋ค๋ฉด, ๋ฐ๋ก ์คํ๋ง ํ๋ ์์ํฌ์ ์คํ๋ง ๋ถํธ์ด๋ค.
์คํ๋ง ํ๋ ์์ํฌ๋ ์ค๋ฆฌ์ง๋ํฉ์ ํด๋นํ๋ ๊ธฐ์ ๋ก, ์คํ๋ง DI ์ปจํ
์ด๋, AOP, JDBC ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ง์ํ๋ค.
์คํ๋ง ๋ถํธ๋ ํ์ฅํฉ์ด์ง๋ง ์์ฆ์๋ ํ์์ ์ผ๋ก ์ฌ์ฉํ๋ค. ์คํ๋ง๋ถํธ๋ ์คํ๋ง์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํด์ฃผ๋ ์ญํ ์ด๋ค.
Spring์ ์ ํ์ํ์๊น?
์คํ๋ง์ด ํ์ํ๊ธฐ ์ ์๋ EJB
๋ผ๋ ์๋ฐ ์ข
ํฉ์ ๋ฌผ์ธํธ๊ฐ ์์๋๋ฐ ๋๋ฆฌ๊ณ , ์ด๋ ต๊ณ , ๋น์๋ค. EJB๋ ํ์ค ๊ธฐ์ ์ด์๊ธฐ์ ๋๋ฆฌ ์ฐ์์ง๋ง, EJB๋ก ๋ง๋ ์ฝ๋๋ EJB์ ์์กด์ ์ด๊ณ , ์ข
์์ ์ด์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด์งํฅ์ ์ฅ์ ๋ค์ ์ ๋ถ ๊ฐ๋ ค๋ฒ๋ ธ๋ค.
๊ฒฐ๊ตญ EJB์ ๊ณ ํต๋ฐ๋ ๊ฐ๋ฐ์๋ค์ด ์ข์ ๊ฐ์ฒด ์งํฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ธฐ ์ํด ์คํ์์ค ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๋๋ฐ, ๊ทธ๊ฒ ๋ฐ๋ก ์คํ๋ง์ด๋ค. ์คํ๋ง์ ๊ฐ์ฒด์งํฅ์ ์ฅ์ ๋ค์ ์ฐพ์ ์์ํ ์๋ฐ ๊ฐ์ฒด(POJO)๋ก ๋์๊ฐ๊ณ ์ ํ์ํ๋ค. ์ถ์ด EJB ๊ฒจ์ธ์ ๋ฒํ จ๋ธ ๊ฐ๋ฐ์๋ค์๊ฒ ์ฐพ์์จ ๋ด ๊ฐ์ ์กด์ฌ์ธ ๊ฒ์ด๋ค.
๊ฐ์ฒด์งํฅ์ ์ฅ์ : ๋คํ์ฑ
๊ทธ๋ ๋ค๋ฉด ์คํ๋ง์ด ์ถ๊ตฌํ๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ฅ์ ์ด๋ ๋์ฒด ๋ฌด์์ผ๊น?
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์, ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ณ ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์๊ฒ ๋ง๋ ๋ค. ์กฐ๊ธ ๋ ์ฝ๊ฒ ๋งํ๋ฉด, ๋ ๊ณ ๋ธ๋ก์ฒ๋ผ ํ๋ก๊ทธ๋จ์ ๊ฐ ๋ถ๋ถ์ ์ชผ๊ฐ์ ๋ชจ๋ํํ ๋ค, ๋์ค์ ์กฐ๋ฆฝํ ์ ์๊ฒ ํด์ค๋ค. ๋๋ฌธ์ ๊ฐ ๋ชจ๋์ด ์๋ก ์ข ์์ ์ด๊ฑฐ๋ ์์กด์ ์ด์ง ์๋๋ก ์ค๊ณํด์ผ ํ๋๋ฐ, ์ด๋ ๊ฐ๋ฐ์๋ค์ ์ฝ๋๊ฐ ์๋ก ์ํฅ์ ๋ผ์น์ง ์์ ๋๊ท๋ชจ ์์ ์ ์ฉ์ดํ๊ฒ ํด์ค๋ค.
๋ก๋ฏธ์ค์ ์ค๋ฆฌ์ฃ ๋ฎค์ง์ปฌ์ ์๋ก ๋ค์ด๋ณด์. ๊ณต์ฐ์ ๋ฐค๋ฎ์ผ๋ก ํด์ผ ํ๋ฏ๋ก ๋ฐฐ์ฐ๋ค์ ์ปจ๋์ ๊ด๋ฆฌ๋ฅผ ์ํด ๋ฐฐ์ญ ๋น 2~3์ธ์ ๋ฐฐ์ฐ๋ฅผ ์บ์คํ ํ ์ํฉ์ด๋ค. ๊ฐ ๋ฐฐ์ฐ๋ค์ ๋งก์ ์ญํ ์ ์ถฉ์คํ ์ฐ๊ธฐ(๊ตฌํ)ํ๋ค.
์ด๋ฐ ๊ตฌ์กฐ๋ ๋ฐฐ์ฐ ๊ต์ฒด๊ฐ ๊ณต์ฐ์ ์ง์ฅ์ ์ฃผ์ง ์๋๋ค. ๊ณต์ฐ์ ์๋ A๋ฐฐ์ฐ๊ฐ ๊ฐ์๊ธฐ ๋ชธ์ด ์ํ๋, B๋ฐฐ์ฐ๋ก ๊ต์ฒดํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋ก๋ฏธ์ค ์ญ์ ๋ฐฐ์ฐ๊ฐ ๋ฐ๋์๋ค๊ณ ํด์ ์คํ ๋ฆฌ๊ฐ ๋ฐ๋๊ฑฐ๋, ์ค๋ฆฌ์ฃ ์ญ์ ๋์ฌ๊ฐ ๋ฐ๋๋ ์ผ์ ์๋ค. ์ด๊ฒ ๋ฐ๋ก ์ ์ฐํ๊ณ , ๋ณ๊ฒฝ์ด ์ฉ์ดํ๋ค๋ ๊ฒ์ด๋ค.
์ด์ฒ๋ผ ์ปดํฌ๋ํธ๋ฅผ ์ฝ๊ฒ ๋ณ๊ฒฝํ๋ฉด์ ๊ฐ๋ฐํ ์ ์๋๋ก ๋ง๋๋ ๊ฒ์ ๋คํ์ฑ(Polymorphism)์ด๋ผ๊ณ ํ๋ค. ๋คํ์ฑ์ ํต์ฌ์ ์ญํ (์ธํฐํ์ด์ค)๊ณผ ๊ตฌํ(๊ฐ์ฒด)์ ๋ถ๋ฆฌํ์ฌ, ๊ตฌํ์ ๋ณ๊ฒฝํด๋ ์ญํ ์๋ ์ํฅ์ด ๊ฐ์ง ์๋๋ก ํ๋ค๋ ๋ฐ ์๋ค.
๋ง์ฝ ์ค๋ฆฌ์ฃ์ ๋์ฌ ์ค์ ๋ฐฐ์ฐ ๊ฐ๊ทธ๊ฐ ๋ค์ด๊ฐ ์์๋ค๋ฉด ์ด๋จ๊น? ๋ก๋ฏธ์ค์ ๋ฐฐ์ฐ๋ฅผ ๊ต์ฒดํ๋ฉด ์ค๋ฆฌ์ฃ์ ๋์ฌ๋ฅผ ๋ฐ๊ฟ์ผ ํ๋ค. ์ด๋ฅผ ๋๊ณ ์ฐ๋ฆฌ๋ ์ค๋ฆฌ์ฃ ๋ฐฐ์ญ์ด ๋ก๋ฏธ์ค์๊ฒ ์ข ์์ ์ด๊ณ , ์์กด์ ์ด๋ผ๊ณ ํ๋ค.
์๋ฐ์์์ ๋คํ์ฑ
์๋ฐ๋ ๊ฐ์ฒด์งํฅ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์, ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌํ๋ค. ์๋ฐ์์๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ญํ ์ ์ ์ํ๊ณ , ํด๋์ค๋ฅผ ํตํด ๊ตฌํ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ค๋ฒ๋ผ์ด๋ฉ์ ํตํด ๋คํ์ฑ์ ์คํํ ์ ์๋ค.
interface Juliet {
void cry();
}
class KimTaeHee implements Juliet {
void cry() {
...
}
}
class JeonJiHyeon implements Juliet {
void cry() {
...
}
}
๋ง์ฝ ์ค๋ฆฌ์ฃ์ด ์ฐ๋ ์ฅ๋ฉด์์, ๋ฐฐ์ฐ๊ฐ ๊นํํฌ๋ผ๋ฉด ๊นํํฌ์ cry()
๊ฐ ํธ์ถ๋๊ณ , ์ ์งํ์ด๋ผ๋ฉด ์ ์งํ์ cry()
๊ฐ ํธ์ถ๋ ๊ฒ์ด๋ค. ์ด๋ฌํ ์ค๋ฒ๋ผ์ด๋ฉ์ ์คํ ์์ ์ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ ์ ์๊ฒ ํด์ค๋ค. ๋ฐฉ๊ธ ์ ์ฅ๋ฉด๊น์ง ๊นํํฌ๊ฐ ์ค๋ฆฌ์ฃ์ ์ฐ๊ธฐํ๊ณ ์๋ค๊ฐ ์ ์งํ์ผ๋ก ๊ต์ฒด๋์ด๋ ๊ณต์ฐ์๋ ์๋ฌด ์ง์ฅ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด์ฒ๋ผ ๋คํ์ฑ์ ์ ์งํจ ์ค๊ณ๋ ํ์ฅ ๊ฐ๋ฅํ๊ณ , ๋ณ๊ฒฝ์ด ์ฉ์ดํ๋ค. ๊ณต์ฐ ํ์๊ฐ ๋์ด๋ ๋ฐฐ์ฐ๋ฅผ ํ๋ช ๋ ์บ์คํ ํ๊ฑฐ๋, ๊ณต์ฐ ์ง์ , ์ฌํ๊ฒ๋ ๊ณต์ฐ ๋์ค์ ๋ฐฐ์ฐ๋ฅผ ๊ต์ฒดํด๋ ์๋ฌด ๋ฌธ์ ๊ฐ ์๋ค.
ํ์ง๋ง ์ด๋ฌํ ์ค๊ณ์๋ ํ๊ณ์ ์ ์กด์ฌํ๋ค. ๋ฐ๋ก ์ญํ ์์ฒด๊ฐ ๋ณํ๋ฉด, ํฐ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ค๋ ๊ฒ์ด๋ค. ์ค๋ฆฌ์ฃ ์ญํ ์ด ๋ก๋ฏธ์ค์ ์ฌ๋์ ๋น ์ง์ง ์๋ ๊ฑธ๋ก ๋ณํ๋ค๋ฉด? ๋ฐฐ์ฐ๋ค์ด ์๋ก์ด ๋๋ณธ์ ์ธ์ฐ๋ ๊ฒ์ ๋ฌผ๋ก ์ด๊ณ , ๋ก๋ฏธ์ค ์ญํ ๋ ํฌ๊ฒ ์์ ๋์ด์ผ ํ๋ค.
๊ทธ๋์ ์ ์คํ๋ง์ธ๋ฐ?
์คํ๋ง์ ๋คํ์ฑ์ ๊ทน๋ํํ ์ ์๋๋ก ๋์์ค๋ค. ์คํ๋ง์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ๋ค, ์๋ฅผ ๋ค์ด ์ ์ด์ ์ญ์ (Inversion Of Control)์ด๋ ์์กด๊ด๊ณ ์ฃผ์ (Dependency Injection)์ ์ ๋ถ ๋คํ์ฑ์ ์ด๋ฆฌ๊ธฐ ์ํด ์ ๊ณตํ๋ ๊ฒ์ด๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ด์ฉํด ์ค๋ฆฌ์ฃ์ ๋ฐฐ์ฐ๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ๊ต์ฒดํ ์ ์๋ค.
'๐๐ฉ๐ซ๐ข๐ง๐ > ๐๐๐ฌ๐ข๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ปดํฌ๋ํธ ์ค์บ (0) | 2023.09.02 |
---|---|
์คํ๋ง์์์ ์ฑ๊ธํค ํจํด (0) | 2023.09.02 |
์คํ๋ง ์ปจํ ์ด๋๋? (0) | 2023.09.02 |
์ ์ด์ ์ญ์ (IoC)๊ณผ ์์กด๊ด๊ณ ์ฃผ์ (DI)์ด๋? (0) | 2023.08.28 |
๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น (0) | 2023.08.28 |