[RDS] AWS에서 데이터베이스 환경 구성하기(3) - 로컬 PC에서 RDS 접속하기

Kaite.Kang·2023년 2월 5일
0
post-thumbnail

* 목표

  • 로컬 PC와 ec2에서 데이터베이스에 접근할 수 있도록 RDS 보안 그룹을 설정한다.
  • 로컬 PC와 ec2에서 데이터베이스가 잘 접속되는지 확인한다.

1. 데이터베이스 보안 그룹 설정하기

로컬 PC에서 RDS로 접근하기 위해서 RDS의 보안 그룹에 본인 PC의 IP를 추가하자.
RDS 세부 정보 페이지에서 “VPC 보안 그룹” 항목을 클릭한다.

“ec2 보안 그룹 ID”와 “본인 PC의 IP”를 RDS 보안 그룹의 인바운드로 추가한다.
인바운드 규칙 유형에서는 MYSQL/Aurora 를 선택하면 자동으로 3306포트가 선택된다.

“ec2 보안 그룹 ID”는 보안 그룹 탭에서 “보안 그룹 ID”를 입력하면 된다.

EC2를 보안 그룹에 추가하면 EC2와 RDS 간의 접근이 가능하다.
EC2의 경우 이후에 2대 이상이 될 수 도 있는데 보안 그룹 간에 연동해 놓으면 매번 IP를 등록하는 수고를 덜 수 있다.

2. 로컬PC에서 데이터베이스 접속하기

로컬에서 원격 데이터베이스로 붙을 때 GUI 클라이언트를 많이 사용한다.
MySQL의 대표적인 클라이언트로 WorkBench, SQLyog(유료), Sequel Pro(맥전용), DataGrip(유료) 등이 있다.
여기서는 인텔리제이에 Database 플러그인을 설치해서 진행해보자.
인텔리제이에서 “Database Navigator” 플러그인을 설치한다.

  • 환경 설정(Preferences…) [cmd + ,] → 플러그인 → “Database Navigator” 설치

설치가 다 되었으면 인텔리제이를 재시작 한 뒤 Action 검색으로 Database Brower를 실행한다.

  • Action 검색 Mac 단축키: [cmd + Shift + a]

그럼 프로젝트 왼쪽 사이드바에 DB Browser가 생긴다. 접속할 DB정보를 입력해야 하는데 mariaDB는 MySQL기반이므로 MySQL을 사용한다.

접속할 RDS 접속 정보를 입력해야 한다.

여기서 Host 정보는 RDS의 엔트포인트를 입력하면 된다.

입력을 모두 마친뒤에는 [Test Connection]을 클릭해 연결 테스트를 할 수 있다. 연결이 성공적으로 진행되면 “Connection successful” 메시지를 확인할 수 있다.

연결 테스트가 성공했다면 Apply 버튼을 차례로 눌러 최종 저장한다.
그러면 Schema에 데이터베이스 이름이 생기는 것을 확인할 수 있다.

만약 Schema에 데이터베이스 이름이 생성되지 않는다면 RDS를 구성할 때, 초기 데이터베이스 이름이 빠지지 않았는지 확인해보자. RDS의 “초기 데이터베이스 이름”이 없으면 데이터베이스가 생성되지 않아서 SQL문을 사용할 수 없다. 해결 방법은 이 값은 수정할 수 없어서 RDS를 삭제하고 다시 만들어 주었다. 인텔리제이에서 생성한 기존 접속 정보를 삭제하고 다시 만들어주니 Schema에 데이터베이스 이름이 잘 생성되었다.

3. 로컬에서 데이터베이스 접속하기

이제 로컬에서 데이터베이스에 접속하기 위한 준비가 다 되었다. 콘솔에서 SQL을 실행해보자.
아래 쿼리문은 쿼리가 수행될 database를 선택하는 쿼리문이다.
쿼리문은 드래그하고 [Excute Statement] 버튼을 클릭하면 된다.

use {AWS RDS 웹콘솔에서 지정한 데이터베이스명};

화면 아래의 Execution Console에서 SQL statement excuted sucessfully 메시지가 떴다면 쿼리가 정상적으로 수행된 것이다.

1) 데이터베이스의 character_set, collation 설정 확인

데이터베이스 현재 상태의 character_set, collation는 어떤 값인지 확인해보자.

쿼리문은 아래와 같다.

show variables like 'c%';

결과를 보면 chracter_set_database와 collation_database 항목이 latain1로 되어 있다.

이 파라미터 항목은 MariaDB에서만 RDS 파라미터 그룹으로 변경이 안된다. 아래 쿼리로 직접 변경할 수 있다.

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

show variables like 'c%';

모든 항목이 utf8mb4로 변경되었다.

2) 타임존 변경하기

타임존은 아래 쿼리로 확인할 수 있다.

select @@time_zone, now();

RDS 파라미터 그룹이 잘 적용되어 한국 시간으로 적용된 것을 확인할 수 있다.

3) 한글 데이터 입력 테스트

한글명이 잘 들어가는지 확인해보자.

