12월 19일 화 TIL

장숭혁·2023년 12월 19일
0

TIL작성

목록 보기
34/60

ResponseEntity<?>

  • HTTP 응답을 표현하는 클래스로, HTTP 상태 코드, 헤더, 바디 등을 포함할 수 있다.

일반적으로 사용되는 ResponseEntity의 주요 메서드들은 다음과 같다.

1. ok()

ResponseEntity를 생성하여 HTTP 상태 코드 200(OK)를 반환한다.
예시: ResponseEntity.ok().body("Success");

2. status(HttpStatus status)

지정된 HTTP 상태 코드를 가진 ResponseEntity를 생성한다.
예시: ResponseEntity.status(HttpStatus.NOT_FOUND).body("Not Found");

3. body(T body)

응답 본문에 특정 객체나 데이터를 설정한다.
예시: ResponseEntity.ok().body(myObject);

4. headers(HttpHeaders headers)

응답에 헤더를 추가한다.

HttpHeaders headers = new HttpHeaders();
headers.add("Custom-Header", "Value");
return ResponseEntity.ok().headers(headers).body("Response with custom header");

5. created(URI location)

생성된 리소스의 위치(URI)와 함께 HTTP 상태 코드 201(Created)를 반환한다.
예시: return ResponseEntity.created(new URI("/new-resource")).build();

6. accepted()

비동기 작업이 수락되었음을 나타내는 HTTP 상태 코드 202(Accepted)를 반환한다.
예시: return ResponseEntity.accepted().build();

7. badRequest()

잘못된 요청에 대한 HTTP 상태 코드 400(Bad Request)를 반환한다.
예시: return ResponseEntity.badRequest().body("Bad Request Message");

8. notFound()

요청한 리소스가 없음을 나타내는 HTTP 상태 코드 404(Not Found)를 반환한다.
예시: return ResponseEntity.notFound().build();

9. noContent()

응답 본문이 없는 HTTP 상태 코드 204(No Content)를 반환한다.
예시: return ResponseEntity.noContent().build();

Pageable

  • Spring Data 라이브러리에서 제공하는 인터페이스이다
  • 페이징 처리에 필요한 여러 정보를 포함하고 있다.

1. getPageNumber() : 현재 페이지 번호를 반환한다. 페이지 번호는 0부터 시작한다.

2. getPageSize() : 한 페이지에 표시할 데이터의 개수를 반환한다.

3. getOffset() : 현재 페이지의 시작점을 나타내는 offset 값을 반환한다. 예를 들어, 페이지 크기가 10이고 2페이지를 조회하는 경우, offset은 10이 될 것이다 (0부터 시작하므로).

4. getSort() : 데이터를 정렬하는 데 사용되는 Sort 객체를 반환한다. Sort는 정렬 방식(오름차순, 내림차순)과 정렬 기준이 될 속성을 포함한다.

5. hasPrevious() : 이전 페이지가 있는지 여부를 반환한다. 이 메소드는 첫 페이지가 아니라면 항상 true를 반환한다.

6. first() : 첫 번째 페이지를 나타내는 Pageable 객체를 반환한다.

7. next() : 다음 페이지를 나타내는 Pageable 객체를 반환한다.

8. previousOrFirst() : 이전 페이지가 있으면 이전 페이지를, 없으면 첫 페이지를 나타내는 Pageable 객체를 반환한다.

@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 매개변수로 전달된다.

    Repository - 적절한 Comment객체 찾기

    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 형태로 반환한다

    @Configuration과 @Component 어노테이션

  • Spring이 관리하는 Bean을 생성하는 역할

    @Component :

  • 일반적인 빈을 생성한다. 스프링 컨테이너에서 찾아서 이 어노테이션이 등록되어 있는 클래스를 찾아 빈으로 등록한다. Service나 DAO를 구현하는 Repository에서 주로 사용된다.

    @Configuration :

  • 개발자가 직접 빈 생성로직을 제어할 수 있게한다.

  • Spring 설정 클래스를 선언하는데 사용된다. - 스프링 빈 설정 정보를 가지고 있다.

  • 클래스 안에는 @Bean 어노테이션이 붙은 메소드들이 있고, 반환하는 객체가 빈으로 등록된다.

    @Component는 클래스 자체를 Bean으로 등록하고, @Configuration은 클래스 내부의 @Bean 어노테이션이 붙은 메소드가 반환하는 객체를 Bean으로 등록한다는 차이점이 있다.


    @GeneratedValue

  • GenerationType 열거형은 다양한 자동 생성 전략을 제공한다.
    -GenerationType.AUTO : 데이터 베이스에 대한 설정에 의해 자동 생성 전략이 정해진다.(특정 DB에 맞게 자동 선택)
    -GenerationType.IDENTITY : identity 컬럼을 사용하여 ID 값을 생성한다.
    -GenerationType.SEQUENCE : 데이터베이스 시퀀스를 사용하여 ID 값을 생성합니다. 일부 데이터베이스는 시퀀스를 지원한다.
    -GenerationType.TABLE : 데이터 베이스 테이블을 사용하여 자동 생성한다. id를 따로 관리하는 테이블을 만들고 그곳에서 가져온다.(성능이슈)

profile
코딩 기록

0개의 댓글

관련 채용 정보