서론
이 글은 Naver Cloud Platform(NCP)에서 웹 서비스 서버를 구성하는 과정과 경험을 정리한 글입니다.
첫번째 글 에서는 VPC 생성부터 방화벽 구성과 서버 인스턴스 생성까지의 과정을 다루었습니다.
이번 글에서는 서버 구성 과정 중, 도메인을 로드밸런서에 연결하고 SSL 인증서를 발급해 HTTPS 통신을 할 수 있도록 설정하는 방법에 대해 정리할 것이다.
사전 지식
HTTPS - 도메인과 SSL 인증서
1편에서 서버 인스턴스를 퍼블릭 서브넷에 배치했기때문에 인스턴스의 퍼블릭 IP를 통해 직접 접근할 수도 있다. 퍼블릭 IP로 서버에 접속하면 되는데 도메인은 왜 필요할까? 퍼블릭 IP를 직접 노출하는 것은 보안상 위험하고 퍼블릭 IP만으로는 HTTPS(보안 접속) 설정이 불가능하다. 따라서 HTTPS 설정을 위해서는 도메인과 SSL 인증서가 필요하다.
HTTPS 통신의 핵심은 SSL 인증서와 도메인이다. CA는 도메인의 소유를 인증하고, 인증된 도메인 이름을 기반으로 인증서를 발급한다.
서버의 IP에 도메인을 연결하고 도메인에 대한 인증서를 발급하면, 브라우저가 HTTPS로 접속할 때 서버의 SSL 인증서를 검사한다. 서버에서 받은 인증서의 도메인 이름(example.com)이 실제 브라우저에서 접속한 도메인(https://example.com)과 일치하면 브라우저는 해당 웹사이트를 신뢰할 수 있는 주소라고 판단한다. 즉 SSL 인증서는 브라우저에서 접속한 웹사이트가 소유자가 인증된 진짜 서버임을 증명하는 역할을 한다.
로드밸런서(Load Balancer)
이제 HTTPS 통신을 위한 도메인의 필요성은 알았다. 그럼 도메인을 그냥 서버 인스턴스 IP에 연결하면 될까? 물론 가능하고, HTTPS 서비스도 할 수 있다. 하지만, 운영과 보안의 용이성을 위해 일반적으로 서버 앞단에 로드밸런서를 두고 로드밸런서에 HTTPS 설정을 한다.
- 확장성
- 트래픽이 많아지면 서버 인스턴스를 여러개로 늘리고 로드밸런서로 요청을 분산할 수 있다.
- 보안 - 퍼블릭 IP를 직접 노출하지 않는다.
- 서버를 프라이빗 서브넷에 배치하고 로드밸런서만 노출해서 보안을 강화할 수 있다.
- 유지관리의 편의
- 로드밸런서가 없다면 서버 수가 늘어나거나 서버를 교체할 때, 각 서버에 SSL 인증서를 설치하고 도메인 설정을 바꿔줘야 하지만 로드밸런서가 있다면 인증서 등록을 로드밸런서에 하고 서버 인스턴스의 유지관리가 용이해진다.
서버 구성하기
1. 도메인 구매
이제 HTTPS 설정에 필요한 인증서 발급을 위해 도메인이 필요하다! 나는 가비아에서 dalona.site 도메인을 구매했다.
2. 인증서 발급
2-1. 인증서 발급 신청
NCP Certificate Manager에서 구매한 도메인에 대한 인증서를 발급한다. 검증방식은 DNS 방식으로 선택했다.
이제 dalona.site 도메인이 내가 소유한 도메인이 맞다는 것을 인증하면 인증서 발급이 완료된다.
2-2. DNS 인증
신청한 인증서 정보에 DNS 인증용 CNAME 값이 있다. 이 정보를 가비아 DNS 설정에 입력해야한다.
가비아 도메인 관리 페이지에서 DNS 정보 > DNS 레코드 설정 > 설정 메뉴로 이동하면 DNS 관리 페이지가 나온다.
CNAME 타입의 호스트에 도메인 검증 정보 Record Name을 넣고, 값에 Record Value를 넣으면 된다.
5분정도 뒤에 NCP Certificate Manager에서 인증서 상태가 갱신되면 인증서 발급이 완료된 것이다.
3. 로드밸런서 생성
3-1. 로드밸런서용 ACL 생성
로드밸런서를 배치할 퍼블릭 서브넷에 적용할 ACL을 생성한다.
인바운드 룰로 HTTP(TCP 80)와 HTTPS(TCP 443)를 허용했다.
3-2. 로드밸런서용 서브넷 생성
서버 인스턴스가 있는 VPC 내에 로드밸런서용 퍼블릭 서브넷을 생성하고, 위에서 생성한 ACL을 설정한다.
3-3. Target Group 생성
로드밸런서가 트래픽을 전달할 인스턴스 그룹인 타겟 그룹을 생성한다.
로드밸런서와 타겟 그룹 사이의 통신은 보통 HTTP를 사용하므로 프로토콜은 HTTP를 선택하고 웹 서버가 리슨하고있는 포트를 설정한다. (헬스체크 프로토콜도 HTTP)
3-4. 로드밸런서 생성
애플리케이션 로드밸런서를 생성한다.
Public 네트워크를 선택하고, 리스너로 HTTP와 HTTPS를 등록했다.
4. 도메인을 로드밸런서에 연결
이제 마지막 단계만 남았다. 도메인을 로드밸런서에 연결해서, https://dalona.site로 접속하면 로드밸런서로 트래픽이 가고, 최종적으로는 서버 인스턴스로 트래픽이 가도록 설정하는 과정이다.
2-2에서 인증서 발급시 DNS 인증을 했던 것처럼, 가비아 DNS 관리에서 A 레코드를 추가하면 된다. 값은 NCP 콘솔에서 로드밸런서의 퍼블릭 IP를 확인해 입력한다.
A 레코드의 호스트를 `@`로 설정하면 루트 도메인(dalona.site)의 트래픽이 로드밸런서 IP 주소로 연결되는 것이다.
DNS 변경사항이 전파되면, 1시간 이내로 브라우저에서 접속 테스트를 할 수 있다! SSL 인증서가 설정된 것도 같이 확인할 수 있다.
마무리
이번 글에서는 지난 글에서 진행한 VPC 생성부터 서버 인스턴스 구성 과정을 이어서, 도메인을 구매하고 로드밸런서에 연결해 브라우저에서 실제로 접속할 수 있도록 만드는 과정을 살펴보았다.
도메인 연결이나 방화벽 설정처럼 당연하게 여겼던 과정들의 개념을 다시 되짚으며, 각 설정이 왜 필요한지, 어떤 역할을 하는지 정리해볼 수 있는 좋은 기회였다.
이번 사이드 프로젝트는 Spring Boot로 구현했으며, Docker 없이 직접 빌드 파일을 배포하고 있다. 다음 글에서는 이 서버 인스턴스에 Spring Boot 애플리케이션을 배포하는 방식에 대해 간단하게 정리해보려고 한다.
'개발 > Infra, AWS' 카테고리의 다른 글
NCP로 난생 처음 서버 배포하기-1 (0) | 2025.03.16 |
---|---|
[AWS] CloudFormation Lamda UPDATE_FAILED 에러 (0) | 2024.05.13 |