์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- s3 log ์ ์ฅ
- nGrinder
- ํ์ดํผ๋ฐ์ด์
- s3 ์ด๋ฏธ์ง ์ ์ฅ
- ์ ํจ์ค ๋น๋ ์ค๋ฅ
- JPA
- docker ps -a
- redis ํ ์คํธ์ฝ๋
- ํ๋ก๊ทธ๋๋จธ์ค ์ปฌ๋ฌ๋ง๋ถ
- docker
- private subnet ec2 ๋ก์ปฌ ์ ์
- ๋ค์ค ์ปจํ ์ด๋
- aws ์ฟ ํฐ
- Entity
- aws saa ํฉ๊ฒฉ
- docker-compose kafka
- Codedeploy ์ค๋ฅ
- redis ์กฐํ
- ์๋ฐ
- AWS Certified Solutions Architect - Associate
- ์ ํจ์ค ์ค์ผ์ค๋ฌ
- ์คํํ๋ ๋ฏธ์ค
- @RestControllerAdvice
- Kafka
- ํ๋ก๊ทธ๋๋จธ์ค ํฉ์นํ์์๊ธ
- prod docker-compose
- ํ๋ก๊ทธ๋๋จธ์ค
- docker compose
- ์๋ฒ ํฐ์ง๋ ๋์ปค ์ฌ์คํ
- s3 ์ด๋ฏธ์ง ๋ค์ด๋ก๋
- Today
- Total
๐๐ข๐๐ โ๐๐๐ ๐๐๐ก๐๐ ๐๐๐๐โง
[Spring] Spring MVC ๊ตฌ์กฐ ๋ณธ๋ฌธ
[Spring] Spring MVC ๊ตฌ์กฐ
๐คRyusun๐ค 2022. 11. 2. 13:00๐ผ ์คํ๋ง
- ์คํ๋ง ํ๋ ์์ํฌ
- Frame(ํ)์์์ work(๋์)ํ๋๊ฒ์ ๋ปํจ. ๊ฐ๋ฐํ ๋ ํ์ ๋ฒ์ด๋์ง๋ง๊ณ ํ์์์๋ง ๊ฐ๋ฐํ๋๊ฒ์ ์๋ฏธ๋ฅผ ๋
- ๋์ ์ธ ์น ์ฌ์ดํธ๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํ ์ฌ๋ฌ ๊ฐ์ง ์๋น์ค๋ฅผ ์ ๊ณต
- ์คํ๋ง ํ๋ ์์ํฌ์ ๊ตฌ์ฑ์ 20์ฌ๊ฐ์ง๋ก ๊ตฌ์ฑ๋๋ฉฐ ์ด๋ฌํ ๋ชจ๋๋ค์ ์คํ๋ง์ ํต์ฌ๊ธฐ๋ฅ(DI, AOP, etc)์ ์ ๊ณตํด์ฃผ๋ฉฐ, ํ์ํ ๋ชจ๋๋ง ์ ํํ์ฌ ์ฌ์ฉ๊ฐ๋ฅ
- ์ฌ๋ฌ๊ฐ์ง ๋ชจ๋์ด ์์ง๋ง ๊ทธ์ค์์ ๋จ์ฐ ์คํ๋ง๋ถ, ์คํ๋ง ํด๋ผ์ฐ๋, ์คํ๋ง ๋ฐ์ดํฐ, ์คํ๋ง ๋ฐฐ์น, ์คํ๋ง ์ํ๋ฆฌํฐ์ ์ค์ ์ ๋
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ ๊ฒฐ์ ํ์ง๋ง ํ๋ ์์ํฌ๋ ์ ํด์ง ํ๋ฆ์ ๋ง๊ฒ ๊ฐ๋ฐ์๊ฐ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๋ค.
๐ท Spring MVC ๊ตฌ์กฐ
- ์คํ๋ง ํ๋ ์์ํฌ๋ MVC ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ์๋ค.
- MVC = Model - View - Controller
- ์คํ๋ง ๋ชจ๋ธ์ View - Controller - Service - DAO - DB ๋ก ์ด๋ฃจ์ด์ ธ์๋ค.
- View(Browser)
๋ง ๊ทธ๋๋ก ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ ํ๋ฉด์ View๋ผ๊ณ ํ๋ค. Spring์์๋ JSP๋ฅผ ํตํด ํ๋ฉด์ ๊ตฌ์ฑํ๊ณ Controller๋ฅผ ํตํด ๋ฐฑ์๋ ์๋ฒ์ ์ฐ๊ฒฐํ๋ค. - Controller
View์ Service ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ๋ค. ํด๋ผ์ด์ธํธ์์ ์ ๋ ฅํ URL์ ๋ง๋ View๋ฅผ ๋ณด์ฌ์ฃผ๊ณ , View์์ ์ฒ๋ฆฌํ๋ ๋ฐ์ดํฐ๋ฅผ Service๋ก ์ ๋ฌํด์ค๋ค. - Service
์ค์ ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๊ณณ์ผ๋ก ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ฉฐ ๋ชจ๋ ๊ธฐ๋ฅ์ Service์์ ๋ง๋ค์ด์ง๋ค. Controller๋ฅผ ํตํด ํ๋ฉด๊ณผ ์ฐ๊ฒฐ๋๊ณ , DB ์ ๋ณด๊ฐ ํ์ํ ๋๋ DAO๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ๋๋ค. - DAO
Data Access Object์ ์ค์๋ง์ธ DAO๋ ํ๋ก์ ํธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํ๋ค. ์ง์ DB์ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ / ์ญ์ / ์กฐํ ๋ฑ ์กฐ์ํ ์ ์๋ ๊ธฐ๋ฅ ์ํํ๋ฉฐ DB ์ ๊ทผ์ ํ๊ธฐ ์ํ ๋ก์ง๊ณผ ๋น์ง๋์ค ๋ก์ง์ ๋ถ๋ฆฌํ๋ค. Mapper์ SQL์ ๋ช ์ํ๋ค Mapper์ ํจ๊ป ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค. - DTO
๊ณ์ธต๊ฐ (Controller, View, Business Layer) ๋ฐ์ดํฐ ๊ตํ์ ์ํ ์๋ฐ๋น์ฆ์ด๋ฉฐ DB์ ๋ฐ์ดํฐ๋ฅผ Service๋ Controller ๋ฑ์ผ๋ก ๋ณด๋ผ ๋ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ด๋ค. DB์ ๋ฐ์ดํฐ๊ฐ Presentation Logic Tier๋ก ๋์ด์ฌ๋๋ DTO๋ก ๋ณํ๋์ด ์ค๊ณ ๊ฐ๋ฉฐ DTO๋ ๋ก์ง์ ๊ฐ์ง์ง ์๊ณ getter/setter ๋ฉ์๋๋ง ๊ฐ์ง ์์ํ ๋ฐ์ดํฐ ๊ฐ์ฒด์ด๋ค.
โถ DTO์ VO๊ฐ ์๋ฒฝํ๊ฒ ๊ฐ์ ๋ง์ ์๋์ง๋ง ํฌ๊ฒ ์ฐจ์ด๋ฅผ ๋์ง ์๋๋ค - Entity
์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ 1:1 ๋งค์นญ๋๋ ํด๋์ค์ด๋ฉฐ DB ํ ์ด๋ธ ๋ด ์กด์ฌํ๋ ์ปฌ๋ผ๋ง์ ์์ฑ (ํ๋)๋ก ๊ฐ์ ธ์ผ ํ๋ค. ํ ์ด๋ธ ๋ด์ ์กด์ฌํ์ง ์๋ ์ปฌ๋ผ์ ๊ฐ์ ธ๋ ์๋๋ฉฐ ์์๋ฐ๊ฑฐ๋ ๊ตฌํ ํด๋์ค์ฌ๋ ์๋๋ค. ์ต๋ํ ์ธ๋ถ์์ Entity ํด๋์ค์ getter/setter๋ฅผ ์ฌ์ฉํ์ง ์๋๋ก ํด๋์ค ๋ด๋ถ์์ ํ์ํ ๋ก์ง์ ๊ตฌํํด์ผ ํ๋ค. ๊ตฌํ ๋ฉ์๋๋ ์ฃผ๋ก Service Layer์์ ์ฌ์ฉํ๋ค.๋ํ Presentation Logic์ ๊ฐ์ง๋ฉด ์๋๋ค.
โญ Dispatcher-Servlet
- dispatch๋ "๋ณด๋ด๋ค".
- ์ด๋ฌํ ๋จ์ด๋ฅผ ํฌํจํ๋ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ HTTP ํ๋กํ ์ฝ๋ก ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ ๊ฐ์ฅ ๋จผ์ ๋ฐ์ ์ ํฉํ ์ปจํธ๋กค๋ฌ์ ์์ํจ.
- ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ด๋ ํ ์์ฒญ์ด ์ค๋ฉด Tomcat(ํฐ์บฃ)๊ณผ ๊ฐ์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ ์์ฒญ์ ๋ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ชจ๋ ์์ฒญ์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์ธ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ด ๊ฐ์ฅ ๋จผ์ ๋ฐ์ผ๋ฉฐ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ๊ณตํต์ ์ธ ์์ ์ ๋จผ์ ์ฒ๋ฆฌํ ํ์ ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํด์ผ ํ๋ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์์ ์์ ์ ์์ํ๋ค.
- ์ฌ๊ธฐ์ Front Controller(ํ๋ก ํธ ์ปจํธ๋กค๋ฌ)๋ผ๋ ์ฉ์ด๊ฐ ์ฌ์ฉ๋๋๋ฐ, Front Controller๋ ์ฃผ๋ก ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ์ ์ผ ์์์ ์๋ฒ๋ก ๋ค์ด์ค๋ ํด๋ผ์ด์ธํธ์ ๋ชจ๋ ์์ฒญ์ ๋ฐ์์ ์ฒ๋ฆฌํด์ฃผ๋ ์ปจํธ๋กค๋ฌ๋ก์จ, MVC ๊ตฌ์กฐ์์ ํจ๊ป ์ฌ์ฉ๋๋ ๋์์ธ ํจํด์ด๋ค.
- ๊ณผ๊ฑฐ์๋ ๋ชจ๋ ์๋ธ๋ฆฟ์ URL ๋งคํ์ ์ํด web.xml์ ๋ชจ๋ ๋ฑ๋กํด์ฃผ์ด์ผ ํ์ง๋ง, dispatcher-servlet์ด ํด๋น ์ดํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ ํธ๋ค๋งํด์ฃผ๊ณ ๊ณตํต ์์ ์ ์ฒ๋ฆฌ๋ฉด์ ์๋นํ ํธ๋ฆฌํ๊ฒ ์ด์ฉํ ์ ์๊ฒ ๋์๋ค. ์ฐ๋ฆฌ๋ ์ปจํธ๋กค๋ฌ๋ฅผ ๊ตฌํํด๋๊ธฐ๋ง ํ๋ฉด ๋์คํจ์ฒ ์๋ธ๋ฆฟ๊ฐ ์์์ ์ ํฉํ ์ปจํธ๋กค๋ฌ๋ก ์์์ ํด์ฃผ๊ฒ ๋๋ค. ์ถ์ฒ: https://mangkyu.tistory.com/18 [MangKyu's Diary:ํฐ์คํ ๋ฆฌ]
1. ์ฌ์ฉ์ ์์ฒญ ์ ์ก์ ํ๋ฉด DispatcherServlet ์ด ์์ฒญ์ ๊ฐ๋ก์ฑ
web.xml์ `<url-pattern>/</url-pattern>` ๋ฑ๋ก๋ ๋ด์ฉ ๊ฐ๋ก์ฑ
2. DispatcherServlet ์ด ๊ฐ๋ก์ฑ ์์ฒญ์ HandlerMapping ์๊ฒ ๋ณด๋
3. HandlerMapping์ ์ฌ์ฉ์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ Controller ๊ฒ์
4. DispatcherServlet์ ์ ํ๋ Controller ๋น์ง๋์ค ๋ก์ง ์คํ์ HandlerAdapter์๊ฒ ์์
5. HandlerAdapter๊ฐ Controller์ ๋น์ง๋์ค ๋ก์ง ํธ์ถ
6. ๋น์ง๋์ค ๋ก์ง ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ Model ์ด๋ ModelAndView ๊ฐ์ฒด์ ๋ด์์ DispatcherServlet์๊ฒ ๋ฐํํจ
7. DispatcherServlet์ด ViewResolver๋ฅผ ์ด์ฉํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค View๋ฅผ ๊ฒ์
8. ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ ํฌํจ๋ View ๊ฐ์ฒด๋ฅผ DispatcherServlet์ ์ก์ ํ์ฌ ์ต์ข
๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํจ
โญ ์คํ๋ง ์น ๊ณ์ธต
Presentation Layer
- ๋ธ๋ผ์ฐ์ ์์ ์น ํด๋ผ์ด์ธํธ ์์ฒญ ๋ฐ ์๋ต ์ฒ๋ฆฌ
- ์ฌ์ฉ์ ์์ฒญ์ ๋ง๋ @Controller๋ฅผ ํธ์ถ
- ์ฌ์ฉ์ ์์ฒญ ๊ฐ์ฒด์ ๋ํ ์ ํจ์ฑ ์ฒ๋ฆฌ
- Business Layer ๋ Persistence Layer์์ ๋ฐ์ํ๋ ์์ธ์ฒ๋ฆฌ
- Controller, View ํฌํจ
Business Layer
- Service Layer
- ์ค์ ๋น์ง๋์ค ๋ก์ง์ ์ํํ๋ ์ปดํฌ๋ํธ
- Presentation Layer์์ ๋ค์ด์ค๋ ์ฌ์ฉ์ ์์ฒญ ๋ฐ์ดํฐ๊ฐ ์๋๋ผ ๋ค๋ฅธ ๊ณ์ธต์ ํตํด ๋ค์ด์๊ฑฐ๋ Controller๋ฅผ ์ง์ ์ ์ผ๋ก ๊ฑฐ์น์ง ์๋ ์์ฒญ์ผ ๊ฒฝ์ฐ ํด๋น ๊ณ์ธต์์ ์ฒ๋ฆฌ
- ๋ชจ๋ ์ธํฐํ์ด์ค์ ํต์ฌ API๋ก ์ ๊ณตํ๋ ค๋ฉด Service Layer์์ UI specificํ๋ค๋ฉด Presentation Layer ์ฒ๋ฆฌ
- ์ธ๋ถ API ์ฌ์ฉํ ๊ฒฝ์ฐ ํด๋น ๊ณ์ธต์์ ์ฌ์ฉ
- ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํด์ผํ๋ ์์ ์ด ์๋ค๋ฉด ํด๋น ๊ณ์ธต์์ ์ฒ๋ฆฌ
- ์ปจํธ๋กค๋ฌ์์ ์์ฒญ์ ๋ณด๋ด๋ฉด DAO๋ฅผ ์ด์ฉํด ์ค์ ๋น์ง๋์ค ๋ก์ง์ ์ํ
- DAO์์ ๋ฐ์ ๋ฐ์ดํฐ Entity์ ์ ํจ์ฑ์ ํ์ธํ๊ณ DTO๋ก ๋ณํ
- Persistence Layer์ Presentation Layer์ด ์ง์ ์ ์ผ๋ก ํต์ ํ์ง ์๊ฒ ํจ
- ์ง์ ์ ์ผ๋ก ํต์ ํ ๊ฒฝ์ฐ Persistence Layer์ ๋ฐ์ดํฐ๊ฐ ์์ ๋ ์ ์์์ ๋ง๊ธฐ ์ํจ
- ํธ๋์ญ์ ๊ด๋ฆฌ
- Service ์ธํฐํ์ด์ค์ @Service ํด๋์ค
Persistence Layer
- Repository Layer / Data Access Layer
- DB์ ๊ฐ์ ์ ์ฅํ๊ฑฐ๋ ๊ฐ์ ธ์ค๊ธฐ ์ํด SQL ์ง์ ๋ฐ ์ํ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฌ
- DB์ ๋ฐ์ดํฐ๋ฅผ CRUD (Create, Read, Update, Drop)ํ๋ ๊ณ์ธต
- DAO ์ธํฐํ์ด์ค์ @Repository ํด๋์ค
๊ณ์ธต์ ๋๋๋ ๊ฒ์ ์ฅ์
- ๊ด์ฌ ๋ถ๋ฆฌ๋ฅผ ํตํด ๋์ ๊ณ์ธต์ ์ง์ค ๊ฐ๋ฅ
- ๊ณ์ธต์ ๋๋๋ฉด์ ๋ชจ๋ํํ๊ฒ ๋๋ฏ๋ก ๋ชจ๋ ๊ฐ์ ๋ผ์ฐ๊ธฐ ๊ฐ๋ฅ
- ๊ณ์ธต๋ณ ํ ์คํธ๊ฐ ์ฌ์์ง
๊ณ์ธต ๋๋๋ ๋ฐฉ๋ฒ
- ๋๋ฉ์ธ์ ๋จผ์ ๋ถ๋ฆฌํจ
- naver
- pay
- shopping
- news
- naver
- ๊ฐ ๋๋ฉ์ธ ์์์ Presentation - Business - Persistence๋ก ๋๋๋ ๊ฒ์ด ์ข์
'๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ด๐ป > ๐๐ฉ๐ซ๐ข๐ง๐ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] TestCode, TDD, JUnit, assertJ (0) | 2022.12.19 |
---|---|
[Spring] AOP (2) | 2022.12.11 |
[Spring] Bean, Component (0) | 2022.12.09 |
[Spring] IoC (0) | 2022.12.09 |
[Spring] Forward, Redirect, Session (2) | 2022.11.01 |