REST API 주니어 트러블슈팅 면접

REST API 주니어 (1~3년) 트러블슈팅 5문항 조회수 25 · 2026-08-16 (일) 22:11:04
1 HTTP 상태 코드
Easy

Q. 클라이언트에서 POST 요청으로 사용자 등록 API를 호출했는데 500 Internal Server Error가 반환됩니다. 로그를 확인해보니 데이터베이스 연결은 정상이고, 요청 바디에 이메일 필드가 누락되어 있었습니다. 이 상황에서 어떤 문제가 있고, 어떻게 해결해야 할까요?

500 에러는 서버 내부 오류를 의미하는데, 클라이언트가 잘못된 요청을 보낸 경우에 적절한 상태 코드인지 생각해보세요.

A. 모범답안

현재 문제는 클라이언트의 잘못된 요청에 대해 500 에러를 반환하고 있다는 점입니다. 필수 필드 누락은 클라이언트 오류이므로 400 Bad Request를 반환해야 합니다. 서버 코드에서 요청 데이터 검증 로직을 추가하여 필수 필드가 누락된 경우 적절한 에러 메시지와 함께 400 상태 코드를 반환하도록 수정해야 합니다. 또한 예외 처리를 통해 예상치 못한 에러만 500으로 반환되도록 해야 합니다. 재발 방지를 위해 API 문서에 필수 필드를 명확히 기재하고, 입력 값 검증 테스트 케이스를 추가해야 합니다.

핵심 포인트
  • • 클라이언트 오류는 4xx, 서버 오류는 5xx 상태 코드 사용
  • • 요청 데이터 검증 로직 추가 필요
  • • 적절한 에러 메시지와 상태 코드 반환
답변에 넣으면 좋은 키워드
400 Bad Request 입력 검증 예외 처리 HTTP 상태 코드 에러 핸들링
실무에서는

API 개발 시 적절한 HTTP 상태 코드 사용은 클라이언트 개발자가 오류 원인을 빠르게 파악하고 대응할 수 있게 합니다.

Follow-up 질문

요청 검증 시 여러 필드에서 동시에 오류가 발생한 경우, 응답 바디를 어떻게 구성하는 것이 좋을까요?

2 API 응답 지연
Medium

Q. 상품 목록 조회 API가 평소에는 200ms 이내로 응답하는데, 오늘 아침부터 갑자기 5초 이상 걸리고 있습니다. 데이터베이스 연결은 정상이고, 서버 CPU/메모리 사용률도 정상 범위입니다. 어떤 순서로 원인을 분석하고 해결하시겠습니까?

데이터베이스 연결은 정상이지만, 쿼리 실행 자체의 성능이나 데이터 양의 변화를 확인해보세요.

A. 모범답안

먼저 데이터베이스 슬로우 쿼리 로그를 확인하여 실행 시간이 긴 쿼리를 식별합니다. 상품 테이블의 데이터 증가량을 확인하고, 인덱스가 제대로 적용되어 있는지 EXPLAIN 명령어로 쿼리 실행 계획을 분석합니다. 만약 인덱스가 없거나 Full Table Scan이 발생한다면 적절한 인덱스를 추가합니다. 또한 페이지네이션이 적용되어 있는지 확인하고, 없다면 LIMIT/OFFSET을 적용하여 한 번에 조회하는 데이터 양을 제한합니다. 해결 후에는 API 응답 시간 모니터링을 설정하여 성능 저하를 조기에 감지할 수 있도록 합니다.

핵심 포인트
  • • 슬로우 쿼리 로그 확인 및 쿼리 실행 계획 분석
  • • 인덱스 적용 여부 확인 및 추가
  • • 페이지네이션을 통한 데이터 조회량 제한
답변에 넣으면 좋은 키워드
슬로우 쿼리 인덱스 EXPLAIN 페이지네이션 Full Table Scan 모니터링
실무에서는

데이터가 증가하면서 초기에는 문제없던 쿼리가 성능 저하를 일으키는 경우가 자주 발생하며, 인덱스와 페이지네이션이 기본적인 해결책입니다.

Follow-up 질문

인덱스를 추가했는데도 성능이 개선되지 않는다면 어떤 추가 조치를 취할 수 있을까요?

3 CORS 오류
Easy

Q. 프론트엔드 개발자가 로컬 환경(localhost:3000)에서 개발 서버(api.example.com)의 로그인 API를 호출했는데 브라우저 콘솔에 CORS 에러가 발생했다고 합니다. Postman에서는 정상 동작한다고 하는데, 왜 이런 현상이 발생하며 어떻게 해결해야 할까요?

브라우저와 Postman의 보안 정책 차이를 생각해보세요.

A. 모범답안

브라우저는 보안상의 이유로 다른 출처(origin)의 리소스 접근을 제한하는 동일 출처 정책(Same-Origin Policy)을 적용하지만, Postman은 이 정책을 적용하지 않기 때문에 차이가 발생합니다. 해결하려면 서버에서 CORS 헤더를 설정해야 합니다. Access-Control-Allow-Origin 헤더에 허용할 출처를 명시하고, Access-Control-Allow-Methods에 허용할 HTTP 메서드를, Access-Control-Allow-Headers에 허용할 헤더를 설정합니다. 개발 환경에서는 localhost:3000을 허용하고, 프로덕션에서는 실제 프론트엔드 도메인만 허용하도록 환경별로 설정을 분리해야 합니다.

