Skip to content

Week 01

dahye edited this page Sep 26, 2024 · 5 revisions

REST API

  • REST 원리 기반으로 구현한 API
  • 클라이언트가 URI로 자원 명시해서 요청하면 서버가 JSON 형식으로 데이터 응답
  • HTTP 메서드 사용하여 다양한 작업 수행 => 자원 처리 (정보 가공 방식이 CRUD)
  • URI로 리소스 표현 시, 자원에 대한 행위는 HTTP 메서드로 표현 => URI는 리소스만 식별하면 됨(행위 포함 X)

'http://localhost:8080/api/library/book' GET 요청 보내면 URL에 맞는 메서드 호출 (@GetMapping("/book")


Entity/DTO

  • Entity => DB에 저장되는 데이터 객체 (DB와 직접적으로 연결)

  • DTO => 계층 간 데이터 교환

  • 왜 둘 다 써야 하는 건지 (DTO 만들 건데 왜 굳이 Entity 만들어서 DTO로 변환해야 됨?)

  • => 엔티티 직접 반환하면 엔티티에 존재하는 모든 데이터 반환됨 => 불필요한 데이터 전달, 정보 노출

  • Entity는 데이터베이스 영속성의 목적으로 사용되는 객체 => 요청/응답 값을 전달하기 위해 사용은 X, 변경 최소화하기!!


builder

  • 객체 생성 과정과 표현 방법을 분리하여 다양한 구성의 인스턴스 만드는 생성 패턴 => 생성자 오버로딩 안 해도 됨
  • 객체 생성 시, 필드를 매개변수 순서와 관계 없이 원하는 것만 설정 가능
  • 그럼 매개변수 생성자만 만들면 됨?? => Entity 클래스에서는 매개변수 없는 생성자가 필요 (왤까?... => JPA가 엔티티 객체 생성할 때 reflection 사용하는데, reflection은 기본 생성자를 통해 객체를 생성함) (@NoArgsConstructor 같이 써 주기)
  • 클래스에 @Builder 사용 => 가능한 모든 필드에 대해 빌드 메서드 생성, 다른 생성자가 이미 있다면 제대로 동작하지 않을 수 있음 (기본 생성자는 상관X)
  • 생성자에 @Builder 사용하는 경우 => 생성자의 파라미터 필드에 대해서만 빌드 메서드 생성

@NoArgsConstructor(access = AccessLevel.PROTECTED) => 매개변수 입력받지 않는 기본 생성자 자동으로 생성 (기본 생성자 외부에서 호출 못하도록 PROTECTED) @AllArgsConstructor => 모든 매개변수 입력받는 private 생성자 하나를 자동으로 생성 (@Builder 사용 시, 안 쓰는 게 나을 듯)

클래스 레벨에서 @Builder, @NoArgsConstructor 함께 쓰면 오류 발생한다는데... => 이 오류를 해결하려고 @AllArgsConstructor를 씀, 근데 얘는 인스턴스 멤버 선언 순서에 영향을 받으니까 변수의 순서를 바꾸면 생성자 입력 값 순서도 바뀜 => @AllArgsConstructor 쓰지 말고 생성자에 @Builder를 쓰자


CRUD

  • 서버 측에서 요청을 처리하는 방법을 정의
  • HTTP 메서드로 요청을 보내면 서버에서 호출되는 메서드가 CRUD 작업을 수행

Create) POST 메서드는 데이터 생성 요청을 처리하며, 이 요청을 통해 Create 작업을 수행함 <- 이 과정에서 데이터베이스에 새로운 데이터를 추가하는 작업이 이루어짐

클라이언트는 새로운 데이터를 생성하기 위해 HTTP 'POST' 요청을 보냄 -> 서버는 'POST' 요청을 받아 해당 데이터를 데이터베이스에 저장함 (서버는 요청 본문에서 데이터를 추출하고, 비즈니스 로직을 처리하여 데이터베이스에 새로운 레코드를 추가함) -> 서버는 작업 결과를 클라이언트에 응답으로 반환함

Clone this wiki locally