본문 바로가기

Sorry Architecture

Netflix Frigga

AWS(Amazon Web Services)를 사용하다보면 몇가지 제약사항을 만나게 된다. 가장 먼저 만나게 되는 제약사항은 S3 버켓(Bucket) 이름이다. S3 버켓은 domain을 만드는 기준이 되기 때문에 세계에서 유일해야 한다. 이러한 제약사항을 미리 알고 있었으나, 클라우드 포메이션(CloudFormation)으로 S3의 버켓 이름을 자동으로 생성하면서 버켓이름이 충돌했던 경험이 있었다. Music Radio 를 설계하던 시절이었는데, 애플리케이션(Application) 배포를 위한 deploy, 그리고 로그 보관을 위한 log 버켓을 만들도록 클라우드 포메이션을 작성했었고, 처음에는 문제가 없었다. 그러나 곧 개발, 검증, 운영환경을 복사해서 만들다 보니 문제가 생겼다. 같은 이름으로 버켓을 만들 수 없었던 것이다. 처음부터 필수 버켓은 여러 환경에서 공통으로 사용하게 할 생각이었기 때문에 클라우드 포메이션에 조건문을 넣어서 버켓을 한 번만 만들도록 처리해 주었다.

그러나 시간이 지나고 비슷한 문제가 계속 생겼다. 특히 RDS를 만들 때 클러스터(Cluster)의 엔드포인트(End-point)도 S3 버켓과 마찬가지 방식을 사용하고 있었다. 그러나 버켓과 달리 RDS 인스턴스(Instance)는 공유해서 사용할 수 없었다. 한 개의 RDS 인스턴스에서 모든 환경의 정보를 담을 수도 있겠지만, 운영 환경과 개발환경이 섞여있다는 것은 서비스(Software Service)운영의 안정성을 떨어뜨는 일이기 때문에 절대 그렇게 할 수 없었다. 그래서 검증 환경과 운영 환경을 꼭 분리해야 했다. 그래서 RDS 인스턴스를 구축 환경과 지역에 따라 자동으로 이름을 만들도록 클라우드 포메이션을 개선했고 겹치지 않으면서도 쉽게 식별 가능하게 했다. 실제로 {application/service}-{env}-{stack}-{detail} 의 형태를 띄도록 설계했으며, 이 규칙에 따라 개발 환경을 위한 배포 버켓은 radio-d-ap1-deploy가 됐다. 그래서 서비스 국가 확산이든 재해 복구(Disaster Recovery, DR)든 동일한 클라우드 포메이션으로 처리할 수 있도록 만들었다. 실제로 Music Radio는 많은 관심을 받았고, 여러 국가에서 서비스를 하고 싶어했다. 그래서 국가 확산을 위한 인프라스트럭처 구성을 위해 몇 개의 지역에 추가로 클라우드 포메이션 스택(Stack)을 올렸는데, 이 때 걸린 시간은 단 1일 이었다.[각주:1]
 
몇 년의 시간이 지난 후 사물인터넷(IoT) 과제를 하게 되었는데, 여기서 사용하는 이름 짓기 규칙(Naming Rule)이 있다는 말을 들었다. 먼저 그 규칙을 배워 온 선임이 신나서 열심히 설명을 해주었는데, VPC는 {env}-{shard}의 규칙을 따라서 만들어야 하고, 서비스는 {service}-{shard}-{detail} 형식을 따라야 한다고 말했다. 설명을 듣다보니 자연스럽게 미소가 지어졌는데, 몇 년 전부터 내가 만들어 사용하던 규칙과 너무 똑같아서 깜짝 놀라기도 했고 흐뭇하기도 했기 때문이었다. 그런데 그가 말하길 그 이름 규칙은 넷플릭스(Netflix)에서 사용하는 프리가(Frigga)라고 했다. 나중에 안 사실이지만 이 이름 규칙과 이름을 지어주는 자바 라이브러리(Java Library)는 넷플릭스에서 널리 사용한다고 한다. 넷플릭스 클라우드 관리도구인 스핀에커(Spinnaker)[각주:2]에서도 이 규칙 - Frigga Naming - 을 적극적으로 활용하고 있다.

넷플릭스에 따르면, 프리가는 넷플릭스의 아스가르드(Asgard) 과제에서 사용하는 AWS 자원 이름 생성 및 관리를 위한 자바 라이브러리[각주:3]라고 한다. 한 가지 재밌는 것은, 프리가는 아스가르드 여왕의 이름이라는 것[각주:4]이다. 보다 자세한 내용은 프리가의 깃허브(https://github.com/Netflix/frigga)에 있다.

By Carl Emil Doepler (1824-1905) - Wägner, Wilhelm. 1882. Nordisch-germanische Götter und Helden. Otto Spamer, Leipzig & Berlin. Page 109., Public Domain, https://commons.wikimedia.org/w/index.php?curid=5166997

 

  1. 기존 방식대로라면 프로젝트 팀 구성, 일정 논의, 담당 지정, 실무의 단계를 거쳐야 해서 최소 2개월 이상 걸렸다. [본문으로]
  2. Spinnaker [본문으로]
  3. Frigga is a standalone Java library containing the logic Netflix's Asgard project uses for generating and parsing AWS object names. From Norse mythology. the name Frigga (Frigg) refers the wife of Odin, queen of Asgard. [본문으로]
  4. Frigg_Wikipedia [본문으로]

'Sorry Architecture' 카테고리의 다른 글

Microservices, and Hangul(한글)  (0) 2019.02.21
PhoenixServer  (0) 2019.02.20
Cloud Computing  (0) 2019.02.18
Encapsulation  (0) 2019.02.16
Bakery System  (0) 2019.02.16