시스템 설계 · 중급
RESTful API 설계 시 자원(Resource)을 어떻게 정의하고 URI를 구성하는 것이 좋은지 구체적인 예시를 들어 설명하고, Statelessness 원칙을 실제 API 설계에 어떻게 적용할 수 있는지 설명해주세요.
힌트 · 자원은 명사형으로, 계층적 구조를 가지며, 상태 비저장은 서버 확장성과 클라이언트 독립성을 높입니다.
명사계층 구조HTTP 메서드StatelessJWT
모범답안
RESTful API 설계 시 자원은 명사로 표현하고 계층 구조를 반영하는 것이 좋습니다. 예를 들어, 쇼핑몰 API에서 상품 목록은 /products, 특정 상품은 /products/{product_id}와 같이 URI를 구성할 수 있습니다.
Statelessness 원칙은 각 요청이 독립적으로 처리되도록 서버에 클라이언트의 상태를 저장하지 않는 것을 의미합니다. 이를 위해 JWT(JSON Web Token)를 활용할 수 있습니다. 클라이언트가 로그인하면 서버는 JWT를 발급하고, 클라이언트는 이후 요청 시 JWT를 포함하여 인증합니다. 서버는 JWT를 검증하여 사용자를 식별하고, 별도의 세션 정보를 관리하지 않아도 됩니다. 이렇게 하면 서버의 확장성을 높이고, 클라이언트의 독립성을 보장할 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 API 설계 면접 질문
- API 설계에서 '멱등성(Idempotence)'이란 무엇이며, 멱등성이 보장되어야 하는 HTTP 메서드와 그 이유에 대해 설명해주세요.
- RESTful API의 핵심 원칙 중 하나인 '무상태성(Statelessness)'이 무엇인지 설명하고, API 설계 시 무상태성을 유지하는 것이 왜 중요한지 그 장점을 언급해주세요.
- 운영 중인 API의 변경이 불가피할 때, API 버전 관리가 왜 필요하며, 일반적으로 사용되는 버전 관리 방식에는 어떤 것들이 있는지 간략히 설명해주세요.
- API 버저닝(Versioning)을 적용하는 주요 목적은 무엇이며, URI 버저닝, 헤더 버저닝, 쿼리 파라미터 버저닝 방식의 장단점을 비교하고, 실제 프로젝트에서 어떤 상황에 적합한지 설명해주세요.
- 일관성 있는 API 에러 응답 설계의 중요성은 무엇이며, HTTP 상태 코드와 에러 응답 본문(Error Response Body)을 어떻게 구성하여 클라이언트에게 유용하고 명확한 정보를 제공할 수 있는지 설명해주세요.
- 대량의 데이터를 효율적으로 조회하는 API를 설계할 때, 페이지네이션(Pagination), 필터링(Filtering), 정렬(Sorting) 기능을 어떻게 구현하는 것이 일반적이며, 각 기능 설계 시 고려해야 할 사항은 무엇인지 설명해주세요.