<aside> 💡
</aside>
본 프로젝트에서는 사용자의 위치 정보 및 마이크 음성 데이터를 활용하는 기능을 포함하고 있습니다. 브라우저 보안 정책상 이러한 민감 데이터 접근은 오직 HTTPS 환경에서만 허용되므로 Nginx를 활용하여 **SSL Termination(SSL 종단점)**을 구축함으로써 보안 이슈를 해결하고 개발 효율성을 극대화하였습니다.
초기 배포 단계에서 HTTP 프로토콜을 통해 서비스에 접속하였을 때 다음과 같은 기술적 제약이 발생하였습니다.
백엔드 어플리케이션(Spring Boot)에 직접 SSL 설정을 적용하는 대신 인프라 최전방의 Nginx가 복잡한 암호화/복호화 과정을 전담하도록 구성하였습니다.
Nginx는 외부와 통신할 때는 암호화된 HTTPS로 통신하고, 서버 내부의 컨테이너와 통신할 때는 가벼운 HTTP로 전달하는 중계 역할을 수행합니다.
/etc/nginx/sites-available/default 파일을 다음과 같이 구성하여 SSL 종단점을 설정하였습니다.
server {
listen [포트지정] ssl; # [포트지정] 포트로 암호화된 요청을 수신합니다.
server_name [도메인IP];
# SSL 인증서 경로 설정
ssl_certificate /etc/letsencrypt/live/[도메인IP]/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/[도메인IP]/privkey.pem;
location / {
proxy_pass <http://127.0.0.1:3000>; # 내부 통신은 가벼운 HTTP를 유지합니다.
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme; # 원본 프로토콜이 HTTPS임을 전달합니다.
}
}