시스템 설계 · 중급
API 버저닝(Versioning)을 적용하는 주요 목적은 무엇이며, URI 버저닝, 헤더 버저닝, 쿼리 파라미터 버저닝 방식의 장단점을 비교하고, 실제 프로젝트에서 어떤 상황에 적합한지 설명해주세요.
힌트 · 버저닝은 하위 호환성 유지를 위해 필요하며, 각 방식은 가독성, 유연성, 캐싱 등의 측면에서 장단점이 다릅니다.
호환성 유지클라이언트 영향 최소화URI 버저닝헤더 버저닝쿼리 파라미터 버저닝
모범답안
API 버저닝의 주요 목적은 기존 클라이언트 애플리케이션에 영향을 주지 않으면서 API를 발전시키는 것입니다. 하위 호환성을 유지하여 클라이언트가 갑작스러운 변경으로 인해 작동을 멈추는 것을 방지합니다.
URI 버저닝은 직관적이지만 URI 구조가 복잡해지고, 캐싱이 어려워질 수 있습니다. 헤더 버저닝은 깔끔하지만, 헤더를 모르는 클라이언트는 사용하기 어렵습니다. 쿼리 파라미터 버저닝은 간단하지만, URI가 지저분해지고 가독성이 떨어집니다.
예를 들어, 모바일 앱과 같이 다양한 클라이언트가 존재하는 경우, URI 버저닝을 통해 명확하게 버전을 구분하는 것이 좋습니다. 내부 API의 경우, 헤더 버저닝을 사용하여 깔끔하게 관리할 수 있습니다. 간단한 API의 경우, 쿼리 파라미터 버저닝을 사용할 수도 있습니다. 중요한 것은 각 방식의 장단점을 이해하고 프로젝트의 특성에 맞게 선택하는 것입니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 API 설계 면접 질문
- RESTful API의 핵심 원칙 중 하나인 '무상태성(Statelessness)'이 무엇인지 설명하고, API 설계 시 무상태성을 유지하는 것이 왜 중요한지 그 장점을 언급해주세요.
- 운영 중인 API의 변경이 불가피할 때, API 버전 관리가 왜 필요하며, 일반적으로 사용되는 버전 관리 방식에는 어떤 것들이 있는지 간략히 설명해주세요.
- RESTful API 설계 시 자원(Resource)을 어떻게 정의하고 URI를 구성하는 것이 좋은지 구체적인 예시를 들어 설명하고, Statelessness 원칙을 실제 API 설계에 어떻게 적용할 수 있는지 설명해주세요.
- 일관성 있는 API 에러 응답 설계의 중요성은 무엇이며, HTTP 상태 코드와 에러 응답 본문(Error Response Body)을 어떻게 구성하여 클라이언트에게 유용하고 명확한 정보를 제공할 수 있는지 설명해주세요.
- 대량의 데이터를 효율적으로 조회하는 API를 설계할 때, 페이지네이션(Pagination), 필터링(Filtering), 정렬(Sorting) 기능을 어떻게 구현하는 것이 일반적이며, 각 기능 설계 시 고려해야 할 사항은 무엇인지 설명해주세요.
- API 설계에서 멱등성(Idempotency)이 중요한 이유는 무엇이며, POST, PUT, DELETE와 같은 HTTP 메서드를 사용할 때 멱등성을 어떻게 보장할 수 있는지 구체적인 사례를 들어 설명해주세요.