백엔드의 비즈니스 로직을 마무리했다면 내 기준 가장 중요하다고 생각하는 배포 단계가 남아있다.
클라우드에 WAS 서버를 올리고, Nginx를 연결해 80번 포트로 통신하게 둔다면 편하게 웹사이트를 구동할 수 있다.
하지만 http로만 통신할 수 있는 웹 사이트는 어딘가 불안정해 보인다. 기본적인 암호화가 제공되지 않기 때문에 로그인을 할 때마다 비밀번호 노출에 대한 위험을 항상 감수해야 할 것이다. 따라서 앞으로 배포할 모든 서비스에 대해서 나는 SSL + HTTPS로 배포할 것이다.
SSL 인증서를 발급받기 위해서 무료로 인증서를 발급해주는 기관인 'Let's Encrypt'가 공식적으로 지원하는 certbot을 사용할 것이다.
webroot : 사이트 디렉토리 내에 인증서 유효성을 확인할 수 있는 파일을 업로드하여 인증서를 발급하는 방법 . 실제 작동하고 있는 웹서버의 특정 디렉토리의 특정 파일 쓰기 작업을 통해서 인증 . 이 방식의 장점은 nginx를 중단시킬 필요가 없음. . 이 방법의 단점은 하나의 인증 명령에 하나의 도메인 인증서만 발급 가능
웹서버 . Nginx나 아파치와 같은 웹서버에서 직접 SSL 인증을 실시하고 웹서버에 맞는 SSL세팅값을 부여 . 발급이나 갱신을 위해 웹서버를 중단시킬 필요가 없음 . 인증서 갱신 시 상황에 맞게 세팅을 자동으로 업데이트 . 사용자가 세팅을 변경할 수 있지만 자동 업데이트 시 반영되지는 않음 . 운영중인 환경에서 인증서를 발급받기 어렵다. 그 이유는,80(443) 포트로 직접 웹 서버가 구동되어야 하기 때문이다. 운영중인 서비스에서 두 포트 중 하나만 사용한다면 괜찮지만, 만약 두 포트를 모두 사용하고 있다면 인증서를 발급 받기 위해 서비스를 잠시 내려야하는 치명적인 단점이 있다.
Standalone : 사이트 작동을 멈추고 이 사이트의 네크워킹을 이용해 사이트 유효성을 확인해 Let’s Encrypt SSL 인증서를 발급하는 방식 . 80포트로 가상 staandalone 웹서버를 띄워 인증서를 발급 . 이 방식은 동시에 여러 도메인을 발급 받을 수 있음 . 그렇지만 인증서 발급 전에 Nginx를 중단하고 발급 완료 후 다시 Nginx를 시작해야 함
DNS : 도메인을 쿼리해 확인되는 TXT 레코드로 사이트 유효성을 확인하는 방법 . 와일드 카드 방식으로 인증서를 발급 가능 . 이 방법은 당연하게도 서버 관리자가 도메인 DNS를 관리/수정할 수 있어야 하며 . 인증서 갱신 시마다 DNS에서 TXT값을 변경해야 하므로외부에서 TXT 레코드를 입력할 수 있도록 DNS가 API를 제공하는 경우만 갱신 과정을 자동으로 처리
나는 AWS Lightsail을 사용중이고 서버를 직접 관리할 수 있고, 도메인 DNS도 임의로 설정할 수 있기 때문에 DNS방법을 사용해서 인증서를 발급받기로 했다. DNS 방식은 DNS 전파 딜레이가 있기 때문에 바로바로 적용이 되지 않는다는 단점이 있지만 저번에 했을 때 그렇게 오래 걸리지 았아서 크게 신경쓰이진 않았다.