• Home
  • About
    • Che1's Blog photo

      Che1's Blog

      Che1's Dev Blog

    • Learn More
    • Facebook
    • Instagram
    • Github
    • Steam
    • Youtube
  • Posts
    • All Posts
    • Django
    • Python
    • Front-end
    • Algorithm
    • etc
    • All Tags
  • Projects

[Deploy] Django 프로젝트 배포하기 - 5. RDS

28 Oct 2017

Reading time ~3 minutes

이번 포스트에서는 프로젝트가 사용할 데이터베이스를 별개의 서버에 두고 운영하는 방법을 알아본다.
각자의 기능이 최적으로 운영되도록 하기 위해서는 기능별로 별도의 서버를 두고 관리하는 것이 효율적이다.
아마존에서 제공하는 RDS 는 데이터베이스 운영에 최적화된 환경에서 효율적으로 데이터베이스를 관리하기 위해 별도로 운영하는 서버이다.


Relational Database Server 시작하기

아마존 웹 서버 콘솔 페이지로 접속한 다음, 메인화면의 검색창에 RDS 를 검색한다.

AWS: https://aws.amazon.com/ko/?nc2=h_lg


왼쪽의 메뉴에서 인스턴스 를 클릭한 다음 DB 인스턴스 시작 버튼을 눌러 데이터베이스 인스턴스를 생성한다.


데이터베이스 엔진을 선택하는 화면에서 원하는 엔진을 선택한다. 이번 포스트에서는 PostgreSQL 을 사용한다.


데이터베이스 사용 목적을 물어보는 화면이 나타나면 개발/테스트 를 선택하고 다음 단계 버튼을 누른다.
프로덕션 을 선택하면 과금이 될 수 있으니 주의.


DB 세부정보 지정 화면에서 RDS 프리 티어가 지원하는 옵션만 표시하기 에 체크한다.
인스턴스 사양 의 항목들이 아래와 같이 설정된 것을 확인한다.


화면 하단의 설정 항목을 채워준 다음 다음 단계 를 눌러 넘어간다.

DB 인스턴스 식별자 는 해당 지역의 AWS 사용자들이 각자 고유한 값을 가지므로 다른 사용자의 DB 인스턴스 식별자와 중복된 식별자를 생성할 수 없다.


고급 설정 구성 의 VPC 보안 그룹 항목에서 새 보안 그룹 생성 을 선택한다.


아래의 데이터베이스 옵션 항목에서 데이터베이스 이름 을 지정해준 뒤 다음으로 넘어간다.
설정에서 볼 수 있듯이 PostgreSQL 은 5432 번 포트를 사용한다.


인스턴스 생성을 완료한 다음 인스턴스 화면으로 이동해서 어느 정도 기다리고 나면 아래와 같이 사용 가능 상태가 되어 데이터베이스 서버를 사용할 수 있게 된다.


이제 EC2 의 보안 그룹 으로 이동해보면 데이터베이스 보안 그룹이 추가되어 있고 5432 번 포트가 등록되어 있는 것을 볼 수 있다.


Django에 연결하기

이제 생성한 DB 인스턴스를 장고 프로젝트에 연결시켜줄 차례이다.


settings.py 설정

settings.py 를 열어 DATABASES 변수를 아래와 같이 수정해주자.

# settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'HOST': 'che1-db.czxnimwgemge.ap-northeast-2.rds.amazonaws.com',
        'PORT': '5432',
        'NAME': 'deploy',
        'USER': 'Che1',
        'PASSWORD': '*******',
    }
}

각각의 항목에 들어가야할 값은 RDS 인스턴스 화면에서 인스턴스를 체크한뒤 세부 정보 아이콘을 클릭하여 나타나는 창에서 확인할 수 있다.

  • ENGINE: sqlite3를 postgresql로 바꿔준다.
  • HOST: 엔드포인트 항목을 복사-붙여넣기 한다.
  • PORT: 포트 항목을 입력한다.
  • NAME: DB 이름 항목을 입력한다.
  • USER: 사용자 이름 항목을 입력한다.
  • PASSWORD: DB 인스턴스를 생성할 때 설정했던 비밀번호를 입력한다.

