2020.06.08

기능 플래그를 사용한 5가지 애자일 실험 방법

Isaac Sacolick | InfoWorld
클라우드 애플리케이션 아키텍처, 마이크로서비스, CI/CD(지속적 통합, 지속적 개발) 파이프라인, 테스트 자동화, 코드형 인프라는 모두 애자일 개발을 실현하고 데브옵스 팀이 자주 프로덕션으로 코드를 넘겨줄 수 있게 해주는 기술이다. 이와 같은 기술을 통해 소프트웨어 개발은 과거의 분기별 릴리스와 복잡한 통합에서 현대의 지속적 개발 시대로 접어들었다.

빈번한 릴리스와 개발자 생산성, 기능 개발, 기술 부채 해결을 위한 코드 리팩터링을 지원하도록 코드베이스를 관리하는 방법은 항상 개발자들의 골칫거리다. 깃허브(Github)는 기능 분기, 릴리스 분기, 트렁크 기반 개발, 깃플로우(Gitflow) 워크플로우를 포함한 다양한 개발 및 분기 패러다임을 가능하게 해준다. 분기 전략은 빌드에 들어가는 코드를 구조화하므로 최종 사용자에게 배포되는 기능을 제어하는 데 사용할 수 있다.

분기 접근 방법에 대한 논의는 계속 진행 중이지만, 개발팀이 장기간 실행되는 기능 분기 사용을 피해야 한다는 데는 대부분의 동의한다. 장기 실행 기능 분기는 기능이 주 분기에 통합될 준비가 될 때 복잡한 코드 병합을 유발하는 경우가 많기 때문이다.
 

기능 플래깅이란?

분기는 코드 배포를 제어하며 기능의 배포 여부를 조절할 수 있다. 그러나 기능의 가용성을 켜고 끌 수 있는, 전체적인 양자택일 제어일 뿐이다. 분기만 사용해서 기능 배포를 제어하는 경우 제품 리더가 최종 사용자에게 기능을 활성화는 경우에 비해 코드가 배포되는 시점을 제어하는 팀의 역량이 제한된다.

제품 소유자와 개발팀이 기능을 배포하고 런타임에 이 기능에 대한 액세스를 제어해야 할 때가 있다. 예를 들어, 특정 고객 세그먼트나 사용자 기반의 일부만 대상으로 기능을 실험하고 테스트하는 방법이 유용하다. 기능 플래깅은 개발자가 제어 플래그로 기능을 래핑할 수 있게 해주는 기능 및 툴 모음이다. 개발자가 기능의 코드를 배포하면 플래그를 통해 기능을 켜고 끄거나 테스트할 수 있으며, 최종 사용자에게 해당 기능이 표시되는지와 표시되는 방법을 제어하기 위한 툴과 함께 점진적으로 배포할 수 있다.

기능 플래깅을 사용하면 기능을 천천히, 통제된 방식으로 켜서 점진적으로 제공할 수 있다. 또한 실험에도 유용하다. 최종 사용자와 함께 기능을 테스트해서 기능의 영향과 경험을 점검할 수 있다. 옵티마이즐리(Optimizely)의 제품 담당 부사장 존 노로나는 “개발 팀은 중단을 유발하지 않으면서 빠르게 움직여야 한다. 점진적인 제공은 중단을 작은 조각으로 쪼개서 전체 애플리케이션을 다운시킬 수 있는 폭발 반경을 줄이는 데 도움이 된다”고 말했다.

개발팀이 기능 플래그를 사용해 애자일 실험을 이끌 수 있는 몇 가지 방법을 살펴보자.
 

1. 개발 및 테스트 환경에서 기능 제어

개발 또는 테스트 환경의 애플리케이션이 잘못된 구성 설정으로 인해 내부 사용자, 더 나쁜 경우 외부 고객에게 우발적으로 이메일을 보내는 경우는 흔히 발생한다. 실행되면 안 되는 시점에 배치(batch) 작업이 실행되거나, 베타 테스터가 새 기능을 테스트하는 중에 애플리케이션이 신용카드를 처리하는 경우도 있다.

