기초 개념, 기술 면접 대비

API 설계 면접 퀴즈

좋은 API의 원칙과 패턴

RESTful API, GraphQL, gRPC 등 API 설계 원칙과 베스트 프랙티스를 학습하세요.

로그인 없이 풀어보기
20개 문제, 무료

학습할 핵심 개념

RESTful 원칙과 리소스 설계
HTTP 메서드와 상태 코드
API 버전 관리 전략
GraphQL 스키마 설계
gRPC와 Protocol Buffers
API 문서화

핵심 개념 미리보기

API 설계 면접에서 꼭 나오는 개념을 미리 확인하세요

REST API 설계 원칙

핵심

무상태(stateless)가 REST 의 핵심 제약입니다. 서버가 이전 요청을 기억하지 않으므로 요청 하나에 필요한 정보가 다 들어 있어야 하고, 그래서 서버를 늘리기 쉽습니다.

REST API 설계 원칙

핵심 원칙

  1. 리소스 중심 URL: /users/123 (O) vs /getUser?id=123 (X)
  2. HTTP 메서드 활용: GET=조회, POST=생성, PUT=수정, DELETE=삭제
  3. 적절한 상태 코드: 200, 201, 400, 401, 404, 500

URL 설계 규칙

동작을 주소에 넣으면 동작마다 주소가 늘어나고 자원과 메서드로 나누면 늘지 않는다 동작을 주소에 넣으면 POST /createOrder POST /updateOrder POST /cancelOrder POST /getOrderList 동작이 늘면 주소가 늘어난다 자원과 메서드로 나누면 /orders POST 만들기, GET 목록 /orders/1 GET 하나, PATCH 고치기, DELETE 지우기 주소는 무엇인지를 가리키고 메서드가 무엇을 할지를 가리킨다
좋은 예나쁜 예
GET /usersGET /getUsers
POST /usersPOST /createUser
GET /users/123/ordersGET /getUserOrders?id=123

자원으로 안 떨어지는 것

대부분은 자원과 메서드로 표현됩니다. 그런데 안 떨어지는 것이 있습니다.

하려는 것어떻게 두나
로그인세션이라는 자원을 만든다고 본다
검색조건을 질의 문자열로 받는 조회다
여러 건을 한 번에 처리그 묶음을 자원으로 만든다
상태를 바꾸는 동작상태를 자원의 한 필드로 본다

억지로 맞추지 않아도 됩니다. 대부분이 규칙을 따르고 몇 개가 예외인 것이, 규칙을 지키려고 이상한 주소를 만드는 것보다 낫습니다.

목록 응답에서 자주 빠지는 것

목록은 만들기 쉬워서 대충 넘어가기 쉽습니다.

상한이 없다: 클라이언트가 보낸 개수를 그대로 믿으면 한 번에 전부 가져간다
다음 페이지를 알 방법이 없다: 응답에 다음 위치를 담아야 한다
정렬이 정해져 있지 않다: 순서가 매번 달라 페이지가 어긋난다

셋째가 가장 늦게 발견됩니다. 정렬을 지정하지 않으면 저장소가 편한 순서로 주고, 그 순서는 데이터가 바뀌면 달라집니다.

실무 포인트

  • 버전 관리: /api/v1/users (URL 방식이 가장 보편적)
  • 페이지네이션: ?page=1&limit=20 또는 커서 기반
  • 에러 응답 표준화: { error: string, code: string }
면접에서 이렇게 나옵니다
  • Q.좋은 REST API 설계 원칙은?
  • Q.REST vs GraphQL 차이와 선택 기준은?
  • Q.API 버저닝 전략을 설명해주세요

인증과 인가

핵심

인증과 인가

차이점

누구인지 확인하는 것과 그것을 할 수 있는지 확인하는 것은 다른 검사다 두 질문 누구인가. 로그인할 때 한 번 이것을 할 수 있나. 요청마다 토큰이 진짜인지 본다 그 자원의 주인이 맞는지 본다 로그인했는지만 보면 남의 것을 볼 수 있다 주문 번호를 바꿔 부르면 남의 주문이 나오는 사고가 그것이다 그래서 뒤쪽은 요청마다, 그리고 서버에서 해야 한다 화면에서 버튼을 숨기는 것은 둘 중 어느 것도 아니다
구분인증 (AuthN)인가 (AuthZ)
질문누구인가?뭘 할 수 있는가?
시점로그인 시요청마다
수단ID/PW, OAuth, JWTRBAC, ABAC, ACL

API 인증 방식

방식특징적합 상황
API Key단순, 서비스 간내부 서비스
Bearer TokenJWT 기반웹/모바일 앱
OAuth 2.0위임 인증소셜 로그인, 외부 API

인가에서 실제로 나는 사고

인증은 대개 라이브러리가 해 줍니다. 사고는 거의 인가에서 납니다.

남의 자원을 번호만 바꿔 부르는 것이 가장 흔합니다. 로그인한 사용자인지만 확인하고 그 주문이 그 사용자 것인지는 확인하지 않는 경우입니다. 요청마다 자원의 주인을 대조해야 막힙니다.

권한을 화면에서 거르는 것도 흔합니다. 버튼을 숨겨도 주소를 아는 사람은 그대로 부릅니다. 화면은 안내이고 통제는 서버에 있어야 합니다.

토큰에 담긴 권한이 낡는 것이 세 번째입니다. 토큰에 역할을 담아 두면 권한을 뺏어도 만료 전까지 그대로 통합니다. 그래서 중요한 권한은 토큰이 아니라 요청 시점에 확인합니다.

최소 권한을 실제로 지키는 방법

원칙만으로는 지켜지지 않습니다. 기본값을 거절로 두는 것이 실제로 듣습니다.

