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를 구동하면 된다.

목요일, 10월 29, 2015

4.AWS 초간단 웹서비스 구축하기 - Nginx 설치하기

웹에서 접속하기 위해서 Web Server와 Web Application Server를 설치해 주어야 한다. 사용자의 요청에 대해서 Web Server는 정적 파일(HTML, CSS, Javascript, Image)에 대한 처리를 담당하고, Web Application Server는 동적인 처리에 대한 담담을 한다. 하지만 요즘은 Web Application Server에서 Web Server에 대한 처리가 모두 가능하고, 성능도 많이 개선되어서 구성의 주체가 효율적인 판단을 하면 된다.
필자는 Web Server로 많이 사용하는 Nginx를 설치할 것이다. Apache와 비교했을 때 여러 지표에서 뛰어난 성능을 보이고 있는데, Nginx는 비동기 이벤트 기반으로 만들어 져서, 더 적은 자원으로 더 많은 트래픽 처리를 감당할 수 있어서, Apache에 비해서 더 좋은 성능을 발휘하고 있는 부분들이 많다.
Nginx를 사용하는 유명한 곳으로는 Facebook, Netflix, Github, WordPress, Zynga, Sourceforge 등이 있다. 그 만큼 성능이 입증된 믿을 만한 Web Server란 이야기라고 생각하면 되겠다..
그럼 이제부터 설치 및 설정을 시작해 보자.
우선 Nginx를 설치하기 위해서는 Nginx의 의존성을 해결하기 위해서 먼저 설치해 주어야 하는 패키지들이 존재하기에 먼저 필요한 의존성 패키지부터 설치를 시작할 것이다. 그리고 실제 Nginx를 간단하게 설치해서 웹으로 접속해 볼 것이다. 더불어 Nginx에 대한 필요한 설정들도 알아볼 것이다.

NginX 의존성 lib 설치
A. gcc 설치
$ yum install gcc g++ cpp gcc-c++

B. PCRE (Perl Compatible Regular Expressions) 설치
Nginx를 컴파일, 설치하려면 펄 호환 정규표현식이 필요한데, rewirte와 HTTP Core Module이 PCRE 구문 정규 표현식을 사용하기 때문이다. pcre, pcre-devel 두 개의 lib 설치가 필요한다. PCRE는 Compile 버전의 라이브러리고, pcre-devel은 프로젝트를 Compile하기 위한 개발용 헤더와 소스다.
$ yum install pcre pcre-devel

C. zlib 설치
모듈에서 gzip 압축을 사용하기 위해 zlib가 필요한데, zlib와  zlib-devel 두개 모두 필요하다.
$ yum install zlib zlib-devel

D. OpenSSL 설치
OpenSSL은 범용 암호화 라이브러리다. 이미 설치되어 있을수도 있는데, 설치가 되어 있지 않다면 아래 명령어를 따라 설치하면 된다.
$ yum install openssl openssl-devel

Nginx 설치
Nginx를 yum을 통해서도 설치가 가능하지만 필자는 Nginx에 대해 좀 더 상세한 분석을 위해서 직접 파을을 다운 받아서 설정하도록 하겠다.
A. 파일 Download 및 압축해제
$ wget http://nginx.org/download/nginx-1.9.4.tar.gz
$ tar xzf nginx-1.9.4.tar.gz
$ cd nginx-1.9.4

B. 설정
Nginx 설정은 configure를 통해서 진행한다.
$ ./configure

아래 명령은 별도 다시 실행하지 않으도 무관하다. 필자가 필요한 설정들을 정의해서 했던 부분인데, 기본적으로 아래처럼 하지 않아도 "/usr/local/nginx"이 디폴트로 설정되어 있기 때문에 디폴트 하위로 필요한 것들이 만들어지게 되어 있다.
$ ./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/usr/local/nginx/log/error.log --http-log-path=/usr/local/nginx/log/access.log --pid-path=/usr/local/nginx/run/nginx.pid --lock-path=/usr/local/nginx/run/nginx.lock --http-client-body-temp-path=/usr/local/nginx/cache/client_body_temp --http-proxy-temp-path=/usr/local/nginx/cache/proxy-temp --http-fastcgi-temp-path=/usr/local/nginx/cache/fastcgi-temp --http-uwsgi-temp-path=/usr/local/nginx/cache/uwsgi-temp --http-scgi-temp-path=/usr/local/nginx/cache/scgi-temp --user=ec2-user --group=ec2-user