환경의 수가 소수라면 손쉽게 켜거나 끌 수 있는 구성 설정을 사용할 수 있다. 그러나 개발 및 테스트 환경 외에 고객 테스트를 위한 데모 환경까지 있다면 어떻게 될까? 데모 환경의 애플리케이션이 특정 도메인 목록으로 이메일을 보내도록 하려는 경우 또는 특정 결제 트랜잭션을 테스트하려는 경우는?

또한 개발자나 시스템 엔지니어가 이와 같은 제어 권한을 가지면 안 되지만 다양한 비즈니스 요구에 대한 환경을 운영할 수 있는 비즈니스 관리자에게 노출하고자 하는 경우도 있을 것이다.

많은 변수와 구성 설정이 있고 IT 외부의 소유자가 이를 제어해야 하는 경우, 코드 또는 시스템 수준 테스트로는 이와 같은 수준의 구성을 할 수 없다. 기능 플래깅은 이러한 제어를 실현하는 한 가지 방법이며 대부분 맞춤 코딩 관리 툴보다 더 쉬운 방법이기도 하다.
 

2. 사용자 경험, 디자인, 언어의 A/B 테스트

디자이너는 최종 사용자와 함께 사용자 인터페이스와 기능 디자인을 테스트해서 사용 편의성과 미치는 영향을 파악하고자 하는 경우가 많다. 개발자와 디자이너는 다양한 디자인을 여러 방법으로 테스트해서 어느 디자인이 더 유인력이 강한지를 확인할 수 있다.

• 어떤 접근 방법이 가장 많은 클릭을 생성하는지 알아보기 위해 다양한 그래픽과 버튼 스타일, 텍스트로 “지금 구매하기” 기능을 구현한다고 상상해 보자.
• 예를 들어 애플리케이션에서 사용자가 여러 척도를 기준으로 검색 결과를 정렬할 수 있다고 가정해 보자. 디자이너는 여러 수준의 정렬을 지원하기 위해 다양한 컨트롤을 테스트하면서 사용자들이 더 선호하는 접근 방법 테스트를 확인할 수 있다.
• 사용자가 개인정보보호 컨트롤을 설정하고 애플리케이션을 구성하도록 하는 것, 특히 세분성 수준과 언어, 컨트롤에 대해 결정하기는 쉽지 않은 일이다. 여러 접근 방법을 테스트하는 것은 사용자가 어떤 접근 방법이 더 이해하고 필요에 따라 제어하기 쉬운지 표현할 수 있도록 하는 한 가지 방법이다.
 

3. 새로운 기술 알파/베타 테스트

개발자는 종종 새로운 서비스, 라이브러리 또는 소프트웨어 개발 키트를 테스트해야 한다. 그 외에 업그레이드에 새로운 기능이 포함된 경우도 있다. 애자일 제품 소유자와 개발 팀은 핵심 애플리케이션에 대해 어떤 구성요소와 기능을 사용할 준비가 되었는지를 어떻게 알 수 있을까?

막연한 짐작을 피하는 한 가지 방법은 기능을 구현하고 기능 플래그로 기능을 제어하고 알파 기능으로 릴리스하는 것이다. 개발자는 소수의 내부 직원 그룹을 대상으로 알파 기능을 활성화해서 새로운 기능에 대한 피드백을 받을 수 있다. 개발팀이 문제나 위험 요소를 해결하면 제품 소유자는 내부 및 외부 베타 테스터를 대상으로 기능을 활성화할 수 있다.
 

4. 새로운 기능에 대한 액세스를 서서히 늘려 성능 검증

알파 및 베타 테스트의 한 가지 변형은 개발팀이 새로운 기능에 대한 액세스를 서서히 확대하면서 안정성과 성능, 견고성을 확인하는 것이다.

사용되는 기능 플래깅 툴에 따라 증분 배포를 관리하는 데 사용할 수 있는 여러 가지 수준의 정보와 컨트롤이 있다. 몇 가지 고급 사용 사례를 보면 다음과 같다.

