- SpringBoot ๋ด์ฅ ์๋ฒ๋ Tomcat์ด๋ฉฐ, ํด๋น Tomcat์ WAS๋ก ๋ถ๋ฆฌ๋ฉฐ, ์์ฒญ๊ณผ ์๋ต์ ์ฃผ๊ณ ๋ฐ๋ ๋ฏธ๋ค์จ์ด๋ก ๋ถ๋ฆฐ๋ค.
- Tomcat์ HttpServletRequest ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ฅผ ์ ๊ณตํด์ค๋ค.
- ์ฆ, ์์ฒญ์ด ๋ค์ด์ค๋ฉด HttpServletRequest ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค์ ์์ฒญ์ ๋ํ ๊ฐ์ด ๋ด๊ธฐ๊ฒ ๋๋ค.
โ 1. HttpServletRequest [ interface ]
package jakarta.servlet.http;
public interface HttpServletRequest extends ServletRequest {
// ... ์ฌ๋ฌ HTTP ๊ด๋ จ ๋ฉ์๋๋ค์ด ์ถ์๋ฉ์๋๋ก ์ ์๋์ด ์์.
}
- ์๋ฐ์ ํ์ค API ์ธ Servlet API ์ ์ผ๋ถ์ด๋ค. ์ฆ, ์๋ฐ ํ์ค API ์ธ ๊ฒ์ด๋ค.
- ์น ๋ธ๋ผ์ฐ์ ๋ก๋ถํฐ HTTP ์์ฒญ์ด ๋ค์ด์ค๋ฉด ๊ฐ์ ๋ด์์ ์๋ฒ ์ชฝ ์ฝ๋๋ก ์ ๋ฌํด์ฃผ๋ ์ญํ ์ ํ๋ค.
- ํต์ฌ์ ์์ฒญ ๋ฉ์๋, ์์ฒญ URL, ์ฟผ๋ฆฌ์คํธ๋ง, ์์ฒญ ํค๋, ์์ฒญ ๋ณธ๋ฌธ(Body), ์ฟ ํค ๋ฑ HTTP ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ๊ฒ์ ๋ช ์ธ๋ฅผ ํด๋ ์ธํฐํ์ด์ค์ด๋ค. ์ฆ, ๊ตฌํ์ ํตํด ํด๋น ๊ตฌํ ํด๋์ค์์ ์ฌ์ ์๋ฅผ ํตํด ๊ฐ์ ๋ด์์ฃผ๋ ๊ฒ์ด๋ค.
โ 2. ServletRequest [ interface ]
public interface ServletRequest {
// ์์ฒญ ๋ณธ๋ฌธ์ ๋ด๋ ์ถ์ ๋ฉ์๋ ๋ฑ HttpServletRequest์ ์์ ํ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์์
ServletInputStream getInputStream() throws IOException;
}
- ์์ HttpServletRequest ์ธํฐํ์ด์ค๊ฐ ์์์ ๋ฐ๋ ์ธํฐํ์ด์ค์ด๋ค.
- ํด๋น getInputStream() ๋ฉ์๋ ๋ถ๋ถ์ ํตํด ์์ฒญ ๋ณธ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ์ฌ ์ ์์.
- HttpServletRequest ์ธํฐํ์ด์ค์์ ๋ชป๋ณธ ์ถ์๋ฉ์๋๋ฅผ ์ฌ๊ธฐ์ ๋ณผ ์ ์์. ( ์ฌ๊ธฐ๋ ํ์ธ์ ํด์ผ ์ ์ฉํจ )
- ์๋ํ๋ฉด HttpServletRequest ๊ฐ ๊ฒฐ๊ตญ ์ด ์ธํฐํ์ด์ค๋ฅผ ์์ ๋ฐ๊ธฐ ๋๋ฌธ์ด๋ค.
โ 3. Request [ instance - org.apache.catalina.connector.Request ]
public class Request implements HttpServletRequest {
//...
}
- ์ค์ ํด๋ผ์ด์ธํธ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๊ณ ์๋ ํด๋์ค์.
- ์์ฒญ ๋ฉ์๋, URI, ์ฟผ๋ฆฌ์คํธ๋ง, ํ๋กํ ์ฝ, ํค๋, ๋ฐ๋, ์ฟ ํค, ์ธ์ , ์ธ์ฆ ์ ๋ณด ๋ฑ ๋ค ๊ฐ์ง๊ณ ์์.
- ์ฆ, HTTP ์์ฒญ ์ ์ฒด๊ฐ ์ด ๊ฐ์ฒด์ ๋ก์ฐํ๊ฒ ์ ์ฅ์ด ๋์ด์์.
- ๋ชจ๋ HTTP ์์ฒญ ์ฆ, ํด๋ผ์ด์ธํธ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ด์๊ฐ ์์.
- ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ReuqestFacade ํด๋์ค๋ฅผ ๊ฐ์ธ์ ํด๋น ReuqestFacade ํด๋์ค๋ง ์ด์ฉ์ ํ๊ฒ ๋จ.
โ 4. RequestFacade [ instance - org.apache.catalina.connector ]
public class RequestFacade implements HttpServletRequest {
protected Request request = null;
public RequestFacade(Request request) {
this.request = request;
}
// ...
}
- Request ํด๋์ค๋ฅผ ๊ฐ์ผ ์ธ๋ถ ๋ ธ์ถ์ฉ ํด๋์ค์ด๋ค.
- Request ํด๋์ค๋ ํด๋ผ์ด์ธํธ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ค ๊ฐ์ง๊ณ ์์ด, ์ธ๋ถ์์ ์ ๊ทผ์ ํ๊ฒ ๋๋ฉด ๋ณด์์ ์ด์๊ฐ ๋จ.
- ๊ทธ๋์ ํด๋น RequestFacade ํด๋์ค๋ก ๊ฐ์ธ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ ๋ฉ์๋์ ์ง์ ์ ๊ทผ์ ํ์ง ๋ชปํ๊ฒ ์ ํ๋ ๋ฉ์๋๋ง ๋ ธ์ถ์ํจ.
- ์ฆ, ์ต์ข ์ ์ผ๋ก ์ด์ฉ์ ํ๊ฒ ๋๋ ํด๋์ค๋ HttpServletRequest์ ๊ตฌํ์ฒด์ธ RequestFacade ํด๋์ค์ด๋ค.
โ 5. ์ค์ ๋์ ์๋ฆฌ
public class Request implements HttpServletRequest {
// ๋ด๋ถ์ ์ผ๋ก RequestFacade ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ๋ฐํํด์ฃผ๋ ๋ฉ์๋
public HttpServletRequest getRequest() {
if (this.facade == null) {
this.facade = new RequestFacade(this);
}
if (this.applicationRequest == null) {
this.applicationRequest = this.facade;
}
return this.applicationRequest;
}
}
- ๋ด๋ถ์ ์ผ๋ก ์์ฒญ์ด ๋ค์ด์ค๋ฉด ํด๋น ํด๋์ค๋ฅผ ํตํด Request ๊ฐ์ฒด์ ๊ฐ์ ๋ด๋๋ค.
- ์ดํ, ํด๋น getRequest() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ RequestFacade ์ Request ๊ฐ์ ๋ด์ ๋ฆฌํด์ ํด์ค.
- ์ต์ข ์ ์ผ๋ก HttpServletRequest ํ์ ์ผ๋ก ๋น์ฆ๋์ค ๋ก์ง์ผ๋ก ๋์ด์ค๊ฒ ๋จ.
โ 6. Tomcat ๊ทธ ์ธ ์๋ฒ๋ค
- SpringBoot ์๋ ๋ํดํธ๋ก ๋ด์ฅ ๋ WAS ๊ฐ Tomcat์ด์ง๋ง, ๋ค๋ฅธ ์๋ฒ(๋ฏธ๋ค์จ์ด) ์ฆ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฃ์ ์ ์์.
- ์ข ๋ฅ๋ ๋ํ์ ์ผ๋ก Tomcat, Jetty, Undertow ์ด๋ ๊ฒ ์์.
- ํด๋น ์๋ฒ๋ค์ ๋ชจ๋ HttpServletRequest ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ฅผ ์ ๊ณต์ ํ๊ณ ์์.
(1) Tomcat ๋ด์ฅ ์๋ฒ ์ฌ์ฉ ์
- org.apache.catalina.connector.Request ํด๋์ค๊ฐ HttpServletRequest ๋ฅผ ๊ตฌํํ์ฌ ๊ฐ์ ๋ด๊ฒ ๋จ.
- ๋ด๋ถ์ ์ผ๋ก RequestFacade ๊ฐ ๊ฐ์ธ์ ์ธ๋ถ(์ฌ์ฉ์ ์ฝ๋)๋ก ์ ๋ฌ์ด ๋จ.
(2) Jetty ๋ด์ฅ ์๋ฒ ์ฌ์ฉ ์
- org.eclipse.jetty.server.Request ํด๋์ค๊ฐ HttpServletRequest ๋ฅผ ๊ตฌํํ์ฌ ๊ฐ์ ๋ด๊ฒ ๋จ.
(3) Undertow ๋ด์ฅ ์๋ฒ ์ฌ์ฉ ์
- io.undertow.servlet.spec.HttpServletRequestImpl ํด๋์ค๊ฐ HttpServletRequest ๋ฅผ ๊ตฌํํ์ฌ ๊ฐ์ ๋ด๊ฒ ๋จ.
โ 7. ์ ๋ฆฌ
- ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ ์ผ ์ฒ์ HttpServletRequest ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์๋ Request์ ๋ด๋ถ์ ์ผ๋ก ๊ฐ์ด ๋ด๊น.
- ์ดํ ํด๋น Request ํด๋์ค์๋ ํด๋ผ์ด์ธํธ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ ๋ฉ์๋์ ์ง์ ์ ๊ทผ์ ํ์ง ๋ชปํ๋๋ก ๋ง์๋
- ๋ฐ๋ก RequestFacade ํด๋์ค๋ก ๊ฐ์ธ์ ์ง์ ์ ๊ทผ์ ํ์ง ๋ชปํ๊ฒ ์ ํ๋ ๋ฉ์๋๋ง ๋ ธ์ถ์ ํด์ ๋ง์๋ .
'๐ ๏ธBackend > ๐ณSpring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring WebSocket] ์คํ๋ง์์ ์น ์์ผ ๋์ (0) | 2025.07.19 |
---|---|
[Spring Framework] Servlet API, HttpServlet, DispatcherServlet, Tomcat ์์๋ณด๊ธฐ (0) | 2025.06.28 |
[Spring Framework] @RestController & @Controller ์ฐจ์ด (0) | 2025.05.12 |
[Spring Framework] DispatcherServle (0) | 2025.05.12 |
[Spring Security] UsernamePasswordAuthenticationFilter (0) | 2025.05.07 |