에러 상황
기존에는 배포서버에 test.com:8080/users 와 같이 8080 포트를 열어놓고 거기로 바로 요청을 보냈다.
하지만 이번에 ssl 인증서 갱신하는김에 test.com/api/users 와 같은 식으로 nginx의 /api에 리버스 프록시를 걸어놓고 nginx에서 ssl을 통제시키는 방향으로 변경하기로 했다.
그래서 nginx.conf와 백엔드 환경변수 설정까지 끝냈는데 이런게 떴다.

원인 찾기
일단 보다시피 브라우저 콘솔에는 실패했다고만 표시되고 그 밖에 다른 로그는 없다.
Spring Boot 콘솔과 var/log/nginx/error.log에도 아무런 에러 로그가 뜨지 않았다.
단서를 찾은 방법은 배포서버 안에서 curl -i http://localhost:8080/ws 로 요청을 보내 봤던 것이다.
백엔드 인터셉터 단에서 어떤 주소로 요청이 들어오는지 로그를 찍어보기로 했다.

???
/ws 로 3번 요청을 보냈는데 백엔드에서는 /ws가 아닌 /api/error 로 들어왔다.
원인과 해결
원인은
spring.mvc.servlet.path=/api
에 있었다.
@RequestMapping("/users")를 자동으로 "/api/users"로 바꿔주는 환경설정인데, 알고보니 이게 웹소켓 핸들러까지 영향을 끼쳤던 것이다.
registry.addHandler(webSocketHandler, "/ws").setAllowedOrigins("*");
RequestMapping 뿐만 아니라 웹소켓 핸들러도 DispatcherServlet의 핸들링 범위에 포함되기 때문이었다.
그래서 결국 웹소켓에 연결하기 위해선 클라이언트가 /api/ws 로 요청을 줘야 했던거고 브라우저가 /ws로 요청하니까 자동으로 /api/error라는 괴상한 주소로 튕겨냈다 이렇게 볼 수 있을듯.
결론은 3시간넘게 날렸다. 끗.
교훈은 유료 챗 지피티라도 너무 믿지말자...
(제미나이로 바꿀지 진지하게 고민중임)
참고
“How-to” Guides
Spring Boot has no mandatory logging dependency, except for the Commons Logging API, which is typically provided by Spring Framework’s spring-jcl module. To use Logback, you need to include it and spring-jcl on the classpath. The recommended way to do th
docs.spring.io
'IT > Spring & Spring Boot' 카테고리의 다른 글
| [Spring Boot] 네이티브 쿼리 vs JPQL (0) | 2025.12.24 |
|---|---|
| [Spring Boot] 통합 회원관리 시스템(IAM) 구현 기록 (1) | 2025.11.26 |
| [Java] JVM이 죽었음다 ㅡㅡ; (Java heap space 에러) (1) | 2025.05.18 |
| [IT/일상/Java] MQTT 통신 코드 개선 일지 (feat. QueueChannel, Future) (1) | 2024.12.14 |
| [Spring Boot] RequestBody 필드에 값이 매핑되지 않는 문제 (2) | 2024.11.21 |