-
EJB(Enterprise Java Bean)
-
EJB์ ๋ฌธ์ ์
-
Spring์ด๋?
-
์คํ๋ง ๋ถํธ
-
์คํ๋ง์ ํต์ฌ ๊ฐ๋
-
SOLID - ์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น
-
SRP : ๋จ์ผ ์ฑ ์ ์์น
-
OCP : ๊ฐ๋ฐฉ-ํ์ ์์น
-
OCP์ ๋ฌธ์ ์
-
LSP : ๋ฆฌ์ค์ฝํ ์นํ ์์น
-
ISP : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น
-
DIP : ์์กด๊ด๊ณ ์ญ์ ์์น
-
๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ์คํ๋ง
-
Reference
์ฐ์ ์คํ๋ง์ ํ์ ๋ฐฐ๊ฒฝ์ ์์๋ณด๊ฒ ์ต๋๋ค.
EJB(Enterprise Java Bean)
EJB๋ฅผ ๊ฒ์ํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ํฉ๋๋ค.
์ํฐํ๋ผ์ด์ฆ ์๋ฐ๋น์ฆ(Enterprise JavaBeans; EJB)๋ ๊ธฐ์ ํ๊ฒฝ์ ์์คํ ์ ๊ตฌํํ๊ธฐ ์ํ ์๋ฒ์ธก ์ปดํฌ๋ํธ ๋ชจ๋ธ์ด๋ค. ์ฆ, EJB๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฌด ๋ก์ง์ ๊ฐ์ง๊ณ ์๋ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ค.
์ํฐํ๋ผ์ด์ฆ ์๋ฐ๋น์ฆ - ์ํค๋ฐฑ๊ณผ, ์ฐ๋ฆฌ ๋ชจ๋์ ๋ฐฑ๊ณผ์ฌ์
์ํฐํ๋ผ์ด์ฆ ์๋ฐ๋น์ฆ(Enterprise JavaBeans; EJB)๋ ๊ธฐ์ ํ๊ฒฝ์ ์์คํ ์ ๊ตฌํํ๊ธฐ ์ํ ์๋ฒ์ธก ์ปดํฌ๋ํธ ๋ชจ๋ธ์ด๋ค. ์ฆ, EJB๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฌด ๋ก์ง์ ๊ฐ์ง๊ณ ์๋ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ค. EJB ์ฌ
ko.wikipedia.org
EJB์์ JB์ ํด๋นํ๋ Java Bean์ด๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉ ํ๋ฅํ๊ฒ ์ปดํฌ๋ํธํ ์ํฌ ์ ์๋ ์ฝ๋ฉ ๋ฐฉ์นจ์ ์ ์ํ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ฆ ์์์ ์ค๋ช ํ๋ EJB๋ "์ปดํฌ๋ํธ(๋น ํน์ ๊ฐ์ฒด)๋ค์ ๊ด๋ฆฌํ๋ ์ปจํ ์ด๋"๋ผ๊ณ ๊ฐ๋ณ๊ฒ ์ดํดํ ์ ์์ต๋๋ค.
EJB์ ๋ฌธ์ ์
EJB๋ ๋ณด์, ํธ๋์ญ์ , ๋ถ์ฐ ์ปดํจํ ๋ฑ ๋ง์ ์๋น์ค๋ฅผ ์ ๊ณตํ์์ผ๋, ์ด๋ฅผ ์ํด์๋ EJB ์คํ์ ์ง์ผ์ผ ํ์ผ๋ฉฐ, ๊ฒฐ๊ตญ ์๋น์ค๊ฐ ๊ตฌํํด์ผ ํ๋ ์ค์ ๋น์ฆ๋์ค ๋ก์ง๋ณด๋ค EJB ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ฝ๋๋ค์ด ๋ง์์ง๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์์ผฐ์ต๋๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ์์ธ์ ๋น์ฆ๋์ค ๋ก์ง์ ํน์ ๊ธฐ์ (EJB)์ด ์ข ์๋์ด ์๋ ๊ฒ์ด์์ต๋๋ค.
์ปจํ ์ด๋์ ๋ชฉ์ ์ ๊ฐ์ฒด๊ฐ ํ์ํ ๋ ๋ง๋ค ์ปจํ ์ด๋์์ ๋ฐ์๋ด๋ ๋ฐฉ์์ ํตํด ๊ฐ์ฒด๋ค๊ฐ์ ์์กด์ฑ์ ํด๊ฒฐํ๋ ๊ฒ์ด์์ต๋๋ค.
์คํ๋ง ์ฐฝ์์์ธ ๋ก๋ ์กด์จ์ EJB๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ๊ฐ์ฒด๊ฐ ์์กด์ฑ ํด๊ฒฐ์ด ๊ฐ๋ฅํ ์ปจํ ์ด๋๋ฅผ ๊ฐ๋ฐํ๋๋ฐ, ์ด๊ฒ์ด ์คํ๋ง์ ์์์ ๋๋ค.
์ฆ ํน์ ๊ธฐ์ ์ ์ข ์๋์ง ์๊ณ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ ์ ์๋ ์ปจํ ์ด๋๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ์คํ๋ง์ ๊ธฐ๋ณธ ์ฒ ํ์ ๋๋ค.
Spring์ด๋?
์คํ๋ง์ด๋ผ๋ ๋จ์ด๋ 'ํน์ ํ ํ๋'๋ฅผ ์ง์นญํ ์๋ ์์ผ๋, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ '์ฌ๋ฌ ๊ธฐ์ ๋ค์ ์งํฉ์ฒด'๋ฅผ ์๋ฏธํฉ๋๋ค.
๊ทธ๋ฌํ ๊ธฐ์ ๋ค์๋ ๋ค์๊ณผ ๊ฐ์ ์ข ๋ฅ๋ค์ด ์์ต๋๋ค.
- ์คํ๋ง ํ๋ ์์ํฌ
- ์คํ๋ง๋ถํธ (์คํ๋ง ํ๋ ์์ํฌ์ ๋ชจ๋ ๊ธฐ์ ๋ค์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ค)
- ์คํ๋ง ๋ฐ์ดํฐ (CRUD๋ฅผ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ค)
- ์คํ๋ง ์ํ๋ฆฌํฐ (๋ณด์ ๊ด๋ จ ๊ธฐ๋ฅ์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ค)
- ์คํ๋ง ์ธ์ (์ธ์ ๊ธฐ๋ฅ์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ค)
- ์คํ๋ง Rest Docs (api๋ฌธ์๋ฅผ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ค)
- ์คํ๋ง ๋ฐฐ์น (๋ฐฐ์น์ฒ๋ฆฌ์ ํนํ)
์คํ๋ง๊ณผ ์คํ๋ง ํ๋ ์์ํฌ, ์คํ๋ง ๋ถํธ์ ๋ํด์ ์ฒ์ ์ ํ์ค ๋๋ ํท๊ฐ๋ฆด ์ ์์ต๋๋ค.
์คํ๋ง ํ๋ ์์ํฌ๊ฐ ํต์ฌ์ด๋ฉฐ, ์ด์ธ ๋ชจ๋ ๊ธฐ์ ๋ค์ ์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฌํ ๊ธฐ์ ๋ค์ ํธ๋ฆฌํ๊ฒ ์ค์ ํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ธฐ์ ์ด ๋ฐ๋ก ์คํ๋ง๋ถํธ์ ๋๋ค.
๊ธฐ์กด์ ์คํ๋ง ํ๋ ์์ํฌ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํด์ผํ ์ ํ ์ด ๋๋ฌด ๋ง๊ณ ์ด๋ ค์ ๊ธฐ์, ์ด๋ฅผ ํด์ํ๊ธฐ ์ํด ์คํ๋ง ๋ถํธ๊ฐ ๋ฑ์ฅํ์ต๋๋ค.
์คํ๋ง ๋ถํธ
์คํ๋ง ํ๋ ์์ํฌ ๊ธฐ๋ฐ ํ๋ก์ ํธ๋ฅผ ๋ณต์กํ ์ค์ ์์ด ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๋ง๋ค์ด์ฃผ๋ ํ๋ ์์ํฌ์ ๋๋ค.
- ๋จ๋ ์ผ๋ก ์คํํ ์ ์๋ ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ์์ฑ
- Tomcat๊ฐ์ ์น ์๋ฒ๋ฅผ ๋ด์ฅํด์ ๋ณ๋์ ์น ์๋ฒ๋ฅผ ์ค์นํ์ง ์์๋ ๋จ.
- ์์ฌ์ด ๋น๋ ๊ตฌ์ฑ์ ์ํ starter ์ข ์์ฑ ์ ๊ณต (๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ก๊ฒจ์ฌ ๋, ์ถ๊ฐ๋ก ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ข ์์ ์ผ๋ก ๋ก๊ฒจ์ด)
- ์คํ๋ง๊ณผ 3rd parth(์ธ๋ถ) ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋ ๊ตฌ์ฑ
- ๊ด๋ก์ ์ํ ๊ฐ๊ฒฐํ ์ค์
๊ทธ๋ฌ๋ ์คํ๋ง ๋ถํธ๊ฐ ๋๋ฌด ๋ง์ ๊ฒ์ ์๋์ผ๋ก ํด์ฃผ๊ธฐ ๋๋ฌธ์, ์คํ๋ ค ์ด ๋๋ฌธ์ ์ค์ ํ๊ธฐ ์ด๋ ค์์ง๋ ๋ถ๋ถ๋ ์กด์ฌํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์คํ๋ง์ ํต์ฌ ๊ฐ๋
์คํ๋ง์ ์๋ฐ ์ธ์ด ๊ธฐ๋ฐ์ ํ๋ ์์ํฌ์ ๋๋ค.
์๋ฐ๋ ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ก์จ, ์คํ๋ง์ ๊ฐ์ฒด์งํฅ ์ธ์ด๊ฐ ๊ฐ์ง ๊ฐ๋ ฅํ ํน์ง์ ์ด๋ ค๋ด๋ ํ๋ ์์ํฌ์ ๋๋ค.
์ฆ ์คํ๋ง์ ์ข์ ๊ฐ์ฒด ์งํฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐ์ ํ ์ ์๊ฒ ๋์์ฃผ๋ ํ๋ ์์ํฌ์ ๋๋ค.
์คํ๋ง์ ์ดํดํ๊ธฐ ์ํด์๋ ์ฐ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ์ดํด๊ฐ ํ์ํฉ๋๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)์ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ๋ช ๋ น์ด์ ๋ชฉ๋ก์ผ๋ก ๋ณด๋ ์๊ฐ์์ ๋ฒ์ด๋์
์ฌ๋ฌ๊ฐ์ ๋ ๋ฆฝ๋ ๋จ์, ์ฆ "๊ฐ์ฒด"๋ค์ ๋ชจ์์ผ๋ก ํ์ ํ๊ณ ์ ํ๋ ๊ฒ์ ๋๋ค.
๊ฐ๊ฐ์ ๊ฐ์ฒด๋ค์ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๊ฒ ๋ง๋ค์ด์ค๋๋ค.
SOLID - ์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น
- SRP : ๋จ์ผ ์ฑ ์ ์์น (Single Responsibility Principle)
- OCP : ๊ฐ๋ฐฉ-ํ์ ์์น (Open/Closed Principle)
- LSP : ๋ฆฌ์ค์ฝํ ์นํ ์์น (Liskov Substitution Principle)
- ISP : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น (Interface Segregation Principle)
- DIP : ์์กด๊ด๊ณ ์ญ์ ์์น (Dependency Inversion Principle)
SRP : ๋จ์ผ ์ฑ ์ ์์น
ํ ํด๋์ค๋ ํ๋์ ์ฑ ์๋ง ๊ฐ์ ธ์ผ ํ๋ค๋ ์์น์ ๋๋ค.
ํ๋์ ์ฑ ์์ด๋ผ๋ ๊ฒ์ ๊ธฐ์ค์ ๋ณ๊ฒฝ์ ๋๋ค.
๋ณ๊ฒฝ์ด ์์ ๋ ํ๊ธ ํจ๊ณผ๊ฐ ์ ์ด์ผ ๋จ์ผ ์ฑ ์ ์์น์ ์ ๋ฐ๋ฅธ ๊ฒ์ด๋ผ ๋ณผ ์ ์์ต๋๋ค.
OCP : ๊ฐ๋ฐฉ-ํ์ ์์น
์ํํธ์จ์ด ์์๋ ํ์ฅ์๋ ์ด๋ ค์์ผ๋ ๋ณ๊ฒฝ์๋ ๋ซํ์์ด์ผ ํ๋ค๋ ์์น์ ๋๋ค.
OCP๋ ๋คํ์ฑ์ ํ์ฉํ์ฌ ์งํฌ ์ ์์ต๋๋ค.
์๋ ์ฝ๋๋ฅผ ํตํ ์์๋ฅผ ํ์ธํ๊ฒ ์ต๋๋ค.
public class Member{
private Car myCar = new Benz();
}
public class Member{
//private Car myCar = new Benz();
private Car myCar = new Lexus();
}
์ ์ฝ๋์์ ๋คํ์ฑ์ ํ์ฉํ์์์๋ ๋ถ๊ตฌํ๊ณ ๊ธฐ์กด์ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
OCP์ ๋ฌธ์ ์
๊ตฌํ์ฒด๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด์๋ ์ฝ๋์ ๋ณ๊ฒฝ์ด ํ์์ ์ ๋๋ค.
์ฆ ๋คํ์ฑ์ ์ฌ์ฉํ์๋๋ผ๋ OCP๋ฅผ ์งํฌ ์ ์๊ฒ๋๋ ์ํฉ์ด ๋ฐ์ํฉ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ๋ ๋ณ๋์ ์ค์ ์๊ฐ ํ์ํ๋ฐ, ํด๋น ์ญํ ์ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ํด์ค๋๋ค.
LSP : ๋ฆฌ์ค์ฝํ ์นํ ์์น
ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์ ํ์ ํ์ ์ ์ธ์คํด์ค๋ก ๋ฐ๊ฟ ์ ์์ด์ผ ํ๋ค๋ ์์น์ ๋๋ค.
๋คํ์ฑ์์ ํ์ ํด๋์ค๋ ์ธํฐํ์ด์ค ๊ท์ฝ์ ๋ค ์ง์ผ์ผ ํ๋ค๋ ๋ป์ ๋๋ค.
๋คํ์ฑ์ ์ง์ํ๊ธฐ ์ํ ์์น์ผ๋ก์จ, ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด๋ฅผ ๋ฏฟ๊ณ ์ฌ์ฉํ๋ ค๋ฉด ์ด ์์น์ด ํ์ํฉ๋๋ค
์๋ฅผ ๋ค์ด ์๋์ฐจ ์ธํฐํ์ด์ค์ ์์ ๊ธฐ๋ฅ์ ์์ผ๋ก ๊ฐ๋ ๊ฒ์ธ๋ฐ, ์ด๋ ํ ๊ตฌํ์ฒด๊ฐ ์์ ์ ๋ฐ์์ ๋ ๋ค๋ก ๊ฐ๊ฒ ๊ตฌํํ๋ค๋ฉด ์ด๋ LSP๋ฅผ ์๋ฐํ ๊ฒ์ ๋๋ค.
ISP : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น
ํน์ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ธํฐํ์ด์ค ์ฌ๋ฌ๊ฐ๊ฐ ๋ฒ์ฉ ์ธํฐํ์ด์ค ํ๋๋ณด๋ค ๋ซ๋ค๋ ์์น์ ๋๋ค.
์ด๋ฅผ ํตํด ์ธํฐํ์ด์ค๊ฐ ๋ช ํํด์ง๊ณ , ๋์ฒด ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋๋ค.
DIP : ์์กด๊ด๊ณ ์ญ์ ์์น
๊ตฌ์ฒดํ๊ฐ ์๋ ์ถ์ํ์ ์์กดํ๋ผ๋ ์์น์ ๋๋ค.
์ฝ๋๋ ์ธํฐํ์ด์ค์ ์์กดํ์ฌ ์์ฑ๋์ด์ผ ํ๋ค๋ ๋ป์ผ๋ก, ํ๋ก๊ทธ๋๋จธ๋ ๊ตฌ์ฒดํ๊ฐ ์๋ ์ถ์ํ์ ์์กดํด์ผ ํ๋ค๋ ๋ป์ ๋๋ค.
์์ OCP์์ ์ค๋ช ํ Member๋ ์ธํฐํ์ด์ค์ ์์กดํ์ง๋ง, ๊ตฌํ ํด๋์ค๋ ๋์์ ์์กดํฉ๋๋ค.
public class Member{
private Car myCar = new Lexus();//Car์ ์ธํฐํ์ด์ค, Lexus๋ ๊ตฌํ ํด๋์ค
}
์ฆ DIP๋ฅผ ์๋ฐํ ๊ฒ์ ๋๋ค.
๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ์คํ๋ง
๊ฐ์ฒด ์งํฅ์ ํต์ฌ์ ๋คํ์ฑ์ ๋๋ค.
๊ทธ๋ฌ๋ ๋คํ์ฑ ๋ง์ผ๋ก๋ OCP, DIP๋ฅผ ์งํฌ ์ ์๋ค๋ ๊ฒ์ ํ์ธํ์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์คํ๋ง์ด ๋ฑ์ฅํ์๊ณ , ์คํ๋ง์ ๋ค์ ๊ธฐ์ ๋ก ๋คํ์ฑ + OCP, DIP๋ฅผ ๊ฐ๋ฅํ๊ฒ ์ง์ํฉ๋๋ค.
- DI(Dependency Injection): ์์กด๊ด๊ณ, ์์กด์ฑ ์ฃผ์
- DI ์ปจํ ์ด๋ ์ ๊ณต
Reference
์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์
์คํ๋ง ์ ๋ฌธ์๊ฐ ์์ ๋ฅผ ๋ง๋ค์ด๊ฐ๋ฉด์ ์คํ๋ง์ ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์คํ๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ์คํ ๋ค์ง ์ ์์ต๋๋ค., ์คํ๋ง ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์ฑ์ฅํ๋ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ณด์ธ์! ๐ข ์๊ฐ ์
www.inflearn.com
[Spring] ์คํ๋ง ๊ฐ๋ก
EJB (Enterprise Java Bean) Java bean์ด๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ์ปดํฌ๋ํธํ ์ํฌ ์ ์๋ ์ฝ๋ฉ ๋ฐฉ์นจ์ ์ ์ํ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ( bean์ ์ฝ๊ฒ component ๋๋ ๊ฐ์ฒด๋ผ๊ณ ์ดํดํ๋ฉด ์ข์ต๋๋ค. ) ๊ทธ๋ฆฌ๊ณ Ja
victorydntmd.tistory.com
http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
ArticleS.UncleBob.PrinciplesOfOod
The Principles of OOD What is object oriented design? What is it all about? What are it's benefits? What are it's costs? It may seem silly to ask these questions in a day and age when virtually every software developer is using an object oriented language
butunclebob.com
'๐๏ธ Spring > ๊ธฐ๋ณธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] @ComponentScan (0) | 2021.12.11 |
---|---|
[Spring] @Configuration (0) | 2021.12.11 |
[Spring] ์ฑ๊ธํค (feat. ์ฑ๊ธํค์ ๊ตฌํํ๋ ์ฌ๋ฌ ๋ฐฉ์) (2) | 2021.12.11 |
[Spring] ์คํ๋ง ์ปจํ ์ด๋์ ์คํ๋ง ๋น (0) | 2021.12.11 |
[Spring] IoC์ DI (0) | 2021.12.11 |
์ฐ์ ์คํ๋ง์ ํ์ ๋ฐฐ๊ฒฝ์ ์์๋ณด๊ฒ ์ต๋๋ค.
EJB(Enterprise Java Bean)
EJB๋ฅผ ๊ฒ์ํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ํฉ๋๋ค.
์ํฐํ๋ผ์ด์ฆ ์๋ฐ๋น์ฆ(Enterprise JavaBeans; EJB)๋ ๊ธฐ์ ํ๊ฒฝ์ ์์คํ ์ ๊ตฌํํ๊ธฐ ์ํ ์๋ฒ์ธก ์ปดํฌ๋ํธ ๋ชจ๋ธ์ด๋ค. ์ฆ, EJB๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฌด ๋ก์ง์ ๊ฐ์ง๊ณ ์๋ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ค.
์ํฐํ๋ผ์ด์ฆ ์๋ฐ๋น์ฆ - ์ํค๋ฐฑ๊ณผ, ์ฐ๋ฆฌ ๋ชจ๋์ ๋ฐฑ๊ณผ์ฌ์
์ํฐํ๋ผ์ด์ฆ ์๋ฐ๋น์ฆ(Enterprise JavaBeans; EJB)๋ ๊ธฐ์ ํ๊ฒฝ์ ์์คํ ์ ๊ตฌํํ๊ธฐ ์ํ ์๋ฒ์ธก ์ปดํฌ๋ํธ ๋ชจ๋ธ์ด๋ค. ์ฆ, EJB๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฌด ๋ก์ง์ ๊ฐ์ง๊ณ ์๋ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ค. EJB ์ฌ
ko.wikipedia.org
EJB์์ JB์ ํด๋นํ๋ Java Bean์ด๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉ ํ๋ฅํ๊ฒ ์ปดํฌ๋ํธํ ์ํฌ ์ ์๋ ์ฝ๋ฉ ๋ฐฉ์นจ์ ์ ์ํ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ฆ ์์์ ์ค๋ช ํ๋ EJB๋ "์ปดํฌ๋ํธ(๋น ํน์ ๊ฐ์ฒด)๋ค์ ๊ด๋ฆฌํ๋ ์ปจํ ์ด๋"๋ผ๊ณ ๊ฐ๋ณ๊ฒ ์ดํดํ ์ ์์ต๋๋ค.
EJB์ ๋ฌธ์ ์
EJB๋ ๋ณด์, ํธ๋์ญ์ , ๋ถ์ฐ ์ปดํจํ ๋ฑ ๋ง์ ์๋น์ค๋ฅผ ์ ๊ณตํ์์ผ๋, ์ด๋ฅผ ์ํด์๋ EJB ์คํ์ ์ง์ผ์ผ ํ์ผ๋ฉฐ, ๊ฒฐ๊ตญ ์๋น์ค๊ฐ ๊ตฌํํด์ผ ํ๋ ์ค์ ๋น์ฆ๋์ค ๋ก์ง๋ณด๋ค EJB ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ฝ๋๋ค์ด ๋ง์์ง๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์์ผฐ์ต๋๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ์์ธ์ ๋น์ฆ๋์ค ๋ก์ง์ ํน์ ๊ธฐ์ (EJB)์ด ์ข ์๋์ด ์๋ ๊ฒ์ด์์ต๋๋ค.
์ปจํ ์ด๋์ ๋ชฉ์ ์ ๊ฐ์ฒด๊ฐ ํ์ํ ๋ ๋ง๋ค ์ปจํ ์ด๋์์ ๋ฐ์๋ด๋ ๋ฐฉ์์ ํตํด ๊ฐ์ฒด๋ค๊ฐ์ ์์กด์ฑ์ ํด๊ฒฐํ๋ ๊ฒ์ด์์ต๋๋ค.
์คํ๋ง ์ฐฝ์์์ธ ๋ก๋ ์กด์จ์ EJB๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ๊ฐ์ฒด๊ฐ ์์กด์ฑ ํด๊ฒฐ์ด ๊ฐ๋ฅํ ์ปจํ ์ด๋๋ฅผ ๊ฐ๋ฐํ๋๋ฐ, ์ด๊ฒ์ด ์คํ๋ง์ ์์์ ๋๋ค.
์ฆ ํน์ ๊ธฐ์ ์ ์ข ์๋์ง ์๊ณ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ ์ ์๋ ์ปจํ ์ด๋๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ์คํ๋ง์ ๊ธฐ๋ณธ ์ฒ ํ์ ๋๋ค.
Spring์ด๋?
์คํ๋ง์ด๋ผ๋ ๋จ์ด๋ 'ํน์ ํ ํ๋'๋ฅผ ์ง์นญํ ์๋ ์์ผ๋, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ '์ฌ๋ฌ ๊ธฐ์ ๋ค์ ์งํฉ์ฒด'๋ฅผ ์๋ฏธํฉ๋๋ค.
๊ทธ๋ฌํ ๊ธฐ์ ๋ค์๋ ๋ค์๊ณผ ๊ฐ์ ์ข ๋ฅ๋ค์ด ์์ต๋๋ค.
- ์คํ๋ง ํ๋ ์์ํฌ
- ์คํ๋ง๋ถํธ (์คํ๋ง ํ๋ ์์ํฌ์ ๋ชจ๋ ๊ธฐ์ ๋ค์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ค)
- ์คํ๋ง ๋ฐ์ดํฐ (CRUD๋ฅผ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ค)
- ์คํ๋ง ์ํ๋ฆฌํฐ (๋ณด์ ๊ด๋ จ ๊ธฐ๋ฅ์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ค)
- ์คํ๋ง ์ธ์ (์ธ์ ๊ธฐ๋ฅ์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ค)
- ์คํ๋ง Rest Docs (api๋ฌธ์๋ฅผ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ค)
- ์คํ๋ง ๋ฐฐ์น (๋ฐฐ์น์ฒ๋ฆฌ์ ํนํ)
์คํ๋ง๊ณผ ์คํ๋ง ํ๋ ์์ํฌ, ์คํ๋ง ๋ถํธ์ ๋ํด์ ์ฒ์ ์ ํ์ค ๋๋ ํท๊ฐ๋ฆด ์ ์์ต๋๋ค.
์คํ๋ง ํ๋ ์์ํฌ๊ฐ ํต์ฌ์ด๋ฉฐ, ์ด์ธ ๋ชจ๋ ๊ธฐ์ ๋ค์ ์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฌํ ๊ธฐ์ ๋ค์ ํธ๋ฆฌํ๊ฒ ์ค์ ํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ธฐ์ ์ด ๋ฐ๋ก ์คํ๋ง๋ถํธ์ ๋๋ค.
๊ธฐ์กด์ ์คํ๋ง ํ๋ ์์ํฌ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํด์ผํ ์ ํ ์ด ๋๋ฌด ๋ง๊ณ ์ด๋ ค์ ๊ธฐ์, ์ด๋ฅผ ํด์ํ๊ธฐ ์ํด ์คํ๋ง ๋ถํธ๊ฐ ๋ฑ์ฅํ์ต๋๋ค.
์คํ๋ง ๋ถํธ
์คํ๋ง ํ๋ ์์ํฌ ๊ธฐ๋ฐ ํ๋ก์ ํธ๋ฅผ ๋ณต์กํ ์ค์ ์์ด ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๋ง๋ค์ด์ฃผ๋ ํ๋ ์์ํฌ์ ๋๋ค.
- ๋จ๋ ์ผ๋ก ์คํํ ์ ์๋ ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ์์ฑ
- Tomcat๊ฐ์ ์น ์๋ฒ๋ฅผ ๋ด์ฅํด์ ๋ณ๋์ ์น ์๋ฒ๋ฅผ ์ค์นํ์ง ์์๋ ๋จ.
- ์์ฌ์ด ๋น๋ ๊ตฌ์ฑ์ ์ํ starter ์ข ์์ฑ ์ ๊ณต (๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ก๊ฒจ์ฌ ๋, ์ถ๊ฐ๋ก ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ข ์์ ์ผ๋ก ๋ก๊ฒจ์ด)
- ์คํ๋ง๊ณผ 3rd parth(์ธ๋ถ) ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋ ๊ตฌ์ฑ
- ๊ด๋ก์ ์ํ ๊ฐ๊ฒฐํ ์ค์
๊ทธ๋ฌ๋ ์คํ๋ง ๋ถํธ๊ฐ ๋๋ฌด ๋ง์ ๊ฒ์ ์๋์ผ๋ก ํด์ฃผ๊ธฐ ๋๋ฌธ์, ์คํ๋ ค ์ด ๋๋ฌธ์ ์ค์ ํ๊ธฐ ์ด๋ ค์์ง๋ ๋ถ๋ถ๋ ์กด์ฌํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์คํ๋ง์ ํต์ฌ ๊ฐ๋
์คํ๋ง์ ์๋ฐ ์ธ์ด ๊ธฐ๋ฐ์ ํ๋ ์์ํฌ์ ๋๋ค.
์๋ฐ๋ ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ก์จ, ์คํ๋ง์ ๊ฐ์ฒด์งํฅ ์ธ์ด๊ฐ ๊ฐ์ง ๊ฐ๋ ฅํ ํน์ง์ ์ด๋ ค๋ด๋ ํ๋ ์์ํฌ์ ๋๋ค.
์ฆ ์คํ๋ง์ ์ข์ ๊ฐ์ฒด ์งํฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐ์ ํ ์ ์๊ฒ ๋์์ฃผ๋ ํ๋ ์์ํฌ์ ๋๋ค.
์คํ๋ง์ ์ดํดํ๊ธฐ ์ํด์๋ ์ฐ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ์ดํด๊ฐ ํ์ํฉ๋๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)์ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ๋ช ๋ น์ด์ ๋ชฉ๋ก์ผ๋ก ๋ณด๋ ์๊ฐ์์ ๋ฒ์ด๋์
์ฌ๋ฌ๊ฐ์ ๋ ๋ฆฝ๋ ๋จ์, ์ฆ "๊ฐ์ฒด"๋ค์ ๋ชจ์์ผ๋ก ํ์ ํ๊ณ ์ ํ๋ ๊ฒ์ ๋๋ค.
๊ฐ๊ฐ์ ๊ฐ์ฒด๋ค์ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๊ฒ ๋ง๋ค์ด์ค๋๋ค.
SOLID - ์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น
- SRP : ๋จ์ผ ์ฑ ์ ์์น (Single Responsibility Principle)
- OCP : ๊ฐ๋ฐฉ-ํ์ ์์น (Open/Closed Principle)
- LSP : ๋ฆฌ์ค์ฝํ ์นํ ์์น (Liskov Substitution Principle)
- ISP : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น (Interface Segregation Principle)
- DIP : ์์กด๊ด๊ณ ์ญ์ ์์น (Dependency Inversion Principle)
SRP : ๋จ์ผ ์ฑ ์ ์์น
ํ ํด๋์ค๋ ํ๋์ ์ฑ ์๋ง ๊ฐ์ ธ์ผ ํ๋ค๋ ์์น์ ๋๋ค.
ํ๋์ ์ฑ ์์ด๋ผ๋ ๊ฒ์ ๊ธฐ์ค์ ๋ณ๊ฒฝ์ ๋๋ค.
๋ณ๊ฒฝ์ด ์์ ๋ ํ๊ธ ํจ๊ณผ๊ฐ ์ ์ด์ผ ๋จ์ผ ์ฑ ์ ์์น์ ์ ๋ฐ๋ฅธ ๊ฒ์ด๋ผ ๋ณผ ์ ์์ต๋๋ค.
OCP : ๊ฐ๋ฐฉ-ํ์ ์์น
์ํํธ์จ์ด ์์๋ ํ์ฅ์๋ ์ด๋ ค์์ผ๋ ๋ณ๊ฒฝ์๋ ๋ซํ์์ด์ผ ํ๋ค๋ ์์น์ ๋๋ค.
OCP๋ ๋คํ์ฑ์ ํ์ฉํ์ฌ ์งํฌ ์ ์์ต๋๋ค.
์๋ ์ฝ๋๋ฅผ ํตํ ์์๋ฅผ ํ์ธํ๊ฒ ์ต๋๋ค.
public class Member{
private Car myCar = new Benz();
}
public class Member{
//private Car myCar = new Benz();
private Car myCar = new Lexus();
}
์ ์ฝ๋์์ ๋คํ์ฑ์ ํ์ฉํ์์์๋ ๋ถ๊ตฌํ๊ณ ๊ธฐ์กด์ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
OCP์ ๋ฌธ์ ์
๊ตฌํ์ฒด๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด์๋ ์ฝ๋์ ๋ณ๊ฒฝ์ด ํ์์ ์ ๋๋ค.
์ฆ ๋คํ์ฑ์ ์ฌ์ฉํ์๋๋ผ๋ OCP๋ฅผ ์งํฌ ์ ์๊ฒ๋๋ ์ํฉ์ด ๋ฐ์ํฉ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ๋ ๋ณ๋์ ์ค์ ์๊ฐ ํ์ํ๋ฐ, ํด๋น ์ญํ ์ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ํด์ค๋๋ค.
LSP : ๋ฆฌ์ค์ฝํ ์นํ ์์น
ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์ ํ์ ํ์ ์ ์ธ์คํด์ค๋ก ๋ฐ๊ฟ ์ ์์ด์ผ ํ๋ค๋ ์์น์ ๋๋ค.
๋คํ์ฑ์์ ํ์ ํด๋์ค๋ ์ธํฐํ์ด์ค ๊ท์ฝ์ ๋ค ์ง์ผ์ผ ํ๋ค๋ ๋ป์ ๋๋ค.
๋คํ์ฑ์ ์ง์ํ๊ธฐ ์ํ ์์น์ผ๋ก์จ, ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด๋ฅผ ๋ฏฟ๊ณ ์ฌ์ฉํ๋ ค๋ฉด ์ด ์์น์ด ํ์ํฉ๋๋ค
์๋ฅผ ๋ค์ด ์๋์ฐจ ์ธํฐํ์ด์ค์ ์์ ๊ธฐ๋ฅ์ ์์ผ๋ก ๊ฐ๋ ๊ฒ์ธ๋ฐ, ์ด๋ ํ ๊ตฌํ์ฒด๊ฐ ์์ ์ ๋ฐ์์ ๋ ๋ค๋ก ๊ฐ๊ฒ ๊ตฌํํ๋ค๋ฉด ์ด๋ LSP๋ฅผ ์๋ฐํ ๊ฒ์ ๋๋ค.
ISP : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น
ํน์ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ธํฐํ์ด์ค ์ฌ๋ฌ๊ฐ๊ฐ ๋ฒ์ฉ ์ธํฐํ์ด์ค ํ๋๋ณด๋ค ๋ซ๋ค๋ ์์น์ ๋๋ค.
์ด๋ฅผ ํตํด ์ธํฐํ์ด์ค๊ฐ ๋ช ํํด์ง๊ณ , ๋์ฒด ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋๋ค.
DIP : ์์กด๊ด๊ณ ์ญ์ ์์น
๊ตฌ์ฒดํ๊ฐ ์๋ ์ถ์ํ์ ์์กดํ๋ผ๋ ์์น์ ๋๋ค.
์ฝ๋๋ ์ธํฐํ์ด์ค์ ์์กดํ์ฌ ์์ฑ๋์ด์ผ ํ๋ค๋ ๋ป์ผ๋ก, ํ๋ก๊ทธ๋๋จธ๋ ๊ตฌ์ฒดํ๊ฐ ์๋ ์ถ์ํ์ ์์กดํด์ผ ํ๋ค๋ ๋ป์ ๋๋ค.
์์ OCP์์ ์ค๋ช ํ Member๋ ์ธํฐํ์ด์ค์ ์์กดํ์ง๋ง, ๊ตฌํ ํด๋์ค๋ ๋์์ ์์กดํฉ๋๋ค.
public class Member{
private Car myCar = new Lexus();//Car์ ์ธํฐํ์ด์ค, Lexus๋ ๊ตฌํ ํด๋์ค
}
์ฆ DIP๋ฅผ ์๋ฐํ ๊ฒ์ ๋๋ค.
๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ์คํ๋ง
๊ฐ์ฒด ์งํฅ์ ํต์ฌ์ ๋คํ์ฑ์ ๋๋ค.
๊ทธ๋ฌ๋ ๋คํ์ฑ ๋ง์ผ๋ก๋ OCP, DIP๋ฅผ ์งํฌ ์ ์๋ค๋ ๊ฒ์ ํ์ธํ์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์คํ๋ง์ด ๋ฑ์ฅํ์๊ณ , ์คํ๋ง์ ๋ค์ ๊ธฐ์ ๋ก ๋คํ์ฑ + OCP, DIP๋ฅผ ๊ฐ๋ฅํ๊ฒ ์ง์ํฉ๋๋ค.
- DI(Dependency Injection): ์์กด๊ด๊ณ, ์์กด์ฑ ์ฃผ์
- DI ์ปจํ ์ด๋ ์ ๊ณต
Reference
์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์
์คํ๋ง ์ ๋ฌธ์๊ฐ ์์ ๋ฅผ ๋ง๋ค์ด๊ฐ๋ฉด์ ์คํ๋ง์ ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์คํ๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ์คํ ๋ค์ง ์ ์์ต๋๋ค., ์คํ๋ง ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์ฑ์ฅํ๋ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ณด์ธ์! ๐ข ์๊ฐ ์
www.inflearn.com
[Spring] ์คํ๋ง ๊ฐ๋ก
EJB (Enterprise Java Bean) Java bean์ด๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ์ปดํฌ๋ํธํ ์ํฌ ์ ์๋ ์ฝ๋ฉ ๋ฐฉ์นจ์ ์ ์ํ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ( bean์ ์ฝ๊ฒ component ๋๋ ๊ฐ์ฒด๋ผ๊ณ ์ดํดํ๋ฉด ์ข์ต๋๋ค. ) ๊ทธ๋ฆฌ๊ณ Ja
victorydntmd.tistory.com
http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
ArticleS.UncleBob.PrinciplesOfOod
The Principles of OOD What is object oriented design? What is it all about? What are it's benefits? What are it's costs? It may seem silly to ask these questions in a day and age when virtually every software developer is using an object oriented language
butunclebob.com
'๐๏ธ Spring > ๊ธฐ๋ณธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] @ComponentScan (0) | 2021.12.11 |
---|---|
[Spring] @Configuration (0) | 2021.12.11 |
[Spring] ์ฑ๊ธํค (feat. ์ฑ๊ธํค์ ๊ตฌํํ๋ ์ฌ๋ฌ ๋ฐฉ์) (2) | 2021.12.11 |
[Spring] ์คํ๋ง ์ปจํ ์ด๋์ ์คํ๋ง ๋น (0) | 2021.12.11 |
[Spring] IoC์ DI (0) | 2021.12.11 |