ResponseEntity를 생성하여 HTTP 상태 코드 200(OK)를 반환한다.
예시: ResponseEntity.ok().body("Success");
지정된 HTTP 상태 코드를 가진 ResponseEntity를 생성한다.
예시: ResponseEntity.status(HttpStatus.NOT_FOUND).body("Not Found");
응답 본문에 특정 객체나 데이터를 설정한다.
예시: ResponseEntity.ok().body(myObject);
응답에 헤더를 추가한다.
HttpHeaders headers = new HttpHeaders();
headers.add("Custom-Header", "Value");
return ResponseEntity.ok().headers(headers).body("Response with custom header");
생성된 리소스의 위치(URI)와 함께 HTTP 상태 코드 201(Created)를 반환한다.
예시: return ResponseEntity.created(new URI("/new-resource")).build();
비동기 작업이 수락되었음을 나타내는 HTTP 상태 코드 202(Accepted)를 반환한다.
예시: return ResponseEntity.accepted().build();
잘못된 요청에 대한 HTTP 상태 코드 400(Bad Request)를 반환한다.
예시: return ResponseEntity.badRequest().body("Bad Request Message");
요청한 리소스가 없음을 나타내는 HTTP 상태 코드 404(Not Found)를 반환한다.
예시: return ResponseEntity.notFound().build();
응답 본문이 없는 HTTP 상태 코드 204(No Content)를 반환한다.
예시: return ResponseEntity.noContent().build();
@GetMapping("/{postId}")
public ResponseEntity<?> getComments(@PathVariable Long postId, Pageable pageable){
PageDto response = commentService.getComments(pageable, postId);
return ResponseEntity.ok(response);
}
Pageable pageable은 어디서 값을 받는 것인가?
Pageable은 스프링 프레임워크의 일부분이다. 클라이언트가 HTTP 요청을 통해 페이지 및 정렬 관련 정보를 전달할 수 있다. Pageable 객체는 HTTP 요청의 쿼리 매개변수로부터 생성된다. page, size, sort와 같은 매개변수를 사용하여 페이지 번호, 페이지당 항목 수, 정렬 순서 등을 지정할 수 있다.
/posts/123/comments?page=0&size=10&sort=createdAt,desc
- page 매개변수는 현재 페이지 번호
- size는 페이지당 항목 수
- sort는 정렬 방식
이 정보들이 Pageable 객체로 변환되어 해당 메서드의 pageable 매개변수로 전달된다.
public interface CommentRepository extends JpaRepository<Comment, Long> {
@EntityGraph(attributePaths = {"user"})
Page<Comment> findByPostId(Long postId, Pageable pageable);
}
@EntityGraph(attributePaths = {"user"}) 어노테이션 : 각 Comment 객체의 User 객체까지 같이 조회한다. 이는 N+1 문제를 해결하기 위한 방법으로, Comment 객체를 조회할 때 해당 Comment의 User 객체를 함께 조회해서 성능을 향상시키는 역할을 한다.
Spring Data JPA는 내부적으로 PostId가 입력으로 주어진 postId와 일치하는 Comment 객체들을 찾아서 반환한다.
Pageable 타입의 파라미터 : 이 Pageable 객체는 페이징 처리에 필요한 정보(요청하는 페이지 번호, 한 페이지에 표시할 데이터 개수 등)를 가지고 있다.
따라서 이 메소드는 PostId가 일치하는 Comment 객체들 중에서, Pageable에 지정된 조건에 맞는 데이터만 선택하여 Page 형태로 반환한다
Spring이 관리하는 Bean을 생성하는 역할
일반적인 빈을 생성한다. 스프링 컨테이너에서 찾아서 이 어노테이션이 등록되어 있는 클래스를 찾아 빈으로 등록한다. Service나 DAO를 구현하는 Repository에서 주로 사용된다.
개발자가 직접 빈 생성로직을 제어할 수 있게한다.
Spring 설정 클래스를 선언하는데 사용된다. - 스프링 빈 설정 정보를 가지고 있다.
클래스 안에는 @Bean 어노테이션이 붙은 메소드들이 있고, 반환하는 객체가 빈으로 등록된다.
GenerationType 열거형은 다양한 자동 생성 전략을 제공한다.
-GenerationType.AUTO : 데이터 베이스에 대한 설정에 의해 자동 생성 전략이 정해진다.(특정 DB에 맞게 자동 선택)
-GenerationType.IDENTITY : identity 컬럼을 사용하여 ID 값을 생성한다.
-GenerationType.SEQUENCE : 데이터베이스 시퀀스를 사용하여 ID 값을 생성합니다. 일부 데이터베이스는 시퀀스를 지원한다.
-GenerationType.TABLE : 데이터 베이스 테이블을 사용하여 자동 생성한다. id를 따로 관리하는 테이블을 만들고 그곳에서 가져온다.(성능이슈)