home > devops > aws > [aws] rds(database) 생성하고 접속하기 (feat. mysql)

[aws] rds(database) 생성하고 접속하기 (feat. mysql)
devops aws rds

intro : rds(database)를 생성하고 접속하는 방법에 대해서 알아보자.

RDS란?

요약하자면 관계형 데이터베이스를 뜻하는데, MySQL Maria DB 등 다양한 관계형 데이터베이스를 AWS로부터 빌려서 사용하는 행위이다.

RDS를 왜 사용할까?

로컬환경에서 개발할때는 로컬환경에 설치된 MySQL와 같은 DB를 연결해서 사용한다. 하지만 서버를 배포하고 나면 서버가 내 컴퓨터에 설치된 MySQL과 연결할 수 없다. DB도 외부 인터넷에서 접속할 수 있도록 같이 배포해 주어야 한다. 이러한 이유 뿐만아니라 여러 부가기능 자동백업 모니터링 등을 가지고 있다.

EC2에 MySQL을 직접 설치하면 안될까?

해도된다. 다만 EC2에는 서버를 배포하는게 통상적인데 서버와 DB를 같은 한 컴퓨터 안에 구성하고 운영을할시에 서버가 죽으면서 DB도 같이 죽는 현상이 발생할 수 있기에 현업에서는 분리하여 서버는 EC2에, DB는 RDS에 설치하는게 통상적이다. 다만 개인프로젝트나 학생이 운용하는 경우 비용절감을 위해 EC2에 DB를 설치하고 운용하는것도 괜찮은 방법이다.

RDS 생성하고 접속하기

Step1. RDS 생성하기

가장먼저 rds를 검색하여 대시보드로 접근한다. 그 뒤 대시보드의 데이터베이스 생성 버튼을 클릭하자.

image1

(굉장히 직관적으로 데이터베이스 생성 버튼이 떡하니 있다.)

데이터베이스 생성 버튼을 클릭하면 다음과 같은 페이지가 보이는데 우리는 MySQL을 생성하고 접근해보겠다. 이미지처럼 MySQL을 선택한다.

image2

(MySQL 선택)

다른 부분들은 변경없이 템플릿 영역으로 이동하여 프리티어를 선택해준다. 프리티어라고 해서 성능적으로 크게 나쁜 유형은 아니라고 한다.

image3

(프리티어 선택)

설정 영역의 DB 인스턴스 식별자를 입력한다. 나같은 경우는 api-db 라고 지정하였다. 그 뒤에 자격증명 설정 영역에 값을 입력해야 하는데 DB의 ROOT 계정의 아이디와 비밀번호를 초기 설정하는것이라고 생각하면 된다. 아이디 admin 비밀번호 본인만 아는값 으로 설정하고 넘어간다.

image4

(자격증명 설정에 작성한 값은 어딘가에 기록해두자.)

다음으론 인스턴스 구성 영역에서 DB 인스턴스 유형을 선택한다. t4g.micro가 프리티어에 해당하기에 선택해 주었다.

image5

(프리티어에 해당하는 유형을 잘 찾아서 선택해주자.)

다음으로는 스토리지인데 유형으로 범용 SSD(gp3)를 선택하고 할당된 스토리지는 20GB를 설정한다. 프리티어는 20GB까지 지원해준다.

image6

(프리티어 범위안에 해당하는 값을 잘 찾아서 선택하자. 스토리지는 20GB)

연결영역에서는 다른 부분 변경하지 않고, 퍼블릭 액세스 부분에서만 예로 선택을 확인해준다. 나중에 외부에서 RDS에 접근할 수 있도록 설정하는 거라고 볼 수 있다.

image7

(퍼블릭 액세스에만 예 버튼을 클릭한다.)

위 과정의 단계를 완료한 뒤에 다른 기본값들은 변경하지 않고 쭉 내려서 데이터베이스 생성 버튼을 클릭해주자.

image8

(데이터베이스 생성 버튼 클릭)

