API 호출 방법에 대한 고민

김상현·2023년 10월 10일
1

CS

목록 보기
6/10
post-thumbnail

🔥 API 호출에 대한 2가지 접근

image

Request

GET http://api.jari-bean.com/api/cafe/{cafeId}

Response

{
  "cafeDetailDto": {
    "cafeSummaryDto": {
      "id": "string",
      "name": "string",
      "address": "string",
      "imageUrl": "string"
    },
    "openingHour": "2023-08-27T12:01:06.970Z",
    "closingHour": "2023-08-27T12:01:06.970Z",
    "phoneNumber": "string",
    "description": "string",
    "instagram": "string",
    "image": "string"
  },
  "tableReserveResDtoList": [
    {
      "tableDetailDto": {},
      "availableTimeList": [
        {
          "startTime": "2023-08-27T12:01:06.970Z",
          "endTime": "2023-08-27T12:01:06.970Z"
        }
      ]
    }
  ]
}

💡 1. 카페 정보, 카페 테이블 예약 내역 2개를 1번의 API 호출로 조회

위 화면은 카페의 카페 정보카페 테이블 예약 내역 을 볼 수 있는 화면이다.
해당 화면에서 데이터를 요청할 경우 1번의 API Call로 카페 정보카페 테이블 예약 내역 총 2개의 데이터를 한번에 조회한다.

현재는 1개의 화면에 보이는 모든 데이터를 한번에 제공하는 방식을 사용하고 있고 해당 방식을 우리 팀이 선정한 이유는 다음과 같다.
1. HTTP 요청 수를 최대한 줄이기 위해서
2. DB 커넥션을 최소화하기 위해서

즉, 현재 사용중인 조회 방식은 네트워크를 효율적으로 사용하기 위한 최적을 고려한 방식이라고 할 수 있다.

💡 2. 카페 정보 1번, 카페 테이블 내역 1번 총 2번의 API 호출로 조회

제안하고자 하는 방법은 1개의 화면에 여러 타입의 데이터가 존재할 경우 각 데이터에 맞는 API를 호출하는 방법이다.
위 화면을 예로 들면 카페 정보 에 대한 요청 1번, 카페 테이블 예약 내역 에 대한 요청 1번 총 2번의 요청을 통해 데이터를 조회하는 방식이다.

각 데이터에 맞는 API 호출 방법을 제안하는 이유는 다음과 같다.
1. 만약 카페 정보카페 테이블 예약 내역 을 한번에 반환하는 API를 만들 경우 카페 정보 만 필요할 경우 혹은 카페 테이블 예약 내역 만 필요할 경우에도 API를 새롭게 만들어야 한다.
2. 객체는 단 하나만의 책임을 가져야 한다는 원칙처럼 API도 하나의 책임을 가져야 한다고 생각한다. 물론 데이터를 한번에 조회하면 성능적인 측면에서 좋을 수 있지만, 대신 해당 API는 해당 화면에 종속적인 즉 그 화면에서만 사용할 수 있는 상태가 될 것이다.
3. DB 순차적으로 조회해서 한번에 2개의 데이터를 가져와 화면에 그리는 것보다, 서로 독립된 쓰레드로 여러개의 데이터를 동시에 조회해서 조회된 데이터를 먼저 그리는 것이 더 빠를 것이라고 추측(?)한다.

만약 API를 호출할 때 A는 3초, B는 5초가 걸린다고 했을 때,
한번에 조회할 경우 총 8초 후에 모든 결과를 받을 수 있지만
나누어서 조회할 경우 3초 후에는 A를 받아볼 수 있고, 5초에는 B를 받아볼 수 있다.
  1. 각 데이터를 따로 조회하도록 하는 것이 로직이 간단하기 때문에 유지보수 측면과 테스트 과정에서 굉장히 편리하다.
  2. 만약 화면 구성이 변경이 필요한 경우 백엔드에서는 DTO, Controller, Service 단계의 로직을 수정해야 한다. 즉, 결합도를 낮추기 위해서라도 분리하는 것이 좋을 것 같다.
profile
목적 있는 글쓰기

0개의 댓글