고민의 흔적

이 블로그 고민의 흔적 카테고리 글

전체글 보기
#API#전산#경계설계#백엔드#아키텍처

전산에 API를 처음 붙일 때, 어디까지 열어야 할까

화면 중심 전산을 API 기반으로 바꾸며 맞닥뜨린 경계 설정 고민이다.

매출 전산을 맡을 때, 팀 안에서 자주 나온 말이 있었다.
‘이제 API로 가자.’

막상 설계를 시작하니, 어디까지 API로 열지가 더 어려웠다. 회의실에서는 모두가 고개를 끄덕였지만, 화면 하나를 API로 빼기 시작하는 순간부터 ‘이 필드도 넣을까’ 싸움이 반복됐다.

왜 경계를 먼저 고민했는가 (이유)

‘일단 다 열자’ — 처음엔 그게 편해 보였다

처음엔 ‘일단 다 열자’ 쪽이 편해 보였다. 새로운 구조를 빨리 보여주고 싶은 마음이 컸기 때문이다. Spring Boot로 옮기는 그림도, swagger를 붙인 모습도, 팀 밖에 보여주기엔 멋졌다.

그런데 몇 주 지나니 편함의 대가가 한꺼번에 돌아왔다.

화면마다 달라진 같은 API

응답 필드가 화면마다 달라졌다. ‘이 화면만’ 필드를 추가하다 보니 같은 API가 화면 수만큼 분기됐다. 코드 리뷰에서 ‘이건 이 화면 전용이에요’라는 말이 늘었고, 나중에 필드 이름을 바꾸려 할 때 누가 깨지는지 아무도 확답하지 못했다.

문서가 코드보다 늦게 따라온 날

스펙 변경 때 소비자(웹/배치/연계)가 동시에 깨졌다. swagger를 붙이기 전까지는 ‘코드가 곧 문서’였고, 그 문서는 매번 거짓말을 했다. 배포는 됐는데 연계 쪽에서 ‘스펙이 바뀐 줄 몰랐습니다’라는 전화가 오면, 그날은 API가 아니라 신뢰를 고치는 일이 됐다.

그때 깨달았다. API는 ‘만들기’보다 유지하기가 더 비싸다는 걸.
그래서 당시 결론은 단순했다. 다 여는 게 아니라, 책임질 수 있는 만큼만 연다.

비슷한 경험 — B2B 알림톡·외부 연계

이후 B2B 알림톡과 외부 플랫폼 연동을 붙일 때 같은 고민이 반복됐다. 차이라면, 이번엔 소비자가 사외(파트너) 라는 점이었다.

내부 화면은 깨지면 우리가 밤새 고치면 됐다. 파트너에게 나간 계약은 ‘내일 배포로 고칠게요’가 통하지 않았다. 새 기능을 빨리 열고 싶은 욕심이 가장 위험해지는 지점이었다.

  • 당시 결론: 외부에 노출하는 계약은 최소 범위 + 버전 고정으로 시작하고, 내부 편의 필드는 절대 섞지 않기로 했다. ‘연계 표준화’라는 이름으로 입출력 형태와 에러 코드를 한곳에 모았다.
  • 이 경험을 거치고 나서야, 경계 설정이 ‘기술 취향’이 아니라 변경 비용을 누가 떠안느냐의 문제라는 걸 분명히 알았다. 내부 DTO에 편하게 필드 하나 더 넣는 순간, 그 비용은 조용히 밖으로 넘어갈 수 있었다.

지금의 기준 (당시 결론을 어떻게 지키는가)

  • 외부/배치가 꼭 필요한 계약만 먼저 고정했다. ‘나중에 필요하면 추가’가 아니라 ‘지금 꼭 필요한 것만’.
  • DTO와 화면 모델을 분리했다. 화면이 바뀌어도 API 계약이 같이 흔들리지 않게.
  • 변경 시 영향 범위를 말로 설명할 수 있어야 통과시키기로 했다. ‘누가 깨지는지’를 한 문장으로 못 말하면, 그 변경은 아직 준비가 안 된 것이다.

아직 부족한 것 (개선점)

  • API 버전 정책은 정했지만, 구버전 폐기(deprecation) 일정을 강제하는 절차는 약하다. 옛 계약이 계속 살아남는다.
  • 소비자 목록(누가 이 API를 쓰는가)을 코드/문서로 추적하지 못해, 여전히 변경 영향도를 사람이 수소문한다.
  • 계약 변경 시 자동으로 깨짐을 잡아주는 계약 테스트가 없어, 배포 후에야 문제를 발견하는 경우가 있다.

앞으로 나가야 할 방향

  1. API에 버전 + 폐기 일정을 명시하고, 구버전 사용량을 측정해 안전하게 닫는 흐름을 만든다.
  2. 외부 계약은 계약 테스트(consumer-driven) 를 붙여, ‘바꾸면 누가 깨지는지’를 배포 전에 자동으로 안다.
  3. 새 시스템을 Spring Boot로 이관하면서, 화면용 BFF와 외부 연계용 API의 경계를 구조적으로 분리한다.
  4. 개발자센터에 API 문서를 자동 생성으로 연결해, ‘문서가 코드보다 늦는’ 문제를 반복하지 않는다.

완벽한 API 플랫폼은 아직 아니다.
하지만 ‘처음 API’의 의미를, 확장 가능한 경계로 이해하게 됐다. 다음 목표는 그 경계를 내 설명이 아니라 도구가 지켜주는 상태로 옮기는 것이다.

#API#전산#경계설계#백엔드#아키텍처