๐ก WAS(Web Application Server)์ WS(Web Server)์ ์ฐจ์ด๋ฅผ ์ค๋ช
ํด์ฃผ์ธ์.
WAS(Web Application Server)
- ๋น์ฆ๋์ค ๋ก์ง์ ๋ฃ์ ์ ์์
- Tomcat, PHP, ASP, .NET ๋ฑ
WS(Web Server)
- ๋น์ฆ๋์ค ๋ก์ง์ ๋ฃ์ ์ ์์
- Nginx, Apache ๋ฑ
๐ก Spring Framework์ ๋ํด ์ค๋ช
ํด์ฃผ์ธ์.
์คํ๋ง ํ๋ ์์ํฌ๋ ์๋ฐ ๊ฐ๋ฐ์ ํธ๋ฆฌํ๊ฒ ํด์ฃผ๋ ์คํ์์ค ํ๋ ์์ํฌ ์
๋๋ค.
-
๊ฒฝ๋ ์ปจํ
์ด๋๋ก์ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์ง์ ๊ด๋ฆฌ
-
๊ฐ๊ฐ์ ๊ฐ์ฒด ์์ฑ, ์๋ฉธ๊ณผ ๊ฐ์ ๋ผ์ดํ ์ฌ์ดํด์ ๊ด๋ฆฌํ๋ฉฐ ์คํ๋ง์ผ๋ก๋ถํฐ ํ์ํ ๊ฐ์ฒด๋ฅผ ์ป์ด์ฌ ์ ์๋ค.
์ ์ด์ ์ญ์ (IoC)์ด๋ผ๋ ๊ธฐ์ ์ ํตํด ์ดํ๋ฆฌ์ผ์ด์
์ ๋์จํ ๊ฒฐํฉ์ ๋๋ชจ
- ์ปจํธ๋กค์ ์ ์ด๊ถ์ด ์ฌ์ฉ์๊ฐ ์๋ ํ๋ ์์ํฌ์ ์์ด์ ํ์์ ๋ค๋ผ ์คํ๋ง์์ ์ฌ์ฉ์์ ์ฝ๋๋ฅผ ํธ์ถํ๋ค.
์์กด์ฑ ์ฃผ์
(DI, Dependency Injection)์ ์ง์
- ๊ฐ๊ฐ์ ๊ณ์ธต์ด๋ ์๋น์ค๋ค ๊ฐ์ ์์กด์ฑ์ด ์กด์ฌํ ๊ฒฝ์ฐ ํ๋ ์์ํฌ๊ฐ ์๋ก ์ฐ๊ฒฐ์์ผ์ค๋ค.
๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ(AOP, Aspect-Oriented Programming)์ ์ง์
- ํธ๋์ญ์
์ด๋ ๋ก๊น
, ๋ณด์๊ณผ ๊ฐ์ด ์ฌ๋ฌ ๋ชจ๋์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ๊ฒฝ์ฐ ํด๋น ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ ์ ์๋ค.
๐ก MVC๋ ์ด๋ ํ ํ๋ฆ์ผ๋ก ์์ฒญ์ ์ฒ๋ฆฌํ๋์ง ์ค๋ช
ํด์ฃผ์ธ์.

