1️⃣ 개요
AWS EC2에 배포된 Spring Boot 서버는 기본적으로 IP 주소(http://13.124.xxx.xxx:8080)를 통해서만 접근할 수 있다. 그러나 IP는 가독성이 떨어지고, 서비스 브랜드를 식별하기 어렵다는 문제가 있다. 또한 단순한 HTTP 통신은 암호화되지 않아 중간자 공격(MITM), 세션 탈취, 쿠키 노출 등의 보안 취약점이 존재한다.
이 문제를 해결하기 위해 다음 두 가지를 적용한다:
- 도메인 연결
- 사용자가 기억하기 쉬운 고유 주소(
bbangzip.store)로 접속 가능 - 여러 서브도메인(API, admin 등) 관리 용이
- 사용자가 기억하기 쉬운 고유 주소(
- HTTPS(SSL/TLS) 적용
- 모든 트래픽을 암호화하여 안전하게 전송
- 비밀번호, 토큰, 세션 정보 등의 유출 방지
- 브라우저 경고(“안전하지 않음”) 제거
- SEO(검색엔진 최적화) 가중치 상승 및 보안 인증서 신뢰 확보
결과적으로,
사용자는 https://bbangzip.store로 안전하고 신뢰성 있는 접속 환경을 얻고,
서버는 보안성·확장성·전문성을 갖춘 서비스 인프라를 구축할 수 있게 되었다. 즉, 스토어 배포를 위한 필수과정이라고 볼 수 있다 !
2️⃣ 도메인 연결 (DNS 설정)
1. 도메인 구매
Route53 또는 가비아 등에서 도메인을 구입한다.
예: bbangzip.store
2. AWS와 도메인 연결
AWS 콘솔에서 Route53을 검색 후 이동한다.
- DNS 관리 → 호스팅 영역 생성 클릭
- “도메인 이름”에 구입한 도메인을 입력하고 호스팅 영역 생성 클릭
- 생성 후 Route 53이 자동으로
NS값 4개를 발급한다.
이후 도메인 등록처(가비아 등)에서
네임서버 설정을 열고, Route53의 NS 값을 1~4차에 입력한다.
⚠️ 입력 시 마지막의 점(.)은 제거해야 한다.
AWS에서 Route53로 이동

도메인 이름에 구매한 도메인 이름을 작성해주고 호스팅 영역 생성 클릭한다.

이제 Route 53이 해당 도메인을 관리할 수 있는 DNS 영역을 만든다.
생성 후 NS 값 4개가 자동으로 발급된다.

3. 가비아 DNS 설정
[My 가비아] → DNS 관리툴 → 구입한 도메인의 설정 → 레코드 수정 으로 이동한다.
다음과 같이 A 레코드를 추가한다.
| Type | Name | Value (EC2 퍼블릭 IP) | TTL |
|---|---|---|---|
| A | @ | 13.124.xxx.xxx | 3600 |
이 설정으로 bbangzip.store 도메인이 EC2 인스턴스 IP에 연결된다.
(www.bbangzip.store은 별도로 등록하지 않음)
DNS 전파는 평균 10분~최대 24시간이 소요된다.
도메인에서 관리를 클릭한다.

네임서버 설정 클릭한다.

- 1~4차 네임서버에 복사한 값 입력
- ⚠️ 마지막의 점 “.”은 제거하고 입력해야 함
이후 [적용] 클릭한다.
마지막으로, DNS 설정을 해야한다. [My 가비아] -> DNS 관리툴 클릭!!

구매한 도메인에 있는 설정을 클릭한다.
이후 레코드 수정에 들어간다.

다음 DNS 레코드를 추가하면 된다.

도메인을 EC2 인스턴스의 퍼블릭 IP로 연결한다.
| Type | Name | Value (EC2 퍼블릭 IP) | TTL |
|---|---|---|---|
| A | @ | 13.124.xxx.xxx | 3600 |

이렇게 설정하면 bbangzip.store 도메인만 EC2로 연결된다.
(www.bbangzip.store은 별도로 등록하지 않음)
이제 도메인이 AWS Route 53으로 관리되며, DNS 전파가 시작된다.
3. DNS 연결 상태 확인 명령어
도메인 연결이 완료되면, 다음 명령어로 정상 연결 여부를 확인한다.
- ping — 기본 연결 테스트
ping bbangzip.store
정상 응답 예시:
PING bbangzip.store (13.124.xxx.xxx): 56 data bytes
→ IP가 EC2 퍼블릭 IP와 동일하면 연결 성공.
(일부 서버는 ping 응답을 차단할 수 있음.)
- nslookup — DNS 매핑 확인
nslookup bbangzip.store
예시 결과:
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: bbangzip.store
Address: 13.124.xxx.xxx
→ Address 항목이 EC2 IP와 동일하면 정상 매핑.
- dig — 상세 DNS 질의
dig bbangzip.store
예시:
;; ANSWER SECTION:
bbangzip.store. 3600 IN A 13.124.xxx.xxx
→ TTL, 레코드 유형, 응답 IP를 모두 확인할 수 있다.
3️⃣ Nginx 설치 및 설정
1. Nginx 설치
sudo apt update
sudo apt install nginx -y
2. 리버스 프록시 설정
Spring Boot 서버가 내부 8080 포트에서 실행 중이라면,
Nginx가 외부 요청(80, 443)을 받아 내부로 전달한다.
sudo vim /etc/nginx/sites-available/default
아래와 같이 구성한다.
server {
server_name bbangzip.store;
root /var/www/spring;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/bbangzip.store/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/bbangzip.store/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = bbangzip.store) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name bbangzip.store;
return 404; # managed by Certbot
}
설정 테스트 후 재시작:
sudo nginx -t
sudo systemctl restart nginx
4️⃣ SSL 인증서 발급 (Certbot)
1. Certbot 설치
sudo apt install certbot python3-certbot-nginx -y
2. SSL 인증서 발급
sudo certbot --nginx -d bbangzip.store
Certbot이 자동으로 Nginx 설정을 수정하며
/etc/letsencrypt/live/bbangzip.store/ 경로에 인증서가 저장된다.
5️⃣ HTTPS 리다이렉션 확인
위 설정 파일은 Certbot이 자동으로 아래 두 가지를 처리한다
http://요청을https://로 리다이렉트- SSL 인증서를 통한 HTTPS 통신 활성화
결과적으로, 모든 트래픽은 자동으로 암호화되어 전송된다.
6️⃣ 인증서 자동 갱신 설정
Let’s Encrypt 인증서는 90일마다 만료된다.
자동 갱신을 위해 cron에 주기적 명령을 추가한다.
sudo crontab -e
0 0 * * * certbot renew --quiet
테스트 실행:
sudo certbot renew --dry-run
결과적으로 서비스는
https://bbangzip.store 주소로 안전하고 신뢰성 있게 운영할 수 있게 되었다 !!
'DevOps' 카테고리의 다른 글
| 무중단 배포 전략 총정리(Blue-Green, Rolling, Canary) (1) | 2025.07.04 |
|---|---|
| Nginx 제대로 이해하고 써보기 (0) | 2025.06.01 |
| JAR 하나로 끝내는 GitHub Actions 기반 무중단 배포 실습 (0) | 2025.05.12 |