๐ฅ ์คํ๋ง๋น / ์๋ธ๋ฆฟ
โ Question
์คํ๋ง๋น๊ณผ ์๋ธ๋ฆฟ์ ๋๋ค ๊ฐ์ฒด์ด์ง ์๋? ๋๋ค ์ฑ๊ธํค์ด๊ณ ๊ทธ๋ผ ์ด๋ค ์ฐจ์ด๊ฐ ์์ง
๐ Answer
์คํ๋ง ๋น(Spring Bean)๊ณผ ์๋ธ๋ฆฟ(Servlet)์ ๋ชจ๋ ๊ฐ์ฒด์ด๋ฉฐ, ๋ ๋ค ์ผ๋ฐ์ ์ผ๋ก ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌ๋ฉ๋๋ค. ํ์ง๋ง ์ด ๋ ์ฌ์ด์๋ ๋ช ๊ฐ์ง ์ค์ํ ์ฐจ์ด์ ์ด ์์ต๋๋ค. ์ฃผ์ ์ฐจ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1. ์ญํ ๋ฐ ์ฌ์ฉ ๋ชฉ์
- ์คํ๋ง ๋น(Spring Bean): ์คํ๋ง ํ๋ ์์ํฌ์์ ๊ด๋ฆฌ๋๋ ๊ฐ์ฒด๋ก, ๋น์ฆ๋์ค ๋ก์ง, ์๋น์ค, ๋ฐ์ดํฐ ์ ๊ทผ ๋ฑ์ ๋ค์ํ ์ญํ ์ ์ํํฉ๋๋ค. ์คํ๋ง ๋น์ ์ฃผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฐ์ ์ธ ๊ธฐ๋ฅ์ ๊ตฌ์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋น์ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ(Application Context)์ ์ํด ์์ฑ๋๊ณ ๊ด๋ฆฌ๋ฉ๋๋ค.
- ์๋ธ๋ฆฟ(Servlet): ์๋ฐ EE(์ด์ ๋ ์์นด๋ฅดํ EE) ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ํด๋ผ์ด์ธํธ์ HTTP ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ธ๋ฆฟ์ ์น ์๋ฒ(์: Tomcat)์์ ์คํ๋๋ฉฐ, ์ฃผ๋ก HTTP ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ์์ฑํ๋ ์ญํ ์ ํฉ๋๋ค.
2. ๋ผ์ดํ์ฌ์ดํด ๊ด๋ฆฌ
- ์คํ๋ง ๋น: ์คํ๋ง ์ปจํ ์ด๋(Application Context)์ ์ํด ๋ผ์ดํ์ฌ์ดํด์ด ๊ด๋ฆฌ๋ฉ๋๋ค. ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์์๋๋ฉด ๋น์ด ์์ฑ๋๊ณ , ํ์์ ๋ฐ๋ผ ์ด๊ธฐํ ๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ข ๋ฃ๋ ๋ ๋น์ ์๋ฉธ ๋ฉ์๋๊ฐ ํธ์ถ๋ ์ ์์ต๋๋ค.
- ์๋ธ๋ฆฟ: ์๋ธ๋ฆฟ ์ปจํ ์ด๋(์: Tomcat, Jetty)์ ์ํด ๋ผ์ดํ์ฌ์ดํด์ด ๊ด๋ฆฌ๋ฉ๋๋ค. ์๋ธ๋ฆฟ์ ์ปจํ ์ด๋์ ์ํด ๋ก๋๋ ๋ init() ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉฐ, ์ดํ ํด๋ผ์ด์ธํธ ์์ฒญ๋ง๋ค service() ๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค. ์๋ธ๋ฆฟ์ด ๋ ์ด์ ํ์ํ์ง ์์ ๋ destroy() ๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค.
3. ์ฑ๊ธํค ๊ด๋ฆฌ
- ์คํ๋ง ๋น: ์คํ๋ง์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น์ ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌํ์ง๋ง, ํ๋กํ ํ์ , ๋ฆฌํ์คํธ ์ค์ฝํ, ์ธ์ ์ค์ฝํ ๋ฑ ๋ค์ํ ์ค์ฝํ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
- ์๋ธ๋ฆฟ: ์๋ธ๋ฆฟ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌ๋๋ฉฐ, ํ๋์ ์๋ธ๋ฆฟ ์ธ์คํด์ค๊ฐ ์ฌ๋ฌ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ๋์ํ๊ธฐ ๋๋ฌธ์ ์ํ๋ฅผ ์ ์งํ๋ ํ๋ ์ฌ์ฉ ์ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค.
4. ์์กด์ฑ ์ฃผ์ (DI)
- ์คํ๋ง ๋น: ์คํ๋ง ํ๋ ์์ํฌ๋ ์์กด์ฑ ์ฃผ์ ์ ํตํด ๋น ๊ฐ์ ๊ด๊ณ๋ฅผ ์ค์ ํ๊ณ ๊ด๋ฆฌํฉ๋๋ค. ์ด๋ก ์ธํด ๋น์ ์์กด์ฑ์ ์ฝ๊ฒ ์ค์ ํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ์๋ธ๋ฆฟ: ์๋ธ๋ฆฟ์ ์์กด์ฑ ์ฃผ์ ์ ์ง์ ์ ์ผ๋ก ์ง์ํ์ง ์์ต๋๋ค. ์คํ๋ง๊ณผ ์ฐ๋ํ๋ฉด ์๋ธ๋ฆฟ์์๋ ์คํ๋ง์ ๋น์ ์ฃผ์ ๋ฐ์ ์ฌ์ฉํ ์ ์์ง๋ง, ์๋ธ๋ฆฟ ์์ฒด๋ ์์กด์ฑ ์ฃผ์ ์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ง์ ์ค์ ํ๊ฑฐ๋ ์๋ธ๋ฆฟ ์ปจํ ์คํธ ๋ฑ์ ์ด์ฉํด์ผ ํฉ๋๋ค.
5. ์ปจํ ์คํธ ๋ฐ ๋ฒ์
- ์คํ๋ง ๋น: ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ๊ฑธ์ณ ์ฌ์ฉ๋๋ฉฐ, ๋ค์ํ ์ปจํ ์คํธ์์ ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์๋น์ค, DAO, ์ปจํธ๋กค๋ฌ ๋ฑ ๋ค์ํ ๊ณ์ธต์์ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
- ์๋ธ๋ฆฟ: HTTP ์์ฒญ์ ์ฒ๋ฆฌํ๋ ํน์ ํ ๋ฒ์์์๋ง ์ฌ์ฉ๋ฉ๋๋ค. ์ฃผ๋ก ์ปจํธ๋กค๋ฌ ์ญํ ์ ํ๋ฉฐ, MVC ํจํด์์ ์ปจํธ๋กค๋ฌ๋ก ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ์คํ๋ง ๋น๊ณผ ์๋ธ๋ฆฟ์ ๋ชจ๋ ๊ฐ์ฒด์ด๊ณ ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌ๋ ์ ์์ง๋ง, ๊ทธ ์ญํ , ๋ผ์ดํ์ฌ์ดํด ๊ด๋ฆฌ ๋ฐฉ์, ์ฌ์ฉ๋๋ ๋ฒ์์์ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ์๋ธ๋ฆฟ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ HTTP ์์ฒญ ์ฒ๋ฆฌ์ ํนํ๋์ด ์๊ณ , ์คํ๋ง ๋น์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ๋ค์ํ ๋ก์ง์ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๐ฅ ์คํ๋ง๋น์ด ์๋๋ฐ ์๋ธ๋ฆฟ์ด ๋ฐ๋ก ํ์ํ์ง?
โ Question
์ปจํธ๋กค๋ฌ ๊ฐ์ ๊ฒฝ์ฐ ํน์ url์ด ์ ํด์ง ์ปจํธ๋กค๋ฌ๋ฅผ ํ๊ฒ ๋์ด ์์์
๊ทธ๋ฆฌ๊ณ ๊ทธ ์ปจํธ๋กค๋ฌ๋ ์คํ๋ง ๋น์ผ๋ก์ ์คํ๋ง ์ปจํ ์ด๋์ ์ํด ์์ฑ๋๊ณ ๊ด๋ฆฌ๋์์?
๊ทธ๋ผ ์๋ธ๋ฆฟ์ ํ์์๋๊ฑฐ ์๋?
๐ Answer
์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ํนํ ์คํ๋ง MVC(Spring Web MVC)๋ฅผ ์ฌ์ฉํ ๋, ์๋ธ๋ฆฟ์ ์ญํ ์ ๋ง์ด ๊ฐ์ ์ ์ด๊ฑฐ๋ ๊ฐ์ถฐ์ง ํํ๋ก ๋ํ๋๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์๋ธ๋ฆฟ์ด ์์ ํ ํ์ ์์ด์ง๋ ๊ฒ์ ์๋๋๋ค. ์๋ธ๋ฆฟ๊ณผ ์คํ๋ง MVC ์ปจํธ๋กค๋ฌ์ ๊ด๊ณ๋ฅผ ์ดํดํ๋ ค๋ฉด ๋ช ๊ฐ์ง ์ค์ํ ๊ฐ๋ ์ ์์์ผ ํฉ๋๋ค.
1. ์คํ๋ง MVC์ ๋์คํจ์ฒ ์๋ธ๋ฆฟ(DispatcherServlet)
- ์คํ๋ง MVC์์ DispatcherServlet์ด๋ผ๋ ํน๋ณํ ์๋ธ๋ฆฟ์ด ํต์ฌ์ ์ธ ์ญํ ์ ํฉ๋๋ค. DispatcherServlet์ ์คํ๋ง MVC์ ์ค์ ์์ฒญ ์ฒ๋ฆฌ์ ์ญํ ์ ํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ HTTP ์์ฒญ์ ๋ณด๋ด๋ฉด, ์ด ์์ฒญ์ ๋จผ์ DispatcherServlet์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค. DispatcherServlet์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋(์: Tomcat, Jetty ๋ฑ)์ ์ํด ์คํ๋๋ฉฐ, ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ ์ ํ ์คํ๋ง MVC ์ปจํธ๋กค๋ฌ๋ก ์์ฒญ์ ๋ผ์ฐํ ํฉ๋๋ค.
- ์ฆ, ์คํ๋ง MVC์์ ๊ฐ ์ปจํธ๋กค๋ฌ๋ ์ง์ ์๋ธ๋ฆฟ์ด ์๋์ง๋ง, ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์๋ธ๋ฆฟ ์ปจํ ์ด๋์์ DispatcherServlet์ ํตํด ๊ด๋ฆฌ๋ฉ๋๋ค. DispatcherServlet์ ํ๋์ ์๋ธ๋ฆฟ์ด์ง๋ง ์ฌ๋ฌ ์ปจํธ๋กค๋ฌ๋ก ์์ฒญ์ ๋ถ๊ธฐํ๋ ์ญํ ์ ํฉ๋๋ค.
2. ์๋ธ๋ฆฟ์ ์ญํ
- ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์ฌ์ ํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฒญ๊ณผ ์๋ต ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ ๊ธฐ๋ณธ ์ธํ๋ผ์ ๋๋ค. ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ HTTP ์์ฒญ์ ๋ฐ์๋ค์ด๊ณ , ํด๋น ์์ฒญ์ ์ ์ ํ ์๋ธ๋ฆฟ์ผ๋ก ์ ๋ฌํ๋ฉฐ, ์คํ๋ง MVC์์๋ DispatcherServlet์ด ์ด ์ญํ ์ ์ํํ๊ฒ ๋ฉ๋๋ค.
- ์๋ธ๋ฆฟ์ด ์์ ์์ด์ง๋ค๋ฉด, ๊ธฐ๋ณธ์ ์ธ HTTP ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ ์ธํ๋ผ๊ฐ ์๊ฒ ๋ฉ๋๋ค. ์คํ๋ง MVC ์ปจํธ๋กค๋ฌ๋ ์๋ธ๋ฆฟ ์์ด ๋ ๋ฆฝ์ ์ผ๋ก ์๋ํ์ง ์์ต๋๋ค. ์คํ๋ง MVC ์ปจํธ๋กค๋ฌ๋ DispatcherServlet๊ณผ ๊ฐ์ ์๋ธ๋ฆฟ์ ์ํด ๊ด๋ฆฌ๋๋ฉฐ, ์ด ์๋ธ๋ฆฟ์ด ์์ฒญ์ ์ฒ๋ฆฌํ๋ ํต์ฌ ์ญํ ์ ํฉ๋๋ค.
3. ์๋ธ๋ฆฟ๊ณผ ์ปจํธ๋กค๋ฌ์ ํ๋ ฅ ๊ด๊ณ
- ์คํ๋ง MVC์ ์ปจํธ๋กค๋ฌ๋ ์๋ธ๋ฆฟ์ ๋ณต์กํ ์ฝ๋ ์์ฑ ์์ด ์์ฒญ ์ฒ๋ฆฌ ๋ก์ง์ ์ง์คํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์๋ธ๋ฆฟ์ด ์ง์ HTTP ์์ฒญ๊ณผ ์๋ต์ ๋ค๋ฃจ๋ ๋ฐ๋ฉด, ์คํ๋ง MVC ์ปจํธ๋กค๋ฌ๋ ์คํ๋ง ํ๋ ์์ํฌ๊ฐ ์ ๊ณตํ๋ ๋ค์ํ ๊ธฐ๋ฅ(์: ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ, ๊ฒ์ฆ, ๋ชจ๋ธ ์ฒ๋ฆฌ ๋ฑ)์ ํ์ฉํ ์ ์์ต๋๋ค.
- ์คํ๋ง MVC๋ ์ด๋ฌํ ์ญํ ๋ถ๋ด์ ํตํด ๊ฐ๋ฐ์๊ฐ ์๋ธ๋ฆฟ์ ๋ณต์ก์ฑ์ ์ง์ ๋ค๋ฃฐ ํ์ ์์ด, ๋ ๊ณ ์์ค์ ์ถ์ํ๋ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ๊ฐ๋ฐํ ์ ์๋๋ก ๋์ต๋๋ค.
4. ๊ฒฐ๋ก
- ์๋ธ๋ฆฟ์ด ์์ ํ ํ์ ์์ด์ง๋ ๊ฒ์ ์๋๋๋ค. ์๋ธ๋ฆฟ์ ์ฌ์ ํ HTTP ์์ฒญ์ ๋ฐ์๋ค์ด๊ณ , ์ด๋ฅผ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ณธ ์ธํ๋ผ๋ก์์ ์ญํ ์ ํฉ๋๋ค. ๋ค๋ง, ์คํ๋ง MVC์ ๊ฐ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ์ง์ ์๋ธ๋ฆฟ์ ์์ฑํ ํ์ ์์ด, ๋ ์ถ์ํ๋ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํด ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- DispatcherServlet์ ์๋ธ๋ฆฟ์ด๋ฉด์๋ ์คํ๋ง์ ์ปจํธ๋กค๋ฌ์ ํ๋ ฅํ์ฌ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ญํ ์ ํ๋ฏ๋ก, ์๋ธ๋ฆฟ์ ์กด์ฌ๋ ์ฌ์ ํ ์ค์ํฉ๋๋ค.
๋ฐ๋ผ์, ์คํ๋ง MVC๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์๋ธ๋ฆฟ์ ์ฌ์ ํ ์ค์ํ ์ญํ ์ ํ๋ฉฐ, DispatcherServlet์ ํตํด ์คํ๋ง ์ปจํธ๋กค๋ฌ์์ ํ๋ ฅ์ด ์ด๋ฃจ์ด์ง๋๋ค.
๐ฅ ์คํ๋ง ํ๋ก์ ํธ์์ DispatcherServlet ์ด ์ธ์ ์๋ธ๋ฆฟ ์ฌ์ฉ ์ ๋ฌด
โ Question
์คํ๋ง ํ๋ก์ ํธ์์ DispatcherServlet ์ด ์ธ์ ์๋ธ๋ฆฟ๋ ์ฌ์ฉ๋ผ?
๐ Answer
์คํ๋ง ํ๋ก์ ํธ์์ DispatcherServlet ์ธ์๋ ๋ค๋ฅธ ์๋ธ๋ฆฟ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฌ์ค, ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก ๋ค๋ฅธ ์๋ธ๋ฆฟ์ ์ถ๊ฐ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ๊ทธ ์ค ๋ช ๊ฐ์ง ์ฃผ์ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. ํ์ผ ์ ๋ก๋ ์ฒ๋ฆฌ
- ํ์ผ ์ ๋ก๋์ ๊ฐ์ ํน์ ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด MultipartServlet ๊ฐ์ ์๋ธ๋ฆฟ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ์๋ธ๋ฆฟ์ ํ์ผ ์ ๋ก๋ ์์ฒญ์ ๋ฐ์ ํ์ผ์ ์ฒ๋ฆฌํ๊ณ ํ์ํ ์์ ์ ์ํํฉ๋๋ค.
- ๋ฌผ๋ก , ์คํ๋ง MVC์์ ์์ฒด์ ์ผ๋ก MultipartResolver๋ฅผ ์ค์ ํด ํ์ผ ์ ๋ก๋๋ฅผ ์ฒ๋ฆฌํ ์๋ ์์ง๋ง, ์๋ธ๋ฆฟ ์์ค์์ ๋ ์ธ๋ถ์ ์ธ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ณ๋์ ์๋ธ๋ฆฟ์ ์ ์ํ ์ ์์ต๋๋ค.
2. ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋ธ๋ฆฟ
- ์ผ๋ถ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํน์ ์๋ธ๋ฆฟ์ ํ์๋ก ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Jersey์ ๊ฐ์ JAX-RS ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ RESTful ์น ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒฝ์ฐ, ServletContainer๋ผ๋ ์๋ธ๋ฆฟ์ด ํ์ํฉ๋๋ค.
- ๋ ๋ค๋ฅธ ์๋ก, H2 Database ์ฝ์์ ์ฌ์ฉํ๋ ค๋ฉด H2์์ ์ ๊ณตํ๋ WebServlet์ ์ค์ ํด ์ฌ์ฉํด์ผ ํฉ๋๋ค.
3. API ๊ฒ์ดํธ์จ์ด ๋๋ ํ๋ก์ ์ญํ
- API ๊ฒ์ดํธ์จ์ด ๋๋ ํ๋ก์ ์ญํ ์ ํ๋ ์๋ธ๋ฆฟ์ ์ ์ํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Zuul๊ณผ ๊ฐ์ ํ๋ก์ ์๋ธ๋ฆฟ์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์๋น์ค๋ก์ ์์ฒญ์ ๋ผ์ฐํ ํ๊ฑฐ๋, ํน์ ์์ฒญ์ ํํฐ๋ง ๋ฐ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
4. ํน์ ํ๋กํ ์ฝ์ ์ง์ํ๋ ์๋ธ๋ฆฟ
- HTTP ์ธ์ ํน์ ํ ํ๋กํ ์ฝ(์: WebSocket, gRPC)์ ์ง์ํ๊ธฐ ์ํด ๋ณ๋์ ์๋ธ๋ฆฟ์ ์ค์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, WebSocket ์๋ฒ๋ฅผ ๊ตฌ์ถํ ๋๋ WebSocketServlet์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
5. ๊ด๋ฆฌ ๋ฐ ๋ชจ๋ํฐ๋ง ์๋ธ๋ฆฟ
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ด๋ฆฌ ๋ฐ ๋ชจ๋ํฐ๋ง์ ์ํด AdminServlet ๋๋ MetricsServlet๊ณผ ๊ฐ์ ์๋ธ๋ฆฟ์ ์ค์ ํ ์ ์์ต๋๋ค. ์ด๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ฑฐ๋ ๊ด๋ฆฌ ํ์ด์ง๋ฅผ ์ ๊ณตํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- Spring Boot Actuator๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ์ง์ ์ก์ธ์คํ์ง ์๊ณ ๊ด๋ฆฌ ๋ฐ ๋ชจ๋ํฐ๋ง ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์์ง๋ง, ํน์ ์๋๋ฆฌ์ค์์๋ ๋ณ๋์ ์๋ธ๋ฆฟ์ด ํ์ํ ์ ์์ต๋๋ค.
6. ์ฌ์ฉ์ ์ ์ ์๋ธ๋ฆฟ
- ์ด๋ค ๊ฒฝ์ฐ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ์๊ตฌ ์ฌํญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ์ ์ ์ ์๋ธ๋ฆฟ์ ์์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ณ ์ ํ ์์ฒญ ์ฒ๋ฆฌ ๋ก์ง์ด๋ ๋นํ์ค ํ๋กํ ์ฝ์ ์ง์ํด์ผ ํ ๋ ์ฌ์ฉ์ ์ ์ ์๋ธ๋ฆฟ์ ์ ์ํ ์ ์์ต๋๋ค.
์๋ธ๋ฆฟ ์ค์ ๋ฐฉ๋ฒ
- Spring Boot์์๋ @ServletComponentScan ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ์๋ธ๋ฆฟ์ ์๋์ผ๋ก ์ค์บํ๊ณ ๋ฑ๋กํ ์ ์์ต๋๋ค.
- ๋ํ @WebServlet ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ์๋ธ๋ฆฟ์ ์ ์ํ๊ฑฐ๋, ServletRegistrationBean์ ์ฌ์ฉํด ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์๋ธ๋ฆฟ์ ๋ฑ๋กํ ์๋ ์์ต๋๋ค.
๐ ๊ฒฐ๋ก
- ์คํ๋ง ํ๋ก์ ํธ์์ DispatcherServlet ์ธ์๋ ์ฌ๋ฌ ๊ฐ์ง ์๋ธ๋ฆฟ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ด๋ ํน์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ฑฐ๋ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํตํฉํ ๋ ํ์ํฉ๋๋ค.
- ํ์ง๋ง ๋๋ถ๋ถ์ ์คํ๋ง ์น ์ ํ๋ฆฌ์ผ์ด์ ์์๋ DispatcherServlet์ด ์ฃผ๋ ์ญํ ์ ํ๋ฉฐ, ๋ค๋ฅธ ์๋ธ๋ฆฟ์ ํ์์ ๋ฐ๋ผ ์ถ๊ฐ๋ฉ๋๋ค.
๋๊ธ