Ringster's Techblog

Tech, Mobile, Internet

Archive for the ‘아마존 웹서비스’ Category

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가 좋은 선택이 될 것이라 생각한다.

Written by Ringster

2015/03/02 at 5:30 오후

SporTracker 제작 후기 (1) – Twitter Fabric, Crashlytics kit 사용기

with 2 comments

지난달 남는 시간을 들여 만든 앱을 하나 앱스토어에 등록했다.
Eclipse ADT만 사용하다가 Android studio로 갈아탄 후 제작한 첫 앱인데, 처음엔 IDE가 익숙하지 않아 고생했지만 이런저런 시행착오를 한 덕에 Android studio에 익숙해졌다.

앱에 대한 설명을 간단히 하자면, 개인적으로 수영을 즐겨 하기에 내 수영 기록을 로컬 DB에 저장 관리하면서 그래프로 기록 추이를 나타내서 보여주면 좋겠단 생각에서 시작했다. 1주일 정도 짬짬히 시간을 내서 오픈소스와 기본 위젯들을 간단히 변형하여 완성했는데, 켤때마다 투박한 모습이 거슬려서 material 디자인 스타일의 위젯으로 전부다 갈아 엎었다.
기왕 깔끔하게 만들기로 작정한 참에 여러 사람이 쓸 수 있도록 공개해야겠다는 생각이 들어, 여러 사람들의 기록을 저장할 수 있도록 AWS를 이용해서 DB와 웹서버도 붙이고, 구글플러스 로그인 연동을 붙여 구색을 맞추어 놓았다.
IDE에 익숙해지려고 시작한 작은 프로젝트가 너무 커진다는 생각이 들어서, 웹서버쪽의 세세한 구현은 추후 반응이 있으면 추가 구현하기로 마음먹고 버전을 릴리즈했다. 첫 커밋을 한 후 정확히 한달 째 되던 날 코딩을 마무리하고 앱을 마켓에 등록했다.

나름 마켓에 등록한 앱이니 Crash report도 붙여놨는데, 작은 프로젝트들에 대하여 자주 사용했던 URQA (링크) 대신, Twitter Fabric(링크)을 대신 이용해 보았다.

Android Studio에 Fabric을 설치하는 것은 설명이 필요 없을 정도로 쉽다. 플러그인만 설치하면 되고, 이마저도 튜토리얼이 제공된다. 튜토리얼을 따라서 Fabric을 설치하고 나면 안드로이드 스튜디오가 알아서 프로젝트에 Crashlytics를 추가해준다. 추가한 후 에는 Fabric Answer 탭에서 아래와 같은 창을 볼 수 있다.

fabric_answer

DAU등과 더불어 각각의 Activity에 대한 세션 길이또한 보여준다.
덕지덕지 붙여놓은 Google Analytics가 무색해질만큼 간단한 정보는 편리하게 받아 볼 수 있다.

사실 이러한 기능보다 더욱 더 편리하다고 생각되는 것은 Beta라는 기능이다.
소규모 앱개발자들의 경우 베타테스터에게 앱을 릴리즈하고, 테스트 리포트를 받아보는 과정은 상당히 까다로운 과정이다.
APK를 일일히 보내서 업데이트하기도 번거롭고, 그렇다고 구글 플레이 스토어의 베타 업로드 기능을 사용하려면, 한번 업로드 하고 그 내용이 적용되기까지 몇시간은 그냥 날려먹어야 한다.

하지만 Beta를 이용하면 아래의 인터페이스를 통해 간단히 베타 버전을 릴리즈 할 수 있다.
fabric_beta

Add Tester 버튼을 통해 이메일 주소만 추가하면 해당 메일을 통해 베타 테스트 앱 링크가 날아가고,  해당 메일을 선택하여 Accept를 선택하면 Beta 앱이 베타테스터의 디바이스에 설치된다.mobile_beta-side

링크를 선택해 Beta를 실행시키면 위와 같이 베타버전 접속이 가능하다.
권한이 허가되면 마지막 화면과 같이 릴리즈 노트와 베타버전을 다운받을 수 있는 버튼이 표시된다.
베타 테스터들의 테스트 결과는 Crash report와 Fabric Answer에 바로 적용되고, Fabric 인터페이스를 통해 베타테스터의 권한을 회수하거나, 테스터마다 다른 권한을 주어 관리하고, 테스터 그룹을 생성/관리할 수 있다.

마지막으로 Crash report 항목이다.fabric_crash_reporting

위와 같이 어디서 크래쉬가 발생했고, 몇명의 유저가 영향을 받았는지 표시된다.
버전별, 시간대별로 정렬 가능하고 Jira와 같은 Issue 트래킹 시스템 만큼은 아니지만 간단히 Issue의 Open/Closed 상태도 관리가 가능하다.
issue_detail

상세 issue정보를 보면, 기기의 루팅 상태나 Storage, memory 상태들을 볼 수 있고 좀더 자세히 살펴보면crash_detail

위와 같이 기기 정보나, 배터리 정보, UI orientation 에 대한 정보도 출력된다. 커스텀 키를 설정해서 추가 정보를 받을 수도 있는 것 같은데, 여러모로 이슈 트래킹에 도움이 될 것으로 보인다.
issue_detail_closed

이슈를 close 하게되면 위와 같이 표시되며, Crash report 리스트 상에서는 취소선이 표시된다.

간단히 사용할 수 있고, 편리하지만 그렇다고 기능이 가볍지는 않다.
아직 세세한 기능까지는 사용해보지 않았고, Fabric 자체도 아직은 베타 버전이지만 지금까지의 상태만으로도 충분히 강력하고, 기대되는 모습을 보여준다. 특히 Beta의 강력한 베타테스터 배포 기능은 Fabric이 앞으로 널리 쓰이게 될 것이라는 확신을 갖게 해준다.

얼마나 사용히 간편한지 간단한 튜토리얼을 보고 싶다면, 아래의 링크에 접속해보시길 바란다.
http://www.crashlytics.com/blog/launching-beta-by-crashlytics/

Written by Ringster

2015/03/02 at 4:12 오후

Yurim 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막에서도 계속되는 모험들.

techNeedle 테크니들

글로벌 테크 소식을 인사이트와 함께 전달합니다

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 Blog

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’