본문 바로가기

[Python]/[Flask & Django]

[Django] AWS EC2에 DRF(Django-Rest-Framework) Server 배포

728x90

github.com/Seungyeup/PNU_SGM

 

Seungyeup/PNU_SGM

접근성이 높은 개방형 투자 플랫폼 '맥스턴'을 제작하여, 개인 투자자의 자기주도적 투자 전략 수립을 돕는 것이 목표입니다. 플랫폼 자체 커뮤니티의 활용으로 개인 투자자들의 투자 문화를 성

github.com

 

 < EC2에 배포하기 >

 

    지난 두달간 팀원들과 협력해서 만들기 시작한 프로젝트가 이제 거의 끝을 향해 달려가고 있다. 관련 자료들을 정리하고, 포스팅하기에 앞서 이번에 개발한 DRF-server와 Next.js server를 AWS EC2에 배포한 내용을 정리하고자 한다. AWS의 다양한 프로덕트들을 실제로 사용한 것은 아니다. 데이터베이스 마저도 MongoDB Atlas를 사용하면서 클라우드 상에 따로 데이터베이스를 만들 필요는 없었다. 하지만 실제로 개발한 프로젝트를 이론상으로 배우기만 했던 AWS에 배포해 보았다는 것만 해도 의미가 있었다. 

  ※ 이전에 aws에서 AwsomeDay를 진행하면서 참여자들에게 공짜로 지급한 credit이 있어 이를 적용하고 배포하기로 했다. 

 

< 인스턴스 생성 >


1. 먼저 AWS console을 열고 EC2에 접속한 뒤, 리전을 설정해준다. 나는 가까운 Seoul 로 지정해 주었다. 

2. 다음으로 이어서 AMI를 결정해 주어야 한다.

아마존에서 자체 제공하고 있는 image들도 있고, 아무래도 익숙한 오픈소스 운영체제들도 보인다. 나는 Instance launch > Ubuntu Server 18.04 LTS 를 선택했다. 가장 익숙하기도 하고, linux가 아무래도 편하다.

3. 인스턴스 타입 선택

그 다음은 인스턴스 타입을 설정하는 일이다. 물론 무료 크레딧을 이용하고 있고, 해커톤 심사가 끝나는 시점에는 당연히 인스턴스를 삭제하게 되겠지만 아무래도 과금의 경험이 있다보니 프리티어 타입을 선택했다. 고성능의 인스턴스가 필요한 것도 아니기 때문이다.

4. 이어서 바로 Review Tab으로 넘어간다

step3. Configure Instance부터 step 6.Configure Security Group은 default로 설정해 주었다. 특히 step 4번은 아예 설정하지 않았는데, 그 이유는 아마존의 S3등 storage를 이용할 필요 없이 프론트와 백엔드 모두 클라우드 스토리지인 mongoDB Atlas를 이용했기 때문이다.

5. 키페어 저장

이어서 인스턴스를 실행시키게 되면 키페어와 관련된 항목이 나온다. 키페어는 외부에서 인스턴스로 ssh형식의 접근을 인증하는데 필요한 토큰의 역할을 하는데, 사용자의 컴퓨터 내에 숨겨진 폴더에 주로 저장하곤 한다. 먼저 키페어를 저장해 주도록 하자. 

이어서 저장한 키페어를 홈폴더의  ~/.ssh에 옮겨준다. .ssh라는 폴더를 생성하고, 그 안에 키페어 관련 파일들을 관리하는 것도 좋은 방법

(~/.ssh 폴더가 없을 경우) $ mkdir ~/.ssh/
$ mv ~/Downloads/deploy_test.pem ~/.ssh/

마지막으로 .ssh폴더에 들어가 있는 키페어 파일을 , 해당 폴더의 소유주만 읽을 수 있도록 권한변경을 해주도록 하자. 

※ chmod : chmod는 change mode의 축약어로, 대상 파일과 디렉토리의 사용권한을 변경할 때 사용한다. 알다시피 chmod 뒤로 이어지는 숫자는 user(owner),group,others에 대한 rwe의 기능을 축약해서 보여주고 있다. 400은 user(owner)에게 read권한을 부여한다.

$ chmod 400 ~/.ssh/pnu_sgm_backend_key.pem

 

6. 인스턴스 생성 완료!

이런식으로 전부 설정을 마치면 Instance가 무사히 running하고 있는 모습을 볼 수 있을것이다. 

 

< 인스턴스 접속 >


이어서 이번에는 생성한 Instance에 ssh로 접속해보자.

이를 위해서는 아래의 정보들을 입력해야 하는데, 유저이름은 초기에 ubuntu, public DNS는 instance description에서 찾을 수 있다.

$ ssh -i [키 페어 경로] [유저 이름]@[퍼블릭 DNS 주소]

위의 형식에 맞게 입력한 나의 ssh 접속 스트링은 다음과 같았다.

ssh -i ~/.ssh/pnu_sgm_backend_key.pem ubuntu@ec2-13-209-76-4.ap-northeast-2.compute.amazonaws.com

 위의 캡쳐된 화면을 보면 Instance에 무사히 접속한 것을 확인할 수 있다.

  이어서 인스턴스에 대한 기본적인 세팅을 해주어야 한다. ubuntu ami를 설치해 실행하기는 했지만 아직은 빈 껍데기에 불과하므로, 우리가 일반적으로 사용하는 커널명령어가 먹히기 위해서는 몇가지 기본적인 설정을 해 주어야 한다. 권한은 sudo로 작업하도록 하자.

$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo apt-get install python3-pip

 

마찬가지로 ubuntu권한으로 권한을 변경하는 작업을 이어 해줘야 한다. /srv안에 깃에서 끌어온 레포지토리를 관리하기 위해 다음과 같이 설정해 주었다. 

$ sudo chown -R ubuntu:ubuntu /srv/

이어서 /srv폴더로 들어가 레포지토리를 클론해준다.

$ cd /srv
$ git clone [레포지토리 주소]

그다음은 개인적인 내용인데, django의 가상환경에서 미리 저장해놓은 requirement들을 설치해 준다.

$ source env/bin/activate
$ pip3 install -r requirements.txt

이어서 해주는 작업은 보안그룹 설정이다.

Inbound rule은 필요에 따라서 설정해주면 되는데 TCP 22번 포트에 기본 디폴트 설정으로 이어주면 된다.

새로운 :8080 포트 추가

동일 주소로 접속해 실행하면 성공!

public ip또한 동일하게 부여했던 포트번호인 8080을 사용하면 동일하게 접속가능하다.

 

- 끝 -

728x90