• 오류가 감지되면 문제가 해결될 때까지 새로운 기능을 볼 수 있는 사용자의 수를 줄인다. 오류는 충분히 검증되지 않은 사용자 입력에서 발생할 수도 있고, 새로운 또는 업데이트된 서드파티 서비스나 마이크로서비스, 데이터베이스에서 발생할 수도 있다.
• 응답 시간이 정해진 임계 값을 초과해 증가할 경우 기능의 가용 범위를 줄인다. 팀이 부하 테스트를 충분히 할 수 없는 경우 관련된 접근 방법에는 성능이 검증될 때까지 새로운 기능의 가용 범위를 서서히 늘리는 것이 포함된다.
• 또 다른 새로운 사용 사례는 챗봇, 자연어 인터페이스, 이미지 인식 알고리즘, 음성 제어와 같은 머신러닝과 인공 지능 알고리즘에 대한 응답을 검증하는 것이다. 애플리케이션을 고급 기능 플래그로 프로그래밍해서 알고리즘을 테스트하고 개선하는 과정에서 활성화되는 사용 사례를 제어할 수 있다.
 

5. 지역, 언어 또는 기타 고객 세그먼트별로 기능 배포

한 가지 중요한 고려 사항은 특정 고객 세그먼트에 대해 기능을 켜는 것이다. 예를 들어 미국의 사용자에게 노출할 준비가 된 기능이 유럽 연합에서는 규제로 인해 사용이 금지될 수 있다. 또 다른 예는 언어별 구현이 필요한 기능이다. 이때 기능 플래그는 선택한 언어를 활성화할 수 있다. 제품 소유자가 첫 사용자. 위험도가 낮은 고객 또는 기타 대상을 대상으로 새로운 기능을 활성화하고자 할 수도 있다.

기능 플래그는 기능의 가용 범위를 구성하거나 기능을 서서히 배포하기 위한 여러 옵션을 제공하지만 이와 같은 용도로 사용하는 것이 중요하다. 기능 플래그를 비즈니스 로직 및 관련 매개변수 구현의 값싼 대체용으로 사용하는 경우 애플리케이션 지원 문제가 발생할 수 있다. 또한 플래그를 카탈로그로 정리하고 더 필요가 없게 될 때 삭제하는 것도 중요하다.

오늘날의 개발자는 새로운 기능을 더 빠르게 테스트해야 한다. 기능 플래그는 실험을 구현하고 새로운 기능을 더 적은 위험으로 배포할 수 있는 툴을 제공한다. editor@itworld.co.kr
 


2020.06.08

기능 플래그를 사용한 5가지 애자일 실험 방법

Isaac Sacolick | InfoWorld
클라우드 애플리케이션 아키텍처, 마이크로서비스, CI/CD(지속적 통합, 지속적 개발) 파이프라인, 테스트 자동화, 코드형 인프라는 모두 애자일 개발을 실현하고 데브옵스 팀이 자주 프로덕션으로 코드를 넘겨줄 수 있게 해주는 기술이다. 이와 같은 기술을 통해 소프트웨어 개발은 과거의 분기별 릴리스와 복잡한 통합에서 현대의 지속적 개발 시대로 접어들었다.

빈번한 릴리스와 개발자 생산성, 기능 개발, 기술 부채 해결을 위한 코드 리팩터링을 지원하도록 코드베이스를 관리하는 방법은 항상 개발자들의 골칫거리다. 깃허브(Github)는 기능 분기, 릴리스 분기, 트렁크 기반 개발, 깃플로우(Gitflow) 워크플로우를 포함한 다양한 개발 및 분기 패러다임을 가능하게 해준다. 분기 전략은 빌드에 들어가는 코드를 구조화하므로 최종 사용자에게 배포되는 기능을 제어하는 데 사용할 수 있다.

분기 접근 방법에 대한 논의는 계속 진행 중이지만, 개발팀이 장기간 실행되는 기능 분기 사용을 피해야 한다는 데는 대부분의 동의한다. 장기 실행 기능 분기는 기능이 주 분기에 통합될 준비가 될 때 복잡한 코드 병합을 유발하는 경우가 많기 때문이다.
 

기능 플래깅이란?

분기는 코드 배포를 제어하며 기능의 배포 여부를 조절할 수 있다. 그러나 기능의 가용성을 켜고 끌 수 있는, 전체적인 양자택일 제어일 뿐이다. 분기만 사용해서 기능 배포를 제어하는 경우 제품 리더가 최종 사용자에게 기능을 활성화는 경우에 비해 코드가 배포되는 시점을 제어하는 팀의 역량이 제한된다.

