Next.js에서 발생한 404 오류와 해결책 - 로드밸런싱 환경에서의 문제
문제 상황
최근 Next.js 기반 프로젝트에서 특정 URL 요청 시 404 오류가 발생하는 문제를 경험함. 특히 _next/data/[버전]
형태의 URL에서 이러한 문제가 자주 발생함. 흥미로운 점은 같은 서버에 보내는 요청이라도 일부는 성공하고 일부는 실패함.
원인 분석
문제의 원인은 Next.js의 서버 사이드 렌더링 아키텍처와 로드밸런싱 환경 사이의 충돌에 있었음.
Next.js는 서버에서 데이터와 상태를 관리하는 특성이 있음. 그런데 로드밸런서를 통해 여러 서버로 요청이 분산되는 환경에서는 다음과 같은 시나리오가 발생함:
- 사용자가 페이지 A를 요청해서 서버 1로 접속
- 이어서 페이지 A의 데이터를 요청할 때 서버 2로 라우팅됨
- 서버 2는 이전 요청(서버 1에서 처리된)에 대한 상태 정보가 없어서 404 오류 반환
이는 Next.js의 서버 상태 관리 방식과 여러 서버로 분산되는 로드밸런싱 환경이 충돌하는 전형적인 사례임.
해결책
단기 해결책: Sticky Session 적용
- Sticky Session은 "한 사용자는 항상 같은 서버로 연결"되도록 보장하는 로드밸런싱 전략임
- 이 설정을 통해 사용자의 모든 요청이 처음 연결된 동일한 서버로 계속 전달됨
- 세션 쿠키나 IP 기반으로 사용자를 식별하여 동일한 서버로 라우팅함

AWS ELB, NGINX 등 대부분의 로드밸런서는 Sticky Session 기능을 제공하므로 비교적 간단하게 구현할 수 있음.
장기적 해결책: 공유 스토리지 활용
- 모든 서버가 하나의 공유 저장공간(볼륨)을 사용하도록 설정
- Kubernetes(EKS)와 같은 환경에서는 PersistentVolume을 통해 구현 가능
- Redis나 Memcached 같은 분산 캐시를 활용하여 서버 간 상태 공유

이렇게 하면 사용자가 어떤 서버로 연결되든 동일한 데이터에 접근할 수 있어 404 오류 문제를 근본적으로 해결할 수 있음.
결론
Next.js와 같은 서버 사이드 렌더링 프레임워크를 로드밸런싱 환경에서 운영할 때는 서버 간 상태 관리에 주의해야 함.
최근 수정 일: 2025. 4. 19.