[Java Spring] 7. API개발 (지연 로딩과 조회 성능 최적화)

Hayoon·2022년 7월 25일
0

@Request Body / Response Body

Client -> Server로 통신하는 메세지를 요청(Request)메세지라고 하고, Server -> Client로 통신하는 메세지를 응답(Response)메세지라고 한다. Web에서 Refresh없이 이루어지는 동작들은 대부분 비동기 통신으로 이루어진다.
이를 위해서는 Client -> Server로 요청메세지를 보낼 때, 본문에 데이터를 담아서 보내야 하고, Server -> Client로 응답을 보낼 때에도 본문에 데이터를 담아서 보내야 한다.
이 본문이 "Body"라고 한다.
(Client<->Server 통신은 JSON 형식의 데이터를 주고받는다.)

요청본문 = RequestBody 응답본문 = ResponseBody

Client -> Server로 필요한 데이터를 요청하기 위해 JSON 데이터를 요청 본문에 담아서 Server로 보내면, Server에서는 @RequestBody를 사용하여 HTTP 요청 본문에 담긴 데이터들을 자바객체로 변환시켜, 객체에 저장한다.
Server -> Client로 응답 데이터를 전송하기 위해 @ResponseBody를 사용하여 자바 객체를 HTTP 응답 본문의 객체로 변환하여 Client로 전송한다.

1. Fetch Join

public List<Order> findAllWithMemberDelivery() {
      return em.createQuery(
          "select o from Order o" +
                  " join fetch o.member m" +
                  " join fetch o.delivery d", Order.class)
          .getResultList();
}

엔티티를 fetch join 사용하여 쿼리 1번에 조회. fetch join을 하지 않을 시 양방향 매핑으로 설계된 엔티티가 서로 한 번씩 쿼리를 더 실행하게 되어 N+1 문제 발생.

2. Outer Join

Outer Join은 조인하는 여러 테이블에서 한 쪽에는 데이터가 있고, 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽 테이블의 내용을 모두 조회하게 된다. 즉, 조건에 맞지 않아도 해당하는 행을 출력하고 싶을 때 사용할 수 있다.

LEFT OUTER JOIN : 조인문의 왼쪽에 있는 테이블의 모든 결과를 가져 온 후 오른쪽 테이블의 데이터를 매칭하고, 매칭되는 데이터가 없는 경우 NULL로 표시한다.

RIGHT OUTER JOIN : 조인문의 오른쪽에 있는 테이블의 모든 결과를 가져온 후 왼쪽의 테이블의 데이터를 매칭하고, 매칭되는 데이터가 없는 경우 NULL을 표시한다.

profile
Junior Developer

0개의 댓글