Spring Boot 404 발생 원인 정리 (React는 있는데 서버가 404인 경우)

2026. 1. 28. 01:25Java, Spring

반응형

상황 요약

React 페이지는 정상적으로 존재하고 화면도 뜸
React에서 API 요청(fetch / axios)을 보냄
서버 로그에서 404 NOT_FOUND 발생

서버 로그 핵심

DispatcherServlet : GET "/admin/api/fare-result/list?...”
 SimpleUrlHandlerMapping : Mapped to ResourceHttpRequestHandler [classpath [static/]]
 ResourceHttpRequestHandler : Resource not found DispatcherServlet : Completed 404 NOT_FOUND Mapped to BasicErrorController#error

이 로그가 의미하는 것

1️⃣ 요청은 서버까지 정상 도달함

 
JwtAuthenticationFilter : authenticated user ...
  • JWT 인증 성공
  • Security 문제 아님

2️⃣ Spring MVC가 처리할 컨트롤러를 못 찾음

 
Mapped to ResourceHttpRequestHandler [classpath [static/]]

Spring의 판단:

“이 URL을 처리할 @Controller / @RestController가 없네?
그럼 정적 리소스(static 파일) 요청인가 보다.”

하지만
static/ 경로에도 해당 파일이 없음 → 404


3️⃣ 최종적으로 Spring Boot 기본 에러 컨트롤러가 처리

 
Mapped to BasicErrorController#error
  • BasicErrorController는 Spring Boot가 자동으로 제공
  • 개발자가 구현한 게 아님
  • 자바 기본도 아님
  • 에러 발생 시 마지막으로 응답을 만들어주는 컨트롤러

그래서 결론은?

✅ React 페이지는 존재함

✅ React에서 API 요청도 정상적으로 보냄

서버에 해당 API URL을 처리하는 컨트롤러가 없음

즉,

React 페이지 404 ❌
서버 API 요청(fetch)이 404 ⭕


가장 흔한 원인 체크리스트

1️⃣ 컨트롤러 매핑 자체가 없음

 
@GetMapping("/admin/api/cal-result/list")

2️⃣ 클래스 + 메서드 매핑 불일치

 
@RequestMapping("/admin/api/cal-result") @GetMapping("/lists") // list 아님

3️⃣ context-path 중복

  • server.servlet.context-path=/admin
  • 그런데 프론트에서 /admin/api/...로 또 요청함

→ 실제 경로 불일치


4️⃣ Controller 스캔 안 됨

  • 패키지가 @SpringBootApplication 하위 아님
  • @RestController 누락

정상일 때 나와야 하는 로그

 
Mapped to com.xxx.FareResultController#list

👉 이 로그가 없고
👉 ResourceHttpRequestHandler로 간다면
무조건 컨트롤러 매핑 문제


한 줄 요약

React는 있는데 fetch가 404였다 =
서버에 그 API를 처리하는 컨트롤러가 없거나
URL 매핑이 서로 안 맞았다

 

반응형