5
AKAMAI 백서 기능 토글과 다크 릴리스 최신 배포 방식을 적용하여 연말연시 트래픽에 대비하기 저자: 마누엘 알바레스(Manuel Alvarez) Akamai 글로벌 컬설팅 서비스팀 소속 엔터프라이즈 아키텍트

기능 토글과 다크 릴리스 | Akamai · 기능 토글과 다크 릴리스: 최신 배포 방식을 적용하여 연말연시 트래픽에 대비하기 3 • 기존 환경에

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 기능 토글과 다크 릴리스 | Akamai · 기능 토글과 다크 릴리스: 최신 배포 방식을 적용하여 연말연시 트래픽에 대비하기 3 • 기존 환경에

AKAMAI 백서

기능 토글과 다크 릴리스최신 배포 방식을 적용하여 연말연시

트래픽에 대비하기저자: 마누엘 알바레스(Manuel Alvarez)

Akamai 글로벌 컬설팅 서비스팀 소속 엔터프라이즈 아키텍트

Page 2: 기능 토글과 다크 릴리스 | Akamai · 기능 토글과 다크 릴리스: 최신 배포 방식을 적용하여 연말연시 트래픽에 대비하기 3 • 기존 환경에

기능 토글과 다크 릴리스: 최신 배포 방식을 적용하여 연말연시 트래픽에 대비하기 1

테스트 시간 부족이라는 두 번째 상황에 대비하여 관리자(제품 관리자, 스크럼 마스터 등 타임라인 담당자)들은 출시일보다 훨씬 일찍 마감일을 정합니다. 하지만 코드 또는 기능이 준비되지 않아 해당 기능을 릴리스 버전에 포함할지 판단해 마스터 브랜치에서 코드를 제거하거나 부분적으로 작동하는 버전(스프린트 방식)을 릴리스하거나 프로덕션에 코드를 적용하되 사용자가 실행할 수 없도록 기능을 숨겨야 하는 경우도 발생합니다.

마지막 옵션은 두 번째 상황과 연결됩니다. 코드는 준비되었으나 아직 운영 환경에서 테스트 또는 출시할 수 없는 경우입니다. 이때 다크 릴리스를 사용합니다. 다크 릴리스란 릴리스 버전에 코드 또는 기능을 적용하되 개발자만 아는 인증 쿠키 등을 사용하여 활성화할 수 있도록 숨기는 방식을 가리킵니다. 이 외에도 두 가지 환경 모두를 운영에 대비하는 블루/그린 개발 방식 또는 IaaS(Infrastructure as a Service)를 이용해 테스트용 운영 환경을 분리시키는 방식이 존재합니다. 그러나 필자는 운영 환경의 일부를 분리시켜 운영하는 방식이 아무리 효과적이라 하더라도 실제 운영 환경에서 실시하는 테스트를 대체할 수는 없다고 생각합니다. 그 이유는 무엇일까요? 테스트 스크립트와 테스트 케이스는 예측 가능하지만 실제 사용자들의 사용 방식을 예측하기란 어렵기 때문입니다.

다크 릴리스와 기능 토글코드 전송은 매우 힘든 목표가 아니라 일상적으로 진행되는 일이 되어야 합니다. 제즈 험블(Jez Humble)은 이렇게 말합니다.

“소프트웨어를 출시하기 전에 반드시 운영 환경에 소프트웨어를 배포하여 스모크 테스트와 캐시가 웜업되기까지 기다리는 등 각종 작업을 수행해 봐야 한다. 스모크 테스트를 실시하는 이유는 배포에 문제가 없는지, 운영 환경의 구성 설정(데이터베이스 연결 스트링 등)에 오류가 없는지 확인하는 것이다.”

다크 릴리스의 장점은 애플리케이션 코드를 변경하지 않고도 기능을 릴리스하거나 시스템 동작을

수정할 수 있다는 데 있습니다. 이 방식은 다크 릴리스(신규 기능에 대한 사용자 액세스 차단)와 라이브

릴리스 간에 전환(토글)이 가능하다고 하여 '기능 토글' 또는 '기능 플래그'라고도 불립니다.