디폴트로 제공하는 옵션에서 제거하고 싶은 것은 --without 으로 제거하고, 기본 외에 추가로 필요한 것은 --with 옵션으로 지정해 주면 된다. 그 외 서드파티 모듈들은 서드파티 모듈을 다운로드 받아서 컴파일할 때 --add-module 옵션을 사용해서 같이 컴파일하면 된다. "./configure –help" 명령어로 다양한 옵션을 확인할 수 있다.

주요 옵션 설명
--prefix : Nginx 가 설치되는 기본 디렉토리 (/usr/local/nginx)
--sbin-path : 엔진엑스의 바이너리 파일이 설치되는 경로 (/sbin)
--conf-path : 주 환경 설정 파일의 경로 (/conf/nginx.conf)
--error-log-path : 에러 로그 파일 (/log/error.log)
--http-log-path : http 접근 로그의 위치 (/log/access.log)
--pid-path : 엔진엑스 pid 파일 경로 (/run/nginx.pid)
--lock-path : Nginx lock 경로 (/run/nginx.lock)
--with-per_modules_path : 펄 모듈의 경로
--http-client-body-temp-path : 클라이언트 요청에 의한 임시 파일의 저장에 사용되는 디렉토리 (/cache/client_body_temp)
--http-proxy-temp-path: 프록시가 사용하는 임시 파일 위치 (/cache/proxy-temp)
--http-fastcgi-temp-path: (/cache/fastcgi-temp)
--http-uwsgi-temp-path: (/cache/uwsgi-temp)
--http-scgi-temp-path: (/cache/scgi-temp)
--user: Nginx 사용자 (nginx), 지정하지 않으면 nobody
--group: Nginx 그룹 (nginx), 지정하지 않으면 nobody

C. 빌드
$ make

D. 인스톨
$ make install
컴파일된 리소스를 인스톨 디렉토리로 복사한다. 위에서 설정한 prefix 하위로 복사된다.

F. Start
인스톨까지 완료되면, "/usr/local/nginx/" 하위에 필요한 파일들이 만들어지고, Nginx가 실행될 준비가 완료된 것이다. /usr/local/nginx/sbin으로 이동한 후에 nginx를 실행하면 서버가 구동이 된다. EC2의 Public IP로 접속하면 아래와 같은 화면을 볼 수 있을 것이다.
$ cd /usr/local/nginx/sbin
$ ./nginx



E. 추가 설명
- NGINX 실행 명령어
$ /path/sbin/nginx -s stop : 즉각 중단
$ /path/sbin/nginx -s quit : 정상 중단
$ /path/sbin/nginx -s reopen : 로그 파일을 다시 오픈
$ /path/sbin/nginx -s reload : 환경 설정을 다시 로드

- 컴파일 오류 확인
objs/autoconf.err 파일에 컴파일 오류가 적혀서 컴파일 오류 확인이 가능하다.

- 기타 명령어
$ ./nginx –t : 환경 설정의 구문, 유효성, 무결성 체크
$ ./nginx -t -c /home/temp/test.conf : 새 환경 설정을 별도의 임시 파일로 옮겨놓고 그 환경에서 테스트
$ cp /home/temp/test.conf /usr/local/nginx/conf/nginx.conf : 새 환경 설정 검증이 완료되면 정상적인 파일로 복사
$ ./nginx –v : 버전 정보 보기
$ ./nginx –V : ./configure 단계에서 넘긴 스위치 정보 보기

목요일, 9월 10, 2015

3.AWS 초간단 웹서비스 구축하기 - JDK 설치하기

이번에는 이전 시간에 만들어진 EC2에 Oracle Java를 설치해 보도록 하겠다. 기본적으로 EC2를 설치하면 OpenJDK가 이미 설치되어 있지만 업데이트에 문제가 있어서 Oracle JDK로 변경할 것이다. 설치하는 방법은 여러 가지가 있는데, 필자는 직접 다운 받아서 설치하는 방식으로 진행하면서 설치되는 위치와 각 설정들에 대해서 알아보도록 하겠다.

1. 기본 설치된 java version  확인
$ java -version 명령어를 입력하면 OpenJDK가 default로 설치되어 있는 것을 확인할 수 있을 것이다.


2. Open JDK 링크 제거
$ which java
$ unlink /usr/bin/java

