나만의 학습 기록

최종 목적은 기술 블로그💩

개발일지

IP 접속에서 도메인 접속으로(2) - HTTPS 설정하기

밈밍민믹 2026. 5. 13. 21:16

안녕하세요. 다들 저녁은 드셨나요? 저는 오늘 동태탕에 솥밥을 먹었는데 너무 맛있어서 기분 좋게 하루를 마무리하고 있습니다.

저번 시간에는 도메인을 연결하고 그 과정에서 발생한 CORS 문제를 해결해보았습니다. 원래는 도메인 연결과 HTTPS 설정까지 한 번에 정리하려고 했지만 중간에 프론트와 백엔드 요청이 달라지면서 CORS 문제까지 함께 발생하여 분량상 도메인 연결과 HTTPS 설정을 두 편으로 나누게 되었습니다.

이번 글에서는 이어서 HTTPS 설정을 진행해보겠습니다. HTTPS 설정은 도메인 연결과 Nginx 설정이 어느 정도 완료된 상태라면 비교적 간단하게 진행할 수 있습니다. Certbot을 이용해 SSL 인증서를 발급하고, Nginx에 HTTPS를 적용한 뒤 자동 갱신이 정상적으로 동작하는지 확인해보겠습니다.

 

이전 글:

 

IP 접속에서 도메인 접속으로(1) - CORS 문제 해결하기

안녕하세요. 이번 글에서는 기존에 배포해두었던 프로젝트에 도메인을 연결하는 과정을 정리해보겠습니다.해당 프로젝트는 원래 앱 중심 프로젝트였기 때문에 서버 IP로만 접근해도 충분하다

0110020321.tistory.com

 

참고 :

 

웹 보안 지식(3) - HTTPS와 SSL/TLS의 동작 원리

안녕하세요. 벌써 금요일이네요.어제 비가 와서 그런지 오늘은 바람이 많이 부네요. 소리만 들으면 태풍 오는 것 같아요ㅋㅋ저번 시간에는 해시 알고리즘과 함께 bcrypt와 scrypt에 대해 학습했습

0110020321.tistory.com


 

시작하기 앞서 OCI에서 HTTPS 접속을 위한 443 포트를 열어주어야 합니다.

 

HTTPS는 기본적으로 443 포트를 사용하기 때문에 도메인 연결과 SSL 인증서 설정을 완료하더라도 OCI 보안 규칙에서 443 포트가 열려 있지 않으면 외부에서 접근할 수 없습니다.

 

따라서 Certbot으로 인증서를 발급하기 전에 OCI 콘솔에서 인바운드 규칙에 443 포트가 허용되어 있는지 먼저 확인하겠습니다.

 

OCI 인바운드 규칙 설정하기

1. OCI 대시 보드 접속합니다.

 

2. [컴퓨트] → [인스턴스]

 

3. 현재 작동 중인 인스턴스를 선택합니다. [네트워킹] → 기본 VNIC에서 [서브넷]에 들어갑니다.

 

4. [보안]에 들어간 후 보안 목록에 해당된 내용에 들어간 이후 [보안 규칙]에서 https를 추가합니다. 

제 경우 HTTP를 설정하면서 HTTPS도 함께 설정하여 따로 추가는 안했습니다.

 

5. HTTPS가 설정되었는지 확인합니다.

sudo nginx -T | grep -E "listen|server_name|ssl_certificate"

HTTP가 설정되지 않았음을 확인할 수 있습니다.

 

HTTPS 설정 전 Nginx와 포트 상태 확인하기

OCI에서 443 포트를 허용했다면, 바로 SSL 인증서를 발급하기 전에 현재 Nginx 설정과 도메인 접속 상태를 먼저 확인해주는 것이 좋습니다.

HTTPS 설정은 Nginx 설정 파일을 자동으로 수정하는 과정이 포함될 수 있기 때문에, 기존 Nginx 설정에 문법 오류가 없는지 먼저 확인해야 합니다. 또한 도메인이 실제로 서버까지 정상적으로 연결되어 있는지, 현재 80번 포트가 열려 있는지도 함께 확인합니다.

sudo nginx -t # 설정 파일 문법 오류가 없는지 확인
curl -I http://buddymate.site # http 정상 동작 확인
sudo ss -tulnp | grep -E ':80|:443' # 현재 서버에서 80번 포트와 443 포트를 어떤 프로세스가 사용중인지 확인

 

Certbot 설치

앞서 Nginx 설정과 도메인 연결 상태를 확인했습니다. 이제 실제로 HTTPS를 적용하기 위해 Certbot을 설치하겠습니다.

HTTPS를 적용하려면 SSL/TLS 인증서가 필요합니다. 직접 인증서를 구매하거나 수동으로 설정할 수 있지만, 개인 프로젝트나 포트폴리오 배포에서는 Let's Encrypt를 이용해 무료 인증서를 발급받는 방식이 많이 사용됩니다.

 

Certbot은 Let's Encrypt 인증서를 발급하고, Nginx 설정에 SSL 인증서 경로를 연결해주며 인증서 갱신까지 자동화할 수 있도록 도와주는 도구입니다.