기능 토글의 문제

기능 토글에서 가장 유의해야 할 점은 적절한 '권한'이 충족된 경우에만 기능에 액세스할 수 있어야 한다는 것입니다. 여기서 권한이 충족되는 경우는 개발자, 승인 관리자, 외부 업체, 자동화된 조건(특정 날짜/시간 등) 등이 포함됩니다.

테슬라 Model 3를 예로 들면, 이 모델에는 고급 오토파일럿(및 출시 예정인 완전자율주행) 기능을 사용하기 위해 필요한 하드웨어가 이미 탑재되어 있습니다. 고급 오토파일럿 기능은 OTA 소프트웨어 다운로드를 통해 활성화할 수 있는데, 자동차 대리점을 방문하지 않아도 집에서 전화 한 통만 걸면 신용 카드를 사용하여 기능을 활성화할 수 있는 것입니다.

테슬라의 세부 엔지니어링에 대해 자세히 알지는 못하지만, 이와 같이 고급 오토파일럿을 활성화하는 코드를 사용자에게 전달하는 방법에는 두 가지가 있습니다. 하나는 차량 자체에 몇 GB의 소프트웨어 전체를 다운로드하는 방법이고, 다른 하나는 코드를 적용하되 사용자 액세스는 차단된 상태로 차량을 출고하는 것입니다. 후자의 경우 오토파일럿 코드가 적용된 버전과 적용되지 않은 버전을 별개로 관리할 필요가 없기 때문에 코드 일관성이 향상되고 추가 다운로드가 필요하지 않아 보다 합리적이라고 생각되지만, 이를 실제로 적용하려면 몇 가지 문제에 직면하게 됩니다.

문제 의식 개발자들이 모인 자리에서는 종종 비슷한 경험담을 들을 수 있습니다. 로컬 시스템이나

개발 환경에서는 문제없이 작동하던 코드가 출시 당일 운영 환경에서는 작동이 중단되는

것입니다. 얘기를 자세히 들어보면 "운영 환경에서 테스트할 방법이 없었다" 또는

"72시간 동안 잠도 못 자고 출시일에 맞춰 준비하느라 제대로 테스트할 수 없었다"는

이유 때문입니다.

Page 3: 기능 토글과 다크 릴리스 | Akamai · 기능 토글과 다크 릴리스: 최신 배포 방식을 적용하여 연말연시 트래픽에 대비하기 3 • 기존 환경에

기능 토글과 다크 릴리스: 최신 배포 방식을 적용하여 연말연시 트래픽에 대비하기 2

• 권한 없는 사용자가 코드를 조작(해킹)하지 못하도록 토글을 안전하게 보호할 수 있어야 합니다.

• 보안 AAA: 인증, 권한, 과금(Authentication, Authorization, and Accounting)이 충족된 경우에만 기능이 활성화되어야 합니다.

• 토글이 실수로 삭제되거나 비활성화되는 일(회귀 테스트의 테스트 케이스 포함)을 방지하기 위해 올바른 거버넌스를 적용해야 합니다.

• 각 사업부 간의 협업을 지원하고 간소화해야 합니다. 사용자가 전화로 기능 활성화를 요청하는 경우 승인을 담당하는 담당자가 기술 백그라운드가 없는 영업팀 소속이라면 담당자가 어렵지 않게 승인을 진행할 수 있도록 토글 기능이 사용자 친화적인 인터페이스를 통해 제공되어야 합니다.

상기 문제점에 더해 중앙으로 일원화되지 않은 구현 방법, 까다로운 코드, 계층 기능 토글과 같은 문제도 고려해야 합니다. 토글을 코드에 구현하는 것은 어렵지 않지만 유지 관리는 어렵습니다. 기능이 라이브 릴리스에 포함된 경우 사용하지 않는 토글을 삭제하지 않으면 무엇이 활성화되었고 무엇이 활성화되지 않았는지 파악하기 어렵게 됩니다.

