[AWS] EC2&RDS설정 (2)

ᄋᄌᄒ·2023년 9월 21일
0
post-thumbnail

글을 시작하며

저번 글에는 대부분 ec2설정을 하였는데, 이번엔 rds설정을 위주로 할 생각이다. 마찬가지로 1보 전진 1장애물이다시피 하니까 경험 토대로 꼼꼼하게 작성해보자.


RDS 인스턴스 생성하기

일단 우리가 대부분 프로젝트 시작할 때랑 차이점이 있다는 것을 인지하자. 우리가 사용하는 "로컬"db가 아닌 aws 에서 제공해주는 클라우드 기반 관계형 데이터베이스(RDB)를 이용하는 것이다. 서버나 데이터베이스나 둘다 평소에 작업하던대로 로컬로 사용하면 개발자의 로컬 컴퓨터를 계속 켜놔야하는데 그건 물리적으로 말이 안되니 대여를 하는 것이다.


[데이터베이스 생성 버튼 클릭]

책에서는 maraiDB를 선택한 이유를 아래와 같이 작성하였다.

  • 가격
  • Amazon Aurora(오로라) 교체 용이성

mariaDB는 MySQL기반으로 만들어졌기에 전반적인 부분이 유사하다. 하지만 MySQL과 비교했을 때는 아래와 같은 장점이 존재한다.

  • 동일 하드웨어 사양으로 향상 성능
  • 활성화된 커뮤니티
  • 다양한 기능
  • 다양한 스토리지 엔진


대부분의 공부하는 사람들이 돈을 지불하고 사용할 마음이 없을거라 생각한다. 우리는 [프리티어]를 꼭 사용하도록 하자. 필자도 최대한 과금을 방지하도록 선택했지만 또 어떤 옵션에서 과금이 나갔을지는 모른다. 그러니까 조심 또 조심

DB Name과 master User Name 설정이다. 나중에 DB name을 사용하기 때문에 의미있게 작성하면 좋다. 그리고 메모.(마스터 암호도 마찬가지로 후에 사용)


이거는 조금 애매하다. default로 주는 옵션은 db.t3.micro이다. 그리고 프리티어에서 사용 가능하다고도 나와있는데, 과금 방지에 대해 찾아보니 t2를 사용하라더라. 괜히 t3사용하다가 과금 나올까봐 걱정되어서 그냥 t2로 사용했다.


이 부분도 주의할 점이 있다. 프리티어에서 허용된 스토리지 양이 존재하기 때문에 RDS 인스턴스를 여러개 사용하면서 그 한도량을 초과하게 되면 과금이 발생하게 된다. 필자는 혹시 몰라 -어차피 이 프로젝트에서는 많은 용량을 사용할 것이 아니기 때문에- 적은 스토리지를 할당하였다. (최소가 20이랬는데 5를 적어도 가능했었다.)

이 옵션은 취소하도록 하자. 과금 방지 주의!

나와있지 않지만 인증기관은 default로 했다.

나중에 파라미터 그룹을 편집할건데, 미리 생성하고 RDS인스턴스 생성할 때 선택하는 방법도 있다.


비활성화 클릭..

얘도..

이제 모든 세팅이 끝났으니 인스턴스 생성!

파라미터 설정

  • 타임존
  • character set
  • Max connection

위 세가지를 세팅할 것이다.


아까 인스턴스에서 파라미터를 고르는 부분에서 미리 생성해둔 파라미터 그룹이 있으면 선택할 수 있던 것이다. 지금은 그냥 [파라미터 그룹 생성 버튼 클릭]

그룹이름은 식별할 수 있는 정도로(인스턴스랑 나중에 연결해야하니까)
생성한 그룹을 선택하면 아래와 같이 파라미터 검색창이 뜰거다.

위와 같이 작성하고 [변경 사항 저장 버튼 클릭]

  • character_set_client
  • character_set_connection
  • character_set_database
  • character_set_filesystem
  • character_set_results
  • character_connection
    --> utf8mb4
  • collation_connection
  • collation_server
    --> utf8mb4_general_ci