다음과 같이 RDS가 생성되고 있음을 확인 할 수 있다.

image9

(생성이 완료되는데 시간이 조금 걸린다. 5분정도 소요되는 것 같다.)

Step2. RDS 보안그룹 설정하기

생성이 완료되는것을 기다리면서, RDS에 설정할 보안그룹을 생성해야한다. EC2 > 네트워크 및 보안 > 보안 그룹 으로 이동한다.

image10

(보안 그룹 생성 버튼을 클릭하자.)

기본 세부 정보의 보안 그룹 이름을 나같은 경우 api-db-security-group 이라고 작성하였다. 아래 설명도 동일하게 작성해준다. 인바운드 규칙으로는 외부에서 어디서든지 접근할수 있도록 Anywhere-IPv4를 설정해준다.

image11

(3306으로 접근할수 있도록만 인바운드 규칙을 잘 설정하자.)

아웃바운드 규칙은 변경하지 않고 쭉 아래로 내려서 보안그뤕 생성 버튼을 클릭하자.

image12

(보안 그룹 생성을 완료하자.)

보안 그룹을 생성완료하고 난뒤, 다시 RDS로 이동하자. 우리가 아까 생성중이었던 RDS는 생성이 완료되었다고 나올 것이다.

image13

(보안 그룹 생성을 완료하니 RDS도 생성이 완료되어있다.)

이제 우리가 생성한 api-db를 편집하여 보안그룹을 변경해줄것이다. 기존에는 default로 설정되어 있는것을 우리가 방금 만든 api-db-security-group 로 변경하는 작업을 진행한다. 가장먼저 api-db를 클릭하고 수정 버튼을 누르고 들어가서 아래로 쭉 내리면 연결 영역이 보이고, default로 보안그룹이 설정되어 있는데 이것을 아래 이미지처럼 api-db-security-group 로 변경해준다.

image14

(보안 그룹을 변경해주자)

다른 부분들은 변경하지 않고 쭉 화면을 내리면 다음 버튼이 있다. 계속 버튼 클릭해 주자.

image15

(계속 버튼 클릭)

다음으로 우리가 변경한 보안그룹을 즉시 변경으로 선택해주고 DB 인스턴스 수정 버튼을 클릭하자.

image16

(즉시변경 DB 인스턴스에 적용)

보안 그룹이 즉시변경되었음을 알림창을 통해 알 수 있다.

image17

(보안 그룹 변경 완료)

Step3. 파라미터 그룹 추가하기

다음과 같이 RDS의 파라미터 그룹 카테고리로 이동한 후 파라미터 그룹 생성 버튼을 클릭한다.

image18

(파라미터 그룹 페이지)

생성 페이지에서 다음 이미지와 같이 값을 같이 작성한다.

image19

(이미지를 잘 보고 따라서 선택하자)

아래처럼 생성된 파라미터 그룹을 수정해야한다. api-db-parameter-group 을 누르고 편집을 눌러주자.

image20

(일단은 생성된 파라미터 그룹이 잘 생성되었는지 부터 확인하자)

편집을 누르면 다음과 같은 화면이 나온다.

image21

(편집페이지로 들어가면 파라미터들을 변경할 수 있는 값들이 나온다.)

우리는 여기서 character 라고 검색하여 인코딩 방식을 utf8mb4(한글 한자 이모티콘을 모두 지원하는 인코딩 방식이다.)로 변경할것이다. 변경해야 하는 항목을 정확하게 보고 다음과 같이 값을 입력하고 변경 사항 저장 버튼을 클릭한다.

image22

(변경해야하는 파라미터 1)

image23

(변경해야하는 파라미터 2)

다음으로는 다시 편집페이지로 들어가서 collation이라고 검색하고 값을 utf8mb4_unicode_ci 값을 입력할 것이다. collation은 정렬에 대한 규칙을 정의하는 값인데 대중적으로 많이 사용하는 utf8mb4_unicode_ci 으로 값을 입력하고 변경 사항 저장 버튼을 클릭한다.

