AI Chatbot 만들다!

Python Django Project를 AWS 상에서 작동하는 서비스로 만들다 (5) - 정상 배포 완료 / http->https

wy-family 2024. 11. 16. 00:14

aichatbot-wyfamily.com 이라는 도메인을 1년간 이용하는 권한을 샀었고, 이제 정상 배포가 완료가 되어서 웹페이지 접속이 가능해졌다.

메인 도메인, 메인 페이지에는 아무것도 지정해준 게 없어서 Not Found가 뜨는게 정상이다.

메인 도메인에는 아무것도 지정한 게 없어서 Not Found가 맞다

도메인/chatbot 으로 가야지만 채팅방 목록을 보여주는 것이다. 하지만 지금 DB는 로컬에서 쓰던 PostgreSQL이 아니라 AWS 의 RDS 에서 PostgreSQL을 연결하거니까 아무런 데이터가 없다. 그래서 채팅방 목록이 보이지 않는 것.

그리고 도메인/admin 은 django가 기본적으로 제공하는 기능이라서 연결이 된다.

하지만 로컬에서 할 때에는 superuser를 만들었지만 지금은 AWS에서 배포한거고 DB에 아무런 정보가 없으니까

superuser 부터 만들어야 한다.

새롭게 배포한 DB (AWS RDS PostgreSQL)에는 아무런 정보가 없다.

그래서 django admin에 들어가려면 superuser가 필요하니까 그걸 생성해줘야 한다.

django의 관리자 계정(superuser)의 관리는 DB에서 관리한다. 로컬 DB에서는 관리자 계정을 만들었지만

새로 배포한, AWS lightsail에 배포되어 있는 우리가 연결한 DB에는 admin 계정이 생성되어 있지 않다.

 

가상환경에서 superuser 생성을 해보자.

manage.py 에서 createsuperuser 를 해줘야 한다.

그런데 가상환경을 키고 가상환경에서 해줘야 한다. source venv/bin/activate

python3 manage.py createsuperuser 를 해주자.

만들었으니까 웹페이지로 가서 로그인을 해보자.

 

이 화면을 되게 오랜만에 보는 기분이다.

잠깐 여기에 나의 이야기를 좀 털어놓자면,

육아랑 집안일을 내가 많이 담당하고 있고, 아내는 감사하게도 공부에 전념하고 있어.

순서가, 아내가 먼저 원하는 취업을 하는거고 그 다음이 나인데, 나도 이렇게 조금씩 조금씩이라도 공부를 하고 있지만,

나는 원래 뭐든 하려면 미친듯이 하는 스타일인거 같다. 육아랑 집안일이랑 아내 케어(아내는 출산한지 오래되지 않아서 케어가 필요할텐데 아내도 감사하게도 본인이 해야 할 공부를 정말 미친듯이 해주고 있다. 정말 감사하다.) 그리고 내 공부까지. 공부만 하면 모르겠는데, 이게 사실 기록을 남겨야 의미가 있는 세상이 되었다.

그래서 지금 이 글을 쓰고 있는 이 순간에, 아내와 아기는 꿀잠을 자고 있지만 나는 빨래를 돌리고 밥을 짓고 있다. 그러면서 공부를 하면서도 이렇게 기록까지 남겨야 하는 상황.

조금은, 고단하다. 고단한데, 멈추고 싶지는 않다. 달린다. 달리자. 가자. 할 수 있다. 할 수 있다.


채팅방을 하나 만들어보고, 채팅을 쳐보자.

utils.py 에서, openai api를 통해서 답을 가지고 올 때, 한국어를 입력하면 일본어 중국어 영어로 번역해주는 기능으로 구현을 했었다.

한국어가 아닌 영어로 쳐도 되는구나. 다른 나라 언어를 치면 어떻게 되는지도 확인해봤다.

나는 영어랑 일본어가 조금 가능한 사람이니까 영어랑 일본어는 제대로 번역해주고 있는걸 알 수 있다. 중국어도 맞겠지 뭐.ㅋㅋㅋ 나중에 아내랑 내 친구 중에 영어랑 일본어가 가능한 친구에게 한 번 써보라고 하고 약간 의견을 달라고 해보자.

 

이 강의는 끝이 났다.

내가 진짜로 AI를 활용, chatGPT의 도움을 받았지만 개발이란 것, 배포라는 걸 해냈다.

하지만, 내 개인적인 프로젝트는 좀 더 진행해보려고 한다.

 

인증서 http -> https 로 보안을 강화해보는 작업을 해보려고 한다.

AWS에 인증서 관리해주는 뭔가가 있을 수도. 무료로 linux 도 있을 수도.


https 적용부터 해보자.

 

GPT한테 질문을 해보니 이렇게 알려주고 있다.

 

HTTPS 인증서를 적용하여 더 안전한 환경을 만드는 방법을 안내해 드릴게요. AWS Lightsail에서 제공하는 간편한 방법을 사용하여 SSL 인증서를 설정할 수 있습니다.

 

Let's Encrypt 인증서 설치:

  • 먼저, Lightsail 인스턴스에 접속한 후 Certbot을 설치해 Let's Encrypt의 무료 SSL 인증서를 받아야 합니다.
  • 다음 명령어로 Certbot을 설치합니다:
sudo apt update
sudo apt install certbot python3-certbot-nginx

SSL 인증서 발급:

  • Certbot을 이용하여 인증서를 발급받습니다. -d 옵션 뒤에 본인의 도메인을 입력해주세요:
sudo certbot --nginx -d aichatbot-wyfamily.com
  • Certbot이 자동으로 Nginx 설정을 변경해 HTTPS로 접속할 수 있도록 설정합니다.

방화벽 설정 확인:

  • HTTPS 트래픽을 허용하려면 Lightsail 인스턴스의 네트워크 설정에서 포트 443을 열어야 합니다.
  • AWS Lightsail 콘솔로 이동하여, 네트워킹 탭에서 인스턴스의 방화벽 설정을 열고, HTTPS(포트 443)를 추가하세요.

자동 갱신 설정:

  • Let's Encrypt 인증서는 90일마다 갱신이 필요합니다. 이를 자동화하려면 다음 명령어로 Crontab에 갱신 작업을 추가합니다:
sudo crontab -e
  • 파일이 열리면, 아래의 명령을 추가하여 매일 새벽 2시에 갱신되도록 설정합니다:
0 2 * * * /usr/bin/certbot renew --quiet

배포 확인:

이제 SSL 인증서가 설치되어 HTTPS를 통한 안전한 연결을 제공할 수 있습니다.


SSL 발급 과정에서, 약관 동의를 하고 (Yes), 이메일로 소식 받을거냐고 물어봐서 그건 (No) 라고 했다.

방화벽에 HTTPS 443 추가를 완료했다.

 

sudo crontab -e 라고 하면,

추가로 입력을 하면 끝!

자, 이제 확인을 해보자.

이제 보안 경고는 사라지고 https 가 적용된걸 확인할 수 있다. 휴우, 생각보다 https 적용하는 건 쉬웠다.

그래도 이해를 좀 더 하기 위해서 공부를 해야 하니까 chatGPT한테 궁금한 걸 물어보고 기록하자.

1. HTTP와 HTTPS의 차이

  • HTTP (Hypertext Transfer Protocol): 웹에서 데이터를 주고받을 때 사용하는 기본 프로토콜입니다. 그러나 데이터를 암호화하지 않기 때문에 보안에 취약합니다. 즉, 서버와 사용자 간의 데이터가 평문(암호화되지 않은 상태)으로 전송되기 때문에 외부에서 가로채기 쉬운 구조죠.
  • HTTPS (HTTP Secure): HTTP에 SSL/TLS 프로토콜을 추가한 보안 버전입니다. HTTPS를 사용하면 서버와 사용자 간의 데이터가 암호화되어 가로채더라도 내용을 이해할 수 없게 됩니다. 따라서 중요한 정보를 안전하게 주고받아야 하는 웹사이트(로그인, 결제 등)는 HTTPS를 사용합니다.