- DispatcherServlet : ํด๋ผ์ด์ธํธ์๊ฒ ์์ฒญ์ ๋ฐ์ ์๋ต๊น์ง์ MVC ์ฒ๋ฆฌ๊ณผ์ ์ ํต์ ํ๋ค.
- HandlerMapping : ํด๋ผ์ด์ธํธ์ ์์ฒญ URL์ ์ด๋ค Controller๊ฐ ์ฒ๋ฆฌํ ์ง ๊ฒฐ์ ํ๋คใ
ฃ๋ค.
- HandlerAdapter : HandlerMapping์์ ๊ฒฐ์ ๋ ํธ๋ค๋ฌ ์ ๋ณด๋ก ํด๋น ๋ฉ์๋๋ฅผ ์ง์ ํธ์ถํด์ฃผ๋ ์ญํ ์ ํ๋ค.
- ViewResolver : Controller์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ(๋ฐ์ดํฐ)๋ฅผ ์์ฑํ view๋ฅผ ๊ฒฐ์ ํ๋ค.
- ํด๋ผ์ด์ธํธ๋ URL์ ํตํด ์์ฒญ์ ์ ์กํ๋ค.
- ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ํธ๋ค๋ฌ ๋งคํ์ ํตํด ํด๋น ์์ฒญ์ด ์ด๋ ์ปจํธ๋กค๋ฌ์๊ฒ ์จ ์์ฒญ์ธ์ง ์ฐพ๋๋ค.
- ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ํธ๋ค๋ฌ ์ด๋ํฐ์๊ฒ ์์ฒญ์ ์ ๋ฌ์ ๋งก๊ธด๋ค.
- ํธ๋ค๋ฌ ์ด๋ํฐ๋ ํด๋น ์ปจํธ๋กค๋ฌ์ ์์ฒญ์ ์ ๋ฌํ๋ค.
- ์ปจํธ๋กค๋ฌ๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ ํ์ ๋ฐํํ ๋ทฐ์ ์ด๋ฆ์ ๋ฐํํ๋ค.
- ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ฅผ ํตํด ๋ฐํํ ๋ทฐ๋ฅผ ์ฐพ๋๋ค.
- ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ์ปจํธ๋กค๋ฌ์์ ๋ทฐ์ ์ ๋ฌํ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ค.
- ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋ ๋ทฐ๋ฅผ ๋ฐํํ๋ค.
๐ก ์คํ๋ง์์ ๋น(Bean)์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋งํด๋ณด์ธ์.
- ๋น์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก 2 ๊ฐ์ง๊ฐ ์์ต๋๋ค.
-
์ฐ์ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ผ๋ก @Component ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. @Controller, @Service, @Repository๋ ๋ชจ๋ @Component๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค.
-
์ค์ ํด๋์ค๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด @Configuration ์ด๋
ธํ
์ด์
์ ๋ถ์ด๊ณ ,ํด๋น ํด๋์ค ์์์ ๋น์ผ๋ก ๋ฑ๋กํ ๋ฉ์๋๋ฅผ ๋ง๋ค์ด @Bean ์ด๋
ธํ
์ด์
์ ๋ถ์ฌ์ฃผ๋ฉด ์๋์ผ๋ก ํด๋น ํ์
์ ๋น ๊ฐ์ฒด๊ฐ ์์ฑ๋ฉ๋๋ค.
๐ก ์คํ๋ง ๋น์ ๋ผ์ดํ์ฌ์ดํด์ ์ด๋ป๊ฒ ๊ด๋ฆฌ๋๋์ง ์ค๋ช
ํด์ฃผ์ธ์.
- ๋จผ์ ์คํ๋ง Bean์ LifeCycle์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์คํ๋ง IoC ์ปจํ
์ด๋ ์์ฑ โ ์คํ๋ง ๋น ์์ฑ โ ์์กด๊ด๊ณ ์ฃผ์
โ ์ด๊ธฐํ ์ฝ๋ฐฑ ๋ฉ์๋ ํธ์ถ โ ์ฌ์ฉ โ ์๋ฉธ ์ ์ฝ๋ฐฑ ๋ฉ์๋ ํธ์ถ โ ์คํ๋ง ์ข
๋ฃ
์คํ๋ง์ ํฌ๊ฒ 3๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๋น ์๋ช
์ฃผ๊ธฐ ์ฝ๋ฐฑ์ ๊ด๋ฆฌํฉ๋๋ค.
- ์ธํฐํ์ด์ค( InitializingBean, DisposableBean )
- ์ค์ ์ ๋ณด์ ์ด๊ธฐํ ๋ฉ์๋, ์ข
๋ฃ ๋ฉ์๋ ์ง์
- @PostConstruct, @PreDestroy ์ด๋
ธํ
์ด์
์ง์
๐ก Spring Filter์ Interceptor์ ๋ํด ์ค๋ช
ํ๊ณ , ์ฌ์ฉ ์์๋ฅผ ์ค๋ช
ํด์ฃผ์ธ์.
- ํํฐ๋ ๋ง ๊ทธ๋๋ก ์์ฒญ๊ณผ ์๋ต์ ๊ฑฐ๋ฅธ๋ค ์ ์ ํ๋ ์ญํ ์ ํฉ๋๋ค.์คํ๋ง ์ปจํ
์ด๋๊ฐ ์๋ ํฐ์บฃ๊ณผ ๊ฐ์ ์น ์ปจํ
์ด๋์ ์ํด ๊ด๋ฆฌ๊ฐ ๋๋ ๊ฒ์ด๊ณ , ์คํ๋ง ๋ฒ์ ๋ฐ์์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
- Dispatcher Servlet์ ์์ฒญ์ด ์ ๋ฌ๋๊ธฐ ์ / ํ์ url ํจํด์ ๋ง๋ ๋ชจ๋ ์์ฒญ์ ๋ํด ๋ถ๊ฐ ์์
์ ์ฒ๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.์ฌ์ฉ ์ฌ๋ก :
๋ณด์ ๋ฐ ์ธ์ฆ/์ธ๊ฐ ๊ด๋ จ ์์
๋ชจ๋ ์์ฒญ์ ๋ํ ๋ก๊น
๋๋ ๊ฒ์ฌ
์ด๋ฏธ์ง/๋ฐ์ดํฐ ์์ถ ๋ฐ ๋ฌธ์์ด ์ธ์ฝ๋ฉ
Spring๊ณผ ๋ถ๋ฆฌ๋์ด์ผ ํ๋ ๊ธฐ๋ฅ
- ์ธํฐ์
ํฐ๋ ์์ฒญ์ ๋ํ ์์
์ / ํ๋ก ๊ฐ๋ก์ฑ ์์ฒญ๊ณผ ์๋ต์ ์ฐธ์กฐํ๊ฑฐ๋ ๊ฐ๊ณตํ๋ ์ญํ ์ ํฉ๋๋ค.์น ์ปจํ
์ด๋์์ ๋์ํ๋ ํํฐ์ ๋ฌ๋ฆฌ ์ธํฐ์
ํฐ๋ ์คํ๋ง ์ปจํ
์คํธ์์ ๋์ํฉ๋๋ค.
- Dispatcher Servlet์ด Controller๋ฅผ ํธ์ถํ๊ธฐ ์ / ํ์ ์ธํฐ์
ํฐ๊ฐ ๋ผ์ด๋ค์ด ์์ฒญ๊ณผ ์๋ต์ ์ฐธ์กฐํ๊ฑฐ๋ ๊ฐ๊ณตํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณต์ฌ์ฉ ์ฌ๋ก :
์ธ๋ถ์ ์ธ ๋ณด์ ๋ฐ ์ธ์ฆ/์ธ๊ฐ ๊ณตํต ์์
API ํธ์ถ์ ๋ํ ๋ก๊น
๋๋ ๊ฒ์ฌ
Controller๋ก ๋๊ฒจ์ฃผ๋ ์ ๋ณด(๋ฐ์ดํฐ)์ ๊ฐ๊ณต
์ถ์ฒ: https://dev-coco.tistory.com/163 [์ฌ๊ธฐ๋ก์ด ๊ฐ๋ฐ์ํ:ํฐ์คํ ๋ฆฌ]