지난 글에서 우리는 API가 레스토랑의 ‘웨이터’와 같다고 배웠습니다.
그렇다면, 이 웨이터가 주문을 잘 받고 주방과 소통을 잘하는지 평가하려면 무엇을 확인해야 할까요?
단순히 주문한 음식을 제대로 가져다주는지만 보면 될까요?
아니면, 메뉴에 없는 음식을 주문했을 때 어떻게 대처하는지도 봐야 할까요?
이번 글에서는 QA가 Postman과 같은 도구를 사용하여 ‘API 테스트’를 수행할 때, 반드시 확인해야 할 핵심 체크리스트에 대해 알아보겠습니다.

Q. ‘API 테스트’의 가장 기본적인 검증은 무엇인가요?
‘HTTP 상태 코드’를 확인하는 것입니다.
‘HTTP 상태 코드’는 웨이터가 주문을 받은 후, 주방의 상황을 우리에게 알려주는 공식적인 ‘상태 메시지’와 같습니다.
핵심 확인 코드:
- 200 OK:
- 요청이 성공적으로 처리되었을 때를 의미합니다. (가장 기본적인 성공 케이스)
- 201 Created:
- 요청이 성공하여 새로운 데이터가 ‘생성’되었을 때를 의미합니다. (예: 회원가입 API 성공)
- 400 Bad Request:
- 요청 자체가 문법적으로 잘못되었을 때를 의미합니다. (예: 필수 값을 빠뜨리고 요청)
- 401 Unauthorized:
- 로그인(인증)이 필요한 API인데, 로그인하지 않고 요청했을 때를 의미합니다.
- 403 Forbidden:
- 로그인은 했지만, 해당 요청을 보낼 ‘권한’이 없을 때를 의미합니다. (예: 일반 사용자가 관리자 전용 API를 호출)
- 404 Not Found:
- 요청한 주소(URI)에 해당하는 리소스가 존재하지 않을 때를 의미합니다. (예: 존재하지 않는 게시글 조회)
- 500 Internal Server Error:
- 요청은 정상이지만, 서버 내부에서 예상치 못한 문제가 발생했을 때를 의미합니다.
Q. 응답(Response) 본문에서는 무엇을 검증해야 하나요?
서버가 돌려준 ‘데이터’가 정확한지 확인해야 합니다.
이는 ‘API 테스트 케이스’의 핵심적인 검증 부분입니다.
검증 항목:
- 데이터 구조(Schema) 검증:
- 응답으로 온 데이터의 JSON 구조가 API 명세서에 정의된 것과 일치하는지 확인합니다.
- 예:
userId필드가 오기로 약속했는데, 빠져있지는 않은가?userName이username으로 오타가 나지는 않았는가?
- 데이터 값(Value) 검증:
- 각 필드의 값이 요청한 내용에 맞게 정확하게 왔는지 확인합니다.
- 예:
userId가123인 사용자를 요청했는데, 정말123사용자의 정보가 왔는가?
- 데이터 형식(Type) 검증:
- 각 필드의 데이터 타입이 올바른지 확인합니다.
- 예:
age필드가 숫자(number)가 아닌 문자열(string)"25"로 오지는 않았는가?
Q. ‘예외 처리’는 ‘API 테스트’에서 왜 중요한가요?
‘해피 패스(Happy Path, 정상적인 경우)’만 테스트해서는 서비스의 안정성을 보장할 수 없기 때문입니다.
사용자는 항상 우리가 의도한 대로만 행동하지 않습니다.
잘못된 입력이나 비정상적인 요청에 대해, 우리 API가 얼마나 친절하고 안전하게 대응하는지를 검증하는 것이 매우 중요합니다.
‘API 테스트 케이스’ 예시:
- 필수 파라미터를 일부러 누락하고 요청 보내보기
- 파라미터에 아주 긴 값(10000자 이상)이나 특수문자를 넣어보기
- 숫자만 허용하는 필드에 문자를 넣어보기
- 권한 없는 사용자로 관리자 전용 API 호출해보기
기대 결과:
이런 경우, 시스템이 멈추거나 알 수 없는 오류를 뱉는 대신, “필수 값이 누락되었습니다.” 와 같이 명확하고 친절한 에러 메시지와 함께 4xx 계열의 상태 코드를 반환해야 합니다.
결론: 보이지 않는 곳까지 꼼꼼하게
‘API 테스트’는 단순히 성공(200 OK) 응답을 확인하는 것이 아닙니다.
이는 ‘HTTP 상태 코드’, 응답 데이터의 정확성, 그리고 온갖 비정상적인 상황에 대한 ‘예외 처리’까지 꼼꼼하게 검증하는 종합적인 품질 활동입니다.
Postman과 같은 도구를 활용하여 이러한 ‘API 테스트 케이스’들을 체계적으로 관리하고 자동화할 때, QA는 서비스의 보이지 않는 심장부까지 튼튼하게 만드는 핵심적인 역할을 수행할 수 있습니다.