즉, 직접 Nginx 설정 파일에 인증서 경로를 하나씩 작성하지 않아도 비교적 간단하게 HTTPS를 적용할 수 있습니다.

 

Ubuntu + Nginx 환경에서 Certbot을 설치하는 방법은 여러 가지가 있지만, Certbot 공식 안내에서는 대부분의 사용자에게 snap을 통한 설치 방식을 권장하고 있습니다.

snap 방식은  Certbot을 비교적 최신 상태로 유지하기 쉽고, Nginx 플러그인을 함께 사용해 인증서 발급Nginx 설정 반영을 자동화할 수 있기 때문에 이번 설정에서는 snap 방식으로 설치하겠습니다. 

 

1. 패키지 목록을 갱신하고 snapd를 설치합니다.

sudo apt update
sudo apt install snapd -y

 

2. 이후 snap의 core 패키지를 설치하고 최신 상태로 갱신합니다.

sudo snap install core
sudo snap refresh core

 

3. Certbot을 classic confinement 모드로 설치합니다.

Certbot은 시스템의 Nginx 설정 파일과 인증서 디렉터리에 접근해야 하므로 '--classic' 옵션을 사용합니다. 

sudo snap install --classic certbot

 

4. 마지막으로 '/snap/bin/certbot'에 설치된 Certbot을 일반 명령어처럼 사용할 수 있도록 심볼릭 링크를 생성합니다.

sudo ln -s /snap/bin/certbot /usr/bin/certbot

 

5. 설치가 완료되면 버전을 확인합니다.

certbot --version

 

6. Nginx 설정 확인

sudo nginx -T | grep -n "server_name"

 

설정한 서버 네임이 보여야합니다.

 

SSL 인증서 발급

1. 인증서를 발급한다.

sudo certbot --nginx -d <<Server이름>> -d <<Server이름>>

--nginx

Nginx 플러그인을 사용하겠다는 의미입니다.

Certbot이 Nginx 설정을 읽고 인증서 발급 후 HTTPS 설정까지 자동으로 반영할 수 있습니다.

 

-d <<Server 이름>>

인증서를 발급한 도메인을 지정합니다.

 

-d <<www.Server 이름>>

www가 붙은 도메인도 같은 인증서에 포함합니다.

이메일을 입력한 후 약관에 동의하면 발급 완료됩니다.

 

2. 인증서 발급 확인

발급이 완료되면 Nginx 설정에 문제가 없는지 다시 확인하고, 변경된 설정을 반영합니다.

 

sudo nginx -t
sudo systemctl reload nginx

 

HTTPS 적용 이후에는 CORS 설정도 함께 확인해야 합니다. 기존에 'HTTP://도메인.com'에서 요청을 보냈지만, HTTPS를 적용 후에는 요청 출처가 'https://~'로 변경됩니다. 브라우저는 'http'와 'https'를 서로 다른 Origin으로 판단하기 때문에 백엔드 CORS 허용 목록에도 HTTPS 주소를 추가해주어야 합니다.

 

다만 제 경우에는 도메인 연결 과정에서 CORS 문제가 먼저 발생했고, 당시 'http'와 'https'를 함께 허용하도록 설정해두었기 때문에 이번 단계에서는 별도로 추가 수정하지 않았습니다.

 

SSL 인증서 자동 갱신

Let's Encrypt 인증서는 영구적으로 유지되는 인증서가 아니라 일정 기간이 지나면 만료됩니다. 따라서 HTTPS를 안정적으로 유지하려면 인증서가 만료되기 전에 자동으로 갱신되는지 확인해야 합니다.

Certbot은 인증서 자동 갱신 기능을 제공하며, 실제 갱신 시점이 오기 전에 갱신 과정이 정상적으로 동작하는지 테스트할 수 있습니다.

sudo certbot renew --dry-run

--dry-run

실제 인증서를 갱신하지 않고, 갱신 과정이 정상적으로 수행될 수 있는지만 시뮬레이션 하는 옵션입니다.

즉, 이 명령어가 성공하면 실제 인증서 만료 시점이 가까워졌을 때 Certbot이 정상적으로 인증서를 갱신할 수 있다는 의미입니다.

위와 같은 문구가 출력되면 자동 갱신 테스트가 성공한 것입니다. 따라서 별도의 수동 갱신 설정을 추가하지 않아도 됩니다.


이것으로 기존 IP 기반 접속을 도메인 기반 접속으로 변경하고, HTTP를 적용해 보안 연결까지 설정해봤습니다.

단순히 도메인을 연결하고 SSL 인증서를 발급하는 과정이라고 생각했지만 실제로는 CORS, Mixed Content, Nginx 정적 파일 경로 문제 등 여러 가지 이슈를 함께 마주하게 되었습니다. 덕분에 이전에 학습했던 CORS, HTTPS, SSL/TLS 개념이 실제 배포 환경에서 어떻게 연결되는지 직접 확인할 수 있었습니다.

특히 이론으로만 정리했던 SSL/TLS를 실제 프로젝트에 적용해보며 도메인 연결부터 인증서 발급, 자동 갱신 확인까지 배포 흐름을 한 번 더 경험할 수 있었습니다.

다음에도 프로젝트를 진행하며 겪은 개발 일지로 돌아오겠습니다. 수고하셨습니다.