외부 API 통합 시 데이터 제어 범위 설계 질문
상황 정리
저희가 매장 관리자용 통합 예약 관리 시스템을 개발하고 있습니다.
현재 시스템 구조
[외부 예약 플랫폼 (네이버 같은)]
↓ 자동 연동
[매장 POS 시스템 (티오더 같은)]
↓ API 폴링
[우리 통합 관리 시스템]
고객이 외부 플랫폼에서 예약하면 POS에 자동으로 들어옴
우리는 POS API를 폴링해서 예약 데이터를 가져옴
우리 어드민에서 직접 예약 등록 기능도 곧 추가 예정
문제 상황
POS 업체에 확인해보니:
API에서 외부 플랫폼 예약 구분이 안 됨 → 구분값 추가 예정
외부 예약은 원칙적으로 수정 불가
현재는 수정이 되지만 플랫폼 API 키가 연결 안 되어 사실상 불가능
DB만 바꿔서는 의미 없고, 외부 플랫폼 API 재호출이 필요
POS와 외부 플랫폼 간 연동이 아직 불완전한 상태
논의된 두 가지 방향
A안 (readonly 방식)
- 우리 어드민 생성 예약 → POS 직접 등록 (수정 가능)
- 외부 플랫폼 예약 → POS에서 폴링해서 조회만 (수정 불가)
- UI에서 "외부 예약" 표시하고 수정 버튼 비활성화
- 수정 필요시 원본 플랫폼 바로가기 링크 제공
B안 (통합 수정 방식)
- 모든 예약을 우리 시스템에서 직접 수정 가능하게
- 외부 예약 수정 시 POS API → 외부 플랫폼 API 호출까지 처리
장단점 분석
A안 장점
각 시스템의 책임 범위가 명확함
동기화 정합성 이슈 없음
외부 플랫폼 정책 변경에 영향 안 받음
여러 플랫폼을 한 곳에서 조회만 해도 관리자 리소스 절감 효과
A안 단점
수정은 여전히 각 플랫폼에서 해야 함
"진정한 통합 관리"는 아님
B안 장점
완전한 통합 관리 경험
관리자가 한 곳에서 모든 예약 제어
B안 단점
외부 플랫폼 API 직접 연동 불가 (계약 주체가 매장)
POS가 외부 플랫폼 제어 API를 제공해야 하는데 현재 없음
POS-외부 플랫폼 양쪽 동기화 복잡도 높음
외부 플랫폼 정책(취소규칙 등) 변경 시 계속 대응 필요
문제 발생 시 책임 소재 애매
질문
이런 다중 오리진 데이터를 통합하는 시스템에서:
readonly로 가는 게 맞을까요, 아니면 수정까지 구현해야 할까요?
단계적으로 접근한다면 어떤 순서가 좋을까요?
1단계: 통합 조회만
2단계: POS가 API 제공하면 그때 수정 추가
비슷한 사례에서 일반적으로 어떻게 접근하나요?
현재 상황에서는 A안(readonly)이 합리적이라고 판단됩니다.
하지만 시간이 지나서 다음 조건들이 충족된다면:
POS에서 외부 예약 플랫폼 식별값을 제공
외부 예약 플랫폼 API를 저희가 제공받을 수 있음
그때는 어떤 아키텍처로 가야 할까요?
옵션 1: 직접 호출 방식
[우리 시스템] → [외부 플랫폼 API] (직접 호출)
→ [POS API] (동기화용)
우리가 외부 플랫폼 API를 직접 호출
POS는 조회 + 동기화 확인용으로만 사용
옵션 2: POS Proxy 방식
[우리 시스템] → [POS API] → [외부 플랫폼 API]
POS가 외부 플랫폼 제어 API를 제공하도록 요청
우리는 POS API만 호출하면 POS가 내부적으로 플랫폼 API 처리
외부 플랫폼 변경사항은 POS가 책임
옵션 3: readonly 유지
[우리 시스템] → [POS API] (조회만)
기술적으로 가능해져도 readonly 유지
각 플랫폼 바로가기만 제공
어떤 방식이 일반적이고, 각 옵션의 trade-off는 무엇인가요?
특히 옵션 1 vs 옵션 2에서:
우리가 직접 여러 외부 API를 관리하는 게 나을까요?
아니면 POS가 Proxy/Gateway 역할을 하게 하는 게 나을까요?
Answer 1
0
안녕하세요 질문 감사드립니다!
이미 질문 내용 자체에서 충분히 현재 상황 기준 장점/단점을 생각하고계시고 어느정도 합리적인 판단도 결정하실 수 있는 것 같기 때문에 제가 의견을 추가적으로 드리는게 의미가 없다고 생각합니다!
핵심만 축약하면 결국 외부 업체에서 무언가 해주는 것은 기약이 없기도하고, 일이 의존적으로 되기 때문에 회사 내부 일정의 문제랑도 연관이 있다고 보여져서 합리적인 선택을 해야할 것 같습니다
또 외부API가 의도 기준 불안전한 상태라면 특정 영역을 기준으로 외부를 격리하는 것을 기본으로하는게 좋은 방향성이라고 생각합니다!
옵션에 대해서도 고민하고 계신 부분이 회사 내부의 개념(도메인)의 구조를 잡는 관점의 결정이 더욱 중요하다고 생각합니다, 저의 의견 보다는 그 관점으로 고민해보시면 좋을 것 같습니다!
모쪼록 답이 되었길 바랍니다! 감사합니다!
다양한 관점의 코드 경험을 위해 개선하지 않은 코드
1
47
1
histories() 응답에 PointHistory.id를 포함한 이유가 궁금합니다/
1
44
2
SettlementTargetRepository Jquery 질문
1
48
2
부가 기능을 이벤트 핸들러로 분리하는 기준이 있을까요?
1
60
2
엔티티의 pk 를 0으로 초기화하시는 이유가 있을까요??
1
67
2
제미니님 안녕하세요!
1
73
2
개념 간 격벽 분리와 목록 조회 시 발생하는 참조 구조
1
80
2
프로덕트와 프로덕트카테고리 사이의 삭제 정책
1
75
2
새로 개발한다면 구현 순서
1
133
1
의존 방향에 대한 고민
1
122
2
어드민(Back-office)에서 예약 변경 시, '할인 조건 재검증(쿠폰 회수)' vs '기존 혜택 유지' 중 어떤 정책이 일반적인가요?
1
95
2
OrderKeyGenerator 인스턴스화 generate() 질문
1
83
1
PG 결제 승인 로직
1
128
2
QnA에서 Join 필드 표현법
1
88
1
결제서비스 콜백 동시성문제 가능성
1
106
2
굿
1
107
1
도메인/엔티티 분리 상황에서 쓰기 작업 하는 방법
1
135
2
도메인 객체와 엔티티 객체 사용
1
137
2
CouponService 의존성 의문
1
96
2
상품 목록 조회 고도화 질문
1
111
2
표현 계층에서의 접근 지점이 다양해지는것과 이를 해결하기 위한 파사드의 도입에 대해 제미니님의 생각이 궁금합니다.
1
123
2
제품상세 코드 느끼기
1
144
2
격벽의 순환 참조(?)
1
113
2
결제 관련 서킷 브레이커 전략, 데이터 정합성 및 타임아웃 설정 질문
2
174
2

