TIL - 20260207

juni·2026년 2월 6일

TIL

목록 보기
261/316

0207 스프링 부트 프로젝트 (9/N): HTTPS 적용과 도메인 연결


✅ 1. HTTPS와 SSL/TLS 인증서의 필요성

  • HTTP (HyperText Transfer Protocol)는 웹에서 데이터를 주고받는 기본 프로토콜이지만, 모든 데이터를 평문(Plain Text)으로 전송하여 중간에 누군가 엿보거나(도청), 데이터를 변조할 위험이 있습니다.

  • HTTPS (HTTP Secure):

    • HTTP 통신 전체를 SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security)라는 프로토콜을 통해 암호화하는 방식입니다.
    • 목표:
      1. 암호화 (Encryption): 제3자가 통신 내용을 엿볼 수 없도록 합니다.
      2. 무결성 (Integrity): 데이터가 중간에 변조되지 않았음을 보장합니다.
      3. 인증 (Authentication): 내가 접속한 서버가 진짜 내가 접속하려던 서버가 맞는지 신원을 확인합니다.
  • SSL/TLS 인증서 (Certificate):

    • HTTPS의 "인증" 기능을 수행하는 "디지털 신분증"입니다.
    • 인증 기관(Certificate Authority, CA)이라는 신뢰할 수 있는 제3자 기관이 해당 도메인의 소유권을 확인한 후 발급해줍니다.
    • 현대 웹사이트에서 HTTPS는 사용자 신뢰도, 데이터 보안, SEO 순위 등을 위해 필수적인 요소입니다.

✅ 2. Let's Encrypt와 Certbot: 무료 SSL 인증서 자동화

  • Let's Encrypt: 무료로 SSL/TLS 인증서를 발급해주는 비영리 인증 기관(CA)입니다.
  • Certbot: Let's Encrypt 인증서의 발급, 설치, 갱신 과정을 자동화해주는 매우 편리한 클라이언트 소프트웨어입니다.

➕ Nginx에 Certbot으로 HTTPS 적용하기

  1. Certbot 설치: 서버에 Certbot과 Nginx용 플러그인을 설치합니다.

    sudo yum install -y certbot python3-certbot-nginx
  2. Nginx 설정 확인: Certbot이 HTTPS를 적용할 도메인을 인식할 수 있도록, /etc/nginx/conf.d/ 디렉토리의 설정 파일에 server_name이 정확히 기입되어 있는지 확인합니다.

    # /etc/nginx/conf.d/my-app.conf
    server {
        listen 80;
        server_name my-app.com www.my-app.com; # Certbot이 이 도메인을 인식
        ...
    }
  3. 인증서 발급 및 Nginx 설정 자동화:

    • certbot --nginx 명령어를 실행하면, Certbot이 Nginx 설정 파일을 분석하여 server_name에 설정된 도메인 목록을 보여줍니다.
    • HTTPS를 적용하고 싶은 도메인을 선택하면, Certbot이 다음 작업들을 자동으로 수행합니다.
      a. 도메인 소유권 인증
      b. Let's Encrypt로부터 SSL 인증서 발급
      c. 발급받은 인증서를 서버에 저장 (/etc/letsencrypt/live/...)
      d. Nginx 설정 파일을 수정하여, 443 포트(HTTPS)를 활성화하고 인증서 경로를 지정하는 server 블록을 추가
      e. 기존 80 포트(HTTP) server 블록에, 모든 요청을 HTTPS로 자동 리다이렉트하는 설정 추가
      f. Nginx 서비스 재시작
    sudo certbot --nginx
  4. 인증서 자동 갱신:

    • Let's Encrypt 인증서는 유효 기간이 90일로 짧습니다. 하지만 Certbot을 설치하면, 인증서 만료일이 다가왔을 때 자동으로 갱신해주는 스케줄(Cron job 또는 Systemd timer)이 함께 등록되므로, 개발자가 신경 쓸 필요가 거의 없습니다.
    • 자동 갱신 테스트: sudo certbot renew --dry-run

✅ 3. 도메인 연결 (DNS 설정)

  • 사용자가 my-app.com과 같은 도메인 이름으로 우리 서버에 접속할 수 있도록, 도메인과 서버의 IP 주소를 연결하는 과정입니다.

➕ DNS 설정 흐름

  1. 도메인 구매: 가비아, GoDaddy 등 도메인 등록기관에서 원하는 도메인을 구매합니다.

  2. 서버 IP 확인: 배포할 서버(AWS EC2 등)의 고정 IP 주소(Elastic IP)를 확인합니다.

  3. DNS 레코드 설정:

    • 도메인을 구매한 업체의 DNS 관리 페이지로 이동합니다.
    • A 레코드를 추가하여, 도메인 이름과 서버의 IP 주소를 매핑합니다.
      • 호스트: @ (루트 도메인, my-app.com) 또는 www (서브도메인, www.my-app.com)
      • 값/위치: 서버의 고정 IP 주소 (e.g., 52.78.123.123)
      • TTL (Time To Live): DNS 정보가 캐시에 유지되는 시간.
  4. 전파 및 확인:

    • DNS 설정 변경 사항이 전 세계의 DNS 서버로 전파되는 데에는 몇 분에서 최대 48시간까지 소요될 수 있습니다.
    • 전파가 완료되면, 웹 브라우저에서 https://my-app.com으로 접속하여 사이트가 정상적으로 표시되고, 주소창에 자물쇠 아이콘이 나타나는지 확인합니다.

📌 요약

  • HTTPS는 통신을 암호화하여 보안을 강화하는 현대 웹사이트의 필수 요소이며, SSL/TLS 인증서를 통해 서버의 신원을 증명합니다.
  • Let's EncryptCertbot을 사용하면, 복잡한 과정 없이 명령어 몇 줄만으로 웹사이트에 무료 SSL 인증서를 발급받고 Nginx에 HTTPS 설정을 자동으로 적용할 수 있습니다.
  • 도메인 연결은 구매한 도메인과 서버의 고정 IP 주소DNS의 A 레코드를 통해 매핑하는 과정입니다.
  • 이러한 과정을 통해, 사용자는 기억하기 쉬운 도메인 주소로 안전하게 암호화된 우리 웹 서비스에 접속할 수 있게 됩니다.

0개의 댓글