Ringster's Techblog

Tech, Mobile, Internet

SporTracker 제작 후기 (2) – Amazon Web Service, Elastic Beanstalk 사용기

with 2 comments

SporTracker를 제작하며 개인 기록을 저장할 간단한 서버가 필요했다.
AWS EC2에는 어느 정도 익숙한 편이지만, 일일히 EC2 인스턴스에 DB를 설치하고 웹서버를 설정하고 다시 앱과 연동하는 것은 간단히 빠르게 구현해 업로드 하려던 프로젝트의 취지에 맞지 않았다.

그래서 눈을 돌리게 된 것이 Elastic Beanstalk다. 콘솔을 통한 몇번의 클릭만으로도 Auto Scaling이 지원되는 서버를 쉽게 설정할 수 있고, mysql을 지원하는 RDS를 통해 DB 로그 보기나 DB 백업등의 관리를 손쉽게 가능하게 해준다. Cloud watch와 연동하여 여러 조건에 대해 이메일 알람을 받는것도 쉽게 설정할 수 있으며, 자체적인 버전 관리 기능도 가지고 있다.

어플리케이션 배포는 콘솔을 통해 zip 파일을 올리는 것으로도 가능하고, 이와 더불어 git을 통한 퍼블리싱도 가능하다.
나의 경우에는 Beanstalk-CLI (링크)를 설치하고, 파이썬과 boto 인터페이스(링크)를 설치 한 후 git을 통해 beanstalk 서버에 직접 업로드 하는 방식을 사용했는데, 설정도 간편하고 git을 통해 푸시하는 방식은 익숙하다 보니 어렵지 않게 이용할 수 있었다.

DB에 접속할 때, php의 경우

      $dbhost = $_SERVER['RDS_HOSTNAME'];
      $dbport = $_SERVER['RDS_PORT'];
      $dbname = $_SERVER['RDS_DB_NAME'];
      $dsn = "mysql:host={$dbhost};port={$dbport};dbname={$dbname}";
      $username = $_SERVER['RDS_USERNAME'];
      $password = $_SERVER['RDS_PASSWORD'];


      $dbh = new PDO($dsn, $username, $password);

와 같이 접근하면 DB 핸들러를 얻을 수 있다.
그 이후에는 다른 서버에서 작업할때와 별반 다른점이 없는데, 다만 고생했던 점은.. DB 테이블의 인코딩을 UTF-8로 설정하고, 앱에서도 제대로된 인코딩 값을 보내주는데 DB에서 계속 한글이 깨지게 출력되어 알고보니 RDS DB의 기본 encoding 설정이 utf-8이 아닌 latin1으로 되어었었다.

문제는 이 설정값은 Beanstalk에 의해 생성된 인스턴스에 접근해서 my.cnf 파일을 수정해도 바꿀 수가 없다는 것인데, 온갖 방법으로 시도해봐도 영 바뀌지가 않아 고생하고 있다가 결국 해결책을 찾아냈다.

AWS관리 콘솔에 들어가서 RDS 대쉬보드에 들어가 Parameter charset을 UTF-8로 적용한 그룹을 생성하고, RDS 인스턴스 중에서 Elastic beanstalk가 생성한 인스턴스에서 instance action를 선택, 이후 modify -> Database options 하위에서 해당 Parameter group을 적용한 후 RDS 인스턴스를 재부팅하면 된다.

이후 다시 DB에 접속하여 show variables like ‘c%’를 쳐보면

character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem utf8
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /rdsdbbin/mysql-5.5.40b.R1/share/charsets/
collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server utf8_general_ci
completion_type NO_CHAIN
concurrent_insert AUTO
connect_timeout 10
위와 같이 캐릭터 셋이 utf8로 적용된 것을 확인할 수 있다.
아마존에서는 RDS의 파라미터 값을 바꾸는 것을 권장하지 않아 이런식으로 파라미터를 잠가 놓았다는데, 기왕이면 utf-8로 설정해주지 latin1이라니.. 그 탓에 Elastic beanstalk를 포기하고 EC2 인스턴스를 그냥 하나 생성할까도 고민했었다.
Elastic Beanstalk를 처음 사용해본 탓에 생각보다 고생했지만, git을 이용한 빠른 배포와 빠른 서버 설정에는 이만한 서비스가 없는 것 같다. EC2 인스턴스를 설치해 웹서버를 설치하고, DB를 설치해 권한 및 원격 접속을 설정하고, 여러 로그들을 관리하고, Auto Scaling을 적용하는데는 너무 많은 손이 간다.
간단한 서버의 배포를 위해 이 모든것을 설정하는데, EB를 이용하면 5분이 채 걸리지 않는다. (나처럼 헤매지 않는다는 가정하에..)
aws_management
또한 위에 보이는 AWS Console와 같이 공식적으로 지원되는 앱을 통해 모바일에서도 쉽게 서비스의 상태를 파악하고, 관리 가능하다는 것은 5분도 걸리지 않는 노력에 비해 충분한 메리트가 있다.
더구나 Free tier에서 이용 가능하므로 이 모든 것을 이용하면서도 비용이 청구되지 않는다. (서비스 트래픽이 증가해 Auto Scaling이 되지 않는 이상, Auto Scaling 되더라도 기본 설정은 t1.micro 4대까지 이므로 적절히 한달 가동시간 750시간을 넘기지 않게 잘 관리해주면 된다.)
서비스가 사용자가 몰리게 되면서 트래픽이 증가하게 되면 Elastic Beanstalk의 사용에서도 불편함을 느낄테지만, 간단한 서비스를 작성해 런칭하고, 반응을 보는데는 적합한 서비스다. Twitch가 Beanstalk를 사용해 개발되었으니, 생각만큼 소규모 서비스에만 적합한 서비스도 아니다. 사실 백엔드에 대한 복잡한 고민 없이 아이디어와 서비스의 질 자체에 집중하고 싶다면 Beanstalk가 좋은 선택이 될 것이라 생각한다.
Advertisements

Written by Ringster

2015/03/02 , 시간: 5:30 오후

2개의 답글

Subscribe to comments with RSS.

  1. 좋은 후기 잘 봤습니다^^

    smilk

    2015/05/07 at 6:20 오후


답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

Jay Jin, Programmer&Designer

Fork my brain because I'm ready to commit

쉐어보드

쉐어메이트에 관한 모든 것

jamesjungkuelee's biotech story

Biotech, entrepreneur, life

Communications as Ikor

기업 위기관리의 모든 것

Charles Pyo Ventures

시도와 실패, 성장의 기록. 2막에서도 계속되는 모험들.

VentureBeat

News About Tech, Money and Innovation

Open API, Cloud, DevOps 와 eBook

Open API, eBook, Cloud, DevOps

Economics of almost everything

Tech, Mobile, Internet

cylee

Tech, Mobile, Internet

gorekun.log

고어쿤로그

Google Developers Korea 블로그

Tech, Mobile, Internet

Android Developers Blog

Tech, Mobile, Internet

최피디의 앱스 개발기

기술, 앱스, SNS, 창업

D2 Blog

Tech, Mobile, Internet

All of Software

Tech, Mobile, Internet

'Startup's Story Platform’

'Startup's Story Platform’

%d 블로거가 이것을 좋아합니다: