8퍼센트 서울 살자

8퍼센트에서 성능 개선에 이어 진행한 AWS 이전에 대한 기록을 남겨보려고 한다.

2016년 1월 미국에서 한창 백수 생활을 하고 있을 때였다. AWS 서울 리전 오픈 소식이 들려왔다. 2016년 1월 이전까지 한국에는 AWS 리전이 없었기 때문에 수많은 스타트업이 도쿄 리전에 인프라를 구성하고 한국향 서비스를 하고 있었다. 이음도 그랬고 개인 프로젝트인 아이노알바, 렛미닥터도 그랬고 지금 다니고 있는 8퍼센트 또한 마찬가지로 도쿄 리전에 인프라를 두고 있었다.

8퍼센트의 경우 최초 인프라 구성을 도쿄 리전에서 해서 주요 인프라는 도쿄에 있고 신규 구성시에는 가급적 서울 리전에 하는 방식을 취하고 있었다. 서울 리전에 구성된 인프라도 대부분의 경우 도쿄 리전의 인프라와 연동이 필요하다. 그것이 사용자단에서의 연동인 경우도 있고 서버 간의 연동인 경우도 있는데 2가지 경우 모두 바람직하지 않다. 그렇기 때문에 언젠가는 서울로 모두 이전을 해야 했다.

웹서버에서 오래 걸리는 부분을 비동기 처리하기 위한 아키텍처 구성을 하면서 서울 리전에 모든 인프라가 있는 편이 좋겠다는 생각이 들었다. 장기적으로 봤을 때에도 2개 리전을 운영하는 부담과 연동의 부담을 덜 수 있어서 최대한 빠르게 진행을 하는 것이 좋겠다 싶어서 이전을 시작하게 되었다.

앞으로의 답답함을 없애기 위해 내가 한다.

도쿄 리전의 구성을 그대로 서울 리전에 했다. 기본적인 작업 내용은 아래와 같다.

  • EC2 이미지(AMI)를 떠서 옮겼다. AMI permission 설정을 통해 서울 리전의 계정으로 공유를 할 수 있었다.
  • RDS를 옮기면서 PostgreSQL 9.4에서 9.5로 업그레이드를 진행했다. snapshot을 복사해서 띄운 후에 업그레이드를 진행하는 테스트를 해보니 업그레이드에만 약 2시간이나 걸려서 포기했다. 대신에 PostgreSQL 9.5 RDS 인스턴스를 띄운 후에 pg_dump로 도쿄 RDS의 덤프를 떠서 옮겼다. 다행히 아직 8퍼센트의 데이터 사이즈가 그리 크지는 않아서 이 방법으로 1시간 이내에 RDS를 옮길 수 있었다.
  • S3 이전도 진행했다. 다른 계정, 다른 리전으로의 sync를 해주어야 했는데 도쿄 Bucket의 policy와 새 계정의 IAM User policy 설정을 잘해주니 awscli를 통해서 sync를 할 수 있었다. 참고 링크

ELB, VPC, CloudWatch 알람/대시보드, Route53, CloudFront도 동일하게 세팅했다.

인프라 이전 그 자체가 사실 그렇게 어려울 것은 없다. 도쿄에서 잘 동작하는 것이 서울에서도 문제없이 동작하게 하는 것이 중요했다. 토스, 세틀뱅크, 이니시스 등 외부 시스템과의 inbound/outbound 네트워크 연동이 문제없도록 커뮤니케이션하고 테스트를 진행하는데 제법 시간이 걸렸다. 또한 내부 서버 간의 연동도 문제가 없도록 준비했다.

이렇게 준비 과정을 마치고 이전을 하기로 한 날이 다가왔다. 작업 시작은 미리 세팅해둔 점검 페이지를 Route53 설정을 통해 노출하는 것으로 시작했다. 점검 페이지를 S3에 올려두고 CloudFront를 통해 노출했다. 점검 페이지 노출을 통해 도쿄의 RDS가 더 이상 업데이트되지 않는 상태가 되었고 이 시점에서 덤프를 떠서 옮겼다. 가장 큰 작업이 RDS 작업이었고 다른 작업은 대부분 미리 준비를 해두어서 금방 진행할 수 있었다.

이사날의 풍경에서 작업 당일의 열기를 느낄 수 있다! 이전 작업 자체는 대부분 내가 진행했지만 빠진 부분이나 확인이 필요한 부분을 잘 챙겨주고 관심 가져주는 동료들이 있어서 즐겁게 이전을 할 수 있었고 보람도 느낄 수 있었다. 작업을 함께 지켜보고 테스트를 함께 해준 개발자들과 수고했다고 말해준 모든 8퍼센트 동료들에게 고맙다는 말을 전하고 싶다.

Postings List