아래 쿼리문은 간단한 테이블을 생성하고 insert 쿼리를 실행한다.

참고로 테이블 생성은 인코딩 설정 변경 전에 생성되면 안된다. 만들어질 당시의 설정값을 그대로 유지하고 있어, 자동 변경이 되지 않고 강제로 변경해야하기 때문이다.

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;

아래와 같이 한글 데이터도 잘 등록되는 것을 확인할 수 있다.

이렇게 RDS에 대한 모든 설정이 끝났다.

4. EC2에서 RDS 접근 확인하기

아래 명령어를 통해 EC2에서 mariadb패키지를 설치해보자.

#리포지토리 확인
#리포지토리가 구성되어 있다.
[ec2-user@freelec-springboot2-webservice ~]$ yum repolist
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
repo id                            repo name                              status
!amzn2-core/2/x86_64               Amazon Linux 2 core repository         29,823
amzn2extra-docker/2/x86_64         Amazon Extras repo for docker              79
amzn2extra-kernel-5.10/2/x86_64    Amazon Extras repo for kernel-5.10        245
repolist: 30,147

#mysql을 제공하는 패키지 이름을 확인
#mysql을 제공하는 패키지는 mariadb이다.
[ec2-user@freelec-springboot2-webservice ~]$ yum provides mysql
...
1:mariadb-5.5.68-1.amzn2.x86_64 : A community developed branch of MySQL
Repo        : amzn2-core
Matched from:
Provides    : mysql = 1:5.5.68-1.amzn2

#시스템에 mariadb가 설치되어 있는지 확인
#시스템에는 mariadb가 설치되어 있지 않으므로 설치가 필요하다.
[ec2-user@freelec-springboot2-webservice ~]$ rpm -qa |grep mariadb
mariadb-libs-5.5.68-1.amzn2.x86_64

#리포지토리에 mariadb 패키지가 있는지 확인
#mariadb 패키지가 리포지토리에 존재하므로 설치가 가능하다.
[ec2-user@freelec-springboot2-webservice ~]$ yum list mariadb
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Available Packages
mariadb.x86_64                    1:5.5.68-1.amzn2                    amzn2-core

#mysql 설치
[ec2-user@freelec-springboot2-webservice ~]$ sudo yum install mysql
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Resolving Dependencies
--> Running transaction check
---> Package mariadb.x86_64 1:5.5.68-1.amzn2 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package        Arch          Version                   Repository         Size
================================================================================
Installing:
 mariadb        x86_64        1:5.5.68-1.amzn2          amzn2-core        8.8 M

Transaction Summary
================================================================================
Install  1 Package

Total download size: 8.8 M
Installed size: 49 M
Is this ok [y/d/N]: y
Downloading packages:
mariadb-5.5.68-1.amzn2.x86_64.rpm                          | 8.8 MB   00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 1:mariadb-5.5.68-1.amzn2.x86_64                              1/1
  Verifying  : 1:mariadb-5.5.68-1.amzn2.x86_64                              1/1

Installed:
  mariadb.x86_64 1:5.5.68-1.amzn2

Complete!

#패키지가 잘 설치되었는지 확인
[ec2-user@freelec-springboot2-webservice ~]$ rpm -qa |grep mariadb
mariadb-libs-5.5.68-1.amzn2.x86_64
mariadb-5.5.68-1.amzn2.x86_64

설치가 다 되었으면 계정, 비밀번호, 호스트 주소를 사용해 RDS에 접속한다.

로컬 PC에서 접속할 때와 같은 정보를 입력하면 된다.

[ec2-user@freelec-springboot2-webservice ~]$ mysql -u admin -p -h freelec-springbooot2-webservice.cw0aig3wx9yi.ap-northeast-2.rds.amazonaws.com
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 24667
Server version: 10.6.10-MariaDB managed by https://aws.amazon.com/rds/

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

EC2에서 RDS까지는 잘 접속되었다.

RDS에 접속되었으면 실제로 생성한 RDS가 맞는지 간단한 쿼리를 통해 확인해보자.

아래는 데이터베이스 목록을 확인하는 쿼리문이다.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| freelec            |
| information_schema |
| innodb             |
| mysql              |
| performance_schema |
| sys                |
| tmp                |
+--------------------+
7 rows in set (0.00 sec)

MariaDB [(none)]>

5. 트러블 슈팅

  • 문제

인텔리제이 데이터베이스 콘솔창에서 쿼리문이 실행이 안되고,

쿼리를 실행할 때마다 "DB Navigator - Multiple statement execution" 오류가 발생한다.

  • 해결 방법

블록 처리하지 않고 [Excute Statement] 버튼을 실행하였기 때문이다.

쿼리를 실행할 때는 쿼리문을 드래그 하여 블록 처리한 후 실행하면 된다.

이 에러는 간단하긴 하지만 github에서 같은 에러를 겪고 있는 분들이 있어서 답변을 달아놓았다.

https://github.com/jojoldu/freelec-springboot2-webservice/issues/800

참고

도서 - 스프링 부트와 AWS로 혼자 구현하는 웹 서비스

0개의 댓글