본문 바로가기
테스트 쉽게하기

Unleash 로컬에서 동작시켜보기 튜토리얼 2

by 6161990 2024. 12. 3.

 

 

Unleash 로컬에서 동작시켜보기 튜토리얼 1

외부 클라이언트 서버를 교체할 때, 혹시 모를 상황에 대비해 롤백 해야하는 경우, 서버는 어떤 롤백 시나리오를 준비할 수 있을까요? 상황은 여기서 출발했습니다. 오픈 소스 

6161990src.tistory.com

 

 

이어서 진행해보겠습니다. 먼저 Unleash 의 라이프 사이클에 대해서 서치해보았습니다. 대략 이렇습니다.

 

 

 

Initial Phase (초기 단계) 는 플래그가 생성되었지만, 아직 어떤 환경에서도 호출되지 않은 상태입니다. 이 설명대로라면 저는 아직 테스트 하지 않았으므로 초기 단계에 머물러있는게 맞습니다. 

 

Pre-Live (프리라이브) 는 플래그가 비프로덕션 환경에서 사용되고 있는 상태입니다. develop 환경을 건너뛰고 저는 바로 production 만 세팅했으므로 이 상태를 거쳐갈 수는 없겠네요.

 

Live (라이브) 는 플래그가 프로덕션 환경에서 사용되는 상태입니다. 실제 사용자의 요청이 해당 플래그로 컨트롤되는 상태라고 볼 수 있습니다. 

 

Archived (아카이브) 는 플래그가 더 이상 필요하지 않아 비활성화되고, 아카이브 처리된 상태입니다. 휴지통에 있는 파일과 같다고 일단 이해하겠습니다. 한번 아카이브된 플래그를 다시 되살릴 수 있다면 해당 상태는 또 어떻게 전이될지도 궁금합니다. 

 

*더 자세한 사항은 feature-flag-lifecycle 에서 확인해보실 수 있습니다. 

 

여기까지 이해해보니 사실 해당 라이프 사이클 상태는 Unleash 자체가 아닌 feature flag 의 상태를 뜻하는 것이겠네요. 일단 대략적인 상태를 알았으니 직접 전이시켜보는 본격 테스트를 진행해보았습니다. 

 

 

 

 

간단한 service 구현입니다. 해당 토글키가 활성화되었을 때, 외부 클라이언트 OutsideClient_A 를 통해 회원 정보를 연동합니다. 그렇지 않은 경우는 기존대로 OutsideClient_B 를 호출합니다. 

 

 

이 코드를 어디서 많이 보셨다면, 아주 잘 눈여겨 보신거에요. 칭찬 스티커 드립니다! 이전 포스팅에서 SDK 세팅시 노출되는 정보였습니다. 

 

 

 

 

사실 구현에는 별 것 없죠? 애플리케이션을 바로 실행시켜보았습니다.

 

 

 

 

401 응답이 발생해서 Unleash 를 초기화하지 못해 애플리케이션 실행에 실패했습니다. 

 

 

여기서 실수였는데요. sdk-key 를 계정 토큰 정보로 세팅해둔 게 문제였습니다 ㅋㅋㅋ sdk-key 는 api 토큰을 통해 얻을 수 있는데요

 

 

 

API access 에서 오른쪽 상단의 New API token 을 클릭하면됩니다. 

 

 

 

 

각 환경에 맞게, 사이드에 맞게 토큰을 생성하면 됩니다.

 

 

 

예쁘게 잘 띄워졌습니다 ㅎ

 

 

피쳐토글을 킨 상태에서 해당 api 를 호출해보았습니다. 해당 토글이 활성화된 상태라 OutsideClient_A 를 통해 회원정보 동기화가 되겠네요. 

 

 

 

딜레이 십초 정도 발생 후, LifecycleLive 로 변경되었습니다. 

 

 

 

호출에 따라 대시보드 현황도 변경됩니다. 

 

 

 

production 의 피쳐토글을 끄고 다시 호출해보겠습니다. 

 

 

토클이 unable 이라서 분기문을 타고 OutsideClient_B 가 호출되었습니다. 

 

 

아주 간단한 테스트와 라이프 사이클을 확인해보았습니다. 물음표가 하나 더 생기긴 했는데요. 피쳐토글을 통해 기능 검증이 완료된 경우 outdated 되어야 합니다. 바로 Archived(아카이브) 처리하면 될까요? 저는 공식문서에 나와있지않은 Completed 상태에 주목했습니다. 

 

 

 

일단 테스트 겸, 제가 직접 완료 상태로 전이해보았습니다. 그랬더니 아래와 같은 메세지가 떴습니다.

 

 

 

 

메세지의 내용은 대략 이렇습니다.

 

"sync.user.toggle.enabled 라는 기능 플래그를 "완료" 상태로 표시하는 것은 설정에 아무런 영향을 미치지 않는다. 해당 기능에 대해 필요한 것을 배웠음을 신호로써 나타낼 수 있다."

 

기능 플래그가 장기적으로 유지되는 경우 이것도 부채이므로 더 이상 유지할 필요가 없다는 신호를 팀에 전달하고 정리할 시점을 계획할 수 있도록 하는 문서 태그에 가까운 것으로 이해했습니다. 자바 기반에서 문서화를 지칭하는 다음 코드와 비슷한 역할을 하는 것 같습니다.

 

@MustBeDocumented 와 @Deprecated

 

 

We decided to keep the feature 를 선택하니, 화면이 다음과 같이 변경되었습니다. 

 

 

 

다시 live 로 되돌릴 수 있긴하네요. We decided to discard the feature 도 큰 차이는 없었습니다.

 

 

지금까지 피쳐플래그 라이프 사이클과 자잘한 테스트를 실행해보았습니다. 사실 로컬 환경에서도 테스트 해볼 수 있는 건 더 많습니다. 아주 기본 튜토리얼이었고, 저는 좀 더 파밍해볼 생각입니다. 재밌는 게 나오면 또 들고오겠습니다 bye~