2. SSL 인증서란?

  • SSL (Secure Sockets Layer): 데이터를 암호화하는 프로토콜로, 보안을 강화하기 위해 HTTPS에서 사용됩니다. SSL 인증서는 서버가 신뢰할 수 있는 기관임을 인증해 주고, 이를 통해 웹 브라우저는 이 서버와의 통신을 암호화하게 됩니다.
  • 현재는 **TLS (Transport Layer Security)**라는 더 최신 기술이 주로 사용되지만, 아직도 일반적으로 SSL이라고 부릅니다.
  • SSL 인증서를 설치하면 브라우저에 자물쇠 모양이 나타나고, 웹사이트 주소가 HTTPS로 시작하게 됩니다. 이를 통해 사용자는 안전하게 웹사이트를 이용할 수 있다고 느끼게 됩니다.

3. Certbot이란?

  • Certbot은 무료로 SSL 인증서를 제공하는 Let's Encrypt와 연동하여 인증서를 설치하고 자동으로 갱신할 수 있도록 도와주는 입니다.
  • Certbot을 사용하면 SSL 인증서를 쉽게 설치하고 관리할 수 있기 때문에 HTTPS 적용을 더 편리하게 만들어 줍니다.

4. 포트 443을 열어야 하는 이유

  • 포트는 컴퓨터 네트워크에서 각 서비스가 데이터 송수신을 할 수 있는 "문"과 같습니다.
  • HTTP는 포트 80을 사용하고, HTTPS는 포트 443을 사용합니다. 따라서, HTTPS 트래픽을 허용하려면 포트 443을 열어야 합니다. 포트 443을 열지 않으면 브라우저에서 HTTPS로 접속할 때 차단됩니다.

5. 방화벽이란?

  • **방화벽 (Firewall)**은 네트워크 보안 장치로, 특정 포트나 IP 주소로부터의 트래픽을 허용하거나 차단하는 역할을 합니다.
  • 예를 들어, 방화벽에서 포트 80과 443을 열어두면, HTTP와 HTTPS 트래픽은 허용되지만, 다른 포트를 통해 들어오는 요청은 차단됩니다.
  • 방화벽을 통해 허용된 트래픽만 들어오도록 설정하여 해킹 시도를 차단하고 서버의 보안을 강화할 수 있습니다.

6. crontab 이 뭐지?

rontab리눅스와 유닉스 계열 운영 체제에서 정기적인 작업을 자동으로 실행할 수 있게 해주는 스케줄링 도구입니다. Cron이라는 프로그램을 통해 실행되며, 사용자가 설정한 일정에 따라 지정된 작업을 자동으로 수행합니다.

주요 개념

  • Cron: 작업을 주기적으로 실행해주는 프로그램입니다. 예를 들어, 매일 오전 3시에 백업 작업을 실행하거나, 매주 월요일에 특정 스크립트를 실행할 수 있습니다.
  • Crontab: "cron table"의 줄임말로, 작업과 그 실행 일정이 기록된 파일입니다. 이 파일에 작업 명령과 실행 빈도를 설정할 수 있습니다.

Crontab의 사용 예시

  • 자동 인증서 갱신: certbot renew 명령을 정기적으로 실행하여 SSL 인증서를 갱신할 수 있습니다.
  • 백업 작업: 데이터베이스 백업을 매일 실행하도록 설정할 수 있습니다.
  • 로그 정리: 오래된 로그 파일을 자동으로 삭제하도록 설정할 수 있습니다.

Crontab 파일 구성

Crontab 파일에는 각 작업의 실행 일정을 다음 형식으로 지정합니다:

 
* * * * * 명령어
┬ ┬ ┬ ┬ ┬
│ │ │ │ └─ 요일 (0~6, 일요일~토요일)
│ │ │ └── 월 (1~12)
│ │ └─── 일 (1~31)
│ └──── 시 (0~23)
└───── 분 (0~59)

 

예를 들어:

  • 0 2 * * * /usr/bin/certbot renew --quiet: 매일 새벽 2시에 certbot renew 명령을 실행하여 인증서를 갱신합니다.

요약

Crontab은 리눅스에서 특정 시간에 특정 작업을 자동으로 실행하게 해주는 도구로, 서버 유지보수와 관리에 매우 유용합니다.

 


아내와 친구에게 사용해보고 난 뒤에 받은 피드백은 다음 게시글에.