Pages - Menu

일요일, 11월 15, 2015

6.AWS 초간단 웹서비스 구축하기 - RDS 만들기

이전 시간에 Web Server, WAS를 만들어 보았다. 이번 시간에는 정보를 저장할 수 있는 Database를 만들어 볼 것이다. RDS는 Oracle, MySQL이 가장 많이 사용되고, SQL server, PostgreSQL, Aurora등도 많이 사용하는 추세다.

필자는 AWS의 RDS서비스 중에서 MySQL을 선택해서 진행할 것이다. EC2에 MySQL을 직접 인스톨해서 사용해도 무방하나 전문 DBA가 없다면 비용을 좀 더 지불하고 편리성 및 장애에 대한 Failover, 이중화, Read Replaca 등의 어려운 설정 작업들을 쉽게 할 수 있기 때문에 AWS RDS를 사용하는 것도 좋은 선택이라 생각한다.

그럼 RDS를 생성하고, 접속해 보자.

RDS 생성하기

1. RDS 메뉴에서 Get Started Now 선택

2. Step1: Select Engine에서 MySQL 선택

3. Step2: Production? No 선택
테스트 용도로 사용할 RDS이기 때문에, No를 선택한다.

4. Step3: Specify DB Details
- 필요에 맞게 값을 입력한다.
- Master Username, Master Password는 DB 접속시에 필요하기 때문에 잘 기억하도록 한다.



5. Step4: Configure Advanced Settings
- VPC는 Default를 사용해도 되고, 구성해 놓은 VPC가 있다면 그것을 선택해도 된다. 필자는 미리 구성해 놓았던 VPC를 선택할 것이다.
- VPC Security Group는 테스트 용도로 default를 사용하고, 필요하면 Security Group를 새로 만들어서 추가한다. 필자는 기존에 만들어 놓은 Security Group를 선택할 것이다.
Create New Security Group를 선택하면 자동으로 Security Group를 만들고 3306포트도 추가하지만, default를 선택하면 자동으로 3306 port로 접속이 불가능하기 때문에, Security Group를 새로 생성하고 3306 포트를 연다음, RDS인스턴스의 Security Group를 신규로 생성한 Security Group으로 변경해 주어야 접속이 가능해 진다.
- Database Name도 필요한 이름으로 입력한다.
- Backup Retention Period는 백업 유지 기간으로 지정한 기간까지 데이터를 되돌릴 수 있다.
- Backup Widnow : 백업을 진행하는 시간지정으로, 필요한 시간을 입력한다.
-Auto Minor Version Upgrade는 자동으로 Minor 버전을 업데이트하는 옵션으로, 보안 패치, 버그, 수정 내용을 자동으로 업데이트 한다.
- Maintenance Window에는 Backup 시간과 겹치지 않도록 시간을 설정한다. Minor에 대한 내용도 업데이트하지만, 인스턴트의 타입이 바뀌었다면 이 시간에 적용된다. 그리고 이 시간에는 인스턴스의 실행이 중지되므로, 운영시에는 유의해야 한다.



6. 최종 설정 확인
- Veiw Your DB Instances를 클릭하면 DB 이스턴스를 생성하는 상태를 확인 할 수 있다.


7. RDS 생성 확인
- 대략 5분 정도 지나면 RDS가 최종적으로 생성이 완료되면 관련 설정 내용 확인이 가능하다
- 주의할 부분은 RDS는 EC2와 같이 stop란 개념이 없기 때문에, 정지하고 싶다면 결국 Delete해야만 한다. 삭제 시에는 최종 스냅샷을 생성할 수 있어서 다시 복구하고 싶다면 이 스냅샷을 가지고 복구하면 된다.

RDB 접속하기

RDS 생성이 완료되었으면 이제 RDS에 직접 접속해 보도록 하자. 필자는 MySQL Workbench를 사용할 예정이다. 기존에 MySQL 접속 가능한 툴이 있다면 그것을 사용하면 된다.

아래 주소에서 프로그램을 다운 받아서 설치까지 완료하자.
http://dev.mysql.com/downloads/workbench/

접속 방법에 대한 상세 설명은 별도로 진행하지 않겟다.
접속 정보는 RDB의 Endpoint와 Port를 찾아서 넣어주고 나머지도 생성시에 설정했던 정보를 넣어준 다음 접속을 하면 접속이 완료될 것이다.

접속이 완료되면 필요한 테이블들은 생성하고, 컬럼을 만들고, 데이터를 입력해 보면서 문제 없이 동작하는지 확인해 보면 되겠다.


월요일, 11월 09, 2015

5.AWS 초간단 웹서비스 구축하기 - Vert.x를 사용하자

"4.AWS 초간단 웹서비스 구축하기 - Nginx 설치하기" 에서 Nginx Web Server를 설치해 보았다. Web Server에서는 주로 정적인 파일에 대한 처리를 담당하고, 이번 시간에 설정할 Vert.x Server에서 동적인 처리를 담당할 것이다. 이렇게 Web Server와 WAS를 분리하는 주된 이유는 부하 분산과 보안을 강화할 목적으로 분리한다.

