[로컬 API] 장소 검색 기능 구현 시 클라이언트 직접 호출 vs 백엔드 경유 호출 권장 방식

웹 브라우저 상에서 해당 검색을 하게 된다면 리스트 형태로 주변 검색결과가 뜨게 만들고 싶습니다

여기서 궁금한 점이 있습니다 클라이언트가 api를 사용하여 백엔드 단에게 던져줘야하는지

백엔드에서 api를 호출하여 dto 형태로 클라이언트에게 줘야하는지 설계의 고민점이 생깁니다

제가 고민 중인 두 가지 방식은 다음과 같습니다.

1. 클라이언트에서 JS API 직접 호출 (프론트엔드 책임)

카카오 Maps JS API의 services.Places() 라이브러리를 사용하여 클라이언트 단에서 직접 키워드 검색 결과를 받아와 화면에 렌더링. 백엔드 서버에 트래픽 부담이 없고, 응답 속도가 빠를것 같다는 고민점이 있습니다

2. 백엔드에서 REST API 호출 후 DTO 반환 (백엔드 책임)

API 키가 서버에 은닉되어 안전하고, 백엔드에서 데이터 통제권(정제, 캐싱, 내부 DB 조인)을 완전히 가질 수 있다고 생각합니다 (클라이언트에는 디바운싱 적용 예정)

카카오 서버로 향하는 모든 검색 트래픽을 우리 백엔드 서버가 온전히 감당해야 함. API 호출 쿼터(Quota) 관리 측면에서 불리할 수 있을것 같기도 합니다

[질문 사항]

위와 같은 ‘장소 검색 후 자체 DB 저장’ 서비스 플로우에서, 카카오 측은 일반적으로 어떤 아키텍처(클라이언트 호출 vs 백엔드 경유)를 더 권장하시나요?

만약 2번(백엔드 경유) 방식을 택할 경우, 실시간 검색(자동완성 느낌)으로 인해 발생하는 다량의 REST API 호출이 카카오 API 사용 정책이나 쿼터 제한에 위반되거나 불이익이 생길 여지가 있는지 궁금합니다.

답변해 주시면 아키텍처 설계에 큰 도움이 될 것 같습니다. 감사합니다.

모든 구현은 운영하시는 서비스 상황에 따라 다르므로 적절히 취사 선택 하시면 되나

로컬 API를 클라이언트에서 호출하면,

(1) 사용자마다 달라지는 Origin IP로 인해 접근 제어 보안 설정을 할 수 없습니다.
(2) 클라이언트에서 호출 내용 노출로 앱키를 탈취하게 되면 운영하시는 서비스가 사용해야할 쿼터를 타인이 사용할 수 있습니다.
ㄴ 클라이언트에서 호출하므로 앞선 (1) IP 접근제어를 할 수 없게되어 탈취하여 사용하기 더 용이합니다.

백엔드에서 로컬API 사용하시는 것을 추천드립니다. 아래 보안 권장사항도 참고 부탁드려요.

Kakao Developers 문서

@류정균6418

안녕하세요,

위 문의하신 내용 중

  • ‘장소 검색 후 자체 DB 저장’ 서비스

라고 말씀하신 부분이 있는데요

카카오맵 API 를 통해 호출하신 결과를 별도로 저장하여 사용하시는 것은 허용하지 않습니다.
이점 유의하여 사용 부탁드립니다.

질문에서 디비 로직을 남겼네요.. 오해를 사서 죄송합니다 db에 저장하는것은 api 정책 위반이라는 점 인지하고 있습니다 저장 로직은 쓰지 않는데 질문에 잘못 달았네요. 항상 유의해서 사용하고 있으며 회색 스페이스는 항상 질문 후 검증 받겠습니다. 우려하신 점은 반영하지 않도록 정책에 맞게 사용하도록 했습니다. 빠른 피드백에 항상 감사합니다

1개의 좋아요