기능이 지속적으로 배포되지만 일부 기능만 운영 환경에서 릴리스되는 CI/CD(지속적인 통합/지속적인 전송) 환경에서는 기능 플래그가 일반적으로 사용됩니다. 웹 이벤트나 마케팅 캠페인에서도 사전에 자산을 릴리스하고 라이브 시점에 토글이 활성화되도록 하는 등 기능 플래그를 유용하게 이용할 수 있습니다.

CDN에서의 기능 토글CDN은 앱이나 웹 프로퍼티의 최전방을 담당하며 의사 결정을 한 곳으로 집중화합니다. 상세한 권한 부여 관리와 자동화 툴(API 지원, 날짜 일치 등)을 사용하면 기능 토글과 관련된 컨트롤과 거버넌스를 효과적으로 구현할 수 있습니다. 여기서는 Akamai 기능의 이름을 사용하겠습니다. CDN 기능과 제품명은 생태계 내에서 상이할 수 있습니다.

코드를 라이브로 릴리스하는 대신 메타데이터를 이용하여 다크 릴리스를 이용하는 것의 장점은 무엇일까요?

• 리스크 감소: 다크 릴리스를 이용하면 사용자에게 미치는 영향 없이 운영환경에서 코드를 테스트할 수 있습니다.

• 간편한 구현: 기능 토글은 구현이 쉽지 않은 경우가 있습니다. 수신되는 HTTP 요청이나 클라이언트 특징(디바이스, 위치 등) 중 거의 모든 항목의 일치 여부를 검사하는 CDN의 기능을 이용하면 코드/인프라를 변경하지 않고도 각 상황에 맞는 복잡한 일치 조건을 정의할 수 있습니다.

• 통합: API를 이용하여 토글 컨트롤과 릴리스를 CI/CD 툴에 통합할 수 있습니다.

• 관리: 설정을 수정하거나 기능 토글 활성화 등의 변경을 수행할 수 있는 역할 및 사용자 권한을 관리하여 필요에 따라 권한을 제한하거나 부여할 수 있습니다.

• 가시성: 신기능 출시에는 높은 기대감과 함께 무언가 잘못될지도 모른다는 두려움이 따릅니다. 기능이 토글되는 조건과 같은 조건으로 새 CP(콘텐츠 공급자) 코드를 적용하여 트래픽을 추적하고 맞춤형 보고서를 받아볼 수 있습니다. 새 CP 코드의 또 다른 장점은 오리진 경고를 설정하여 시간제한을 초과하거나 오류 응답이 지정한 임계값에 도달하는 경우 알림을 받을 수 있다는 것입니다.

CDN에서 다크 릴리스를 실시하는 방법기능 토글을 위해 CDN을 활용하는 방법은 몇 가지가 있습니다.

새 URL 경로 또는 API

CDN이 리버스 프록시로 역할하면서 요청에 대한 대체 콘텐츠를 제공하도록 만들 수 있습니다. 릴리스할 기능이 새 URL 경로에 존재하는 경우, 가장 좋은 방법은 새 URL에 대한 요청을 이벤트 마케팅 페이지와 같은 대체 위치로 전송하고 개발자, 테스터 등 제한된 사용자에게만 액세스를 허용하는 것입니다. Akamai에서 VP(Visitor Prioritization) 또는 API Prioritization이라고 부르는 이 기능은 릴리스 준비가 될 때까지 일반 사용자로부터 URL 경로를 숨겨 줍니다. 이 기능의 장점은 다음과 같습니다.

• 변경 내용이 거의 즉각적으로 전파

• 사용자가 기능에 액세스하는 방식을 세부적으로 관리(예: 쿠키가 일치하는 경우, 특정 지역에서만 또는 무작위 방식으로 기능 활성화)

Page 4: 기능 토글과 다크 릴리스 | Akamai · 기능 토글과 다크 릴리스: 최신 배포 방식을 적용하여 연말연시 트래픽에 대비하기 3 • 기존 환경에

기능 토글과 다크 릴리스: 최신 배포 방식을 적용하여 연말연시 트래픽에 대비하기 3

• 기존 환경에 대한 통합 및 자동화를 지원하는 강력한 API

• 다양한 옵션(API 카탈로그로 리디렉션, 우수한 마케팅 페이지 표시 등)을 제공하는 대기실(토글이 OFF 상태인 경우 클라이언트가 받는 응답)