제품 소유자와 개발팀이 기능을 배포하고 런타임에 이 기능에 대한 액세스를 제어해야 할 때가 있다. 예를 들어, 특정 고객 세그먼트나 사용자 기반의 일부만 대상으로 기능을 실험하고 테스트하는 방법이 유용하다. 기능 플래깅은 개발자가 제어 플래그로 기능을 래핑할 수 있게 해주는 기능 및 툴 모음이다. 개발자가 기능의 코드를 배포하면 플래그를 통해 기능을 켜고 끄거나 테스트할 수 있으며, 최종 사용자에게 해당 기능이 표시되는지와 표시되는 방법을 제어하기 위한 툴과 함께 점진적으로 배포할 수 있다.

기능 플래깅을 사용하면 기능을 천천히, 통제된 방식으로 켜서 점진적으로 제공할 수 있다. 또한 실험에도 유용하다. 최종 사용자와 함께 기능을 테스트해서 기능의 영향과 경험을 점검할 수 있다. 옵티마이즐리(Optimizely)의 제품 담당 부사장 존 노로나는 “개발 팀은 중단을 유발하지 않으면서 빠르게 움직여야 한다. 점진적인 제공은 중단을 작은 조각으로 쪼개서 전체 애플리케이션을 다운시킬 수 있는 폭발 반경을 줄이는 데 도움이 된다”고 말했다.

개발팀이 기능 플래그를 사용해 애자일 실험을 이끌 수 있는 몇 가지 방법을 살펴보자.
 

1. 개발 및 테스트 환경에서 기능 제어

개발 또는 테스트 환경의 애플리케이션이 잘못된 구성 설정으로 인해 내부 사용자, 더 나쁜 경우 외부 고객에게 우발적으로 이메일을 보내는 경우는 흔히 발생한다. 실행되면 안 되는 시점에 배치(batch) 작업이 실행되거나, 베타 테스터가 새 기능을 테스트하는 중에 애플리케이션이 신용카드를 처리하는 경우도 있다.

환경의 수가 소수라면 손쉽게 켜거나 끌 수 있는 구성 설정을 사용할 수 있다. 그러나 개발 및 테스트 환경 외에 고객 테스트를 위한 데모 환경까지 있다면 어떻게 될까? 데모 환경의 애플리케이션이 특정 도메인 목록으로 이메일을 보내도록 하려는 경우 또는 특정 결제 트랜잭션을 테스트하려는 경우는?

또한 개발자나 시스템 엔지니어가 이와 같은 제어 권한을 가지면 안 되지만 다양한 비즈니스 요구에 대한 환경을 운영할 수 있는 비즈니스 관리자에게 노출하고자 하는 경우도 있을 것이다.

많은 변수와 구성 설정이 있고 IT 외부의 소유자가 이를 제어해야 하는 경우, 코드 또는 시스템 수준 테스트로는 이와 같은 수준의 구성을 할 수 없다. 기능 플래깅은 이러한 제어를 실현하는 한 가지 방법이며 대부분 맞춤 코딩 관리 툴보다 더 쉬운 방법이기도 하다.
 

2. 사용자 경험, 디자인, 언어의 A/B 테스트

디자이너는 최종 사용자와 함께 사용자 인터페이스와 기능 디자인을 테스트해서 사용 편의성과 미치는 영향을 파악하고자 하는 경우가 많다. 개발자와 디자이너는 다양한 디자인을 여러 방법으로 테스트해서 어느 디자인이 더 유인력이 강한지를 확인할 수 있다.

• 어떤 접근 방법이 가장 많은 클릭을 생성하는지 알아보기 위해 다양한 그래픽과 버튼 스타일, 텍스트로 “지금 구매하기” 기능을 구현한다고 상상해 보자.
• 예를 들어 애플리케이션에서 사용자가 여러 척도를 기준으로 검색 결과를 정렬할 수 있다고 가정해 보자. 디자이너는 여러 수준의 정렬을 지원하기 위해 다양한 컨트롤을 테스트하면서 사용자들이 더 선호하는 접근 방법 테스트를 확인할 수 있다.
• 사용자가 개인정보보호 컨트롤을 설정하고 애플리케이션을 구성하도록 하는 것, 특히 세분성 수준과 언어, 컨트롤에 대해 결정하기는 쉽지 않은 일이다. 여러 접근 방법을 테스트하는 것은 사용자가 어떤 접근 방법이 더 이해하고 필요에 따라 제어하기 쉬운지 표현할 수 있도록 하는 한 가지 방법이다.
 

