잘못된 부분 지적 및 피드백은 큰 힘이 됩니다 😃
이번 포스팅에서는 RDB(Relational Database)인 MariaDB를 AWS RDS(프리티어)를 사용하여 구축하려 합니다.
RDS(Relational Database Service)는 Amazon Web Services(AWS)에서 제공하는 관리형 관계형 데이터베이스 서비스입니다. RDS는 사용자가 데이터베이스 서버를 설치하고 관리하는 복잡한 작업을 줄이고, 쉽고 간편하게 데이터베이스를 운영할 수 있도록 해줍니다. RDS는 여러 관계형 데이터베이스 엔진(MySQL, PostgreSQL, MariaDB, Oracle, SQL Server, Amazon Aurora 등)을 지원하며, 백업, 복구, 소프트웨어 패치, 스케일링, 보안 설정 등의 작업을 자동화하거나 간편하게 할 수 있습니다.
EC2 인스턴스에 Docker를 사용하여 직접 RDB(Relational Database)를 설정할 수 있습니다. 하지만 RDS를 사용하는 이유는 다음과 같습니다.
관리의 편리함: RDS는 데이터베이스의 설치, 구성, 패치, 백업, 복구와 같은 관리 작업을 자동으로 수행합니다. EC2에 Docker로 RDB를 구성하면 이러한 작업을 직접 관리해야 합니다.
자동 백업 및 복구: RDS는 자동 백업 기능을 제공하여 데이터를 안전하게 보관하고 필요할 때 쉽게 복구할 수 있습니다. EC2에서 Docker로 직접 RDB를 운영할 경우, 백업과 복구를 직접 설정하고 관리해야 합니다.
자동 스케일링: RDS는 수직적(더 높은 사양의 인스턴스로) 또는 수평적(리드 레플리카 추가)으로 자동 스케일링이 가능하여, 트래픽 증가에 대한 대응이 쉽습니다. EC2의 경우 직접 스케일링을 구성하고 관리해야 합니다.
보안 및 업데이트: RDS는 자동으로 최신 보안 패치를 적용하며, 데이터 암호화 등 보안 기능을 간편하게 사용할 수 있습니다. Docker로 RDB를 운영하는 경우, 이러한 보안 업데이트를 수동으로 처리해야 합니다.
고가용성 및 장애 조치: RDS는 멀티 AZ 배포를 통해 고가용성을 보장하고, 장애 발생 시 자동으로 장애 조치를 수행합니다. EC2에서 Docker로 운영하는 경우, 이러한 기능을 직접 설정하고 관리해야 합니다.
비용 절감: 초기에는 EC2에 Docker를 사용하는 것이 비용적으로 더 저렴할 수 있지만, RDS는 관리 오버헤드를 줄여주고 장기적으로 안정성을 제공하기 때문에 전체적인 운영 비용을 절감할 수 있습니다.
결론적으로, RDS는 데이터베이스 관리에 대한 복잡성을 줄이고, 안정성과 가용성을 높여주기 때문에 EC2에 Docker로 RDB를 설정하는 것보다 더 효율적이고 안전한 선택일 수 있습니다. 특히 데이터베이스 운영 및 관리에 익숙하지 않은 사용자에게는 RDS가 훨씬 더 유리합니다.
RDS > 데이터베이스
를 클릭하고, 데이터베이스 생성을 클릭합니다.MariaDB
를 선택하고, 엔진버전은 10.11.8
버전을 선택합니다.프리 티어
로 생성하고, DB 인스턴스 식별자를 입력해줍니다.root
로 하고, 자체 관리를 선택해주고, 사용할 마스터 암호를 입력해줍니다.db.t4g.micro
를 선택해줍니다.연결
파트에서는 나머지는 default로 하고, 퍼블릭 엑세스만 예
를 선택해주고, VPC 보안 그룹은 기존 항목 선택합니다.추가 구성
파트에서는 초기 데이터베이스 이름을 작성하고, 자동 백업 활성화 해제해줍니다.유지 관리
파트에서 새로운 마이너 데이터베이스 엔진 버전이 제공되면 자동 업그레이드 하는 기능은 비활성화 해줍니다.생성 되는데 일정 시간이 소요될 수 있으니, 기다리시면 됩니다!
상태
가 이렇게 사용 가능
이 되면 RDS 생성 끝!! ⭐️
RDS > 파라미터 그룹
탭에서 파라미터 그룹 생성을 클릭합니다.
파라미터 그룹 이름
과 설명
을 간단히 적어주고, 생성 버튼을 클릭합니다.
그럼 다음과 같이 파라미터 그룹
이 잘 생성된 것을 확인할 수 있습니다.
해당 그룹을 클릭해 들어가면 다음과 같은 화면이 나옵니다.
설정해야 하는 것은 다음과 같습니다.
time_zone
: 시간 설정
time_zone
검색해서 Asia/Seoul
설정 후, 변경사항 저장합니다. collation
: 데이터의 정렬기준을 위한 설정
character Set
: 문자 인코딩 설정
테이블에 데이터가 채워진 상태에서 설정을 변경하는 경우 데이터의 손실이 우려되므로, 처음 데이터 설계 후 DB 생성시 위와 같이 세팅을 잘 잡아둔 채 사용하는 것이 좋습니다.
utf8
과 utf8mb4
의 차이는 이모지 저장 가능 여부입니다 🗒️
아래 항목들 utf8mb4
, utf8mb4_general_ci
로 변경해줘야 합니다. 모두 변경하고 변경 저장을 클릭합니다.
utf8mb4
character_set_client
character_set_connection
character_set_database
character_set_filesystem
character_set_results
character_set_server
utf8mb4_general_ci
collation_connection
collation_server
데이터베이스
에서 이전에 생성한 DB를 선택하고 수정
을 클릭하고, 추가 구성 > 데이터베이스 옵션 > DB 파라미터 그룹
을 방금 만든 그룹으로 선택합니다.
<div style="margin-top: -20px;">
<img src="https://velog.velcdn.com/images/sammy0329/post/72123483-e7ad-404c-997a-7ee224cf6859/image.png" alt="이미지 설명">
</div>
앞서 적용한 파라미터 중 character_set_database
, collation_connection
2가지 항목은 MariaDB에서만 RDS 파라미터 그룹으로는 변경이 되지 않습니다.
따라서, DB 연결 후 직접 아래의 쿼리를 실행해 변경해주어야 합니다.
ALTER DATABASE 데이터베이스명
CHARACTER SET = 'utf8mb4'
COLLATE = 'utf8mb4_general_ci';
RDS에 접속하기 위해서는 우선 인바운드 규칙
을 편집해주어야 합니다.
인바운드 규칙(Inbound rules)
탭을 클릭합니다.인바운드 규칙 편집(Edit inbound rules)
을 클릭합니다.규칙 추가(Add rule)
버튼을 클릭하여 새로운 규칙을 추가합니다.규칙 저장(Save rules)
을 클릭하여 인바운드 규칙을 저장합니다.우선, DBeaver를 다운로드합니다.
DBeaver Download
연결을 위해 필요한 정보는 다음과 같습니다.
엔드포인트
에서 내가 만든 RDS를 클릭하면
연결 및 보안` 탭에 엔드포인트가 나와있습니다.포트
마스터 사용자 이름
설정 > 자격 증명 설정 > 마스터 사용자 이름
으로 작성한 이름마스터 사용자 암호
설정 > 자격 증명 설정 > 마스터 암호
에서 설정한 암호데이터 베이스 이름
DBeaver에 접속하여 연결 버튼을 클릭하면 다음과 같은 화면이 나옵니다.
MariaDB를 선택하고 다음 버튼을 클릭합니다.
다음과 내용들을 작성해줍니다.
연결이 정상적으로 됐다면, 이제 계정을 만들어서 특정 데이터베이스에만 Access할 수 있는 권한을 줘야합니다.
새로운 사용자를 생성하고 비밀번호를 설정합니다. 예를 들어, newuser
라는 사용자와 password123
이라는 비밀번호를 설정합니다.
CREATE USER 'newuser'@'%' IDENTIFIED BY 'password123';
'%'
는 모든 IP 주소에서 접근을 허용함을 의미합니다. 특정 IP 주소나 도메인에서만 접근을 허용하려면 'newuser'@'hostname_or_ip'
와 같이 지정할 수 있습니다.
특정 데이터베이스에 읽기 및 쓰기 권한을 부여합니다. 예를 들어, mydatabase
라는 데이터베이스에 권한을 부여합니다.
GRANT SELECT, INSERT, UPDATE, DELETE ON mydatabase.* TO 'newuser'@'%';
이 명령어는 newuser
에게 mydatabase
데이터베이스의 모든 테이블에 대해 SELECT, INSERT, UPDATE, DELETE 권한을 부여합니다.
권한 변경 사항을 적용합니다.
FLUSH PRIVILEGES;
새로 생성된 사용자의 권한을 확인합니다.
SHOW GRANTS FOR 'newuser'@'%';
이제 앞으로는 특정 DB에 대한 권한을 준 newuser
로 접속하여 사용하시면 됩니다 🍀