다음 그림에서는 플로우와 컨트롤 관계를 볼 수 있습니다.

또한, 사용 사례에 적용되는 임베디드 기능 섹션에서 제시되는 옵션도 사용 가능합니다.

임베디드 기능기능이 URL 패턴에 대한 일치 조건을 충족하지 못하는 경우 메타데이터(CDN 설정)에서 일치 조건이 충족되어야 합니다. 경우에 따라 새 기능의 메타데이터를 변경해야 할 수도 있습니다. 예를 들어, 새 CMS나 기술 스택으로 마이그레이션하는 경우, 설정에서 오리진 설정을 변경해야 합니다.

설정과 다크 릴리스는 다양한 방식으로 구성할 수 있습니다. 일반적인 방법 중 하나는 ON/OFF를 설정할 수 있는 변수를 이용하는 것입니다. 변수의 기본값은 FALSE가 됩니다. 개발자, 테스터 등 권한을 가진 사용자는 비밀 쿠키, IP ACL, 엣지 인증 등을 사용하여 액세스할 수 있습니다. 기능을 릴리스하면 일반적으로 변수가 ON으로 설정됩니다. 이때 여타 아키텍처 설계 시와 마찬가지로 기능, 작동 방식, 수정 방법 등을 자세히 기록해 두어야 합니다. 담당자나 구두 지침에만 의존하여 다크 릴리스를 지원하고 유지할 수는 없기 때문입니다.

이를 위해 갈수록 많은 기업들이 표준 지원을 제공하며 강력한 문서화 기능을 갖춘 CDN을 활용하고 있습니다. 직접 구현하는 것보다 제품을 사용하는 것이 보다 효율적입니다. 블루/그린 개발 환경을 사용하는 고객은 신규 코드 릴리스 시 '오리진'을 전환합니다. CDN을 이용하면 API나 인터페이스를 통해 오리진을 즉시 전환할 수 있습니다. 블루 오리진과 그린 오리진 모두 동일한 DNS 엔드포인트가 되도록 정의한 뒤 CDN 오리진 분할 기능을 기능 토글로 작동하도록 활용하는 방식입니다. 이렇게 하면 사용자들이 개발 중인 기능을 미리 볼 수 없도록 트래픽이 없는 오리진에 새로운 코드가 구현됩니다. Akamai는 이 기능을 Phased Release Cloudlet이라 부릅니다. 트래픽 중 적정 부분만 적용되도록 Cloudlet 오리진 내부에 새로 릴리스할 기능을 구현할 수 있습니다.

아래 그림에서는 이러한 옵션이 적용된 플로우를 볼 수 있습니다. Phased Release는 개발자나 운영자가 API를 이용하여 관리할 수 있습니다. API는 기업에서 선호하는 아키텍처 관리 툴이나 배포 툴에 간편하게 통합됩니다.

어느 쪽을 선호하든, 다음과 같은 모범 사례를 숙지하시기 바랍니다.

1. 이해하기 쉬운 클린 코드를 작성할 수 있도록 변수에 유의미한 이름을 사용합니다. 블루/그린 개발 환경에서 ‘new’라든가 ‘old’와 같은 이름은 혼란을 초래합니다.

2. 릴리스를 성공적으로 마친 뒤에는 코드를 정리하여 ON 상태의 기능 토글을 제거하는 것이 좋습니다. 이미 수많은 토글을 포함하고 있는 릴리스에 이전 릴리스의 토글까지 합쳐지면 현재 라이브 상태인 기능이 어떤 것인지 파악하기가 매우 어려워지기 때문입니다. 코드를 정리하면 오해의 소지를 미연에 방지할 수 있습니다.

User

EdgeServer

DeveloperTrafficControl

CloudStorage

Origin

Page 5: 기능 토글과 다크 릴리스 | Akamai · 기능 토글과 다크 릴리스: 최신 배포 방식을 적용하여 연말연시 트래픽에 대비하기 3 • 기존 환경에

기능 토글과 다크 릴리스: 최신 배포 방식을 적용하여 연말연시 트래픽에 대비하기 4