3. 새로운 기술 알파/베타 테스트

개발자는 종종 새로운 서비스, 라이브러리 또는 소프트웨어 개발 키트를 테스트해야 한다. 그 외에 업그레이드에 새로운 기능이 포함된 경우도 있다. 애자일 제품 소유자와 개발 팀은 핵심 애플리케이션에 대해 어떤 구성요소와 기능을 사용할 준비가 되었는지를 어떻게 알 수 있을까?

막연한 짐작을 피하는 한 가지 방법은 기능을 구현하고 기능 플래그로 기능을 제어하고 알파 기능으로 릴리스하는 것이다. 개발자는 소수의 내부 직원 그룹을 대상으로 알파 기능을 활성화해서 새로운 기능에 대한 피드백을 받을 수 있다. 개발팀이 문제나 위험 요소를 해결하면 제품 소유자는 내부 및 외부 베타 테스터를 대상으로 기능을 활성화할 수 있다.
 

4. 새로운 기능에 대한 액세스를 서서히 늘려 성능 검증

알파 및 베타 테스트의 한 가지 변형은 개발팀이 새로운 기능에 대한 액세스를 서서히 확대하면서 안정성과 성능, 견고성을 확인하는 것이다.

사용되는 기능 플래깅 툴에 따라 증분 배포를 관리하는 데 사용할 수 있는 여러 가지 수준의 정보와 컨트롤이 있다. 몇 가지 고급 사용 사례를 보면 다음과 같다.

• 오류가 감지되면 문제가 해결될 때까지 새로운 기능을 볼 수 있는 사용자의 수를 줄인다. 오류는 충분히 검증되지 않은 사용자 입력에서 발생할 수도 있고, 새로운 또는 업데이트된 서드파티 서비스나 마이크로서비스, 데이터베이스에서 발생할 수도 있다.
• 응답 시간이 정해진 임계 값을 초과해 증가할 경우 기능의 가용 범위를 줄인다. 팀이 부하 테스트를 충분히 할 수 없는 경우 관련된 접근 방법에는 성능이 검증될 때까지 새로운 기능의 가용 범위를 서서히 늘리는 것이 포함된다.
• 또 다른 새로운 사용 사례는 챗봇, 자연어 인터페이스, 이미지 인식 알고리즘, 음성 제어와 같은 머신러닝과 인공 지능 알고리즘에 대한 응답을 검증하는 것이다. 애플리케이션을 고급 기능 플래그로 프로그래밍해서 알고리즘을 테스트하고 개선하는 과정에서 활성화되는 사용 사례를 제어할 수 있다.
 

5. 지역, 언어 또는 기타 고객 세그먼트별로 기능 배포

한 가지 중요한 고려 사항은 특정 고객 세그먼트에 대해 기능을 켜는 것이다. 예를 들어 미국의 사용자에게 노출할 준비가 된 기능이 유럽 연합에서는 규제로 인해 사용이 금지될 수 있다. 또 다른 예는 언어별 구현이 필요한 기능이다. 이때 기능 플래그는 선택한 언어를 활성화할 수 있다. 제품 소유자가 첫 사용자. 위험도가 낮은 고객 또는 기타 대상을 대상으로 새로운 기능을 활성화하고자 할 수도 있다.

기능 플래그는 기능의 가용 범위를 구성하거나 기능을 서서히 배포하기 위한 여러 옵션을 제공하지만 이와 같은 용도로 사용하는 것이 중요하다. 기능 플래그를 비즈니스 로직 및 관련 매개변수 구현의 값싼 대체용으로 사용하는 경우 애플리케이션 지원 문제가 발생할 수 있다. 또한 플래그를 카탈로그로 정리하고 더 필요가 없게 될 때 삭제하는 것도 중요하다.

오늘날의 개발자는 새로운 기능을 더 빠르게 테스트해야 한다. 기능 플래그는 실험을 구현하고 새로운 기능을 더 적은 위험으로 배포할 수 있는 툴을 제공한다. editor@itworld.co.kr
 


X