ABOUT

성능과 운영 안정성을 함께 끌어올리는 개발자입니다.

92% Positional Error Reduction
79% p95 Latency Improvement
90%+ Long Tasks Reduction

2022.02 · 한국장학재단

우수 멘티

한국장학재단 사회 리더 대학생 멘토링 IT

2022.10 · 동작구청

우수 인재상

동작구청 우수 SW 인재

2025.05 · (주) 그랩

프로그래밍 우수상

(주) 그랩 우수 프로그램 개발

2025.05 · AWSKRUG

AWS한국사용자모임 발표

AI agent 스크립트 튜닝 관련 발표

ComputerScience

Development

Engineering

Trouble Shooting

GUESTBOOK

첫 마음부터
함께 나누는 온기

방명록 작성하러 가기

SUBSCRIBE

최신소식을
편하게 만나보세요.

API (Application Programming Interface)

도입
“클라이언트와 서버가 약속한 계약(Contract)”이며, 실무에서는 성능, 보안, 확장성, 호환성을 동시에 책임지는 경계입니다.

신입 때 API는 “요청 보내면 JSON 오는 것”처럼 보이지만, 운영이 시작되면 API는 곧 서비스의 얼굴이자 팀 간 계약서가 됩니다. 프론트/모바일/파트너/내부 서비스가 모두 API에 의존하므로, API가 흔들리면 전체 시스템이 같이 흔들립니다.

그래서 API 설계는 단순히 엔드포인트를 만드는 일이 아니라, 변경 비용을 통제하고 장애를 줄이는 설계에 가깝습니다.

정의
서로 다른 소프트웨어가 상호작용하기 위한 규칙이며, 보통 요청(Request)과 응답(Response)의 형태/규칙을 의미합니다.

“계약”이라는 표현이 중요한 이유는, API가 단지 데이터 전달 통로가 아니라 입력 검증, 권한, 에러 규약, 버전 호환, 성능 특성까지 포함하기 때문입니다. 즉, API는 ‘기능’이 아니라 운영 가능한 시스템의 규격입니다.

핵심 메시지

“API는 기능을 노출하는 창구이자,
변경과 장애를 통제하는 경계다.”

- 계약이 명확하면 시스템은 오래 간다 -
API의 종류
실무에서는 “누가 쓰느냐”와 “어떤 스타일로 통신하느냐”로 API를 구분합니다.
구분 예시 실무 포인트
Public API 오픈 API 보안/쿼터/버전 호환이 핵심(외부 사용자, 변경 어려움)
Partner API 제휴사 연동 계약서/스펙 문서가 중요, 실패/재시도/멱등성 필수
Internal API MSA 간 통신 트레이싱/타임아웃/서킷브레이커 등 운영 설계가 핵심
스타일 REST / RPC / GraphQL 팀/도메인/트래픽 특성에 맞춰 선택(일관된 규약 유지)

💡 TIP / “API 문서”는 옵션이 아니라 필수

API는 결국 계약이기 때문에, 코드만 보고 맞추면 운영에서 깨집니다. 실무에서는 요청/응답 스키마, 상태코드, 에러 규약, 인증 방식, 제한(쿼터)까지 문서화(OpenAPI/Swagger 등)해두는 게 기본입니다.

 

API 설계의 기본 규칙
좋은 API는 “예쁘다”가 아니라 예측 가능하고 안전합니다.
1
자원(Resource) 중심의 URL /users/{id}, /orders/{id}처럼 “명사” 중심으로 설계
2
HTTP 메서드 의미 지키기 GET(조회), POST(생성), PUT/PATCH(수정), DELETE(삭제)
3
상태 코드 + 에러 규약 통일 “항상 200 + body에 error” 같은 방식은 운영/클라이언트 모두 힘들게 함
4
멱등성(Idempotency) 고려 재시도/중복 요청에도 결과가 안전하게 유지되도록 설계
실전 예시
회원 조회 API를 예로 “요청/응답/에러 규약”이 어떻게 계약이 되는지 보겠습니다.
// [요청] GET /v1/users/{userId}
GET /v1/users/42
Authorization: Bearer <access_token>

// [성공 응답] 200 OK
{
  "userId": 42,
  "name": "Jho",
  "email": "jho@example.com",
  "status": "ACTIVE",
  "createdAt": "2026-02-20T10:00:00Z"
}

// [실패 응답] 404 Not Found (에러 규약)
{
  "error": {
    "code": "USER_NOT_FOUND",
    "message": "사용자를 찾을 수 없습니다.",
    "traceId": "b8b1f6a2-...."
  }
}

여기서 중요한 건 “응답이 JSON이다”가 아니라, 클라이언트가 예측 가능한 규칙이 있다는 점입니다. 실패 시에는 상태 코드로 분류하고, body에는 code/message/traceId 같은 공통 규약을 유지하면 운영에서 디버깅이 빨라집니다.

👍 GOOD

  • 상태코드가 의미대로 동작(4xx/5xx 구분)
  • 에러 응답이 항상 동일한 구조
  • traceId로 로그/트레이싱과 연결 가능
  • 스키마가 문서(OpenAPI)로 고정됨

👎 BAD

  • 실패해도 무조건 200 + error 문자열
  • 에러 구조가 API마다 제각각
  • DB 컬럼명이 그대로 노출(내부 모델 누수)
  • 문서 없이 “감으로” 맞추는 통신
운영 관점에서 반드시 들어가는 요소
백엔드 API는 “요청/응답” 외에도 운영을 위한 규칙이 필요합니다.
요소 키워드 실무 의미
인증/인가 JWT/OAuth2 누가/무엇을 할 수 있는지(권한)까지 계약에 포함
버전 관리 /v1, 호환 클라이언트가 많을수록 “깨지지 않는 변경”이 중요
페이징/정렬 cursor/page 리스트 API는 반드시 확장(대량 데이터)을 고려해야 함
제한/보호 Rate Limit 남용/장애 확산 방지(429, 쿼터, 스로틀링)
관측 로그/트레이싱 traceId, latency, error rate를 설계에 포함

💡 TIP / “API는 항상 실패한다”를 기본값으로 두기

네트워크는 지연되고, 클라이언트는 재시도하며, 서버는 일시적으로 과부하가 옵니다. 그래서 API 설계에는 타임아웃, 재시도 전략, 멱등성 키, 표준 에러, 서킷브레이커 같은 “실패 대비”가 같이 들어가야 운영이 편해집니다.

 

가이드
신입이 “API를 설계한다”를 실무형으로 접근하는 순서
1
유스케이스부터 정의 “누가 무엇을 하려고 하는가?”(조회/생성/수정/삭제)
2
자원(리소스) 모델링 /users, /orders 같은 경계 정의
3
요청/응답/에러 규약 고정 검증 규칙, 상태코드, 에러 코드 체계
4
운영 요구사항 추가 인증/권한, rate limit, 로깅/트레이싱, 버전
5
문서(OpenAPI) + 테스트 계약 테스트로 “깨지는 변경”을 조기에 차단

✅ 핵심 요약

  • ✔️ API는 요청/응답만이 아니라 에러·권한·버전·운영 규칙까지 포함한 “계약”이다.
  • ✔️ 좋은 API는 예측 가능하고, 상태코드/에러 규약이 일관되며, 변경에 강하다.
  • ✔️ 실무에서 API는 항상 실패를 전제로 하므로 타임아웃·재시도·멱등성·관측을 설계에 포함해야 한다.
  • ✔️ “문서 + 테스트(OpenAPI/계약 테스트)”는 선택이 아니라, 운영에서 깨짐을 막는 안전장치다.
728x90