LobbyCase FilesArchives
© 2026 Seonu
Editorial x Engineering
Case File·2026-04-20·SOLVED

시니어 반려동물 통합관리 서비스

시니어 반려동물의 지출, 건강 관리, 음성 입력 기능을 통합 관리하는 웹 서비스. 인증 구조 설계와 배포 환경 트러블슈팅을 중심으로 개발을 진행했다.

Next.jsSpring SecurityJWTNginxReverse ProxyView Project
시니어 반려동물 통합관리 서비스

Contents

사건 발생

배포 이후 인증이 필요한 API 요청이 전면 실패했다. 로컬 환경에서는 정상적으로 동작했지만 운영 환경에서는 모든 인증 요청이 차단되었다. 요청은 Next.js Middleware, Spring Security, Nginx 세 레이어를 거쳐 처리되고 있었고 정확한 실패 지점을 특정하기 어려운 상태였다.

레이어별 추적

초기 로그 분석 결과 405 Method Not Allowed 오류가 Spring이 아닌 Next.js Middleware에서 발생하고 있음을 확인했다. getToken 기반 직접 검증 방식을 auth() 콜백 방식으로 변경하여 첫 번째 문제를 해결했다. 이후 HTTPS 환경에서 HTTP API를 직접 호출하며 mixed content 문제가 추가로 발생했다.

Reverse Proxy 구조 재설계

모든 API 요청을 Next.js 내부 proxy 레이어를 통해 전달하도록 구조를 재설계했다. 이를 통해 mixed content 문제를 해결하고 Authorization Header 흐름을 일관되게 통제할 수 있었다. 이후 Nginx 헤더 전달 설정과 Spring 인증 흐름을 재검증하며 운영 환경 인증 구조를 안정화했다.

Fig 1: Reverse Proxy 기반으로 재구성된 최종 인증 아키텍처.
Fig 1: Reverse Proxy 기반으로 재구성된 최종 인증 아키텍처.

음성 인식 이상 현상

STT 기반 음성 입력 기능에서는 한국어 발음 오인식 문제가 발생했다. '밥 두끼'가 '밤토끼'로, '세끼'가 '새끼'로 인식되는 현상이 반복되었고 특정 발음 패턴에서 경음 인식이 불안정하다는 점을 확인했다.

규칙 기반 보정

빈출 오인식 단어를 명시적으로 수집하여 normalize correction map을 구성했다. 또한 '끼'와 '기'처럼 한국어 경음 발음을 동일 패턴으로 처리하도록 보정 로직을 추가하여 입력 정확도를 개선했다.

Fig 2: normalize code
Fig 2: normalize code
DOCUMENT ID: CASE-0001
END OF FILE