3. wget으로 Oracle JDK 파일 받기
직접 설치 파일을 PC로 다운  받아서 FTP로 가져오는 방법도 있으나 wget을 이용해 JDK 파일을 받도록 하겠다.
요즘은 자바를 wget로 받으려 하면 사용동의를 안했다고 다운을 못받게 한다. 그런데 아래 명령어를 사용하면 직접 다운이 가능하다.
Oracle JDK 주소 에 접속해서 64비트, tar.gz 압축파일 최신 주소를 복사해서 주소만 바꾸거나 아래 full address를 직접 사용해도 된다.
퍼미션 문제가 생기면 sudo su를 통해서 root 권한을 변경한 후에 작업을 진행한다. 받고자 하는 위치로 이동해서 명령어 입력 후에 엔터를 치면 파일을 다운 받기 시작한다. 필자는 /usr/local/src 에 폴더를 하나 만들어서 진행할 예정이다.
$ wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u60-b27/jdk-8u60-linux-x64.tar.gz"



4. Oracle Java 설치 및 설정
Down 받은 JDK파일을 아래의 명령어를 입력하며 설치 및 설정을 완료한다.
$ mv jdk-8u60-linux-x64.tar.gz /usr/local/java : 다운 받은  파일 이동
$ tar -xvf jdk-8u60-linux-x64.tar.gz : 압축해제
$ cd /usr/bin : 위치이동
$ ln -s /usr/local/java/jdk1.8.0_60/ java : 링크 설정
$ vi /etc/profile : profile 파일 편집
      JAVA_HOME=/usr/bin/java
      CLASSPATH=.:$JAVA_HOME/lib/tools.jar
      PATH=$PATH:$JAVA_HOME/bin
      export JAVA_HOME CLASSPATH PATH
$ source /etc/profile  : 수정 내영을 현제 쉘에 반영
$ java -version : 최종 버전 확인

월요일, 9월 07, 2015

2.AWS 초간단 웹서비스 구축하기 - Linux 접속하기

EC2 Linux에 접속하기 위해서는 EC2를 생성하면서 받아 놓았던 key파일인 .pem파일을 이용하면 된다. 접속을 위한 client는 putty를 사용할 예정인데, puttyGen으로 putty에서 사용하기 위한 파일인 key 파일로 변경이 필요하다.

1. PuTTY Key Generator를 실행시켜서 Load 버튼을 눌러 기존에 다운 받은 .pem 파일을 선택


2. Save private key 버튼을 눌러서 ppk 파일을 저장


3. putty를 실행시키고, EC2 화면에서 해당 인스턴스의 public DNS정보를 Host Name 필드에 추가

  • port는 기본 22 포트를 사용한다. 최초 EC2를 만들었을 때 기본적으로 EC2의 22번 Port가 열려 있었음을 기억할 것이다.
  • Saved Sessions에는 원하는 이름을 입력한다.
  • 주의 : EC2의 public DNS 정보는 수시로 변경될 수 있다.

4. ppk 파일을 선택하고, open 버튼을 클릭

  • Connection > SSH > Auth > Private key file for authentication에서 Browse버튼을 눌서 파일 선택
  • Open을 눌러 접속 시도

5. Linux Login

  • ec2-user를 입력하고 2번째 화면이 출력되면 접속이 완료된 것이다. 
  • linux 타입별 기본 사용자명

- Amazon Linux: ec2-user - Red Hat Enterprise Linux: ec2-user - SuSE Linux: root - Ubuntu Linux: ubuntu


자 이제 접속이 되었으니 Web Server를 설치해 보자


금요일, 8월 28, 2015

1.AWS 초간단 웹서비스 구축하기 - EC2 편

AWS를 이용해서 빠르게 웹서비스를 구축하는 방법에 대해 알아보려 한다. 스타트업, 중소기업, 대기업 등을 통틀어 직접 데이터 센터를 구축해서 직접 서비스를 구축해 간다는 것이 여간 어려운게 아니다. 또한 어렵게 구축을 했어도 유지하는 비용이 만만찮다.
다행스럽게도 아마존에서 AWS를 통해서 많은 고통스런 과정들을 제거해 주어서 우리는 쉽고 간단하게 우리가 원하는 Web Service를 구축할 수가 있다.

