본문 바로가기

기술

[Django] AWS RDS + Django 데이터베이스 설정

들어가기 앞서 모든 종류의 피드백은 환영합니다.

들어가며

Django를 실행하기 위해 자신에게 맞는 데이터베이스를 찾았을 것이다. 필자의 경우 MariaDB를 사용했다. 그 이유는 무료이고 (MySQL에 대한) 한국어 자료가 굉장히 많기 때문이다. 

 

처음에는 PostgreSQL을 사용했다. 그 후에 MariaDB를 설치했는데 결론은 둘 다 환경 셋팅하는데 엄청나게 애먹었다... 이 글에서는 AWS RDS를 설정하는 방법과 그 후 Django에 세팅하는 방법에 대해 알아보도록 하겠다.

AWS RDS 인스턴스 생성하기

처음 AWS를 사용하면 모든게 낯설기만 하다. 다행히도 다음과 같이 설명이 잘 되어있는 글이 있다. 하지만 AWS를 처음 접하게 된다면 모르는 개념이 많으므로 뒤에서 추가적으로 설명하도록 하겠다.

https://devmango.tistory.com/19

 

6.AWS RDS 인스턴스 생성하기/ 외부에서 접속 가능하게 설정/ DB툴로 접속

1. https://aws.amazon.com/ko/로 접속한 후, [콘솔로 로그인] 버튼을 클릭하여 로그인한다. 그리고 좌측 상단에 [서비스]를 클릭한다. 2. [서비스] 버튼을 클릭하면 아래 이미지와 같은 화면이 뜨는데 데이터베..

devmango.tistory.com

한글 인코딩

같은 문자를 저장해도 해석하는 방법이 다른데, 이를 인코딩이라고 한다. 데이터베이스에서 한글을 사용하고 싶다면 한글 인코딩을 꼭 해주어야 한다. 그렇지 않으면 라틴어나 다른 문자로 인식하게 될 것이다. 다음의 문자 인코딩에 대한 설명 글을 참고하자.

https://vigli.tistory.com/52

 

문자 인코딩이란?

