1. 스프링 부트에서의 '서블릿'
@WebServlet 어노테이션은 Spring MVC가 등장하기 전,
Java EE, Jakarta EE에서 서블릿 기반으로 클라이언트 요청을 처리하기 위해 사용되었다.
(@WebServlet → @Controller)
1) 서블릿 환경 구성
@ServletComponentScan : 서블릿 관련 어노테이션이 붙은 클래스들을 자동으로 스캔하고 서블릿 컨테이너에 등록한다.
2) 서블릿 등록
@WebServlet : 서블릿을 정의하고 등록한다. 해당 URL 패턴으로 요청이 들어오면 이 서블릿이 실행된다.
+.
「resource.application.properties」 에서
logging.level.org.apache.coyote.http11=debug
웹브라우저가 서버에 요청할 때마다, 아래와 같이 서버가 받은 HTTP 요청 메시지를 콘솔에 출력한다.
3) 웹 애플리케이션 서버의 요청 응답 구조
(1) 스프링 부트에서 톰캣 서버를 내장한다.
(2) @WebServlet 을 통해 서블릿 컨테이너에 「helloServlet」 서블릿을 생성한다.
(3) url 요청이 들어오면, 웹 애플리케이션 서버(WAS)는 request / response 객체를 새로 만들어서 서블릿 객체를 호출한다.
(4) 개발자가 정의한 로직에 따라, WAS는 response 객체 정보로 HTTP 응답을 생성해, 웹브라우저에 보낸다.
4) HttpServletRequest 역할
서블릿이 개발자가 HTTP 요청 메시지를 편리하게 사용할 수 있도록, 개발자 대신에 HTTP 요청 메시지를 파싱한다.
그리고 그 결과를 「HttpServletRequest」 객체에 담아서 제공한다.
위 형식 같은 HTTP 요청 메시지에서, 다음과 같은 정보들을 편리하게 조회할 수 있다.
- Start line
- HTTP 메소드
- URL
- 쿼리 스트링
- 스키마, 프로토콜
- Header
- Body
- form 파라미터 형식 조회
- message body 데이터 직접 조회
2. HTTP 요청 데이터
HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법에는
주로 다음 3가지 방법을 사용한다.
(1) GET : 쿼리 파라미터
- /url?username=hello&age
- 메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달
- ex> 검색, 필터, 페이징 등에서 많이 사용하는 방식
(2) POST : HTML Form
- content-type : application/x-www-form-urlencoded
- 메시지 바디에 쿼리 파라미터 형식으로 전달 「username=sun&age=20」
- ex> 회원 가입, 상품 주문, HTML Form 사용
(3) HTTP message body에 데이터를 직접 담아서 요청
- HTTP API에서 주로 사용, JSON, XML, TEXT
- 데이터 형식은 주로 JSON 사용
- JSON을 파싱하는 작업 필요
- POST, PUT, PATCH (?)
1) GET : 쿼리 파라미터
2) POST : HTML Form
POST의 HTML Form을 전송하면, 웹브라우저는 다음 형식으로 HTTP request 메시지를 만든다.
content-type : application/x-www-form-urlencoded
message body : username=sun&age=20
앞서 GET에서 살펴본 쿼리 파라미터 형식과 같다.
따라서, 쿼리 파라미터 조회 메서드를 그대로 사용하면 된다. → request.getParameter()
HTML Form을 만들어서 request 하는 것보다, Postman 사용하는 것이 편리
3) API 메시지 바디
JSON 형식을 지정한 형태로, 파싱할 수 있게 객체 생성한다.
request. message body
→ inputStream
→ String
→ ObjectMapper(String, HelloData.class)
→ return HelloData
3. HttpServletResponse - 기본 사용법
HttpServletResponse 역할
HTTP 응답 메시지 생성
- HTTP 응답 코드 지정 (200, 302, 404...)
- 헤더 생성 (Status, Content-type, Charset, Cookie ...)
- 바디 생성 (Html, API Json)
편의 기능 제공
- Content-Type, 쿠키, Redirect
4. HTTP 응답 데이터 - 단순 텍스트, HTML
1) 단순 텍스트 응답
- writer.priintln("ok")
2) HTML 응답
: HTTP 응답으로 HTML을 반환할 때는, Content-type 「text/html」지정해주고, HTML 규칙에 맞게 작성
3) API JSON
: HTTP 응답으로 JSON을 반환할 때는 Content-type 「application/json」 지정해야 한다.
Jakson 라이브러리의 「objectMapper.writeValueAsString(HelloData.class)」 사용하여, 객체를 JSON 문자로 변경
cf. application/json은 encoding 방식이 utf-8default 값이라 추가로 설정하지 않아도 된다.
'Spring > MVC 1' 카테고리의 다른 글
6. 스프링 MVC - 기본 기능 (0) | 2024.03.18 |
---|---|
5. 스프링 MVC - 구조 이해 (0) | 2024.03.16 |
4. MVC 프레임워크 만들기 (0) | 2024.03.14 |
3. 서블릿, JSP, MVC 패턴 (0) | 2024.03.13 |
1. 웹 애플리케이션 이해 (0) | 2024.03.10 |