핵심 포인트
  • • 브라우저의 동일 출처 정책으로 인한 CORS 에러
  • • 서버에서 CORS 헤더 설정 필요
  • • 환경별로 허용 출처를 다르게 설정
답변에 넣으면 좋은 키워드
CORS Same-Origin Policy Access-Control-Allow-Origin Preflight 브라우저 보안
실무에서는

프론트엔드와 백엔드가 분리된 현대 웹 개발에서 CORS 설정은 필수이며, 보안을 위해 허용 출처를 명확히 관리해야 합니다.

Follow-up 질문

Preflight 요청이란 무엇이며, 언제 발생하나요?

4 인증/인가
Medium

Q. 사용자가 로그인 후 마이페이지에 접근하려고 하는데 401 Unauthorized 에러가 발생합니다. 로그를 확인해보니 JWT 토큰은 요청 헤더에 포함되어 있고, 토큰 서명 검증도 통과했지만 인증에 실패했습니다. 어떤 원인들을 확인해봐야 하며, 각각 어떻게 해결할 수 있을까요?

토큰이 유효하더라도 토큰에 담긴 정보나 토큰의 유효 기간을 확인해보세요.

A. 모범답안

첫 번째로 토큰의 만료 시간(exp claim)을 확인하여 토큰이 만료되었는지 체크합니다. 만료되었다면 클라이언트에서 리프레시 토큰으로 새 액세스 토큰을 발급받도록 해야 합니다. 두 번째로 토큰의 페이로드에 담긴 사용자 정보(user_id 등)가 실제 데이터베이스에 존재하는지 확인합니다. 사용자가 삭제되었거나 비활성화된 경우 토큰은 유효하지만 인증에 실패할 수 있습니다. 세 번째로 서버의 시스템 시간이 정확한지 확인합니다. 시간이 맞지 않으면 토큰 유효성 검증에 문제가 생길 수 있습니다. 재발 방지를 위해 토큰 검증 로직에 명확한 에러 메시지를 추가하여 어떤 이유로 인증에 실패했는지 로그에 기록해야 합니다.

핵심 포인트
  • • 토큰 만료 시간 확인 및 리프레시 토큰 활용
  • • 토큰 페이로드의 사용자 정보 유효성 검증
  • • 명확한 에러 로그로 원인 파악 용이하게 구성
답변에 넣으면 좋은 키워드
JWT 토큰 만료 exp claim 리프레시 토큰 페이로드 검증 401 Unauthorized
실무에서는

JWT 기반 인증에서 토큰 만료와 사용자 상태 변경을 적절히 처리하지 않으면 보안 문제나 사용자 경험 저하가 발생할 수 있습니다.

Follow-up 질문

액세스 토큰과 리프레시 토큰의 적절한 만료 시간은 각각 어느 정도로 설정하는 것이 좋을까요?

5 데이터 정합성
Medium

Q. 주문 생성 API에서 동시에 같은 상품에 대한 주문이 여러 건 들어왔을 때, 재고가 10개인데 총 15개가 주문되는 문제가 발생했습니다. 각 요청은 재고를 확인하고 차감하는 로직을 거치는데 왜 이런 현상이 발생하며, 어떻게 해결할 수 있을까요?

여러 요청이 동시에 같은 데이터를 읽고 쓸 때 발생하는 문제를 생각해보세요.

A. 모범답안

이 문제는 동시성 제어가 되지 않아 발생하는 Race Condition입니다. 여러 요청이 동시에 재고를 조회하면 모두 10개로 읽고, 각각 차감 연산을 수행하여 재고가 음수가 되거나 초과 판매가 발생합니다. 해결 방법으로는 데이터베이스의 비관적 락(SELECT FOR UPDATE)을 사용하여 재고 조회 시 해당 row를 잠그는 방법이 있습니다. 또는 낙관적 락(버전 관리)을 사용하여 업데이트 시 버전을 확인하고 충돌 시 재시도하는 방법도 있습니다. 더 간단한 방법으로는 UPDATE 쿼리에서 WHERE 조건에 재고 체크를 포함시켜(WHERE stock >= 주문수량) 원자적으로 처리하고, 영향받은 행이 0이면 재고 부족으로 처리할 수 있습니다. 재발 방지를 위해 통합 테스트에서 동시성 시나리오를 테스트해야 합니다.

핵심 포인트
  • • Race Condition으로 인한 데이터 정합성 문제
  • • 비관적 락, 낙관적 락, 또는 원자적 UPDATE로 해결
  • • 동시성 테스트를 통한 재발 방지
답변에 넣으면 좋은 키워드
Race Condition 동시성 제어 비관적 락 낙관적 락 SELECT FOR UPDATE 트랜잭션
실무에서는

커머스 시스템에서 재고 관리나 포인트 차감 등 동시성 제어가 필요한 상황은 매우 흔하며, 적절한 락 전략이 필수적입니다.

Follow-up 질문

비관적 락과 낙관적 락의 장단점은 무엇이며, 어떤 상황에 각각 적합한가요?

댓글 0

로그인 후 댓글을 작성할 수 있습니다.

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!