AWS에는 실로 많은 서비스들이 존재하고, 지금도 계속 추가되고 있는 중이다. 우선 그 중에서 핵심이 되는 EC2, RDS, S3를 가지고 간단한 웹서비스를 구축해볼 예정이다.
그 첫번째로 EC2에 대해서 알아볼 예정이고, 직접 Linux Command Line에 접속해서 Web Server를 설치하고 설정을 할 예정이다.

EC2를 AWS에서는 아래와 같이 설명하고 있다.
“EC2(Elastic Compute Cloud)는 클라우드에서 컴퓨팅 파워의 규모를 자유자재로 변경할 수 있는 웹 서비스입니다. 개발자가 보다 쉽게 웹 규모의 클라우드 컴퓨팅 작업을 할 수 있도록 설계되었습니다.
Amazon EC2의 간단한 웹 서비스 인터페이스를 통해 간편하게 필요한 용량을 얻고 구성할 수 있습니다. 컴퓨팅 리소스에 대한 포괄적인 제어권을 제공하며, Amazon의 검증된 컴퓨팅 인프라에서 실행할 수 있습니다. Amazon EC2는 새로운 서버 인스턴스를 획득하고 부팅하는 데 필요한 시간을 단 몇 분으로 단축하므로 컴퓨팅 요구 사항의 변화에 따라 신속하게 용량을 확장하거나 축소할 수 있습니다. 또한 실제 사용한 만큼만 요금을 지불하면 되므로, 컴퓨팅 비용이 절약됩니다. Amazon EC2는 오류 발생 시 복원력이 뛰어난 애플리케이션을 구축하고 일반적인 오류 상황을 피할 수 있는 도구를 제공합니다.”


Amazon EC2 장점은 단시간 안에 용량을 늘리거나 줄일 수 있고, 수백 개 또는 수천 개의 서버 인스턴스를 동시에 만들거나 제거할 수 있다는 사실일 것이다. 물론 비용도 직접 구축할 것에 비해 아주 아주 저렴하다.

그럼 이제부터 직접 EC2 생성하는 방법을 먼저 알아보자.

1. EC2 Instances 화면에서 Lanch Instance 선택
먼저 EC2에 접속하면 아래와 같은 화면인데, 필자는 테스트로 만들어 놓은 인스턴스가 하나 있다. 여기서 Lanch Instance 버튼을 선택해서 EC2 생성을 시작하자.


2. AMI(Amazon Machine Image) 선택
Lunch Instance 버튼을 누르면 AMI를 선택할 수 있는 화면이 나오는데, Free tier Only를 체크해서 Free tier AMI만 나오도록 선택한다. 필자는 Amazon Linux를 사용할 것이기 때문에 맨 위에 있는  Amazon Linux AMI 2015.03.1 (HVM), SSD Volume Type을 선택하고 다음으로 넘어 간다.

3. Instance Type 선택
Fmaily는 아래 5가지 유형이 있는데, 서비스의 필요에 따라 선택하면 되겠다.
  • General purpose : 범용으로 평균적인 사양
  • Compute optimized : CPU 집약형으로 다른 타입에 비해서 CPU 비율이 높음.
  • GPU instances :  GPU 성능이 높은 것으로, 고성능의 GPU가 장착되어 있음.
  • Memory optimized : 메모리 집약형으로 메모리 용량이 많음.
  • Storage optimized : 스토리지 집약형으로 스토리지 용량이 크거나 고속의 I/O를 제공

필자는 General purpose의 t2.mico 타입을 선택했다.


4. Instance 상세 정보 설정
대부분 기본값으로 그대로 놔두고 Subnet만 첫번째 Subnet으로 변경한다. Shutdown behavior에서 타입을  Terminate로 선택하면 인스턴스 설정 데이터를 삭제하기 때문에 유의해야 한다.
Tenancy에서 Dedicated tenancy로 설정하면 EC2 인스턴스를 격리된 전용의 하드웨어에서 동작하도록 설정 할 수 있어서 보안이 아주 중요한 곳에서는 설정해서 사용해볼 수 있겠다. 다만 비용이 발생될 수 있다.
Advanced Details의 User Data에는 Instance가 부팅되면서 수행할 쉘 스크립트를 작성할 수 있어서 필요한 작업들이 있으면 여기에서 추가할 수 있다.

5. 추가 Storage 설정
기본 볼륨의 크기를 변경하거나 볼륨을 추가할 수 있다. 기본 설정을 그대로 사용한다.

6. 인스턴스 Tag하기
원하는 이름으로 Tag명을 적으면 되겠다.