3. 사내 팀에게 액세스 권한을 부여하는 가장 쉬운 방법은 쿠키를 사용하는 것입니다. 쿠키가 설정되는 시작 페이지를 제공하면 QA, 지원팀, 비즈니스 파트너들이 수동으로 쿠키를 추가하지 않아도 액세스 권한을 받을 수 있습니다. 이는 관리자의 경우 쿠키를 추가하는 방법을 잘 모르는 경우가 많다는 사실을 고려했을 때 매우 효과적인 방식입니다. 참고: 쿠키는 보안 메커니즘이 아니며, 쿠키 정보의 외부 유출 시 비즈니스나 운영에 막대한 차질이

발생할 가능성이 있는 경우에는 권장되지 않습니다.

4. 높은 트래픽이 예상되는 이벤트의 경우 지역, 무작위 일치, 고객 범주(예: 프리미엄 사용자), 디바이스(예: 데스크탑 사용자) 등을 기준으로 액세스를 부여하며 전환을 서서히 진행합니다.

5. 언제든지 롤백할 수 있도록 대비합니다. 사고와 버그는 발생하기 마련입니다. 따라서 언제든지 되돌릴 수 있도록 대비하는 것이 중요합니다.

6. 빠른 활성화 또는 원격 관리를 사용하여 기능을 활성화합니다. 빠른 활성화를 사용하면 스위치 값에 있는 변경 내용이 포함된 새 버전을 몇 분 안에 활성화할 수 있습니다. 원격 관리를 사용하면 즉각적인 변경이 가능합니다.

7. 프로세스를 자동화합니다. 기존 릴리스 툴 및 프로세스에 CDN 컨트롤을 통합합니다. 이때 자동 프로세스를 재정의하는 기능은 반드시 유지합니다. 이는 기능 토글 변경 시 사용하는 API를 기록하는 것만큼 간단할 수도 있고 킬 스위치를 코딩하는 것만큼 복잡할 수도 있습니다.

Akamai와 함께하는 설계한 차원 높은 설계 방식으로는 새 엔드포인트(URL)에서 새로운 기능을 릴리스하고 SEO가 적용된 기존 경로는 Akamai가 신기능 경로로 프록시하도록 구성하는 방식이 있습니다. 앞서 설명한 것처럼 변수를 통해 액세스 시간과 권한을 관리할 수 있습니다.

추가로 궁금한 점이 있거나 현재 사용 사례에 맞는 최적의 옵션을 알아보고 싶으시다면 문의해 주시기 바랍니다. Akamai 고객 담당팀으로 연락하거나 [email protected]으로 이메일을 보내십시오.

User

EdgeServer

DeveloperFeatureToggle

Origin

Akamai는 가장 신뢰를 받는 세계 최대 규모의 클라우드 전송 플랫폼을 기반으로 고객이 사용하는 장소와 디바이스에 상관없이 안전하고 쾌적한 디지털 경험을 손쉽게 제공할 수 있도록 지원합니다. 전 세계적으로 촘촘하게 분산 배치된 Akamai의 플랫폼은 130개 국가에 위치한 20만 대의 서버로 구성되어 있으며 고객에게 우수한 성능을 제공하고 보안 위협을 방어합니다. 웹·모바일 성능 향상, 클라우드 보안, 기업 접속, 비디오 전송 솔루션으로 구성된 Akamai의 솔루션은 우수한 고객 서비스와 24시간 연중무휴 모니 터링 서비스를 제공합니다. 대표적인 금융 기관, 이커머스 기업, 미디어·엔터테인먼트 사업자, 정부 기관이 Akamai를 신뢰하는 이유를 알아보려면 Akamai 홈페이지 (www.akamai.com) 또는 블로그(blogs.akamai.com)를 방문하거나 Twitter에서 @Akamai를 팔로우하십시오. 전 세계 Akamai 연락처 정보는 www.akamai.com/locations에서 확인할 수 있습니다. Akamai 코리아는 서울시 강남구 강남대로 382 메리츠타워 21층에 위치해 있으며 대표전화는 02-2193-7200입니다. 2017년 10월 발행.