이렇게 편집 사항 수정 후 저장했으면 다시 데이터베이스에 들어가 수정을 하자. 그리고 데이터베이스 옵션에서 DB파라미터 그룹을 만들었던 파라미터 그룹으로 변경해준다. 이때 즉시 적용을 선택해야한다.

Local에서 RDS 접속

로컬에서 RDS로 접근하기 위해서 RDS의 보안 그룹에 로컬의 IP를 추가한다. AWS의 EC2 보안그룹 페이지에 들어가서


"보안 그룹 ID"를 복사하고
RDS 인스턴스의 "연결 및 보안"에서 해당 VPC 보안그룹을 클릭한다
그러면 다시 EC2의 보안그룹이 연결되는데 여기서 선택된 보안그룹을 수정하여

  • MYSQL/Aurora, TCP, 3306, 사용자지정, [보안 그룹 ID]
  • MYSQL/Aurora, TCP, 3306, 내 IP

인바운드 규칙 두개를 만들어준다.

IntelliJ에서 RDS연결

이부분은 책이랑 완전 다르게 진행한다. 책에서는 DB navigator라는 플러그인을 다운받고 이를 통해 DB browser를 사용한다. 하지만 필자가 찾아봤을 때는 DB navigator 플러그인은 존재하지 않았다. 따라서 다른 방법을 찾아서 진행했다.

https://developer-been.tistory.com/24
해당 자료와 같이 진행해주면 잘 연결된다.

이하 생략!

IntelliJ 콘솔에서 MYSQL 연결 확인

use awsStudy;

책에도 나와있는 부분이지만 잘못 보고 넘어갔다가 한참 헤맸다. 이 명령어 사용 안하면 이따 create table 명령어 날릴때 동작 안한다.

show variables like 'c%';
select @@time_zone, now();

우리가 설정했던 파라미터들을 확인할 수 있다. 필자의 경우에는 파라미터 그룹에서 설정했던대로 나오지 않아서 직접 세팅해준 것들이 있다.
아래 명령어는 시간을 확인할 수 있다.

ALTER DATABASE [데이터베이스명]
  CHARACTER SET = 'utf8mb4'
  COLLATE = 'utf8mb4_general_ci

직접 설정하면 위와 같은 명령어를 사용해야할 것이다.

CREATE TABLE test(
    id bigint(20) NOT NULL AUTO_INCREMENT,
    content varchar(255) DEFAULT NULL,
    PRIMARY KEY (id)
) ENGINE = InnoDB;

insert into test(content) values ('테스트');
select * from test;

이 부분에서 쉽게 진행되지 않는다. 왜냐하면 한글을 인코딩하는 과정에서 에러가 발생한다. 우리는 분명 charset 에서 utf8로 설정했는데도 말이다.

alter table awsStudy.test default charset = utf8mb4;
alter table awsStudy.test convert to charset utf8mb4;

필자가 시도했던 방식이다. 기본 인코딩 변경과 기존 인코딩도 변경해주는 명령어이다. 이렇게 진행하니 다행히 데이터베이스에서도 한글이 오류없이 저장되었다.

EC2에서 RDS 접근

sudo yum install mysql
mysql -u [계정] -p -h [Host 주소]

책에서는 위와 같은 명령어를 사용했다.(설치 -> 접속 과정의 명령어이다.)
필자의 경우는 connection conflict error가 발생하여 아래와 같이 작성했다.

sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
sudo dnf install mysql-community-server

이러한 에러가 발생하는 이유는 amazon linux에서 지원하지 않는 버전의 리포지토리를 설치했기 때문이라고 한다.
[참고자료] https://dev.classmethod.jp/articles/ec2-mysql-install-confilicting-requests-error-kr/

ubuntu@ip-172-31-2-147:~$ mysql -h [endpoint address] -u [admin] -p
Enter password: 
show database;

명령어를 실행하여 실제로 생성한 RDS가 맞는지 확인해보자.


글을 마치며

과금방지에 버전 변경까지 신경써야한다... 돌다리 무쟈게 두드리고 건너자!

0개의 댓글