0. 사전 지식
0-1. HTTP
- 웹 서비스 : 정보 요청, 응답 시 HTTP 사용
- 마찬가지로 스프링도 HTTP 사용 → 데이터 송수신
- 직접 작성이 아닌 스프링에서 제공하는 @ResponseBody, ReseponseEntity 사용해서 응답을 빠르고 쉽게 작성 가능
0-2. @ResponseBody
- HTTP 요청의 body 에는 여러 데이터가 존재함
- 이 body의 데이터를 직렬화 해주는 어노테이션
- 직렬화 : 현재의 데이터를 네트워크에서 송/수신 가능하도록 변경하는 것
1. ResponseEntity
- 스프링 프레임워크가 제공하는 클래스
- HttpEntity 클래스를 상속받음 (+ http 상태코드 포함)
- HttpEntity : headers와 body로 이루어짐
⇒ 사용자의 Http Request에 대한 응답 데이터를 포함!
ResponseEntity 사용 이유 : Http 응답을 (status 포함) 디테일하게 반환하고자 할 때 사용함!!
📌 @ResponseBody vs ResponseEntity
- 구현체 차이만 있을 뿐 동일한 메커니즘에 의해 HTTP 응답 생성함!
- 각각의 장단점
→ @ResponseBody : 코드 작성이 깔끔해짐 / 상태코드와 헤더를 유연하게 변경 불가
→ ResponseEntity : 상태코드와 헤더를 유연하게 변경 가능 / 코드 증가
3-1. ResponseEntity 사용법
- 생성자 사용 방식
return new ResponseEntity(body, headers, HttpStatus.OK);
- 빌더 패턴 사용 방식
- ResponseEntity 내부에 정적 팩토리 메서드 구현되어 있음
return ResponseEntity.status(HttpStatus.OK)
.headers(headers)
.body(body);
- 상태코드만 반환
return ReponseEntity.ok().build();
- body 포함
return ResponseEntity.ok(body);
3-2. ResponseEntity의 body 타입
- body 타입 x
public ResponseEntity getPosts() { }
⇒ Object를 body에 담음
- body 타입 : Object
public ResponseEntity<Object> getPosts() { }
⇒ 위의 코드와 기능 동일 / 명시적으로 타입을 작성해 준 것
- body 타입 : 와일드 카드 사용
public ResponseEntity<?> getPosts() { }
⇒ 객체의 타입이 명확하지 않을때는 와일드카드가 Object보다 나음
- body 타입 : 타입 파라미터 사용
public ResponseEntity<T> getPosts() { }
⇒ 컴파일 시점에 자동 형변환 됨 (개발자가 따로 형변환 할 필요 x!)
- body 타입 : 사용자 생성 객체
public ResponseEntity<List<Post>> getPosts() { }
public ResponseEntity<Post> getPost() { }
⇒ REST API 설계 관점에서 사용자 객체를 넣어 명시적으로 작성하는 것이 가장 좋음
'Spring Boot' 카테고리의 다른 글
[Spring Boot] Jpa Auditing (+ BaseEntity) 로 엔티티 관련 이벤트 자동 기록하기 (2) | 2024.09.07 |
---|---|
[Spring Boot] JpaRepository 개념, 사용 방법 (쿼리 메서드, @Query, JPQL, Native Query) (0) | 2024.09.05 |
[Spring Boot] 스프링 트랜잭션 (@Transactional) (0) | 2024.09.05 |
[Spring Boot] 스프링 ChatGPT API 활용 예제 ( + postman으로 확인 ) (0) | 2024.09.04 |
[Spring Boot] 스프링 이미지 업로드 예제 (3) - 외부 경로에 업로드 (0) | 2024.09.03 |