Vert.x에 대해서 알아보고, Nginx가 설치된 EC2 인스턴스에 환경을 설정하고 직접 웹에서 Nginx를 통해서 Vert.x로 접근하도록 구성할 예정이다. 직접 접속을 해도 되지만 이렇게 분리하는 이유는 위에 간략히 설명했다.

과거에는 주로 Tomcat를 Web Application Server로 사용했는데, Tomcat은 Thread Pool을 사용해서 Connection을 사용하기 때문에 일반적으로 최대 500개의 Thread정도가 적당해서 Tomcat 서버 하나에 동시에 최대 처리할 수 있는 Connection은 500개 정도라고 이해하면 되겠다. 

하지만 요즘처럼 잘나가는 서비스들은 동시에 처리해야할 Connection이 수백만개에 이르기 때문에 많은 Connection을 효율적으로 처리해야할 고민이 필요하게 되었고, 또한 프로토콜도 HTTP를 포함해서 다양한 프로토콜에 대한 필요성이 생기게 되었다. 이러한 필요성 때문에 node.js, Vert.x와 같은 비동기 소켓 서버가 많이 사용되고 있다.

Vert.x는 Node.js와 같은 비동기 소켓서버 Framework으로 많은 Connection을 무리없이 처리가 가능하며 node.js에 비해서 발전된 부분이 많다. 또한 Java언어 뿐만이 아니라 Javascript, Python, Groovy,Scala에 대한 지원을 하고 있어서, 개발자는 주로 사용하는 언어를 선택해서 개발을 진행하면 된다.

Vert.x 설정부터 시작하자.


Vert.x 설정하기
Vert.x는 특별히 Install이 필요가 없다. 특정 위치에 Vert.x를 다운받아서 Path를 잡아주면 된다.
1. Vert.x 최신 버젼 다운로드 및 압축해제
$ wget https://bintray.com/artifact/download/vertx/downloads/vert.x-3.1.0-base.tar.gz
$ tar xvf vert.x-3.1.0-base.tar.gz

2. 설치를 원하는 위치로 이동
   - 필자의 경우는 /usr/local/vertx 위치에 설치할 것이다.
$ mv vert.x-3.1.0 /usr/local/vertx

3. 환경 변수 설정
   - 압축을 해제한 위치의 경로의 bin 디렉토리를 환경변수의 path에 추가하고, 반영한다.
$ vi /etc/profile
export PATH:$PATH:/usr/local/vertx/bin
$ source /etc/profile 

4. Path 설정 확인
   - vert 명령어를 입력해서 관련 내용이 출력되면 Path가 설정된 것이다.
$ vertx


간단한 Vert.x 프로그램 실행하기
"Hello World" 가 출력되는 간단한 프로그램을 작성할 것이다. vi편집기나 사용 가능한 편집기를 이용해서 아래 코드를 입력하자.
필자는 /usr/local/vertx/html/Server.java 파일에 아래 내용을 동일하게 입력했다.
1. Vert.x 소스 코드 추가
2. Vert.x 소스 코드 실행
$ cd /usr/local/vertx/html
$ vertx run Server.java

3. Web에서 접속하기
   - 아무 문제가 없다면 아래처럼 Hello World가 출력될 것이다.
 
  
Nginx를 통해서 Vert.x 에 접근하기
마지막으로 기존에 설치했던 Nginx를 통해서 Vert.x에 접속할 것이다. 우선 Nginx의 설정을 조금 바꾸어 주어야하고, 기존 Vert.x의 Server.java도 포트를 52222번으로 변경한다. 정확한 이해를 돕기 위해서는 인스턴스를 각각 분리해서 생성하고 설명하는 것이 더 정확하게 이 상황을 이해할 수 있으리라 생각되지만 독자들은 쉽게 이해하시리라 짐작하고, 살짝 귀찮은 작업은 빼도록 하겠다.
결론적으로 Nginx에 기본포트인 80으로 접속하면 Nginx에서는 Vert.x의 52222포트로 연결되도록 설정할 것이다.
1. Nginx의 nginx.conf 설정 변경
  - nginx.conf 파일에서 Vert.x에 52222포트로 접근 가능하도록 수정한다.
  - nginx.conf 파일의 내용을 아래 빨간색으로 표시한 부분으로 대체하면 된다.
$ cd /usr/local/nginx/conf
$ vi nginx.conf

   server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
#          root   html;
#          index  index.html index.htm;

            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;

            proxy_pass http://localhost:52222;
            proxy_redirect off;
        }

2. Nginx 실행
$ cd /usr/local/nginx/sbin
$ ./nginx

3. Vert.x 실행
$ cd /usr/local/vertx/html
$ vertx run Server.java

4. 웹에서 접속
  - 아래처럼 나오면 성공한 것이다.

설정이 좀 길긴했지만 Nginx를 통해서 Vert.x에 접속하는 방법을 알아 보았다. 경우에 따라서 Nginx 필요없이, Vert.x에 직접 접속을 원하는 경우는 처음 Vert.x에 80포트로 설정했었던 처음 소스를 가지고 Vert.x를 구동하면 된다.