오늘은 저번 게시물에 이어서 도메인 적용과, https 적용을 해보겠다.
저번 게시물에서는 배포를 위한 django 설정부터 aws ec2 생성, github clone, gunincorn과 nginx까지 설치하고 기본적인 배포를 마무리 하였다.
[AWS] EC2를 통해 Django 배포하기 - 1
최근에 웹 애플리케이션이 하나를 개발했다.Django를 통해 개발했으며 EC2로 배포를 할 예정이다.처음 EC2로 배포를 할 때 구글링과 블로그등을 통해 정보를 수집해서 진행했었는데배포 처음부터
itchanchan.tistory.com
그러나 배포가 완료된 것이지 서비스를 하기 위한 조건은 아직 충족되지 못하였다.
서비스를 진행하기 위해서는 기본적으로 도메인이 적용되어 있어야 하고 https가 개방되어 있어야 한다.
따라서 오늘은 도메인을 구매하고 적용해보도록 하겠다. 흐름은 아래와 같다.
- 가비아에서 도메인 구매
- 구매한 도메인을 route 53을 통해 연결
- certbot을 통해 https 적용
1. 가비아에서 도메인 구매
가비아(Gabia)는 도메인 등록, 웹 호스팅, 클라우드 서버, 보안 인증서(SSL), 기업 메일 서비스 등을 제공하는 국내 IT 인프라 서비스 기업이다. 가비아는 국내에서 많이 사용하는 도메인 사이트 중 하나이다.
굳이 가비아를 사용하지 않아도 되지만 구글링을 조금만 해보아도 가비아에 대한 정보가 많기 때문에 가비아를 추천한다.
우선 아래에 접속 후 회원가입을 진행 한다.
웹을 넘어 클라우드로. 가비아
그룹웨어부터 멀티클라우드까지 하나의 클라우드 허브
www.gabia.com
가입 후 로그인을 진행하고 메인에 본인이 원하는 도메인을 입력한 후 검색 버튼을 클릭한다.
검색을 하면 아래와 같이 구매 가능한 도메인이 출력된다.
인기 있는 com이나 co.kr등은 비교적 비싼 편이고 그 외는 나름 매우 저렴 한편이다.
마음에 드는 도메인을 선택하고 신청하기를 누른다.
기본적인 정보들을 입력해준다.
참고로 등록 기간이 디폴트 3년으로 되어 있기 때문에 꼭 1년으로 전환 후 결제해야한다.
신청 정보 외에는 기본 디폴트 설정을 유지한 채 결제를 진행한다.
결제가 완료되었다면 도메인이 구매 된 것을 확인할 수 있다.
본인은 가비아에서 두번째 구매이기 때문에 두개가 출력 된다.
이제 도메인 구매를 완료했기 때문에 route 53을 통해 도메인을 등록해주겠다.
2. Route 53을 통해 도메인 등록
AWS Route 53은 도메인 등록, DNS(도메인 네임 시스템) 관리, 트래픽 라우팅, 상태 확인(헬스 체크) 기능을 제공하는 클라우드 기반 DNS 웹 서비스다. EC2를 사용하고 있기 때문에 aws에서 제공하는 도메인 서비스를 이용하는 것이 편리하다.
Amazon Route 53 - DNS 서비스 - AWS
Amazon Virtual Private Cloud(VPC)에 사용자 지정 도메인 이름을 할당하고 액세스합니다. DNS 데이터를 퍼블릭 인터넷에 노출하지 않고 내부 AWS 리소스 및 서버를 사용합니다.
aws.amazon.com
Route 53으로 접속 후 시작하기를 클릭한다.
우선 호스팅 영역을 생성 해야한다.
호스팅 영역이란 도메인의 DNS 설정을 관리하는 컨테이너이다.
하나의 도메인에 대한 모든 DNS 레코드를 저장하는 공간이라고 생각하면 된다.
호스팅 영역 생성을 체크 후 시작하기 클릭
구매한 도메인을 입력하고 나머지는 디폴트 설정을 유지한 채 호스팅 영역 생성 버튼을 클릭한다.
이제 호스팅 영역이 생성되었다. 이제 레코드를 생성해보겠다.
레코드란 도메인의 특정 기능을 담당하는 DNS 설정 항목인데,
주로 알아둬야 할 것은 A레코드와 NS레코드이다.
A레코드는 IPv4 주소를 매핑 해주며 NS레코드는 해당 도메인의 네임서버를 지정해준다.
참고로 NS레코드는 가비아에서 사용을 해야 한다. (잠시 후 보여주겠다.)
NS 레코드는 자동으로 생성되기 때문에 A레코드만 생성해주면 된다.
값 부분에 ec2 퍼블릭 ip를 입력하도록 하고 레코드를 생성해준다.
참고로 레코드 이름에 www를 붙여도 된다.
그러나 본인은 붙이지 않았다.
이제 NS레코드 값을 가비아에 설정해주어야 하는데,
가비아에서 도메인을 구매할 경우 기본적으로 가비아의 네임서버가 설정되어 있다.
하지만 Route 53에서 DNS 관리를 하려면 네임서버를 AWS로 변경해야 한다.
우선 NS 레코드의 값을 보면 총 4개가 존재할 것이다. 4개를 모두 복사해둔다.
그 후 가비아로 다시 이동해서
MY 가비아 >> 도메인 >> 본인이 구매한 도메인의 관리버튼을 클릭하게 되면 아래와 같은 화면이 출력된다.
이제 여기서 네임서버 설정을 클릭해주겠다.
이제 아까 복사해둔 4개의 NS레코드 값들을 하나씩 복붙해주면 되는데
여기서 중요한 점이 맨 마지막에 있는 .(점)은 제외 한 후 복붙 해준다. (매우 중요!)
이제 소유자 인증 후 적용 버튼을 클릭한다.
3. Nginx와 Django 설정
이제 nginx와 django로 넘어와서 구매한 도메인 그리고 등록한 도메인이 우리의 주소라는 것을 명시해주어야 한다.
우선 nginx의 설정 파일을 열어 준 후 server name에 구매한 도메인을 작성해준다.
그리고 변경된 설정 파일을 적용하고 nginx를 재시작 해주자.
# nginx config 파일 열기
sudo vim /etc/nginx/sites-available/config
# 도메인 작성하고 저장하고 나온 후 설정파일 적용
sudo systemctl daemon-reload
# nginx 재시작
sudo systemctl restart nginx
그리고 Django로 넘어와서 prod.py 파일의 ALLOWED_HOSTS 변수에 구매한 도메인을 추가해주고
git을 통해 push 해주고 ec2에서 pull을 받아준 후에 gunicorn을 재시작 한다.
# prod.py
from .base import *
DEBUG = True
ALLOWED_HOSTS = [
'ec2 ip',
'구매한 도메인',
]
STATIC_URL = 'static/'
STATIC_ROOT = BASE_DIR / 'static'
# gunicorn 재시작
sudo systemctl restart gunicorn
이제 도메인 적용을 위한 모든 과정이 끝났다.
참고로 도메인이 적용되는데는 빠르면 30분 이내 보통은 1시간 ~ 2시간 그리고 길게는 반나절 정도 걸릴 수 있다고 한다. 접속이 안되더라도 너무 조급해하지 말고 좀만 기다려보자.
4. https 적용
마지막으로 https를 적용해보도록 하겠다.
Certbot을 사용하면 농담이 아니라 5분 이내로 https를 개방할 수 있다.
Certbot은 무료 SSL/TLS 인증서를 발급하고 자동 갱신해주는 오픈 소스 도구이다. Let’s Encrypt라는 무료 인증 기관(CA)에서 인증서를 발급받을 수 있도록 도와준다. 참고로 자동 갱신도 가능하다.
EC2 터미널로 이동한 후 Certbot을 설치 하겠다.
# 패키지 업데이트
sudo apt update
# certbot 설치
sudo apt install certbot python3-certbot-nginx
# 제대로 설치되었나 확인. 버전이 나와야함
certbot --version
설치가 완료 되었다면 SSL을 발급해보도록 하겠다.
단 명령어 한줄로 인증서를 발급받을 수 있고 심지어 https 개방에 필요한 nginx config도 알아서 작성해준다. 얼마나 편리한가?
sudo certbot --nginx
발급을 진행하면 이메일을 입력하는 칸이 나온다.
이메일을 입력해주고 엔터를 계속 누르면 Successfully received certificate 라는 문구가 나옴으로써 https 적용이 완료 된것이다. 이제 사이트에 접속해보면 https와 도메인이 적용된 사이트를 만날 수 있을 것이다.
배포를 위한 Django 설정부터 EC2 생성, 배포, 도메인 적용, https 적용까지 모든 과정이 끝이 났다. 물론 중간에 RDB도 연결 해야하고 실제 서비스를 운영 할 것이라면 로드밸런싱을 사용하는 것도 좋은 선택이다.
나의 첫 배포는 엉망진창이였다. 왜 이렇게 하는지도 모름에도 불구하고 블로그를 보고, 유튜브를 보고 무작정 따라했다. 그러다 보니 내 서비스에 필요없는 과정과 기능들이 추가되고 삽질을 한적이 한두번이 아니다.
그래서 나는 제대로 공부하고 이해하고 나와 같은 불편함을 겪는 사람이 없기를 바라며 게시물을 작성하게 되었다. 누군가에게 큰 도움이 되었으면 좋겠다.
"백엔드 개발자라면 개발부터 배포까지 스스로 한번 해봐야 하지 않겠는가?"
'Deploy' 카테고리의 다른 글
[AWS] EC2를 통해 Django 배포하기 - 1 (0) | 2025.01.31 |
---|---|
[Nginx] nginx에서 certbot 통해 https 적용하기 (0) | 2025.01.31 |
[AWS] 프리티어 기간 요금 발생: Virtual Private Cloud 요금 (0) | 2025.01.31 |