월별 글 목록: 2015년 7월월

이음(I-UM) on AWS

안녕하세요. 이음소시어스 개발팀 서버개발자 육승찬(루)입니다.

바야흐로… 2010년 4월 소셜데이팅 서비스 “이음”을 베타 런칭했습니다. 이음은 5년 동안 베이론 서버 제작을 포함해서 많은 변화를 추구해 왔습니다. 앞서서 이음 서비스를 간단하게 설명하고 시작하겠습니다.

이음은 대한민국 대표 소셜데이팅 서비스이며, 현재 회원 110만 명, 일 평균 1,000쌍 이상의 상호 OK가 진행되고 있습니다. 그리고 150만 이상의 누적 앱 다운로드를 기록하고 있습니다.

스크린샷 2015-07-03 오후 2.22.01

이 포스팅에서는 이음이 AWS를 어떻게 사용하고 있는지 설명하려고 합니다. 이음은 2012년 6월부터 AWS를 사용해 왔습니다. 현재 사용하고 있는 서비스를 간략히 나열해보면 아래와 같습니다.

  • EC2
  • ELB
  • RDS
  • S3
  • CloudFront
  • Route53
  • CloudWatch
  • SES
  • SNS

이렇게 나열해보고 나니 생각보다 많이 쓰고 있었네요! 그럼, 각 서비스를 어떻게 사용하고 있는지 설명해 드릴게요.

나와랏.. 스피드웨건 !

나와랏.. 스피드웨건 !

EC2 & EBS & ELB

이음에서는 다수의 EC2 인스턴스를 사용하고 있습니다. API서버, 웹서버, 어드민서버, 통계서버, 개발서버, Redis, SMS 등을 EC2에 올려놓고 사용하기 때문입니다. EC2는 순식간에 가상 서버를 만들 수 있는 장점이 있습니다. 예로 이전의 포스팅했던 깃랩 업데이트 당시에도 테스트하기 위해 가상서버를 만들어서 진행했습니다. AMI로 인스턴스를 만드니 빠르게 테스트 할 수 있었습니다.

대부분의 EC2의 Volume으로 EBS General Purposed SSD(gp2)를 사용하고 있습니다.

API 서버와 웹서버 같은 경우는 ELB를 앞단에 두고 있습니다. API 서버는 Auto-Scaling 기능을 사용하여 자동으로 scale-out 됩니다. 어드민, 통계, Redis 같은 경우는 아직 scale-out 할 필요성이 없어서 순수 EC2만을 사용하여 구동하고 있습니다.

여담으로 내부적으로 T2 타입 인스턴스를 좋아하고 많이 사용합니다. T2 타입 인스터스는 인스턴스 크기를 기반으로 정해진 고정 비율에 따라 지속해서 CPU 크레딧을 받고, 크레딧을 사용하여 기본 CPU 성능을 넘은 “성능 순간 확장”이 가능합니다. 간단한 테스트 서버가 필요할 경우 T2 타입의 인스턴스를 사용하면 좋습니다 ^^

RDS

이음에서는 MYSQL을 사용하고 있습니다. RDS에서 Mysql Engine을 선택하여 Master 1대, Read Replica 1대를 사용하고 있습니다. 그리고 Provisioned IOPS 옵션은 2000으로 사용하고 있습니다.

RDS 인스턴스는 종료하지 않고 인스턴스 타입을 변경할 수 있습니다. (물론 다운타임은 있습니다) 또한, Replica를 생성할 수 있는 기능도 있어서 관리 측면에서는 매우 좋습니다. RDS는 다른 서비스에 비해 상당히 비싼 편입니다. 하지만 관리적인 측면에서 매우 편하기 때문에 사용하고 있습니다.

최근에 RDS 오로라 엔진이 나왔습니다. 오레곤 리전에 인스턴스를 만들어서 사용해보고 있습니다. 이음 개발팀에서는 긍정적으로 보고 있고 빨리 도쿄리전에서 사용할 수 있었으면 하는 바람입니다.

S3