image24

(변경해야하는 파라미터 1)

image25

(변경해야하는 파라미터 2)

마지막으로 time_zone에 대한 값을 변경한다. Asia/Seoul로 입력하고 변경 사항 저장 버튼을 클릭한다.

image26

(마지막 파라미터 변경이다.)

이제는 우리가 생성하고 변경한 파라미터 그룹을 RDS에 다시 수정해줘야한다. 기존에는 default.mysql8.0 으로 DB 파라미터 그룹이 설정되어 있는데 우리가 생성한 파라미터 그룹이름인 api-db-parameter-group으로 변경한다. 이전에 보안그룹을 수정하였던 것처럼 아래로 내려서 계속 버튼을 클릭하고 즉시 적용으로 파라미터 그룹 변경을 완료한다.

image27

(추가 구성 영역에서 파라미터 그룹을 변경하자.)

지금까지 RDS의 생성 후, 보안그룳 수정, 파라미터 그룹 수정을 완료하였다. 그러나 파라미터 그룹에서의 time_zone의 변경은 RDS의 재부팅이 일어나야지만 적용이된다. 그렇기에 다음과 같이 RDS를 재부팅을 해야한다.

image28

(RDS를 재부팅 해주자.)

재부팅을 완료하였다면 드듸어 RDS에 접속할 준비가 완료된 것이다.

Step4. RDS 접속하기

RDS는 접속하기 위해 여러 툴을 사용할 수 있다. datagrip 이라던지 dbeaver 혹은 intelij 로도 접속할 수 있다. 가장 편한방법으로 접속하면 되는데 intelij로 접속해 보겠다.

가장 먼저 RDS의 내가 생성한 RDS인 api-db를 클릭한다. 페이지가 이동되고 api-db의 여러 세부 정보가 나오는데, 이때 우리가 필요한건 엔드포인트의 주소이다. 이 엔드포인트가 DB 접속시의 HOST 부분에 작성될 값이다.

image29

(엔드포인트를 복사하자.)

인텔리제이를 실행하고 MYSQL DB 연결을 할때 다음과 같이 호스트에 엔드포인트 값을 복사해서 넣어주고 admin 계정과 비밀번호를 입력하여 연결한다.

image30

(RDS MYSQL을 접속해보자)

접속이 잘 된것을 확인하였으면 아래처럼 콘솔창을 열어서 쿼리도 실행해보고 정상적으로 작동하는지 확인해보자.

image31

(간단하게 쿼리작성해서 실행도 해보자.)

RDS 종료하기

위 방법을 통해 RDS를 생성하고 접속하는 방법에 대해서 알아보았다. RDS는 비용이 나가는 기능이기에 사용을 완료하였다면 다음과 같은 방법을 통해 안전하게 종료해보자.

가장 먼저 RDS 대시보드 페이지의 데이터베이스 페이지로 이동한다.

image32

(데이터베이스 페이지)

그 뒤에 삭제하고자 하는 데이터베이스를 선택하고 삭제를 클릭한다.

image33

(삭제 버튼 클릭)

삭제 버튼을 클릭하고 나서 삭제할때의 옵션중에 최종 스냅샷 생성, 자동 백업 보존 항목을 언 체크 하고 삭제를 진행한다.

image34

(언체크 해야 하는 항목 확인이 필요함.)

어느정도의 시간이 지나고 나면 삭제가 완벽하게 처리된다.

다음으로

이렇게 하여 RDS 생성 및 접속하기가 마무리 되었다. EC2에 연결하여 DB 접근을 하는것 또한 포스팅에 포함하고자 하였으나, Intelij에서 DB 접속하는 방법만 알아도 충분히 EC2와 연결하는것은 크게 다르지 않기에 생략하였다. 다음으로는 파일 및 이미지 업로드 (S3)를 학습할 예정이다.

다음글 : [aws] s3를 통해 파일 및 이미지 업로드 해보기 (feat. spring boot)