이번시간에는 DB서비스 구축을 위해 알아보겠습니다.

지금까지 저희는 DB사용을 위해 AWS EC2에서 mysql을 설치했고 워크벤치를 이용해 DB연동을 확인했습니다.

설치 과정에서 외부사용자가 EC2 인스턴스 실행중일 때 DB를 자유롭게 접근할 수 있도록 설정을 해주었습니다.

결과적으로 저희의 시스템은 EC2내부에서 웹서버를 구축했고 DB서비스까지 구축했습니다. 

하지만 DB서비스와 웹서버를 동시에 이용하므로 성능 상 효율이 떨어질 수 있기 때문에 DB서버를 따로 구축하여 DB만 접근할 수 있도록 한다면 훨씬 편할 것 입니다.

우리는 외부의 DB접근까지는 설정해주었기 때문에 이 DB를 접근할 데이터베이스 관리시스템이 필요합니다.

 

우리는 AWS가 제공하는 관계형 데이터베이스 관리시스템(RDBMS)인 RDS(Relational Database Service)를 이용하여 외부의 DB서버를 구축하여

데이터베이스를 관리할 수 있도록 해보겠습니다.

 

가장 먼저 AWS 콘솔에서 RDS 인스턴스를 생성해야합니다. AWS educate 콘솔창에서 상단 서비스탭에서 데이터베이스영역의 RDS를 클릭합니다.

그 다음, 화면 상단의 데이터베이스 생성 버튼을 클릭합니다.

 

데이터베이스 생성창에서 모든 설정은 디폴트로 놔두고 아래 사항만 바꿔줍니다.

1. 엔진유형: MySQL

2. 템플릿: 프리티어(공짜로 이용해야하기때문에.... 단 1년이 지나면 과금이 될 수 있습니다.)

3. DB인스턴스 식별자: 마음대로 바꿔주기(저는 jow1025cloud로 바꿨습니다.)

4. 자격 증명 설정에서 로그인 ID와 마스터 암호 생성(저는 ID를 root로 생성했습니다.)

5. 퍼블릭 엑세스 기능: "예" ( 외부에서 원격으로 DB를 접근하기위함)

 

이렇게 수정하여 DB를 생성하고 왼쪽 탭의 '데이터베이스'를 클릭하면 약간의 시간이 소요된 후 인스턴스가 생성됨을 알 수 있습니다.

생성된 인스턴스를 클릭하면 아래와 같이 엔드포인트 도메인 주소가 뜨는데, 이것을 복사해 둡니다.

EC2에서는 퍼블릭 ip주소로 EC2를 접속하고, RDS는 이 엔드포인트 주소를 통해 접속합니다.

 

이제 추가로 보안설정을 해줘야합니다. 

우리는 EC2 인스턴스의 보안그룹에서 ssh, http연결을 허용했기 때문에 ssh로 EC2 터미널을 접근할 수 있었고 웹을통해

apache, php 연결을 확인할 수 있었습니다.

 

이렇듯, 저희는 RDS로 DB서버를 따로 구축하여 EC2나 다른 외부 컴퓨팅 환경에서 이 서버의 Mysql DB를 접근하게되는데, 이 때 외부에서 RDS의

Mysql로 데이터를 전송/요청하고 RDS에서 데이터를 반환하는 등의 프로토콜 통신을 위해 보안그룹에서 따로 설정을 해줘야합니다.

   

연결&보안 탭에서 보안그룹을 클릭합니다.

 

보안그룹 창이 뜨면 보안설정을 해줄 보안그룹ID를 클릭합니다.

 

오른쪽 하단의 '인바운드 규칙 편집' 을 클릭합니다.

인바운드 규칙 창에서 아래 '규칙 추가'버튼을 클릭한 뒤 아래와 같이 설정한 뒤 '규칙 저장' 버튼을 누르고 빠져나옵니다.

Mysql을 사용하므로 Mysql/Aurora로 맞추고 어디서든 접근할 수 있도록 소스를 위치무관으로 바꿔주었습니다.

아래와 같이 저장이 되어있을 것입니다.

이로써 설정이 완료되었습니다. 이제 EC2에서 SQL쿼리로 RDS의 Mysql DB를 접근할 때 주소(엔드포인트)를 통해 접근할 수 있습니다.

실제로 접근해보겠습니다. 테라텀으로 EC2에 접속한 뒤 아래 명령어로 RDS mysql에 접근합니다. 

mysql -u root -p -h 아까 복사한 엔드포인트 주소

 

비밀번호는 아까 RDS인스턴스에서 DB를 생성할 때 설정한 비밀번호를 입력하면됩니다.

터미널에서 DB를 접근해서 사용하는 것은 불편하므로 워크벤치를 이용해 똑같이 접근해보겠습니다.

아래 '+'버튼을 클릭합니다.

아래와 같이 설정해준 뒤 test connection을 눌렀을 때 문제가 없을경우 ok버튼을 클릭합니다.

Connection Name은 편하게 지어주고 Username과 password는 인스턴스에서 DB생성 때 설정한 정보를 입력합니다.

독특한 점은 hostname에 ip주소가 아닌 엔드포인트 주소를 설정한다는 점입니다. 

위에서 언급했듯이 우리는 RDS의 DB에 접근할 때 ip가아닌 RDS 인스턴스의 엔드포인트 주소로 접근할 수 있습니다.

 

문제없이 완료되었다면 성공이고, 에러가 났다면 처음부터 다시 진행해보는게 맘 편합니다...

 

간단하게 show database; 쿼리문으로 결과를 확인하는 것으로 이번 실습 마치겠습니다.

 

우리가 구축한 시스템의 간단한 구조도는 다음과 같습니다.

다음번에는 실제 insert, select 등의 쿼리문으로 작업을 진행해보겠습니다.

 

 

+ Recent posts