이상형 오디션 on AWS

2013년 11월 말… 새로운 프로젝트 개발을 시작하게 되었습니다. 이름하여 ‘본격대결, 이상형 오디션’ 입니다. 5개월여의 시간이 흘러 4월말 오픈 베타를 시작으로 5월 7일에 정식 런칭을 하게 되었습니다.

idealmate

 

현재 <안드로이드앱>을 스토어에서 만나볼 수 있습니다. 또한 이상형 오디션의 기획 이야기에 관심이 있으시다면 <게임과 네트워킹의 만남, 본격 대결 ‘이상형오디션’ 기획 이야기>를 읽어보시기를 추천합니다.

 

이 포스팅에서는 이상형 오디션이 인프라로 선택하고 사용한 AWS 서비스에 대해서 소개를 해보려고 합니다. 사용한 서비스를 간략히 나열해보면 아래와 같습니다.

  • EC2
  • RDS
  • S3
  • CloudFront
  • Route53
  • SNS
  • SQS

 

EC2

EC2는 AWS의 기본이 되는 서비스이며 가상 서버입니다. 사용자의 요청을 처리하는 API 서버와 서비스 운영, 통계 등을 담당하는 어드민 서버, 아직 AWS의 서비스로는 지원하지 않는 mongoDB 서버를 EC2 상에서 운영하고 있습니다. API 서버의 경우 ElasticLoadBalancer, AutoScaling 연동을 해서 자동으로 scale-out 이 되도록 해두었으나 아직 서비스 규모가 크지 않아서 효과를 보지는 못했네요.(얼른 트래픽이 많아져서 AutoScaling 이 빛을 발하는 모습을 보고 싶습니다.) MongoDB 의 경우 2014년 4월에 추가된 memory optimized instance인 r3 instance 를 사용하여 가격대비 높은 메모리를 쓰고 있으며 I/O 성능을 높이기 위해 Provisioned IOPS EBS volume을 붙여서 mongoDB 의 storage로 사용하고 있습니다. 참고로 r3 instance의 경우 HVM(Hardware Virtualization) AMI 만을 지원하므로 instance 생성시에 주의해야 합니다.

RDS

개발 시작 즈음부터 RDS에서 PostgreSQL을 사용할 수 있게 되었습니다. 이음에서 MySQL을 사용하면서 겪었던 문제들 중 하나가 table에 새로운 column을 추가할때 table에 lock이 걸려서 해당 table에 대한 요청을 처리할 수 없는 것이었습니다. PostgreSQL의 경우 column 추가가 매우 빨라서 기획이 바뀌거나 기능을 추가하는 경우에 좀 더 유연하게 대처할 수 있을 것으로 판단을 해서 선택하게 되었습니다. 또한 PostgreSQL의 안정성을 믿기로 했습니다. PostgreSQL 또한 Provisioned IOPS를 설정해서 안정적인 성능이 나오도록 했습니다. 역시나 아직까지 트래픽이 많지 않아 매우 안정적이며 여유롭습니다.

S3

S3는 다양하게 활용할 수 있는 매우 좋은 서비스입니다. 서비스를 위한 이미지와 사용자가 직접 업로드하는 프로필 사진 모두 S3에 업로드하여 서비스를 하고 있으며 각종 로그도 저장하고 있습니다. 또한 API 서버 배포시에 S3를 저장소로 사용하고 있습니다.

CloudFront

서비스용 이미지와 사용자 프로필의 경우 S3를 origin으로 하여 CloudFront를 통해 서비스를 하고 있습니다. CDN를 따로 계약할 필요없이 트래픽만큼만 비용을 지불하면 되니 정말 최고의 서비스가 아닌가 싶습니다. 참고로 사용자 프로필의 경우는 무분별한 크롤링을 방지하기 위해 signed URL을 사용하고 있습니다.

Route53

서비스용 도메인인 idealmate.kr의 DNS 서비스로 Route53을 사용하고 있습니다. 4월 10일부터 유료화된 DNSever 대신 사용하게 된 것이 그나마 이야깃거리네요. DNSever의 경우 standard DNS가 도메인당 월 천원(부가세 별도)이고 Route53의 경우 0.5달러여서 조금 더 저렴하기도 합니다.

SNS

모바일앱 Push nofitication을 사용하고 있습니다. 이상형 오디션의 경우 현재는 안드로이드앱만 출시된 상태지만 iOS앱도 출시를 위해 심사중입니다.(애플과의 밀당은 그만하고 싶네요ㅠㅠ)  SNS Push notification의 경우 APNS, GCM을 모두 지원하고 월 최초 백만건이 무료이며 추가 백만건당 0.5달러로 매우 저렴합니다. Push nofitication외에도 CloudWatch에서 설정한 alarm을 받는 용도로도 사용하고 있으며 alarm을 email과 http 연동을 통한 SMS로도 받고 있습니다.

SQS

이상형 오디션의 기능 중 랭킹 기능이 있습니다. 랭킹의 경우 사용자의 연승 갱신, 승리 추가, 채팅 요청, 채팅 수락 등의 액션에 따라서 랭킹 포인트가 증가해야 하는데 API 서버가 바로 랭킹 포인트를 갱신하기에는 부담스러운 작업입니다. 그래서 SQS를 사용해서 랭킹 포인트를 비동기로 증가시키도록 했습니다. 물론 SQS에 쌓인 job을 읽어서 처리하는 worker는 별도로 구현을 했습니다.

 

맺음말

이번 프로젝트를 하면서 AWS 서비스를 다양하게 사용해보았습니다. 이음에서는 아직 사용하지 않는 CloudFront, SNS Push notification을 사용하면서 비용도 절약하고 개발도 편하게 할 수 있었습니다. 프로젝트를 진행하는 동안 AWS도 RDS PostgreSQL 지원, EC2 r3 instance 추가, 가격 인하 등의 변화가 있었고 프로젝트에도 많은 도움이 되었습니다. 앞으로도 AWS가 더 발전하기를 바라면서 이만 마치겠습니다.