2022.06.29
1. Spring์ ํ์
์๋ฐ ์ง์์ EJB(Enterprise Java Beans)๋ผ๋ ๊ธฐ์ ์ด ์์๋ค. ์ง๊ธ์ผ๋ก ๋ฐ์ง๋ฉด Spring + Jpa๋ฅผ ๋ค ํฉ์ณ ๋์ ๊ธฐ์ .
์ปจํ ์ด๋, ๋ถ์ฐ ๋ฑ์ ๊ธฐ์ ์ด ํ๊ธฐ์ ์ด์๋๋ฐ ๊ฐ๊ฒฉ์ด ์์ฒ๋ง์์ผ๋ก ๋น์๋ค..
์ด๋ก ์ ์ผ๋ก๋ ์ข์๋ฐ EJB์ ์์กด์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ณต์กํ๊ณ ๋๋ฆฐ๋ฐ๋ค๊ฐ ๋น์ธ๊ธฐ๊น์ง ํ๋ ๊ฐ๋ฐ์๋ค์ด ๋ง์ด ํ๋ค์๋ค๊ณ ํ๋ค.
์ด๋ ๊ฒ ๋๋ ๋ค์ ์ค๋๋ ๋ฐฉ์์ ๊ฐ๋จํ ์๋ฐ๋ก ๋์๊ฐ์ ํด์ ๋์จ ์ฉ์ด๊ฐ POJO(Plain Old Java Object)๋ค.
๊ทธ๋์ ๊ฐ๋ฐ์๋ค์ด ์ง์ ์คํ๋ง, hibernate๋ฑ์ ์คํ ์์ค๋ฅผ ๋ง๋ค๊ฒ ๋์๋ค.
์คํ๋ง์ EJB ์ปจํ ์ด๋๋ฅผ ๋์ฒดํ๊ณ ๋จ์ํ์๋ค.
Hibernate๋ EJB์ ์ํฐํฐ๋น ๊ธฐ์ ์ ๋์ฒดํ์๊ณ ,
์ด์ EJB๋ ๋งํ๋ค๋๊ฑธ ์ธ์ ํ๊ณ Hiberante๋ฅผ ๊ฑฐ์ ๋ณต๋ถํด์ JPA(Java Persistence API) ์๋ก์ด ์๋ฐ ํ์ค์ ์ ์ํ๊ฒ ๋์๋ค.
ํ์ฌ๋ ํ์ค ์ธํฐํ์ด์ค๋ก JPA๊ฐ ์๊ณ JPA์ ๊ตฌํ์ฒด๊ฐ ์กด์ฌํ๊ฒ ๋๋ค.
์คํ๋ง ์ด๋ฆ์ ์ ํต์ ์ธ J2EE(EJB)๋ผ๋ ๊ฒจ์ธ์ ๋์ด ์๋ก์ด ์์์ด๋ผ๋ ๋ป์ผ๋ก ์ง์๋ค๊ณ ํ๋ค. ์ ๋ด์ด๋ผ๋ ์๋ฏธ์ Spring์ด์ง ๋ผ๊ณ ์๊ฐํ์๋๋ฐ ๊ณ ๋์ ์ญ์ฌ๊ฐ ์์๋ค..
2. ์คํ๋ง์ด๋?
์คํ๋ง์ ์คํ๋ง ํ๋ ์์ํฌ ํ๋๋ก ๊ตฌ์ฑ๋๊ฒ์ด ์๋๋ผ ์๋์ ๊ฐ์ด ์ฌ๋ฌ๊ฐ์ ๊ธฐ์ ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์ด๊ฑฐ ๋ง๊ณ ๋ ์ฌ๋ฌ ๊ธฐ์ ๋ค์ด ์๋ค.
- ํต์ฌ ๊ธฐ์ : ์คํ๋ง DI ์ปจํ ์ด๋, AOP, ์ด๋ฒคํธ
- ์น ๊ธฐ์ : ์คํ๋ง MVC, ์คํ๋ง WebFlux
- ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ : ํธ๋์ญ์ , JDBC, ORM ์ง์, XML์ง์
- ๊ธฐ์ ํตํฉ: ์บ์, ์ด๋ฉ์ผ, ์๊ฒฉ์ ๊ทผ, ์ค์ผ์ค๋ง
- ํ ์คํธ: ์คํ๋ง ๊ธฐ๋ฐ ํ ์คํธ ์ง์
์คํ๋ง์ ํต์ฌ
- ๊ฐ์ฒด ์งํฅ ์ธ์ด์ธ ์๋ฐ ์ธ์ด ๊ธฐ๋ฐ์ผ๋ก์จ OOP ์ธ์ด๊ฐ ๊ฐ์ง ๊ฐ๋ ฅํ ํน์ง์ ์ ์ด๋ ค๋ธ๋ค.
- ์ข์ ๊ฐ์ฒด ์งํฅ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๊ฒ ๋์์ฃผ๋ ํ๋ ์์ํฌ
3. ์คํ๋ง ๋ถํธ?
- ์คํ๋ง์ ํธ๋ฆฌํ๊ฒ ์ธ ์ ์๋๋ก ๋์์ฃผ๊ณ ์ต๊ทผ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๋ค.
- ์คํ๋ง ๋ถํธ๋ ์คํ๋ง๊ณผ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฐ๋ ์ด ์๋๋ค.
ํน์ง
- ๋จ๋ ์ผ๋ก ์คํํ ์ ์๋ ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ์์ฑ๊ฐ๋ฅํ๋ค.
- Tomcat๊ฐ์ Embedded Web Server๊ฐ ์์ด์ ๋ณ๋๋ก ์น ์๋ฒ๋ฅผ ์ค์นํ ํ์๊ฐ ์๋ค.
- ์ฌ์ด ๋น๋ ๊ตฌ์ฑ์ ์ํด starter ์ข ์์ฑ์ ์ ๊ณตํ๋ค.
- ์คํ๋ง ๋ฒ์ ์ ์ ๋ค์ด๋ง๋ third party(์ธ๋ถ) library๋ฅผ ์๋ ๊ตฌ์ฑํ๋ค.
- ๋งคํธ๋ฆญ, ์ํํ์ธ, ์ธ๋ถ ๊ตฌ์ฑ ๊ฐ์ ํ๋ก๋์ ์ค๋น ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- ์ค์ ์ด ์ ๋ง ๊ฐํธํ๋ค.
4. ๊ฐ์ฒด์งํฅ
- ์ถ์ํ
- ์บก์ํ
- ์์
- ๋คํ์ฑ
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๊ฒ ๋ง๋ ๋ค.
- ์ปดํฌ๋ํธ๋ฅผ ์ฝ๊ณ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ๊ธฐ ์ํด ๋คํ์ฑ์ ์ด์ฉํ๋ค.
(1) ์ญํ ๊ณผ ๊ตฌํ ๋ถ๋ฆฌ
- ๋คํ์ฑ์ ํ์ฉ
- ์ญํ = ์ธํฐํ์ด์ค
- ๊ตฌํ = ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค
- ๊ฐ์ฒด ์ค๊ณ์ ์ญํ ์ ๋จผ์ ๋ถ์ฌํ๊ณ , ๊ทธ ์ญํ ์ ์ํํ๋ ๊ตฌํ ๊ฐ์ฒด ๋ง๋ค๊ธฐ
- ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌํ๋ฉด ์ธ์์ด ๋จ์ํด์ง๊ณ , ์ ์ฐํด์ง๋ฉฐ ๋ณ๊ฒฝ๋ ํธ๋ฆฌํด์ง๋ค.
์ฅ์
- ํด๋ผ์ด์ธํธ๋ ๊ตฌํ ๋์์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ๋ ๋๋ฉฐ ๋์์ ์ญํ (์ธํฐํ์ด์ค)๋ง ์๋ฉด ๋๋ค.
- ํด๋ผ์ด์ธํธ๋ ๊ตฌํ ๋์์ ๋ด๋ถ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋๊ฑฐ๋ ๊ตฌํ ๋์ ์์ฒด๋ฅผ ๋ณ๊ฒฝํด๋ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
- ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์คํ ์์ ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝ ๊ฐ๋ฅํ๋ค.
(2) ์คํ๋ง๊ณผ ๊ฐ์ฒด ์งํฅ
- ์คํ๋ง์ ๋คํ์ฑ์ ๊ทน๋ํํด์ ์ด์ฉํ ์ ์๊ฒ ํด์ค๋ค.
- ์ ์ด์ ์ญ์ (IOC), ์์กด๊ด๊ณ ์ฃผ์ (DI)์ ๋คํ์ฑ์ ํ์ฉํด์ ์ญํ ๊ณผ ๊ตฌํ์ ํธ๋ฆฌํ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก ์ง์ํ๋ค.
- ์คํ๋ง์ DI, DI ์ปจํ ์ด๋๋ฅผ ์ ๊ณตํ๋ ๊ธฐ์ ๋ก ๋คํ์ฑ + OCP + DIP๋ฅผ ๊ฐ๋ฅํ๊ฒ ์ง์ํ๋ค.
- DI ์ปจํ ์ด๋์์ ๊ฐ์ฒด๋ฅผ ๋ฃ์ด๋ฃ๊ณ ๊ทธ ์์์ ์์กด๊ด๊ณ๋ฅผ ์๋ก ์ฐ๊ฒฐํด์ฃผ๊ณ ์ฃผ์ ํด์ฃผ๋ ๊ธฐ๋ฅ์ ํด์ค๋ค.
5. ์ ๋ฆฌ
- ๋ชจ๋ ์ค๊ณ์ ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌํ๋๊ฒ ์ข๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ค๊ณ๋ ๊ณต์ฐ์ ์ค๊ณํ๋ฏ ๋ฐฐ์ญ๋ง ๋ง๋ค์ด๋๊ณ ๋ฐฐ์ฐ๋ ์ธ์ ๋ ์ง ์ ์ฐํ๊ฒ ๋ณ๊ฒฝ๊ฐ๋ฅํ๋๋ก ๋ง๋ค์.
- ์ด์์ ์ผ๋ก๋ ๋ชจ๋ ์ค๊ณ์ ์ธํฐํ์ด์ค๋ฅผ ๋ถ์ฌํ์
ํ์ง๋ง
- ์ธํฐํ์ด์ค๋ฅผ ๋์ ํ๋ฉด ์ถ์ํ๋ผ๋ ๋น์ฉ์ด ๋ฐ์ํ๋ค.
- ๊ธฐ๋ฅ์ ํ์ฅํ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด, ๊ตฌ์ฒด ํด๋์ค๋ฅผ ์ง์ ์ฌ์ฉํ๊ณ , ํฅํ ๊ผญ ํ์ํ ๋ ๋ฆฌํฉํ ๋งํด์ ์ธํฐํ์ด์ค๋ฅผ ๋์ ํ๋ ๊ฒ๋ ๋ฐฉ๋ฒ์ด๋ค.
6. ์ฐธ๊ณ
- ์คํ๋ง์ญ์ฌ: https://www.quickprogrammingtips.com/spring-boot/history-of-spring-framework-and-spring-boot.html
- ๊ฐ์ฒด์งํฅํ๋ก๊ทธ๋๋ฐ: https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D
- SOLID: https://ko.wikipedia.org/wiki/SOLID_(%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%EC%84%A4%EA%B3%84)
์คํ๋ง ๊ฐ๋ฐ์๊ฐ ์ฝ์ผ๋ฉด ์ข์ ์ฑ ์ถ์ฒ
- ๊ฐ์ฒด์งํฅ ์ฑ ์ถ์ฒ: ๊ฐ์ฒด์งํฅ์ ์ฌ์ค๊ณผ ์คํด(http://www.yes24.com/Product/Goods/18249021)
- ์คํ๋ง ์ฑ ์ถ์ฒ: ํ ๋น์ ์คํ๋ง(http://www.yes24.com/Product/Goods/7516911)
- JPA ์ฑ ์ถ์ฒ: ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ(http://www.yes24.com/Product/Go
'๐ Backend > ๐ Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring DI 4๊ฐ์ง ๋ฐฉ๋ฒ๊ณผ ์ต์ ์ฒ๋ฆฌ (0) | 2022.07.08 |
---|---|
IOC, DI, Container (0) | 2022.07.05 |
SOLID ์์น (0) | 2022.07.02 |
8. AOP (0) | 2022.07.02 |
7. Spring DB ์ ๊ทผ ๊ธฐ์ - JPA, Spring Data JPA (0) | 2022.07.02 |