Rootable의 개발일기
HTTP 요청과 응답을 다루는 클래스 본문
반응형

스프링에서 HTTP 요청과 응답을 다루는 대표적인 클래스로
- InputStream/OutputStream: 바이너리 데이터를 직접 다루는 가장 낮은 레벨의 추상화
- @RequestBody/@ResponseBody: 문자열(JSON/XML)을 객체로 자동 변환하는 중간 레벨의 추상화
- HttpEntity: HTTP 헤더, 상태 코드, 바디를 모두 포함하는 메시지 전체를 다루는 가장 높은 레벨의 추상화
📌 InputStream/OutputStream (원시 스트림)
java.io의 클래스로 HTTP Body의 데이터를 원시 바이트(byte) 스트림으로 다룸
- 처리 방식(스트리밍): 데이터를 청크(chunk) 단위로 조금씩 읽고 씀(전체 데이터를 메모리에 올리지 않음)
- 자동 변환: 전혀 없음, 개발자가 직접 바이트를 읽어 파일로 저장하거나 파일에서 바이트를 읽어 응답으로 쏴줘야 함
- 주 사용처: 대용량 파일 업로드 및 다운로드 시 메모리 초과(OutOfMemoryError)를 방지하기 위함
📌 @RequestBody/@ResponseBody (자동 변환 애노테이션)
메서드 파라미터나 반환 값에 붙이는 Annotation
- 처리 방식(버퍼링): HTTP Body의 내용을 한 번에 전부 읽어서 메모리에 올린(버퍼링) 후 처리
- 자동 변환
- @RequestBody: 요청 body의 JSON/XML ➡ Java 객체 (HttpMessageConverter, 주로 Jackson)
- @ResponseBody: 메서드가 반환하는 Java 객체 ➡ JSON/XML
- 주 사용처: 대부분의 REST API에서 JSON 데이터를 객체로 주고 받을 때 사용
📌 HttpEntity/ResponseEntity (HTTP 메시지 전체)
HTTP 요청/응답 전체를 감싸는 클래스(객체)
- 처리 방식(버퍼링): HTTP Body의 내용을 한 번에 전부 읽어서 메모리에 올린(버퍼링) 후 처리
- 특징
- HttpEntity<T>: HTTP 헤더와 바디를 함께 다룰 때 사용
- ResponseEntity<T>: HttpEntity를 상속 받아, 응답 상태 코드, 헤더, 바디를 모두 제어 가능
- 자동 변환: T 제네릭 타입에 대해 @RequestBody/@ResponseBody와 동일하게 자동 변환을 지원
- 주 사용처: HTTP 상태 코드를 명시적으로 반환하거나, 응답에 커스텀 헤더를 추가해야 할 때 사용
반응형
'Spring' 카테고리의 다른 글
| GenericFilterBean vs OncePerRequestFilter (0) | 2024.04.24 |
|---|---|
| Spring Security 구조 및 흐름 (0) | 2024.01.27 |
| @Transactional (0) | 2023.08.08 |
| 스프링 파일 업로드/다운로드 (0) | 2023.08.03 |
| API 예외 처리 (0) | 2023.08.01 |