기본값결과
명시하지 않으면 허용새 기능이 늘 열린 채로 나간다
명시하지 않으면 거절새 기능은 막힌 채로 나가고 필요한 것만 연다

뒤쪽이면 실수가 막힌 쪽으로 납니다. 열린 채로 나가는 것보다 낫습니다.

실무 포인트

  • 최소 권한 원칙: 필요한 권한만 부여
  • Access Token + Refresh Token 패턴 권장
  • 면접 빈출: "OAuth 2.0 흐름을 설명해주세요"
면접에서 이렇게 나옵니다
  • Q.인증(Authentication)과 인가(Authorization) 차이는?
  • Q.OAuth 2.0 동작 흐름을 설명해주세요
  • Q.API Key vs JWT vs OAuth 각각 언제 쓰나요?

HTTP 상태 코드와 에러 응답 설계

핵심

HTTP 상태 코드와 에러 응답 설계

코드 선택 기준

상태 코드는 잘못이 보낸 쪽에 있는지 우리 쪽에 있는지를 먼저 가른다 먼저 가르는 것 4xx 보낸 쪽이 고쳐야 한다 5xx 우리가 고쳐야 한다 고치지 않으면 또 실패한다 그대로 다시 보내면 된다 이 구분이 클라이언트의 재시도 판단을 정한다 우리 잘못을 4xx 로 주면 클라이언트가 스스로 멈춘다 그다음에 어느 4xx 인지 고른다. 없다 401 403 409 429 본문에는 무엇이 왜 틀렸고 어디를 고치면 되는지 적는다
코드언제 쓰나흔한 오용
200, 201, 204성공, 생성, 본문 없음실패인데 200 + 본문 에러
400형식과 문법 오류검증 실패를 전부 400으로
401, 403미인증과 권한 없음둘을 뒤섞음
404, 409없음과 상태 충돌중복 생성에 400
422형식은 맞지만 처리 불가400과 혼용
429요청 한도 초과503으로 대체
500, 503서버 결함과 일시 과부하클라이언트 잘못을 500으로

에러 본문 표준화

{
  "type": "/errors/insufficient-balance",
  "title": "잔액이 부족합니다",
  "status": 409,
  "detail": "요청 12000원, 잔액 3500원"
}

기계가 분기할 값(type)과 사람이 읽을 문장(title, detail)을 분리한다. 필드 검증 오류는 어느 필드가 왜 틀렸는지 배열로 함께 준다.

누구 잘못인지를 코드로 말한다

코드를 고르는 기준은 부르는 쪽이 다시 시도해도 되는가입니다.

상황다시 시도하면코드의 앞자리
요청이 잘못됐다똑같이 실패한다4로 시작
서버가 일시적으로 못 했다성공할 수 있다5로 시작
권한이 없다로그인해도 안 될 수 있다4로 시작하되 구분해서

셋째가 자주 뒤섞입니다. 로그인하지 않은 것과 로그인했지만 권한이 없는 것은 다른 응답이고, 앞은 로그인 화면으로 보내고 뒤는 보내면 안 됩니다. 같은 코드로 주면 무한 반복이 생깁니다.

본문이 코드보다 중요하다

코드는 분류이고, 무엇을 고쳐야 하는지는 본문이 말합니다.

기계가 분기할 수 있는 짧은 식별자를 넣는다
사람에게 보여 줄 문장은 별도 필드로 둔다
어느 필드가 왜 틀렸는지 목록으로 준다

둘째가 섞이면 곤란해집니다. 사람용 문장을 코드에서 비교하게 되고, 그러면 문구를 못 고칩니다. 그리고 서버 내부 사정은 본문에 담지 않습니다. 그것이 그대로 공격 정보가 됩니다.

실무 포인트

  • 200 고정 + 본문 에러코드 방식은 프록시와 모니터링이 전부 성공으로 집계해 장애 감지를 늦춘다
  • 5xx는 재시도 대상, 4xx는 재시도 무의미하다. 상태 코드가 클라이언트 재시도 정책의 입력값이다
  • 권한 없는 리소스의 존재 여부를 숨기려면 403 대신 404를 주는 선택도 있다
  • 내부 예외 메시지와 스택트레이스를 응답에 넣지 않는다
면접에서 이렇게 나옵니다
  • Q.모든 응답을 200으로 주고 본문에 에러 코드를 담는 API의 문제는 무엇인가요?
  • Q.400과 422, 401과 403을 각각 어떤 기준으로 구분하나요?
  • Q.클라이언트가 자동 재시도를 판단하려면 서버가 무엇을 제공해야 하나요?

더 많은 개념과 문제는 가입 후 이용할 수 있어요

먼저 5문제 맛보기

API 설계 면접 빈출 질문

실제 면접에서 자주 나오는 질문들입니다

Q.

좋은 REST API 설계 원칙은?

REST API 설계 원칙 개념 정리 보기
Q.

REST vs GraphQL 차이와 선택 기준은?

REST API 설계 원칙 개념 정리 보기
Q.

API 버저닝 전략을 설명해주세요

REST API 설계 원칙 개념 정리 보기
Q.

HATEOAS는 왜 실무에서 잘 쓰이지 않나요?

REST API 설계 원칙 개념 정리 보기
Q.

인증(Authentication)과 인가(Authorization) 차이는?

인증과 인가 개념 정리 보기
Q.

OAuth 2.0 동작 흐름을 설명해주세요

인증과 인가 개념 정리 보기
Q.

API Key vs JWT vs OAuth 각각 언제 쓰나요?

인증과 인가 개념 정리 보기
Q.

이런 점이 좋아요

좋은 API 설계 능력

팀 협업 향상

유지보수 용이성

지금 바로 시작하세요

무료로 API 설계 퀴즈를 풀고, AI 오답 분석으로 실력을 키우세요.