๋ฐ์ดํฐ(Model), ํ๋ฉด(View), ์ฐ๊ฒฐํด์ฃผ๋ Controller
Spring MVC ์๋ฆฌ
Spring MVC๋ Model-View-Controller ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ํ ๊ตฌ์ฑ ์์๊ฐ ์ญํ ์ ๋ถ๋ดํ์ฌ ๋์ํ๋ค.
์ด ๊ตฌ์กฐ๋ ํนํ ๋์ ์น ํ์ด์ง๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ์ค์ํ ์ญํ ์ ํ๋ค.
1. ํ ํ๋ฆฟ ์์ง๊ณผ ๋์ ์นํ์ด์ง
๋์ ์น ํ์ด์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ๋ฐ๋ณต์ ์ธ ํ ํ๋ฆฟ(ViewTemplate)๊ณผ ๋ฐ์ดํฐ(Model)๊ฐ ํ์ํ๋ค. ์๋ฅผ ๋ค์ด, 1000๋ช ์ ์ ์ ์ ๋ณด๋ฅผ ํ์ํ๋ ํ์ด์ง๋ฅผ ๋ง๋ค ๋, ํ๋์ HTML ํ ํ๋ฆฟ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ 1000๋ช ์ ์ ๋ณด๋ฅผ ๊ฒฐํฉํ ๋์ ์น ํ์ด์ง๋ฅผ ์์ฑํ ์ ์๋ค.
- ViewTemplate: ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ ์น ํ์ด์ง์ ํ(HTML)
- Model: ์ค์ ๋ฐ์ดํฐ. ํ ํ๋ ์์ง์ ์ํด ํ์ด์ง์ ์ฝ์ ๋๋ค.
- View: ์ต์ข ์ ์ผ๋ก ์ฌ์ฉ์๊ฐ ๋ณด๊ฒ๋๋ ๋์ ์น ํ์ด์ง.
2. Spring MVC์ ๋์ ์๋ฆฌ
Spring MVC๋ Controller๊ฐ ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , Model์ ์กฐํํ๊ฑฐ๋ ์กฐ์ํ ํ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ViewTemplate์ ๋ฐ์ํ์ฌ ์น ํ์ด์ง๋ฅผ ์์ฑํด ๋ฐํํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
- Controller: ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๊ณ ๋ก์ง์ ์ํํ ํ, ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ์ญํ .
- Model: ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐ๋์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋ ์์ ํ๋ ์ญํ .
- View: ๋ฐ์ดํฐ๋ฅผ ํฌํจํ HTML์ ์์ฑํ๊ณ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋ ์ญํ .
3. Tomcat๊ณผ Spring์ ๊ตฌ์กฐ
์๊ธฐ ์ด๋ฏธ์ง๋ฅผ ํตํด Spring ์ ํ๋ฆฌ์ผ์ด์ ์ด Tomcat๊ณผ JVM์์ ์ด๋ป๊ฒ ์คํ๋๋์ง ์์๋ณด์.
1. WAR (Web Application Archive):
- Java Application: Java ์ ํ๋ฆฌ์ผ์ด์ ์ WAR ํ์ผ๋ก ํจํค์ง๋๋ฉฐ, ์ด WAR ํ์ผ์ ์ธ๋ถ์ Tomcat๊ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์์ ์คํ๋๋ค. ์ฆ, ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ Tomcat์ด ๋ณ๋๋ก ์กด์ฌํ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ Tomcat์ด ์ ๊ณตํ๋ ํ๊ฒฝ ์์์ ๋์ํ๋ค.
- Spring Application: Spring ์ ํ๋ฆฌ์ผ์ด์ ๋ WARํ์ผ๋ก ๋ฐฐํฌํ ์ ์์ผ๋ฉฐ, ์ด๋ Tomcat ์๋ฒ๋ ์ฌ์ ํ ์ธ๋ถ์ ์กด์ฌํ๋ค. ์ฆ, Spring์ ํ๋ฆฌ์ผ์ด์ ์ด WAR๋ก ํจํค์ง๋๋ฉด ์ธ๋ถ Tomcat ์๋ฒ์ ๋ฐฐํฌ๋์ด ์คํ๋๋ค.
2. JAR(Java Archive):
- Spring Application: Spring Boot ์ ํ๋ฆฌ์ผ์ด์ ์ JAR ํ์ผ๋ก ํจํค์ง๋ ์ ์์ผ๋ฉฐ, ์ด๋ ๋ด์ฅ๋ Tomcat ์๋ฒ๊ฐ ํจ๊ป ํฌํจ๋์ด ์คํ๋๋ค. ์ฆ, ๋ณ๋์ ์ธ๋ถ Tomcat์ด ํ์ ์์ผ๋ฉฐ, JAR ํ์ผ์ ์คํํ๋ฉด Spring ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ Tomcat์๋ฒ๊ฐ ํ ๋ฒ์ ๊ตฌ๋๋๋ค.
Spring ์ ํ๋ฆฌ์ผ์ด์ ์ Tomcat๊ณผ ํจ๊ป ๊ตฌ๋๋๋ฉฐ, Tomcat์ Servlet์ ํตํด ์น ์์ฒญ์ ์ฒ๋ฆฌํ๋ค. Spring์์๋ DispatcherServlet์ด ์ด ์ญํ ์ ์ํํ๋ฉฐ, ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ์ ํด๋นํ๋ Controller๋ก ์ ๋ฌํ๊ณ , ์ฒ๋ฆฌ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
Tomcat๊ณผ Spring ๊ฐ๋จ ๊ตฌ์กฐ
- Tomcat: ์น ์๋ฒ๋ก, ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ์ ์ฒ๋ฆฌํ๋ Servlet Container ์ญํ .
- Spring: ์น ์๋ฒ์ ์ฐ๋ ๋์ด, DispatcherServlet์ ํตํด ์์ฒญ์ ์ฒ๋ฆฌ.
1. Request: ์ฌ์ฉ์์ ์์ฒญ์ด Tomcat์ Connection Queue์ ์ ์ฌ.
2. Processing: Tomcat์ ์์ฒญ์ ServletRequest๋ก ๋ณํํ์ฌ Spring์ DispatcherServlet์ ์ ๋ฌํ๋ค.
3. Response: Spring์ ์์ฒญ์ ์ฒ๋ฆฌํ ํ, ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ฐํํ๋ค.
Tomcat + Spring ์์ธ ๊ตฌ์กฐ
Spring MVC์ ์ฃผ์ ๊ตฌ์ฑ ์์๋ ํฌ๊ฒ DistpatcherServlet, Controller, Service, Repository๋ก ๊ตฌ๋ถ๋๋ค. ์ด๋ฅผ Tomcat์ Servlet Container์ ์ฐ๋ํ์ฌ ์ฒ๋ฆฌํ๋ค.
- Tomcat์ ์ฌ์ฉ์ ์์ฒญ์ ๋ฐ์ DispatcherServlet์ผ๋ก ์ ๋ฌํ๋ค.
- DispatcherServlet์ Spring์์ Front Controller ์ญํ ์ ํ๋ฉฐ, ์์ฒญ์ ์ ์ ํ Controller๋ก ๋ผ์ฐํ
ํ๋ค.
- Servlet ๊ฐ์ฒด๋ Singleton์ด๋ค.
- Spring Controller ๊ฐ์ฒด๋ Singleton์ด๋ค.
- Spring Container = Servlet WebApplicationContext + Root WebApplicationContext
- Spring Bean์ Spring Container๋ก ๊ด๋ฆฌ๋๋ฉฐ 2๊ฐ ํ์
์ ApplicationContext๋ก ๋๋๋ค.
- Servlet WebApplicationContext: ์๋ธ๋ฆฟ์์๋ง ์ด์ฉ๋๋ Bean์ ๋ํ Context
- DispatcherServlet์ด ์ง์ ์ฌ์ฉํ๋ ์ปจํธ๋กค๋ฌ๋ฅผ ํฌํจํ ์น ๊ด๋ จ Bean ๋ฑ๋ก
- @Controller, HandlerMapping ๋ฑ
- Root WebApplicationContext: ์คํ๋ง ์ด๋์์๋ ์ด์ฉ๋๋ Bean์ ๋ํ Context
- ์๋น์ค ๊ณ์ธต์ด๋ DAO๋ฅผ ํฌํจํ ์น ํ๊ฒฝ์ ๋ ๋ฆฝ์ ์ธ Bean ๋ฑ๋ก
- @Service, @Repositorry ๋ฑ
- Servlet WebApplicationContext: ์๋ธ๋ฆฟ์์๋ง ์ด์ฉ๋๋ Bean์ ๋ํ Context
- Handler Mapping์ ์ด๋ค Controller๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ ์ง ๊ฒฐ์ ํ๋ค.
- Handler Adapter๋ Controller์ ์ ์ ํ ๋ก์ง์ ์คํ์ํค๊ณ ๊ฒฐ๊ณผ๋ฅผ View์ ์ ๋ฌํ๋ค.
1. ์ฌ์ฉ์ ์์ฒญ(Request): ์ฌ์ฉ์๊ฐ ๋ณด๋ธ HTTP ์์ฒญ์ด Tomcat ์๋ฒ๋ก ๋ค์ด์ด.
2. DispatcherServlet: ์์ฒญ์ ๋ฐ์ Handler Mapping์ ํตํด ์ ์ ํ Controller๋ฅผ ์ฐพ์.
3. Controller: ์์ฒญ์ ๋ํ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ Model๋ก ๋ฐํํ๋ค.
4. View Resolver: ๋ฐํ๋ Model ๋ฐ์ดํฐ๋ฅผ View๋ก ๋ณํํ๋ค.
5. ์๋ต(Response): ์ต์ข ์ ์ผ๋ก ์์ฑ๋ View๊ฐ ์ฌ์ฉ์์๊ฒ ๋ฐํ๋๋ค.
Spring MVC ์ค์ ๊ตฌ์กฐ
1. Request: ์ฌ์ฉ์์ ์์ฒญ์ด DispatcherServlet์ผ๋ก ์ ๋ฌ๋๋ค.
2. Handler Mapping: ์ ์ ํ Contoller๋ฅผ ๋งคํํ๋ค.
3. Handler Adapter: Controller์ ๋ก์ง์ ์คํํ ์ ์๋๋ก ๋๋๋ค.
4. Controller: ์์ฒญ์ ๋ํ ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๋ค.
5. View Resolver: ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ ์ ์ ํ View๋ฅผ ์ ํํ๋ค.
6. Model: View์์ ๋ณด์ฌ์ค ๋ฐ์ดํฐ๋ฅผ ์ค๋นํ๋ค.
7. View: ์ต์ข HTML ํ์ด์ง๋ฅผ ๋ฐํํ๋ค.
8. Response: ์ฌ์ฉ์๊ฐ ์์ฒญํ ํ์ด์ง๋ฅผ ๋ณผ ์ ์๊ฒ ๋ฐํํ๋ค.
โน๏ธ์ฐธ๊ณ
[ASAC 6๊ธฐ ๊ฐ์์๋ฃ]
https://www.stefankreidel.io/blog/spring-webmvc-servlet-threading
https://mangkyu.tistory.com/18
'๐ปDEV-STUDY > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring Bean ์๋ฆฌ๊ณผ ์์กด์ฑ ์ฃผ์ (1) | 2024.10.06 |
---|---|
[Spring]HttpMessageConverter (0) | 2024.10.06 |
[Spring] Controller ์ฒ๋ฆฌ ๋ฐํ (1) | 2024.10.05 |
[Spring] Spring Controller์ ๊ธฐ๋ณธ ๋์ (0) | 2024.10.04 |
[Spring] ํ์ด์ง ๋ฐํ (0) | 2024.10.04 |