📦 ResponseEntity
✅ 1. 정의
ResponseEntity는 Spring에서 HTTP 응답을 커스터마이징할 수 있도록 제공하는 클래스
- HTTP 상태 코드, 헤더, 바디를 직접 설정하여 클라이언트에게 응답을 보낼 수 있음
✅ 2. 목적
- 정확한 HTTP 응답 제어를 위해 사용
- REST API에서 상태 코드, 응답 데이터, 헤더 등을 명확하게 전달
✅ 3. 주요 기능
| 기능 | 설명 |
|---|
| 상태 코드 설정 | HttpStatus.OK, HttpStatus.BAD_REQUEST 등 |
| 응답 바디 설정 | 객체, 문자열, JSON 등 |
| 응답 헤더 설정 | Content-Type, Location, Authorization 등 |
✅ 4. 사용 예시
📌 기본 응답
return ResponseEntity.ok("요청이 성공적으로 처리되었습니다.");
📌 객체 반환
MemberDto member = new MemberDto("홍길동", 30, "hong@example.com");
return ResponseEntity.ok(member);
📌 상태 코드 변경
return ResponseEntity.status(HttpStatus.CREATED).body("회원가입 완료");
📌 상태 코드 설정
return ResponseEntity.status(200).body("회원가입 완료");
📌 헤더 포함
HttpHeaders headers = new HttpHeaders();
headers.add("Custom-Header", "Value");
return ResponseEntity
.status(HttpStatus.OK)
.headers(headers)
.body("헤더 포함 응답");
✅ 5. 장점
- 유연한 응답 구성: 상태 코드, 바디, 헤더를 자유롭게 설정 가능
- RESTful API에 적합: 클라이언트와의 명확한 통신 구조 제공
- 에러 처리에 유용: 예외 발생 시 적절한 상태 코드와 메시지 반환 가능
✅ 6. 실무 활용 예시
📌 조건에 따라 다른 응답 처리
if (userService.exists(email)) {
return ResponseEntity.status(HttpStatus.CONFLICT).body("이미 존재하는 이메일입니다.");
} else {
userService.save(user);
return ResponseEntity.status(HttpStatus.CREATED).body("회원가입 성공");
}
✅ 7. HTTP 응답(반환) 코드
📌 200 번 대 : 성공
- 200 : 요청 성공 + 응답 데이터 포함
- 201 : 요청 성공 + 저장 성공
- 202 : 요청 성공 + 아직 처리중 (= 비동기 작동)
- 204 : 요청 성공 + 응답 데이터 없음(void)
📌 300 번 대 : 리다이렉션, URL 이동 (다른 도메인으로 이동)
- 301 : 요청 정보가 다른 URL로 이동
- 302 : 임시적으로 다른 URL로 이동
- 304 : 캐시(임시저장 = 1회 이상 조회한 기록) 사용
📌 400 번 대 : 클라이언트 오류
- 400 : 요청 형식 오류, QueryString/Body 등이 잘못되어 있음
- 401 : 인증 실패, 로그인 안 됨
- 403 : 접근 권한 없음, 권한 거부
- 404 : 요청 경로·자원이 없음 - url 오류
- 405 : HTTP METHOD 오류
- 409 : 자료 중복
- 415 : Header - Content/Type 오류
📌 500 번 대 : 서버 오류
- 500 : 서버 내부 오류
- 503 : 서버·스레드 과부하, 점검 알림