2021. 9. 10. 08:00ใBack-End ์์ ์ค/Spring Framework
์๋ ํ์ธ์? ์ฃผ๋ํ๋ ์ ๋๋ค.
์ค๋์ Spring์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ๋ํด์ ๊ณต๋ถ ํด ๋ณด๋๋ก ํ๋ ๊ฒ์ด์์.
์ด ๋ด์ฉ์ ์ธํ๋ฐ - ๊น์ํ ๊ฐ์ฌ๋์ ์คํ๋ง ํต์ฌ ์๋ฆฌ๋ฅผ ๊ณต๋ถํ๋ฉด์ ์ ๋ฆฌ ํ์์ต๋๋ค.
๐ ๋ชฉ์ฐจ
01. [Spring] ์คํ๋ง ํต์ฌ ์๋ฆฌ
02. [Spring] ์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น (SOLID)
03. [Spring] ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ์คํ๋ง
04. [Spring] OCP์ DIP ๊ณ ๋ คํ๊ธฐ
05. [Spring] ๊ฐ์ฒด ์งํฅ ์๋ฆฌ ์ ์ฉ - ์๋ก์ด ํ ์ธ ์ ์ฑ
๊ฐ๋ฐ
06. [Spring] AppConfig ๋ฆฌํฉํฐ๋ง
07. [Spring] Ioc, DI Container
08. [Spring] ์คํ๋ง ์ปจํ
์ด๋ ์์ฑ
09. [Spring] ์ฑ๊ธํค ์ปจํ
์ด๋
10. [Spring] Component Scan And Auto wired Start
11. [Spring] ์์กด๊ด๊ณ ์ฃผ์
๋ฐฉ๋ฒ
12. [Spring] Bean Life Cycle Call Back
13. [Spring] Bean Scope
๐ JAVA์ ์ถ์ด ๊ฒจ์ธ๊ณผ Spring(๋ด)์ ํ์
์๋ JAVA์ ์ ํต ๊ธฐ์ (ํ์ค ๊ธฐ์ )๋ก EJB (Enterprise Java Beans)๋ผ๋ ๊ธฐ์ ์ด ํ์ด๋๊ฒ ๋ ๊ฒ์ด์์.
์ด๊ฒ์ ์คํ์์ค๋ ์๋์๊ณ , ์์ฒญ๋๊ฒ ๋น์ผ Server๋ฅผ ์ฌ์ผ์ง๋ง ์ด์ฉํ ์ ์์๋ ๊ธฐ์ ์ด์์.
์ด ๊ธฐ์ ์ ๋ถ์ฐ ๊ธฐ๋ฅ์ด ๋งค์ฐ ์ข๋ค๋ ํน์ง์ ๊ฐ์ง๊ณ ์์๋ต๋๋ค!
ํ์ง๋ง, ์ด ๊ธฐ์ ์ ๊ทน์ ์ ๋จ์ ์ ๋ฌด์์ด์๋?
๊ทธ๊ฒ์ ๋ฐ๋ก ๊ฐ๋ฐ์๋ค์ด ์ฌ์ฉํ๊ธฐ์ ์ด๋ ต๊ณ , ๋ณต์กํ๊ณ , ๋๋ฆฌ๋ค๋ ๋จ์ ์ ๋๋ค.
์ด๊ฒ์ ๊นจ๊ธฐ ์ํด ๋ ๊ฐ๋ฐ์๊ฐ ๋์์ผ๋ Spring์ ์์ด๋ฅผ ๋ง๋ Rod Johnson๊ณผ Hibernate๋ฅผ ๋ง๋ Gavin King๊ฐ ๋ฑ์ฅํ๊ฒ ๋ ๊ฒ์ด์์.
๐Spring
์ด๊ฒ์ EJB ๋ณด๋ค ๋จ์ํ๊ณ , ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ ๊ธฐ์ ์ธ ๊ฒ์ด์์.
- EJB Container ๋์ฒด
- ๋จ์ํจ์ ์น๋ฆฌ
- ํ์ฌ ์ฌ์ค์ ํ์ค ๊ธฐ์
๐Hibernate
- EJB Entity Bean ๊ธฐ์ ๋์ฒด
- JPA(Java Persistence API)์ ์๋ก์ด ํ์ค ์ ์
JPA๋ ORM ์ง์์ ๊ฑฐ์ ๋ค ์ ์ ํ๋ค๊ณ ๋ด๋ ๊ณผ์ธ์ด ์๋ ์ ๋๋๋๋ค!
๊ทธ๋ฆฌ๊ณ , Hibernate๋ ๊ตฌํ์ฒด์ 80% ์ ๋๋ฅผ ์ ์ ํ๊ณ ์๋ ๊ฒ์ด์์.
๐ Spring(๋ด) History
2002๋ ๋ก๋ ์กด์จ์ J2EE Design and Development์ด๋ผ๋ ์ฑ ์ถ๊ฐ์ ํ ๊ฒ์ด์์.
์ด ์ฑ ์ ์๋ ๋ด์ฉ์ ์ค์ ์ ์ผ๋ก ๋ค๋ฃจ์๋ต๋๋ค!
- EJB์ ๋ฌธ์ ์ ์ง์
- EJB ์์ด๋ ์ถฉ๋ถํ ๊ณ ํ์ง์ ํ์ฅ ๊ฐ๋ฅ Application ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๊ณ , 30,000Line ์ด์์ ๊ธฐ๋ฐ ๊ธฐ์ ์ ์์ Code๋ก ์ฆ๋ช
- Spring Core ๊ธฐ๋ฐ Code๊ฐ ๋ค์ด๊ฐ ์๋ค.
- Bean Factory, Application Context, POJO, ์ ์ด์ ์ญ์ , ์์กด๊ด๊ณ ์ฃผ์ ํฌํจ
- ์ฑ ์ด ์ ๋ช ํด ์ง๋ฉด์ ๊ฐ๋ฐ์๋ค์ด ์ฑ ์ ์์ Code๋ก Project์ ์ฌ์ฉํ๊ธฐ ์์
Spring์ Core Code ์๋น์๋ฅผ ์ ๊ฒ ํ ๋ฌ๋ผ๋ ๋ถ์ด ์ง๊ธ๋ ๊ฐ๋ฐํ๊ณ ๊ณ์ ๊ฒ์ด์์.
๋ํ Spring ์ด๋ฆ์ ์ ํต์ ์ธ J2EE(EJB)๋ผ๋ ๊ฒจ์ธ์ ๋์ด ์๋ก์ด ๋ด ์ฆ, ์์์ด๋ผ๋ ๋ป์ผ๋ก ์ง์๋ค๊ณ ํ๋ค์!
๐Release
2003๋ | Spring Framework 1.0 ์ถ์ - XML ๊ธฐ๋ฐ |
2006๋ | Spring Framework 2.0 ์ถ์ - XML ํธ์ ๊ธฐ๋ฅ ์ง์ |
2009๋ | Spring Framwork 3.0 ์ถ์ - JAVA Code๋ก ์ค์ |
2013๋ | Spring Framework 4.0 ์ถ์ - JAVA8 |
2014๋ | Spring Boot 1.0 ์ถ์ |
2017๋ | Spring Framework 5.0 / Spring Boot 2.0 ์ถ์ - Re Active Programing ์ง์ (Node.js ์ฒ๋ผ ๊ฐ๋ฐ ๊ฐ๋ฅ) |
2020๋ 9์ ํ์ฌ | Spring Framework 5.2.x, Spring Boot 2.3.x ์ถ์ |
Spring Framework๋ง ์ฌ์ฉํ์ ๋ ๋จ์ ์ ๋ฐฐํฌ์ ์ค์ ์ด ๋งค์ฐ ๋ณต์กํ๋ ๊ฒ์ด์์.
๐ Spring์ด๋?
๐Spring ์ํ๊ณ
- Spring Framwork : Spring ๊ธฐ์ ์ ํต์ฌ
- Spring Boot : ์ฌ๋ฌ Spring ๊ธฐ์ ์ ํธ๋ฆฌํ๊ฒ ์ด์ํ๊ฒ ๋์์ฃผ๋ ์ญํ
- Spring Data : DB์ ๊ธฐ๋ณธ CRUD๋ฅผ ํธํ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ์ญํ (Spring Data JPA๊ฐ ์ํด ์๋ค.)
- Spring Security : ๋ณด์ ๊ด๋ จ
- Spring Session : ์ธ์ ๊ด๋ จ
- Spring Rest Docs : API ๋ฌธ์๋ฅผ ํธ๋ฆฌํ๊ฒ ๋ง๋ค ์ ์๋๋ก ๋์์ฃผ๋ ์ญํ
๐Spring Framwork
์ด๊ฒ์ ์์ฃผ์์ฃผ ์ค์ํ ๊ฒ์ด์์!
- ํต์ฌ ๊ธฐ์ : Spring DI Container, AOP, Event, etc
- ์น ๊ธฐ์ : Spring MVC, Spring WebFlux
- ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ : Transaction, JDBC, ORM / XML ์ง์
- ๊ธฐ์ ํตํฉ : Cache, Email, Remote Access, Scheduling
- TEST : Spring ๊ธฐ๋ฐ Test ์ง์
- ์ธ์ด : Kotlin, ๊ทธ๋ฃจ๋น
์ต๊ทผ์๋ Spring Boot๋ฅผ ํตํด Spring Framwork ๊ธฐ์ ๋ค์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ด์!
๐Spring Boot
์ด๊ฒ์ Spring Framwork์ ๋ณ๋๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๊ณ , Framwork๋ฅผ ํธํ๊ฒ ์ฐ๊ฒ ๋์์ฃผ๋ ๋๊ตฌ์ธ ๊ฒ์ด์์.
- Spring Framework๋ฅผ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ง์, ์ต๊ทผ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ
- ๋จ๋ ์ผ๋ก ์คํํ ์ ์๋ Application ์ฝ๊ฒ ์์ฑ ๊ฐ๋ฅ
- Tomcat ๊ฐ์ Web Server ๋ด์ฅ์ ํตํด ๋ณ๋ Web Server ์ค์น๊ฐ ํ์ํ์ง ์์
- ์์ฌ์ด Build ๊ตฌ์ฑ์ ์ํ starter ์ข ์์ฑ ์ ๊ณต
- Spring๊ณผ 3rd Party(์ธ๋ถ) Library ์๋ ๊ตฌ์ฑ
- ๋ฉํธ๋ฆญ, ์ํ ํ์ธ, ์ธ๋ถ ๊ตฌ์ฑ ๊ฐ์ ํ๋ก๋์
์ค๋น ๊ธฐ๋ฅ ์ ๊ณต
์ด์ ํ๊ฒฝ์ ๋ชจ๋ํฐ๋ง ๊ธฐ๋ฅ ์ ๊ณต - ๊ด๋ก์ ์ํ ๊ฐ๊ฒฐํ ์ค์ ๊ฐ๋ฅ
2๋ฒ๊ณผ 3๋ฒ์ ๋ฌถ์ด์ Build์ Server์ ๋์ฐ๋ ์ผ๋ จ์ ๊ณผ์ ์ ์ฝ๋ ๋ช ์ค๋ก ํด๊ฒฐํ ์ ์๊ฒ ๋ ๊ฒ์ด์์.
๐Spring์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค๋ฉด?
Spring์ด๋ผ๋ ๋จ์ด๋ ๋ฌธ๋งฅ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ฌ์ฉ๋๋ ๊ฒ์ด์์.
- Spring DI Container ๊ธฐ์
- Spring Framwork
- Spring Boot, Framwork ๋ฑ์ ๋ชจ๋ ํฌํจํ Spring ์ํ๊ณ๋ฅผ ์ง์นญ
๐Spring์ ๋ง๋ ์ด์
Spring ํต์ฌ ๊ฐ๋ / ์ปจ์ ์ ๋ฌด์์ผ๊น์?
- Web Application์ ๋ง๋ค๊ณ , DB ์ ๊ทผ์ ํธ๋ฆฌํ๊ฒ ํด ์ฃผ๋ ๊ธฐ์ ์ผ๊น?
- ์ ์์ ๋ถ Framwork์ผ๊น?
- Web Server๋ ์๋์ผ๋ก ๋์์ฃผ๋ ํธํ ๊ฒ์ผ๊น?
- Cloud, Micro Service๋ฅผ ์ํ ๊ฒ์ผ๊น?
์์ ๊ฒ๋ค์ Core ๊ฐ๋ ์ด ์๋๊ณ , ๊ทธ์ ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฌผ๋ก ๋์จ ๊ฒ๋ค์ธ ๊ฒ์ด์์!
Spring์ ์ง์ง ํต์ฌ์ ๋ฌด์์ผ๊น์?
- Spring์ JAVA ์ธ์ด ๊ธฐ๋ฐ์ Framwork
- JAVA ์ธ์ด์ ๊ฐ์ฅ ํฐ ํน์ง์ธ ๊ฐ์ฒด ์งํฅ์ ์ง์ํ๋ค.
- Spring ๊ฐ์ฒด ์งํฅ ์ธ์ด๊ฐ ๊ฐ์ง ๊ฐ๋ ฅํ ํน์ง์ ์ด๋ ค๋ด๋ Framwork
- Spring์ ์ข์ ๊ฐ์ฒด ์งํฅ Application์ ๊ฐ๋ฐํ ์ ์๊ฒ ๋์์ฃผ๋ Framwork
๐ ์ข์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ?
๐๊ฐ์ฒด ์งํฅ ํน์ง
- ์ถ์ํ
- ์บก์ํ
- ์์
- ๋คํ์ฑ
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ "๊ฐ์ฒด"๋ค์ ๋ชจ์์ผ๋ก ํ์ ํ๋ ค๊ณ ํ๋ ๊ฒ์ด์์. ๊ฐ๊ฐ์ ๊ฐ์ฒด๋ Message๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณ , ์ฒ๋ฆฌํ ์ ์๋ต๋๋ค.(ํ๋ ฅ)
๋ํ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ณ , ๋ณ๊ฒฝ์ด ์ฉ์ดํ๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๋๊ท๋ชจ ๊ฐ๋ฐ์ ๋ง์ด ์ฌ์ฉ๋๋ต๋๋ค.
๐์ ์ฐํ๊ณ , ๋ณ๊ฒฝ์ด ์ฉ์ดํ๋ค๋ ๊ฒ์?
- LEGO Block ์กฐ๋ฆฝํ๋ฏ
- Keyboard, Mouth๋ฅผ ๊ฐ์ ๋ผ์ฐ๋ฏ
- ์ปดํจํฐ ๋ถํ์ ๊ฐ์ ๋ผ์ฐ๋ฏ
- Component๋ฅผ ์ฝ๊ณ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ๋ฉด์ ๊ฐ๋ฐํ ์ ์๋ค๋ ๊ฒ
๐๋คํ์ฑ
๋คํ์ฑ๊ณผ ์ค์ธ๊ณ๋ฅผ ํ๋ฒ ๋น์ ํด ๋ณผ๊ฒ์!
- ์ญํ ๊ณผ ๊ตฌํ์ผ๋ก ์ธ์์ ๊ตฌ๋ถ
์์ ๊ฐ์ ์ํฉ์ผ๋ก ํ๋ฒ ์๊ฐ ํด ๋ณผ๊ฒ์.
์ฌ๊ธฐ์ ์ญํ ์ ์ฐ๋ฆฌ JAVA์์ Interface๋ก ์๊ฐ ํด ์ฃผ์ธ์!
์ด์ ์๋ K3๋ฅผ ํ๋ค๊ฐ ์๋ฐ๋ผ๋ก ์ฐจ๋ฅผ ๋ฐ๊ฟ๋ ์ด์ ์ ํ ์ ์๋ ๊ฒ์ด์์. ์๋์ฐจ๊ฐ ๋ฐ๋์ด๋ ์ด์ ์์๊ฒ ์ํฅ์ ์์ผ๋๊น์!
๋คํ์ฑ ๊ด์ ์์ ๊ฐ ์ฐจ๋ค์ ์ฐจ๋์ฐจ ์ญํ ์ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ ์ด์ ์๋ ๋ค๋ฅธ ๋ฉดํ์ฆ์ ์ถ๊ฐ๋ก ์ทจ๋ํ์ง ์์๋ ์ด์ฉํ ์ ์๋ ๊ฒ์ด์์.
Client๋ ์๋์ฐจ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ๋ ๋๊ณ , ์๋์ฐจ ์ญํ ๋ง ์๋ค๋ฉด Client์๊ฒ ์ํฅ์ด ๊ฐ์ง ์๋ ๊ฒ์ด์ง์.
์ด๋ ๊ฒ ์ญํ ๊ณผ ๊ตฌํ์ผ๋ก ๋๋๋ค๋ฉด ์๋ก์ด ์๋์ฐจ๊ฐ ๋์ค๋๋ผ๋ ์ด์ ์๋ ๋ฐ๋ก ๋ญ๊ฐ ํ ํ์์์ด ์ฐจ๋ง ์ฌ๋ฉด ๋๋ ๊ฒ์ด์์.
์ฌ์ค ๊ทธ๊ฒ ์ ์ผ ํ๋ ๊ฑฐ๊ฒ ์ง๋ง.....
์ด๋ฒ์๋ ์ด ์์๋ฅผ ํ๋ฒ ๋ณผ๊น์?
๊ฐ ์ญํ ์ ์ ํด์ ธ ์๊ณ , ๋ฐฐ์ฐ๋ ์ฌ์ค ๋๊ฐ ํด๋ ์๊ด์ด ์๋๊ฒ์ด์์.
์ฆ, ๋ฐฐ์ฐ๋ ๋์ฒด๊ฐ ๊ฐ๋ฅํด์ผ ํฉ๋๋ค. ๊ทธ๋์ผ ๊ฐ์๊ธฐ ๋๊ฐ ์ํ๋ ๋์ฒด๊ฐ ๊ฐ๋ฅํ๊ฒ ์ง์?
๐์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌ
์ญํ ๊ณผ ๊ตฌํ์ผ๋ก ๊ตฌ๋ถํ๋ฉด ์ธ์์ด ๋จ์ํด์ง๊ณ , ์ ํํด์ง๋ฉฐ, ๋ณ๊ฒฝ๋ ํธ๋ฆฌํด ์ง๋ ๊ฒ์ด์์.
๊ทธ๋ ๋ค๋ฉด ์ด๋ ๊ฒ ํ์ ๋ ์ฅ์ ์ ๋ฌด์์ผ๊น์?
- Client๋ ์ธ์์ ์ญํ (Interface)๋ง ์๋ฉด ๋๋ค.
- Client๋ ๊ตฌํ ๋์์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ๋ ๋๋ค.
- Client๋ ๊ตฌํ ๋์์ ๋ด๋ถ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
- Cleint๋ ๊ตฌํ ๋์ ์์ฒด๋ฅผ ๋ณ๊ฒฝํด๋ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
์ด๋ฒ์๋ JAVA๋ฅผ ๊ฐ์ง๊ณ ํ๋ฒ ์๊ฐ ํด ๋ณผ๊ฒ์.
JAVA์ ๋คํ์ฑ์ ํ์ฉ ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
- Role = interface
- implement = Interface๋ฅผ ๊ตฌํํ Class, ๊ตฌํ Entity
๊ฐ์ฒด๋ฅผ ์ค๊ณํ ๋ ์ญํ ๊ณผ ๊ตฌํ์ ๋ช ํํ ๋ถ๋ฆฌํด์ผ ํ๋ ๊ฒ์ด์์.
๊ฐ์ฒด ์ค๊ณ์ ์ญํ (Interface)์ ๋จผ์ ๋ถ์ฌํ๊ณ , ๊ทธ ์ญํ ์ ์ํํ๋ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ผ ํ๋ต๋๋ค.
๊ฐ์ฒด์ ํ๋ ฅ์ด๋ผ๋ ๊ด๊ณ๊ฐ ์๋ค๋ ๊ฒ๋ถํฐ ์ฐ๋ฆฌ๋ ์์์ผ ํ๋ ๊ฒ์ด์์.
์ฆ, ํผ์ ์๋ ๊ฐ์ฒด๋ ์์ผ๋ฉฐ, Client๋ ์์ฒญ์ ๋ณด๋ด๋ ์ ์ฅ์ด๊ณ , Server๋ ์๋ต์ ์ฃผ๋ ์ ์ฅ์ด๋๋๋ค.
์ ๋ง์ ๊ฐ์ฒด ํด๋ผ์ด์ธํธ์ ๊ฐ์ฒด ์๋ฒ๋ ์๋ก ํ๋ ฅ ๊ด๊ณ๋ฅผ ๊ฐ๊ณ ์๋ ๊ฒ์ด์์.
๐JAVA ์ธ์ด์ ๋คํ์ฑ
Overriding์ ํ๋ฒ ์๊ฐํด๋ณผ๊ฒ์.
์ด๊ฒ์ JAVA์ ๊ธฐ๋ณธ์ด์ง์? ๊ฒฐ๊ตญ Overriding์ด ๋ Method๊ฐ ์คํ๋๊ฒ ๋๋ ๊ฒ์ด์์.
๋คํ์ฑ์ผ๋ก Interface๋ฅผ ๊ตฌํํ ๊ฐ์ฒด ๋ฅผ ์คํ ์์ ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๋ฌผ๋ก ! Class ์์ ๊ด๊ณ๋ ๋คํ์ฑ, Overriding์ ๊ฐ๋ฅํ ๊ฒ์ด์์.
์์ ์ผ์ชฝ ๊ทธ๋ฆผ์์ Client๋ MemberRepository๋ฅผ ์์กดํ๊ณ ์๊ณ , ์ด๋ฅผ ์์กด ๊ด๊ณ๋ผ๊ณ ํ๋ต๋๋ค.
์์กด์ ์ฝ๊ฒ ๋งํด '๋ด๊ฐ ์ค๋ฅผ ์๊ณ ์๋ค'๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ ๊ฒ์ด์์.
์์ ๊ทธ๋ฆผ์์ ๋นจ๊ฐ๊ณผ ์ด๋ก์ ๊ตฌํ์ฒด๋ค์ MemberRepository๋ฅผ ๊ตฌํํ ์ ์๋ ๊ฒ์ด์์.
์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด Client๋ Interface์ธ MemberRepository๋ ์์กดํ ์ ์์ง๋ง, ๊ทธ๊ฒ์ ๊ตฌํํ ๊ตฌํ์ฒด๋ค์ ์์กดํ ์๋ ์๋ ๊ฒ์ด์์.
๐๋คํ์ฑ์ ๋ณธ์ง
Interface๋ฅผ ๊ตฌํํ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์คํ ์์ ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ด์์.
๋คํ์ฑ์ ๋ณธ์ง์ ์ดํดํ๋ ค๋ฉด ํ๋ ฅ์ด๋ผ๋ ๊ฐ์ฒด ์ฌ์ด์ ๊ด๊ณ์์ ์์ํด์ผ ํ๋ต๋๋ค.
Client๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ , ์๋ฒ์ ๊ตฌํ ๊ธฐ๋ฅ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค!
์ ๋ฆฌ์ํ๋ฉด ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌํ๋ฉด ์ค์ธ๊ณ์ ์ด ์ปจ์ ์ ๋คํ์ฑ์ ํตํด ๊ฐ์ฒด ์ธ์์ผ๋ก ๊ฐ์ ธ ์ฌ ์ ์๋ ๊ฒ์ด์์.
๊ทธ๋ฌ๋ฉด ์ ์ฐํ๊ณ , ๋ณ๊ฒฝ์ด ์ฉ์ดํด ์ง๊ณ , ํ์ฅ ๊ฐ๋ฅํ ์ค๊ณ๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ๋ํ Client๋ ์ํฅ์ ๋ฐ์ง ์๋๋ก ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํด ์ง๊ฒ ์ง์. ๊ทธ๋์ ์ค์ํ ๊ฒ์ Interface๋ฅผ ์์ ์ ์ผ๋ก ์ ์ค๊ณํ๋ ๊ฒ์ด ์ค์ํ ๊ฒ์ด์์!
ํ์ง๋ง, ๋ฌธ์ ๊ฐ ์๋ ๊ฒ์ด์์.
์ญํ (Interface) ์์ฒด๊ฐ ๋ณํ๋ฉด Client, Server ๋ชจ๋ ํฐ ๋ณ๊ฒฝ์ด ๋ถ๊ฐํผํ๋ต๋๋ค.
๋ง์ฝ ์์์ ๋ณธ ์๋์ฐจ ์์์์ ์๋์ฐจ๋ฅผ ๋นํ๊ธฐ๋ก ๋ณ๊ฒฝํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
๊ทธ๋ฆฌ๊ณ , ๋ก๋ฏธ์ค์ ์ค๋ฆฌ์ฃ ์์์์ ๋๋ณธ ์์ฒด๊ฐ ๋ณ๊ฒฝ๋๋ค๋ฉด์?
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Interface๋ฅผ ์์ ์ ์ผ๋ก ์ ์ค๊ณํ๋ ๊ฒ์ด ์ค์ํ๋ต๋๋ค!
๐Spring๊ณผ ๊ฐ์ฒด ์งํฅ
๋คํ์ฑ์ ๋งค์ฐ ์ค์ํ ๊ฒ์ด์์.
Spring์ ๋คํ์ฑ์ ๊ทน๋ํํด์ ์ด์ฉํ ์ ์๊ฒ ๋์์ฃผ๋ ๋๊ตฌ์ธ ๊ฒ์ด์์.
Spring์์ ์ด์ผ๊ธฐํ๋ ์ ์ด์ ์ญ์ (IoC), ์์กด๊ด๊ณ ์ฃผ์ (DI)์ ๋คํ์ฑ์ ํ์ฉํด์ ์ญํ ๊ณผ ๊ตฌํ์ ํธ๋ฆฌํ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก ๋์์ค๋ต๋๋ค.
Spring์ ์ฌ์ฉํ๋ฉด ๋ง์น LEGO Block ์กฐ๋ฆฝํ๋ฏ ๊ทธ๋ฆฌ๊ณ , ๊ณต์ฐ ๋ฌด๋์ ๋ฐฐ์ฐ๋ฅผ ์ ํํ๋ฏ ๊ตฌํ์ ํธ๋ฆฌํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ด์์.
์ฃผ๋ํ๋์ ๊ธ์ด ๋ง์์ ๋์
จ๋์? ๊ตฌ๋
๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋๊ธ ๊ทธ๋ฆฌ๊ณ ๋ฐฉ๋ช
๋ก์ ์ฃผ๋ํ๋์๊ฒ ๋ง์ ํ์ด ๋ฉ๋๋ค
'Back-End ์์ ์ค > Spring Framework' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ์คํ๋ง (0) | 2021.09.12 |
---|---|
[Spring] ์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น (SOLID) (0) | 2021.09.11 |
[๋์ ๊ธฐ์ !] JPA์ Querydsl (0) | 2021.08.25 |
[๋์ ๊ธฐ์ !] ํ ์คํธ ์ฝ๋ (0) | 2021.08.24 |
[๋์ ๊ธฐ์ !] Web Layer (0) | 2021.08.23 |