글 내용이 많지만 문자 인코딩이 궁금하다면 꼭 읽기 바란다. 우선 인코딩을 위키 백과에 나온 설명으로 보면 '정보의 형태나 형식을 변환하는 처리나 처리 방식이다.' 라고 정의 되어 있다. (출처 : https://ko.w..

vigli.tistory.com

이후 대표적인 charset인 utf8과 이모지도 사용할 수 있는 utf8mb4를 살펴보고, 정렬방법인 collation도 같이 살펴보자.

https://blog.lael.be/post/917

 

[MySQL/MariaDB] utf8mb4 언어셋 소개 및 표현범위.

기술이 매우 빠르게 발전한다. 배워도 배워도 계속 배워야 한다.   최근에 라엘이가 앞으로 100년동안은 나타나지 않을 것이라고 예상했던, 4 Byte UTF-8 문자열을 보고 여러 깨닳은 바가 있었고 여러분에게 도움이 될만한 정보가 있어 공유하려고 한다.   데이터베이스를 구축하다보면 텍스트 데이터(Text Data)를 취급해야 할…

blog.lael.be

파라미터 그룹

지금까지 한글 인코딩 작업이 필요하고, charset과 collation을 바꾸어야 한다는 사실을 알게 되었다. 이때는 두 가지 방법이 있는데, 애초에 데이터베이스를 만들 때부터 기본값으로 만드는 방법데이터베이스 생성후 설정을 하는 방법이 있다. 첫 번째 방법이 더 좋은데, 두 번째 방법으로 하면 데이터베이스를 껐다 킬 때마다 다시 설정을 해야하기 때문이다.

이때, 데이터베이스를 만들 때부터 기본값으로 만드는 방법이 파라미터 그룹을 사용하는 것이다. 즉, 파라미터 그룹은 디폴트 값이라고 생각할 수 있다.

 

다음은 파라미터 설명이 무엇인지 알려주는 AWS 설명이다.

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html

 

DB 파라미터 그룹 작업 - Amazon Relational Database Service

DB 파라미터 그룹을 생성하려면 AWS Management 콘솔에 로그인한 다음 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다. 탐색 창에서 파라미터 그룹을 선택합니다. [Create parameter group]을 선택합니다. 파라미터 그룹 생성 창이 나타납니다. 파라미터 그룹 패밀리 목록에서 DB 파라미터 그룹 패밀리를 선택합니다. 유형 목록에서 DB 파라미터 그룹을 선택합니다. 그룹 이름 상자에

docs.aws.amazon.com

다음은 파라미터 그룹을 설정하는 예제이다. (옛날 AWS의 인터페이스이다.) 혹시라도 RDS를 생성한 후에 파라미터 그룹을 적용시킬 경우 해당 데이터베이스를 다시 재부팅해야한다.

http://www.smileforyou.net/?p=112

 

RDS 설치 후 character set 확인 – Refresh

RDS 에서 mysql 5.5 버전을 사용합니다. 아시다시피 항상 문제가 되는 건 character set 입니다. 이젠 뭐 “show variables like ‘c%’;” 이건 확인하고 시작해야죠. ^^;; 자 해봤더니 이건 뭐~~~~ 기본입니다. ㅋ 자 이걸 변경 해야겠죠~ 찾아보니 파라미터 그룹을 추가하고 적용하면 되는 것 같습니다. 좌측에 “Parameter Groups” 를 선택합니다. 상단에 “Create Parameter Group” 을 클

www.smileforyou.net

Character Set 확인하고 변경하기

다음 명령어로 확인할 수 있다.

show variables like "c%";

다음과 같이 변경한 charset로 바뀌어 있어야 한다.

혹시라도 위처럼 안 되어있고, 파라미터 그룹을 이용하지 않고 명령어를 통해 데이터베이스 charset을 바꾸려 한다면 다음 명령어를 통해 할 수 있다.

# 각각의 데이터베이스에 대해
ALTER DATABASE <dbname> CHARACTER SET = utf8mb4 COLLATE utf8mb4_unicode_ci;
# 각각의 테이블에 대해
ALTER TABLE <tablename> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

보안그룹

AWS는 아무나 외부에서 인스턴스에 접근하지 못하도록 되어있다. 접근하기 위해서는 보안그룹에서 '인바운드' 규칙을 추가해주어야 한다. '인바운드'는 외부에서 안으로의 접근을, '아웃바운드'는 안에서 밖으로의 접근을 관리하는 규칙이다. 맨 처음 레퍼런스의 19번부터 따라하면 된다.

Django 데이터베이스 설정

장고에서 데이터베이스 설정은 꼭 공식 문서를 보고 하도록 하자. 필자의 경우 대충 구글링하고 하다가 알 수 없는 에러 지옥에 빠지게 되었다. 이유는 Mac OS에서 mysqlclient를 설치할 때 자잘한 오류가 있어 설정을 변경해주어야 했던 것. 이런 내용이 공식 문서에 모두 나와있다. 또한 이런 에러는 StackOverFlow에서도 답변이 없는데, 이는 모두 공식 문서를 보고 따라하니 질문이 없는 것은 당연했다. 하여튼 꼭 보고하자.

https://docs.djangoproject.com/en/2.2/ref/databases/

 

Databases | Django documentation | Django

Django The web framework for perfectionists with deadlines.

docs.djangoproject.com

이후 모든 설정이 끝났으면 settings.py에서 다음과 같이 자신의 DB 설정으로 바꿔주자.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',	# DB 엔진
        'NAME': 'mydatabase',	# DB 이름
        'USER': 'mydatabaseuser',	# 사용자 이름
        'PASSWORD': 'mypassword',	# 사용자 비밀번호
        'HOST': '127.0.0.1',	# 인스턴스 주소(IP), RDS에서의 엔드포인트
        'PORT': '5432',	# 포트번호
    }
}

마치며

발생했던 에러 문구까지 기록해놨으면 좋았을텐데 그런 아쉬운 점이 남는다. 이 글을 읽고 RDS+Django 세팅을 잘 마쳤으면 하는 바람이다.