웹 서비스 백엔드 기술자라면 기본적인 데이터베이스를 다룰 수 있어야 한다.
그리고 데이터베이스를 설치하고 이를 어플리케이션에 연결하는 작업도 소규모 업체에서는 개발자가 다루어야 하는 분야이기도 하다.
AWS에서는 이러한 데이터베이스 관리형 서비스를 클라우드 형태로 지원하고 있는데
이를 AWS RDS(Relational Database Service)라고 한다.
지원되는 기능들로는 대표적으로
aws 메인에 접속한 다음 RDS로 검색을해서 Amazon RDS 서비스 메뉴로 접근하자.
상단에 데이터베이스 생성 버튼을 클릭한다.
표준 생성을 설정한 다음,
엔진 옵션에서 DB를 선택하면 된다.
나는 책에 나온 MariaDB를 선택하기로 했다.
사용할 DB 인스턴스 식별자와 마스터 사용자 이름, 암호를 설정하자.
인스턴스 클래스와 스토리지를 설정해야 한다.
인스턴스는 기본으로 설정된 값을 사용했고 스토리지관련 옵션은 조정 활성화를 체크를 해제했다.
연결관련 설정을 해야 한다.
퍼블릭 엑세스를 '예'로 선택하도록 하자.
그리고 추가구성란에서 포트가 3306인 것을 체크해야 한다.(기본 설정값이다.)
그 외 추가 구성메뉴에서 데이터베이스 옵션에 관련된 입력항목들을 작성하자.
백업과 모니터링은 나는 체크를 해제했다.
마지막으로 유지관리에서 마이너 버전 자동 업그레이드 사용을 해제했다.
그 외 서비스도 사용하지 않도록 설정했다.
모든 작성이 끝났으면 데이터베이스를 생성하도록 한다.
MariaDB를 간략히 소개하자면
MySQL을 기반으로 만들어진 데이터베이스로써 전반적인 사용법이 MySQL과 비슷해서 적응하기가 편하다.
구글링을 통해 찾은 MariaDB를 사용해야 하는 10가지 이유를 확인해보자.
책에서 MariaDB를 선택한 이유를 가격적인 측면과 기술적인 측면에서 설명하고 있다.
우선 가격적으로 MySQL 대비 오픈소스인 MariaDB가 더 저렴하다.
프리티어 기간 이후에 지불해야할 사용료를 무시할 수 없다.
두번째 이유로는 Amazon Aurora로 교체하기가 유리하다.
Aurora는 아마존에서 MySQL과 PostgreSQL을 클라우드 기반에 맞게 재구성한 데이터테이스 인데 성능이 매우 우수하고 아마존에서 지속적으로 발전시키고 있는 데이터베이스이기 때문에 미래에 서비스를 확대할 때 선택하기 좋은 데이터베이스라는 점을 들었다.
사실 AWS환경에서 자사의 서비스를 사용하는 것이 무엇보다도 안정성 측면에서는 유리할 수 밖에 없으니 현명한 선택이라는 생각이 들었고 나도 MariaDB를 선택하는데 큰 이의를 가지지 않았다.
이제 RDS 인스턴스가 생성되었으니 기본적인 설정을 해야 한다.
우선 RDS 관리화면에서 파라미터 그룹을 생성해야 한다.
왼쪽 사이드 메뉴바에서 파라미터 그룹을 선택하자.
여기서 파라미터 그룹 생성을 클릭하자.
기본적으로 아까 생성된 DB 페밀리가 선택되어 있다.
그룹이름, 설명을 각각 작성하고 생성해 주자.
이제 만들어진 파라미터 그룹명을 클릭해서 다음 3가지 설정을 해야 한다.
이 화면에 진입했으면 파라미터 편집 버튼을 클릭하자.
그리고 검색창에서 time_zone을 검색해보자.
검색 결과에서 값 항목에서 Asia/Seoul을 선택해 주자.
그리고 오른쪽 상단에 있는 변경 사항 저장을 클릭하면 타임존이 변경된다.
이번에는 Character Set을 설정해야 한다.
8가지 항목을 설정해야하는데
characterer 항목들은 utf8mb4 와 설정하고
collation 항목들은 utfmb4_general_ci로 설정해야 한다.
utf8mb4 이모지 저장 가능하다.(utf8은 불가능.)
characterer 항목 설정
collation 항목 설정
기본적으로 RDS를 생성할때 인스턴스 사양기준으로 자동으로 설정이 잡혀있는데,
책에서는 이 값을 넉넉하게 사용하도록 고정적으로 늘려주는 설정을 권하고 있다.
RDS 왼쪽 사이드 메뉴에서 데이터베이스를 선택하자.
생성한 데이터베이스를 목록에서 선택한 다음 수정버튼을 클릭하자.
RDS를 생성할때 선택했던 옵션들이 나열될 것이다.
여기서 우리는 데이터베이스 옵션 항목을 찾아 아까 만든 파라미터 그룹을 적용시켜야 한다.
선택을 한다음 계속을 클릭하면
수정내용을 확인하는 페이지가 나온다.
수정 내역을 확인했으면 아래 수정 예약 항목을 설정해야 하는데,
예약 적용을 하면 명시된 새벽시간대에 적용하도록 스캐줄을 잡는 것이다.
우리는 이제 서비스를 올리는 상태이므로 즉시 적용을 선택할 것이다.
수정을 누르면 목록으로 돌아가며 상태 컬럼값이 수정중으로 변경된다.
만약 적용이 제대로 안될 경우, 작업 버튼을 클릭하여 재부팅을 해주도록 하자.
로컬 PC에서 RDS로 접근하기 위해서 RDS의 보안 그룹에 내PC의 IP를 추가해야 한다.
목록에서 데이터베이스 인스턴스를 선택하자.
연결&보안 탭 내용중에 보안 항목에서 VPC 보안 그룹 링크를 클릭하자.
이제 인바운드 규칙을 추가 해야한다.
인바운드 규칙 편집을 클릭하자.
추가할 대상은 내 로컬 PC ip와 EC2 보안그룹을 추가해야 한다.
여러가지 DB tool들이 있지만 책에서는 intellij의 plugin인 Database Navigator를 사용하고 있다.
plugins 메뉴에 들어가서 Database Navigator를 검색후 설치한다.
접속정보를 작성해야 한다.
책에서는 Connection을 생성할때 MySQL로 선택해서 작성하라고 한다.
하지만 문제가 발생했다.
모든 정보가 정상적으로 작성된 상태인데 테스트 접속을 시도하면 아래와 같은 에러가 발생했다.
돌아오는 패킷이 없다는 의미인데 우선 인바운드 규칙이 제대로 설정되었는지, 퍼블릭 IP를 허용이 제대로 설정되었는지 RDS console을 확인했다.
그리고 telnet을 이용해서 방화벽 문제인지를 한번 확인해 보았는데 이상이 없었다.
그래서 할 수 없이 다른 별도의 DB tool에서 접속 테스트를 해보았는데 정상적으로 접속이 되었다.
더 이상 Database Navigator에서 MySQL로는 RDS에 있는 MariaDB에 접속이 안되는 것으로 판단되었다.
그래서 MariaDB의 jdbc 접속에 사용한 jar를 별도로 설정해서 접속정보를 아래와 같이 작성해 주었다.
접속테스트 결과는 성공.
이것때문에 인바운그 규칙을 수정하고 리눅스 서버에서 접근해서 설정도 뒤져보고
별별 고생은 다한 것 같은데 결과는 어처구니가 없었다.
이제 데이터베이스를 선택하는 쿼리를 수행 해보자.
이번엔 데이터베이스에 현재 설정된 character_set, collation 설정을 확인해 보자.
show variables like 'c%';
쿼리 수행 결과
책에서는 수정해야하는 character_set이 있엇으나 나는 정상적으로 모두 설정이 되있어서 별도의 작업을 수행하지 않았다.
이번엔 타임존을 확인해보자.
select @@time_zone, now();
쿼리 수행 결과
이제 한글입력값이 정상적으로 잘 들어가는지 확인해보자.
간단한 test 테이블을 생성하자.
샘플데이터를 추가하자.
insert into test(content) values('테스트');
조회를 해보면 데이터가 정상적으로 들어갔다.
select * from test;
이제 아까 인바운드 규칙으로 EC2서버를 연결한 것을 확인해야 한다.
지난번 설정한 Putty를 통해서 EC2 서버 콘솔에 접근하자.
서버에 MySQL 명령어 라인을 사용하기 위해 설치를 해야 한다.
sudo yum install mysql
이제 RDS에 접속을 해보자.
mysql -u admin -p -h spring-aws-study.cemmnpdtiluq.ap-northeast-2.rds.amazonaws.com
패스워드를 입력하면 아래와 같이 DB 콘솔에 접근이 된다.
간단한 테스트를 위해 명령어를 실행해보겠다.
show databases;
목록에서 내가 추가한 spring_aws_study 스키마 명이 보인다.
이번에는 RDS 환경을 구축하고 이를 EC2를 통해서 접근하는 것을 목표로 진행했다.
전반적으로 AWS를 다뤄보는 느낌은 GCP보다 다소 느리다는 것이다.
내가 무료사용자인 프리티어 등급이기 때문이라서 인지 모르겠지만
확실히 서버에 설정을 수정하고 반영하거나 재시작을 하면 인스턴스가 새로 뜨는데 상당히 느린 모습을 보여준다.
그리고 웹콘솔 환경도 GCP는 제공이 되는데 AWS는 특정 유료서비스에서만 지원을 해주는 것 같다. 이 점도 조금 아쉬웠다.
엉뚱하게 intellij에서 database Navigator에서 삽질을 너무 오래했다.
거의 반나절은 시간을 쏟은 기분이였는데, 처음에 작성한 인바운드 규칙이 잘못되어서
DB tool에서도 접속이 안되다보니 정확한 원인을 찾는데 시간이 너무 많이 걸렸다.
구글링을 했을때 나온 해결방안들이 모두 소용이 없었다.
그래도 이렇게 한번 인프라 구축을 하는 경험은 정말 소중하다.
특히 나같은 경우에는 대기업 인프라팀의 ci/cd 지원환경에서 업무를 많이 했기 때문에 이러한 경험이 부족했고 이번 기회에 좋은 책을 만나서 AWS를 배우기 시작할 수 있었다고 생각한다.
이동욱님에게 감사를 표한다.