7. Secrity Group 설정
Secrity Group은 EC2를 대상으로 접근 권한을 설정한다. 기본 보안을 위해서 SSH, 22 Port를 기본으로 해서 설정한다. 필요하다면 더 추가할 수 있고, 추후에도 설정이 가능하다. 설정이 완료되었으면 Review and Lanch를 눌러서 최종 설정을 확인하자.

8. Instance Lunch 리뷰
최종 내용을 확인하고 Launch 버튼을 클릭한다.

9. Key pair 설정
중요한 부분인데, EC2 인스턴스를 생성하고 Linux Console로 접속하기 위해서는 인증이 필요한데, 여기서 만들어지는 Key Pair를 가지고 접속이 가능하기 때문에, 반드시 잘 보관해야 하며, 분실이 되지 않도록 철저히 관리해야 한다. 필자는 이미 만들어 놓은 것이 있어서 사용할 것이며, 처음 사용자들은 Create a new key pair를 눌러서 새로 생성하면 된다.

10. Lanch Status 상태 확인
맨 아래 View Instances를 누르면 실제 진행되는 상태를 확인 할 수 있다.

여기까지 진행이 되었다면 기본적인 EC2 Instance를 하나 생성한 것이다. 생각보다 어렵지 않게 EC2 Instance가 만들어져서 살짝 실망한 분들도 계실거란 생각이 든다. 정말 만들기가 쉽다. 다만 지금 만들어진 EC2 Instace는 우리가 원하는 Web Service를 바로 실행할 수 없다.
다음 시간에는 EC2 인스턴스 Linux에 직접 접속해서 Web Servier를 직접 설치해 보도록 하겠다.

화요일, 8월 18, 2015

Polymer Custom Element 만들기

개발자가 Language를 공부할 때 여러 가지 방법이 있지만 해당 Language의 Source를 직접 보면서 예제를 따라하는 것이 기술 습득의 가장 빠른 방법 중에 하나 일 것이다. 
Polymer로 Custom Element를 만들어 보면서 Polymer에서 꼭 필요한 부분과 각 부분에 대한 설명을 Source에 설명하도록 하겠다.
파일은 hello-world.html, index.html 2개가 필요하고, hello-world.html 이 custom element다. 내용은 간단하게 "hello world" 문구를 출력하는 element 다.
필요한 설명은 직접 소스에 주석으로 설명을 달았으니, 이해는 어렵지 않을 것이다.
소스를 보면 알겠지만 Polymer 를 이용하면 아주 간단하게 자신만의 Element를 만들 수 있다. 좀 더 기능성 있는 Element를 만든다면 아마도 여러 사람들이 사용 가능한 훌륭한 웹 컴포넌트로서의 기능을 할 수도 있을 것이다.

hello-world.html

index.html
index 파일은 hello world element를 사용하는 간단한 소스다.

일요일, 3월 29, 2015

apt-get

AWS를 공부하면서 apt-get 명령어를 사용하게 되는데, 오늘은 apt-get이 어떤 일을 하는지 알아보자.
apt-get은 Advanced Packaging Tool의 약자이며, Ubuntu, Debian계열의 Linux에서 사용하는 확장 패키지 툴이다.
이미 많은 개발자들이 사용하는 개념으로 eclipse의 plugin 설치나 sublime의 package control을 이용한 plugin을 설치하는 것처럼 쉽게 package, plugin 설치를 도와주는 툴이다.
apt-get을 사용해서 설치한 package는 /var/cache/apt/archive/ 위치에 추가된다.

그럼 각각 명령어를 알아보자.

sudo apt-cache search PackageName
packaged 찾기

sudo apt-cache show PackageName
package 정보 보기

sudo apt-get update
업데이트 서버 목록 갱신하는 것으로 /etc/apt/sources.list에 저장된 정보를 가지고 업데이트 서버 목록을 갱신

sudo apt-get upgrade
설치되어 있는 pacage upgrade

sudo apt-get dist-upgrade
그냥 upgrade와 동일하며 upgrade시에 의존성을 체크한다

sudo apt-get install PackageName
새로운 package install

sudo apt-get --reinstall install PackageName
package를 재설치

sudo apt-get remove PackageName
package 삭제

sudo apt-get --purge remove PackageName
package와 설정파일까지 모두 삭제

sudo apt-get source PackageName
package source 다운로드

sudo apt-get build-dep PackageName
source를 의존성체크하여 build