일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 언리얼엔진
- 문자열
- QueryDSL
- 해시
- 유니티
- Unity3d
- 프로그래머스
- UnrealEngine
- 순열
- C++
- 스파르타내일배움캠프
- 구현
- 이분탐색
- Unity
- 스택
- Inventory
- Photon
- 워크플로
- 내일배움캠프
- BFS
- Unity2D
- c#
- UE4
- Firebase
- 스파르타내일배움캠프TIL
- 유클리드호제법
- FSM
- unityui
- 알고리즘
- 포톤
- Today
- Total
개발 낙서장
[TIL] 내일배움캠프 56일차 - API 호출 본문

오늘의 학습 키워드📚
여러 데이터가 필요할 때

Trello라는 서비스를 모방하는 팀 프로젝트를 진행하면서 갑자기 이런 고민이 생겼다.
여러 테이블의 데이터가 필요한 경우에는 API 호출을 한 번만 하는게 좋을까 여러번 하는게 좋을까?

테이블의 일부이다. 보드 테이블은 유저 테이블을 참조하고 있으며 보드를 참조하는 컬럼 테이블, 컬럼을 참조하는 댓글 테이블이 있다.
위 Trello 사진 처럼 보드를 조회하면 보드에 있는 컬럼, 컬럼에 있는 카드까지 한번에 조회하게 된다.
이러한 경우처럼 특정 데이터를 조회하고자 할 때 다른 연관된 테이블들을 조회하게 된다면 어떻게 하는게 좋을까?
방법은 두 가지가 있다.
- 하나의 API를 호출하면 서비스 단에서 다른 데이터들을 조회해 합쳐서 보낸다
- 필요한 각각의 데이터를 조회하는 API를 호출한다.
첫 번째 방법을 사용하면 서버 입장에서 부담이 적어진다. API 호출은 즉 서버 리소스이므로 효율적인 선에서 최대한 적게 호출하는 것이 좋다. 하지만 조회하는 데이터가 대용량이라면 조회하는 것 자체에 시간이 오래 걸릴 수 있기 때문에 주의해야 한다. 또한 유지보수 측면에서도 많은 데이터를 한번에 처리하기 때문에 어려울 수 있다.
두 번재 방법을 사용하면 각각의 데이터를 조회하는 API를 호출하기 때문에 코드 재사용성이 높아지고 유지보수에 유리하다. 그리고 대용량의 데이터를 처리할 때에도 따로따로 호출하기에 시간이 단축될 수 있다. 하지만 그만큼 API를 여러번 호출하기 때문에 필요한 데이터가 많아질 수록 API 호출량은 증가하기에 서버 부하가 커진다. 또한 어떤 API가 실패할 때의 안전성을 보장하기가 애매하다고 생각한다.
과연 어떤 방법이 좋을까 고민해보고 질문도 해봤는데 내 결론은 첫 번째 방법이 좋은 것 같다고 생각한다.
이러니 저러니 해도 결국 서버에 부하가 간다는 것은 프론트 입장에서도 백엔드 입장에서도 지양해야 하는 방식이라고 생각한다. 경우에 따라 분명 두 번째 방법이 좋을 때가 있겠지만 대부분의 상황에서는 최대한 HTTP 호출을 줄이는 것이 좋다고 생각한다.
예를 들어 A를 B가 참조하고 C가 참조하고 B를 D가 참조하고 F가 참조하고 .....
여기서 A를 조회할 때 다른 모든 테이블들의 정보가 필요하다면(물론 이렇게 설계된 서비스는 아주 잘못된 서비스겠지만) 모든 테이블을 조회하는 API를 호출해야 한다. 그게 5번이든 10번이든 필요하니까 호출해야 하고 이는 프론트한테도 서버한테도 매우매우 가혹한 서비스가 될 것이다.
예시를 좀 과장해서 들었지만 실제로 대부분의 서비스에서 2~3개 혹은 그 이상의 연관 테이블을 한번에 호출하는 경우는 엄청 많을 것이라 생각한다.
상황에 따라 잘 조율해야 겠지만 어쨌든 결론은 '하나의 API로 호출하자' 이다.
오늘의 회고💬
팀 과제가 시작되어 회의하고 이것저것 하느라 정신이 없었다.
내일의 계획📜
CRUD는 기본 기능이니 후딱 마무리하고 추가적인 부분을 다뤄야 한다.