이제 터미널에서 manage.py 가 있는 경로로 이동한 다음 showmigrations 명령을 실행한다.

./manage.py showmigrations
admin
 [ ] 0001_initial
 [ ] 0002_logentry_remove_auto_add
auth
 [ ] 0001_initial
 [ ] 0002_alter_permission_name_max_length
 [ ] 0003_alter_user_email_max_length
 [ ] 0004_alter_user_username_opts
 [ ] 0005_alter_user_last_login_null
 [ ] 0006_require_contenttypes_0002
 [ ] 0007_alter_validators_add_error_messages
 [ ] 0008_alter_user_username_max_length
contenttypes
 [ ] 0001_initial
 [ ] 0002_remove_content_type_name
sessions
 [ ] 0001_initial

마이그레이션 목록이 나타나면 데이터베이스에 연결이 잘 된 것이다.

만약 psycopg2 가 없다는 에러가 발생할 경우 아래 명령어로 설치해준다.
psycopg2 는 데이터베이스와 장고를 연결해주는 역할을 한다.

pip install psycopg2

psql 접속 해보기

PostgreSQL 설치 및 사용법에 대한 내용은 별도의 포스트에서 다루도록 하겠다.


터미널에서 아래와 같이 입력하여 생성한 데이터베이스에 접속해보자.

psql \
--host=che1-db.czxnimwgemge.ap-northeast-2.rds.amazonaws.com \
--user=Che1 \
--port=5432 \
deploy

비밀번호를 입력하고 나면 아래와 같이 psql에 접속하게 된다.

psql (9.5.9, server 9.6.2)
WARNING: psql major version 9.5, server major version 9.6.
         Some psql features might not work.
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

deploy=> 

이제 데이터베이스를 별도의 서버에서 운영할 수 있게 되었다.


RDS 보안그룹 인바운드 설정

RDS 보안그룹의 인바운드에는 현재 내 IP 주소로 오는 요청만 허가하도록 되어있다.

이 말은 지금은 인바운드에 등록된 IP주소에서 접속하기 때문에 잘 접속되지만 다른 와이파이를 사용하거나 다른 컴퓨터에서 접속하는 등 IP주소가 바뀌면 접속을 못한다는 뜻이다.
더 큰 문제는 우리가 띄워놓은 AWS 가상 컴퓨터에서도 접속을 하지 못해서 데이터베이스 서버가 무용지물이 된다.
이를 해결하려면 인바운드에 EC2 가상컴퓨터의 보안 그룹을 추가시켜주면 된다.
보안 그룹 편집에서 소스 에 EC2 보안 그룹 이름을 검색한 다음 추가한다.

이렇게 하면 AWS 가상 컴퓨터에서 데이터베이스에 접근을 할 수 있게 되어서 띄워놓은 웹서비스에서 데이터베이스가 필요한 작업을 수행할 수 있게 된다.


Tutorial 목차
  • [Deploy] Django 프로젝트 배포하기 - 9. Elastic Beanstalk
  • [Deploy] Django 프로젝트 배포하기 - 8. Docker
  • [Deploy] Django 프로젝트 배포하기 - 7. Amazon S3
  • [Deploy] Django 프로젝트 배포하기 - 6. DNS
  • [Deploy] Django 프로젝트 배포하기 - 5. RDS
  • [Deploy] Django 프로젝트 배포하기 - 4. Static 파일
  • [Deploy] Django 프로젝트 배포하기 - 3. Nginx
  • [Deploy] Django 프로젝트 배포하기 - 2. WSGI
  • [Deploy] Django 프로젝트 배포하기 - 1. AWS

Reference

이한영 강사님 블로그: https://lhy.kr/ec2-ubuntu-deploy



DjangoAWSRDSPostgresqlDatabaseDeploy Share Tweet +1