해결된 질문
작성
·
14
0
현재처럼 서비스 구조가 거의 테이블 단위로 DB와 API 서비스가 분리될 때,
이런 구조에서 화면에서 리스트 형태로 두 도메인 데이터를 함께 조회해야 하는 경우가 있을 것 같습니다.
예를 들자면 게시글과 게시글 조회 수를 함께 보여주는 리스트 API가 필요한 상황에서,
단건 조회라면 프론트에서 별도로 API를 호출해도 괜찮을 것 같은데,
페이징 처리나 리스트 형태로 여러 데이터를 묶어서 조회해야 할 때,
실무에서는 보통
한 서비스에서 다른 서비스를 RestClient(Feign 등) 로 호출해서 데이터를 합치는 방식으로 처리하는지,
아니면, 같은 도메인 서비스로 묶어버린다던지
아니면 프론트엔드에서 각각의 API를 호출한 뒤 병합하는 방식으로 처리하는지
궁금합니다.
실제 현업에서는 이런 경우 어떤 접근 방식을 주로 사용하나요?
답변 2
0
leebs0521님, 안녕하세요!
결론부터 말씀드리면, 두 방식(+부가적인 방식들도) 모두 사용합니다.
프론트엔드에서 각 API를 별도로 호출한다고 하더라도, 크게 문제되지 않을 수도 있겠습니다.
하지만 API를 개별적으로 클라이언트에서 호출 및 조합한다면, 각 API별 실패에 대해서 정책 정리가 필요할 수도 있고, 여러번 서버 네트워크에 호출해야 하므로 전체적으로 화면을 그려내는 비용이 증가할 수 있습니다.
또, API 팀과 프론트엔드 팀이 별도로 분리되어 있으면, 사실 API 팀의 입장만 고려할 수도 없습니다. 결국 분리된 API를 조합하려면 클라이언트의 개발 복잡도는 분명 올라가게 되고, 부가적인 소통이 필요할 수도 있습니다.
다른 문제로는, 클라이언트가 웹 프론트엔드뿐만 아니라 앱(and/ios), 다른 연동 서버 등 다양할 수도 있다는 것인데요.
이러한 경우에 클라이언트는 각자의 구현 방식이 모두 다를 수 있고 일관되지 않는다면, 문제 시에 원인 추적이 더욱 어려워질 수도 있습니다.
물론, 항상 클라이언트를 위한 API를 제공해주는 것도 어렵긴 합니다.
클라이언트의 요구사항을 위한 모델과 API에서 바라보고 있는 도메인은 절대 일치가 될 수 없기도 하고,
클라이언트 요구사항을 항상 인지하고 대응해 주는 것도 쉽지 않기 때문입니다.
이 경우에는 클라이언트에서 각각 호출한 뒤 병합하는 방식으로 처리하게 되네요.
적어도, API에서 클라이언트 요구사항을 어렵지 않게 맞춰줄 수 있는 상황이라면,
또는, 클라이언트 복잡도가 너무 커진다면(예를 들어, 게시글 영역 하나 그리는데, 게시글/조회수/좋아요수 일일이 별도로 호출하는 것도 복잡하고 이상합니다)
API에서 클라이언트 요구사항 맞춰서 제공할 수도 있는 것 같네요.
BFF를 구성하거나 서버에서 데이터 조합하는 레이어를 둘 수도 있는 것이고요.
말씀하신대로 같은 도메인으로 묶어낼 수도 있습니다.(클라이언트 요구사항과 무관하게 묶어도 괜찮은 도메인이라면)
팀의 규모나 사정, 구성원들이 익숙한 개발 방식은 모두 다를 수 있다보니, 꼭 정답이 있기보단 서로 조율하는 과정은 필요한 것 같습니다!
0
안녕하세요, 인프런 AI 인턴입니다. leebs0521님.
질문해주신 내용은 분리된 서비스에서 데이터 통합을 어떻게 할 것인지에 대한 고민인 것 같습니다. 여러 데이터 소스를 하나의 API로 제공해야 하는 경우에는 여러 가지 방법이 있습니다. 이 중에서 일반적으로 실무에서 많이 사용하는 접근 방법을 소개드리겠습니다.
백엔드 서비스에서 데이터 병합:
프론트엔드에서 데이터 병합:
데이터레이어에서의 통합:
해당 주제와 관련하여 유사한 질문 및 답변은 아래 링크를 참고하시면 좋습니다:
- 멀티 모듈 구조에서의 API 호출 및 데이터 일관성 관리 (게시글 제목)
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.