Open Tae4an opened 1 week ago
spring:
web:
resources:
static-locations: classpath:/static/
➡️ 실패: SPA 라우팅이 작동하지 않고 404 에러 발생
@Configuration
public class WebConfig implements WebMvcConfigurer {
@GetMapping("/**")
public String forward() {
return "forward:/index.html";
}
}
➡️ 실패: 무한 리다이렉션 발생, API 요청도 모두 index.html로 라우팅됨
@GetMapping("/{path:^(?!api|static).*}")
➡️ 실패: 올바르지 않은 패턴 문법으로 인한 에러 발생
문제의 핵심은 React Router의 클라이언트 사이드 라우팅과 Spring Boot의 서버 사이드 라우팅이 충돌하는 것이었습니다.
@Controller
public static class ReactController {
@GetMapping(value = {
"/",
"/{x:[\\w\\-]+}",
"/{x:^(?!api$).*$}/**/{y:[\\w\\-]+}"
})
public String getIndex() {
return "/index.html";
}
}
✅ 성공: API 요청은 제외하고, SPA 라우팅만 정확하게 처리
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
web:
resources:
chain:
strategy:
content:
enabled: true
paths: /**
✅ 성공: 정적 리소스가 정상적으로 로드되고 캐싱도 적절히 처리
task copyReactBuild(type: Copy) {
dependsOn buildReact
from("${frontDir}/build") {
include "**/*"
}
into "${projectDir}/src/main/resources/static"
}
✅ 성공: React 빌드 결과물이 정확한 위치에 복사되어 서빙됨
패턴 매칭 전략 변경
리소스 체인 전략 적용
빌드 프로세스 안정화
이런 방식으로 해결하니 무한 리다이렉션 문제도 해결되고, SPA 라우팅도 정상적으로 작동하게 되었습니다! 🎉
/api/**
패턴으로 시작하도록 구성해야 합니다
📌 문제 정의
현재 상황
증상
InternalResourceView.renderMergedOutputModel
메서드에서 무한 루프 발생에러 로그
영향
환경