본문 바로가기
Spring/이론

Spring 요청 & 응답 데이터

by JuNo_12 2025. 5. 8.

Client에서 Server로 Data를 전달하는 방법은 Query Parameter, HTTP Form Data, HTTP Request Body 크게 세가지가 있다.

 

1. GET + Query Parameter(=Query String)

: URL의 쿼리 파라미터를 사용하여 데이터 전달하는 방법 / 주로 GET 요청에서 사용

HttpServletResponse를 사용해서 응답값을 직접 다룰 수 있다.

받는 방식 : RequestParam

 

2. POST + HTML Form(Content-Type 기본값: application/x-www-form-urlencoded)

: HTTP Request Body에 쿼리 파라미터 형태로 전달하는 방법 / HTML <form> 을 사용할 때 자동으로 생긴다.

데이터는 key=value&key2=value2 형태로 Body에 담긴다.

받는 방식 : RequestParam

 

3. HTTP Request Body(Content-Type: application/json일 경우 대표적)

: 보통 JSON이나 XML등 구조화된 데이터를 전송 / @RestController에서 주로 사용
POST, PUT, PATCH Method에서 사용한다.

받는 방식 : Request Body


간단하게 요청을 받는 방식을 보자면,

구분 @RequestParam HTML form  @RequestBody
위치 URL 또는 body body body
형태 key=value key=value JSON, XML 등
Content-Type x-www-form-urlencoded x-www-form-urlencoded, multipart/form-data application/json, text/plain 등
Spring에서 받는 방식 @RequestParam @RequestParam @RequestBody

 

  • @RequestParam은 URL 쿼리 파라미터HTML Form에서 간단한 key=value 데이터를 처리할 때 사용한다. GET 요청에서 주로 사용되며, URL에 데이터를 포함해서 보낼 때 사용된다.
  • @RequestBody는 HTTP 요청 본문에서 복잡한 JSON 객체나 다른 데이터 형식을 처리할 때 사용된다. POST, PUT, PATCH 요청에서 주로 사용되며, 더 복잡한 데이터 구조나 큰 데이터를 처리할 때 적합하다.

따라서, 어떤 형식의 데이터를 주고받을지에 따라 @RequestParam 또는 @RequestBody를 선택하면 된다.

 

JSON과 TEXT는 데이터 구조에서의 차이가 있는데, 

항목 JSON TEXT
Content-Type application/json text/plain
데이터 구조 구조화된 객체 (Key-Value) 단순 문자열
스프링 매핑 객체로 매핑 (@RequestBody) 문자열로 매핑 (@RequestBody)
사용 목적 API 요청/응답, 데이터 교환 테스트용 메시지, 간단한 입력

 


추가적으로,

HttpServletRequest란?

  • 클라이언트가 보낸 HTTP 요청의 전체 정보(주소, 파라미터, 헤더, 바디 등)를 담고 있는 객체
  • 요청 메서드, URL, 파라미터, 헤더, 바디 등의 정보를 조회할 수 있다.

주요 기능

메서드 설명
getMethod() 요청 방식 (GET, POST 등)
getRequestURI() 요청 URI (예: /user/1)
getParameter("name") 요청 파라미터 (?name=Tom) 값
getHeader("User-Agent") 헤더 정보 조회
getInputStream() 요청 바디의 raw 데이터 읽기
getCookies() 쿠키 가져오기

 

 

상황 설명
세부 요청 정보가 필요할 때 URL, 헤더, IP 주소 등
공통 처리 (ex: 필터, 인터셉터) 요청을 가로채고 정보를 분석할 때
직접 HTTP 요청 데이터를 처리하고 싶을 때 JSON 대신 raw body를 직접 읽거나

 

 

Spring에서는 보통 더 편리한 방식 (@RequestParam, @RequestHeader, @RequestBody 등)을 제공하지만,

복잡하거나 유연하게 처리할 때는 HttpServletRequest를 직접 써야 하는 경우도 많다.


HttpEntity란?

: Spring에서 **HTTP 요청이나 응답 전체(헤더 + 바디)**를 다루고 싶을 때 사용하는 클래스

상황 이유
클라이언트가 보낸 HTTP 요청의 헤더와 바디를 모두 처리하고 싶을 때 예: 토큰, 커스텀 헤더 등을 직접 읽고 싶을 때
서버에서 클라이언트로 보낼 응답에 바디와 헤더를 함께 설정하고 싶을 때 예: 응답 헤더에 커스텀 정보 포함
RestTemplate이나 WebClient로 HTTP 요청을 보낼 때 HttpEntity로 요청 전체를 구성

 

  • httpEntity를 사용하면 읽기, 쓰기 기능을 따로 안해줘도 바로 입력받은 문자열을 그대로 내보내줄 수 있다.
  • view를 반환하는게 아니라 데이터를 다룰 때 사용
  • List 같은 형태!

RequestEntity<>
ResponseEntuty<> 
위의 2가지가 httpEntity를 상속받은 객체이다.

 

 

@RequestBody vs HttpEntity

항목 @RequestBody HttpEntity
처리 범위 바디만 처리 헤더 + 바디 모두 처리
사용 편의성 간단하고 직관적 더 세밀한 제어 가능
헤더 읽기 ❌ 불가 ✅ 가능

 

'Spring > 이론' 카테고리의 다른 글

Spring Layered Architecture  (0) 2025.05.09
Spring @PathVariable vs @RequestBody  (0) 2025.05.09
Spring @RestController & ResponseEntity<T>에 대해  (0) 2025.05.08
Spring DTO에 대해  (0) 2025.05.08
Spring MVC 구조  (0) 2025.05.08