S3는 장점이 매우 많아 활용도가 무궁무진한 서비스입니다. 비용이 매우 저렴하고 오브젝트에 설정할 수 있는 옵션도 많습니다. Bucket에 로깅 기능도 있기 때문에 쉽고 편하게 사용할 수 있습니다. 그래서 이음에서 사용하는 모든 이미지는 S3에 저장하고 static 이미지들 또한 S3에 업로드하여 사용합니다. 또 이벤트 페이지가 필요할 때, 마크업을 작성하여 S3에 올려서 배포하여 사용하고 있습니다.

관리 측면에서 보면 S3는 정말 좋은 서비스입니다. 보통 static 서버를 따로 구성하게 되면 용량이 찼을 때, 증설 작업을 해줘야 합니다. 하지만 S3는 scale-out, 용량 증설에 고민할 필요가 없습니다. 다양한 서비스에 붙여서 사용할 수 있는 아주 매력적인 서비스입니다. (제가 정말 좋아해요..)

CloudFront

CloudFront는 S3에 업로드된 오브젝트를 배포할 때 사용합니다. 한국을 비롯한 세계 각 리전에 엣지가 있고 S3와 연동 쉬워서 매우 편리합니다. 이음에서는 프로필 이미지, 뱃지 이미지를 포함한 대부분 이미지를 signed URL을 사용하여 배포되고 있습니다.

이음은 AWS와 향후 1년간 CDN 서비스로 CloudFront만 사용하겠다는 Exclusivity 계약을 맺고 사용하고 있습니다. 위 계약을 맺게 되면 비용절감을 할 수 있습니다.

Route53

서비스 도메인 i-um.net, i-um.com의 DNS 서비스를 Route53로 옮겨서 사용하고 있습니다.  Route53는 비용도 저렴하고, 도메인 구입 비용도 비싸지 않습니다. 그리고 AWS의 다른 서비스들과 같이 사용하면 매우 편합니다. ELB, S3 웹호스팅, EIP, CloudFront와 연동이 매우 쉬우므로 좋습니다. 도메인 연결을 AWS Console에서 할 수 있기 때문이기도 하고요.

CloudWatch

ELB, EC2, EBS, RDS, SNS, Auto-Scaling Group의 상태를 모니터링합니다.. 이음에서는 CPU, DISK 등 다양한 기준을 두고 해당 조건에 맞으면 이메일, SMS로 알려줍니다. 그리고 특정 조건에 Auto-Scaling 되도록 연동하여 사용하고 있습니다.

CPU 올라간다~

CPU 올라간다~

SES

SES를 사용하면서 크게 문제 있었던 적은 없었으나, 이메일 반환율 때문에 메일이 온 적이 있습니다. 메일 전송시 반환비율이 높아지면 경고 메일이 옵니다. 반환율이 일정 비율을 넘기면 SES 서비스가 블럭 되므로 평소에 잘 관리해야 합니다.

SNS

이음에서 전송하는 모든 푸쉬는 SNS를 통해서 나갑니다. 여러 디바이스에 한 번에 보낼 수 있어서 매우 편리합니다. PUSH뿐만 아니라 CloudWatch에서 설정한 Alarm을 메일 또는 메세지로 보내주기도 합니다. SNS 내에 SMS를 보내주는 기능이 없어서 SMS 서버를 만들었습니다. 그리고 SNS에서 HTTP로 Call 하도록 구성했습니다.

맺음말

마지막으로 이음에서 사용하는 모든 서비스를 그림으로 그려봤습니다.

스크린샷 2015-07-03 오전 11.05.44

현재 개발팀은 RDS 오로라와 람다 서비스에 많은 관심을 기울이고 있습니다. 오로라는 서베이 후 괜찮다 싶으면 시범적으로 사용해볼 예정입니다. 람다의 경우 아직 Javascript, Java밖에 지원하지 않는 점이 아쉽습니다. AWS는 운영하면서 중간중간 변화를 주는 묘미가 있고 틈나는 대로 구성을 변경하고 있습니다. 앞으로도 더 좋은 서비스가 나오기를 바라면서 마칩니다.

 

PS. 항상 도움을 주는 AWS 팀에게 감사드립니다.