flask

2 개의 포스트

Python에서 GitLab 기능 플래그 시작하기 (새 탭에서 열림)

GitLab 피처 플래그(Feature Flags)는 소프트웨어의 배포와 출시를 분리하여 운영 환경에서의 리스크를 최소화하는 핵심 기술입니다. Python Flask 앱과 Unleash SDK를 통합하면 별도의 서버 없이도 GitLab UI에서 실시간으로 기능을 제어하고, 특정 사용자 그룹에게만 점진적으로 기능을 노출할 수 있습니다. 이를 통해 예상치 못한 버그 발생 시 코드 재배포 없이 즉각적으로 기능을 차단하고 안전하게 장애에 대응할 수 있는 유연한 릴리스 환경을 구축할 수 있습니다. **GitLab과 Unleash SDK의 작동 방식** * GitLab은 Unleash 호환 API를 내장하고 있어 별도의 Unleash 서버 구축 없이도 다양한 언어의 SDK와 직접 연결이 가능합니다. * SDK는 애플리케이션 시작 시 모든 플래그 정의를 가져오며, 설정된 간격(예: 15초)마다 이를 업데이트하여 로컬에 캐싱합니다. * 플래그 상태를 확인하는 `is_enabled()` 함수는 네트워크 호출 없이 로컬 캐시를 즉시 평가하므로, 성능 저하가 거의 없고 일시적인 네트워크 장애에도 탄력적으로 대응합니다. **정교한 기능 노출을 위한 배포 전략** * **All users:** 모든 사용자에게 기능을 즉시 켜거나 끄는 단순 토글 방식으로 사용됩니다. * **Percent rollout:** 사용자 ID나 세션 ID를 기반으로 트래픽의 특정 비율(예: 10%)에게만 기능을 노출하여 점진적인 릴리스를 수행할 수 있습니다. * **User IDs 및 User list:** 특정 사용자 ID나 정의된 리스트에 포함된 내부 QA 팀, 베타 테스터에게만 기능을 우선적으로 공개하는 데 유용합니다. **Python Flask 애플리케이션 통합 절차** * **GitLab 설정:** 프로젝트 설정에서 Feature Flags 기능을 활성화하고, 사용할 플래그 이름(예: `dark_mode`, `new_layout`)과 배포 전략을 정의합니다. * **인증 정보 확보:** GitLab UI의 Configure 패널에서 제공하는 API URL과 고유한 Instance ID를 복사하여 애플리케이션의 환경 변수로 등록합니다. * **SDK 구현:** `UnleashClient`를 사용하여 API URL과 Instance ID를 설정하고 클라이언트를 초기화합니다. 이후 코드 내에서 플래그 활성화 여부에 따라 로직이 분기되도록 작성합니다. * **환경 관리:** 보안을 위해 Instance ID와 같은 민감한 정보는 `.env` 파일에 저장하고 버전 관리 시스템(Git)에 포함되지 않도록 주의해야 합니다. **실무를 위한 권장 워크플로우** 새로운 기능을 배포할 때는 먼저 'User IDs' 전략을 사용하여 내부 팀원들에게만 기능을 노출해 최종 점검을 수행하십시오. 문제가 없다면 'Percent rollout' 전략으로 변경하여 트래픽의 10%부터 점진적으로 확대해 나가는 것이 안전합니다. 만약 운영 지표에 이상이 발견되면 GitLab UI에서 즉시 플래그를 비활성화하는 것만으로 몇 초 안에 전체 서비스를 정상화할 수 있습니다.

엔지니어링 스포트라이트: 테이 니시무라 (새 탭에서 열림)

데이터독(Datadog)의 인프라 엔지니어 테이 니시무라(Tay Nishimura)의 커리어 여정은 자신만의 사고방식에 적합한 직무를 찾는 과정의 중요성을 보여줍니다. 수학 전공자이자 시각적 사고를 선호하는 그녀는 일반적인 소프트웨어 개발 속도 경쟁에서 어려움을 겪었으나, 네트워크 시뮬레이터 'ToyNet' 개발을 통해 자신의 강점을 증명하며 SRE(Site Reliability Engineering)로 성공적으로 전향했습니다. 이 글은 전형적인 엔지니어의 틀에 갇히지 않고 자신의 고유한 특성을 기술적 자산으로 승화시킨 과정을 다룹니다. **학계와 실무 사이의 괴리와 시각적 사고** * 수학 전공자로서 증명 위주의 엄격한 사고에 익숙했던 테이는 효율과 속도를 중시하는 애자일 개발 환경에서 초기에 성능 피드백 문제로 어려움을 겪었습니다. * 코드를 바로 작성하기보다 코드를 그림으로 변환하여 논리를 검증한 뒤 다시 코드로 옮기는 '시각적 사고' 방식을 고수했는데, 이는 신중함을 더해주었지만 작업 속도를 늦추는 요인이 되기도 했습니다. * 일반적인 개발 직무에서는 속도 저하로 평가받았던 그녀의 신중함과 모든 실패 모드를 고려하는 태도가, 오히려 시스템의 안정성을 책임지는 SRE 직무에는 핵심적인 역량이 될 수 있음을 깨달았습니다. **ToyNet 개발과 SRE로의 전환** * 팬데믹 기간 중 해고를 겪었으나 이를 계기 삼아 평소 관심 있던 네트워크 기술을 공부하며, 수감자와 베테랑을 위한 교육 프로그램 'Project Reclass'를 시작했습니다. * 인터넷 사용이 제한된 교도소 환경에서도 네트워크 실습이 가능하도록 React, Flask, Mininet을 활용해 컨테이너 기반 네트워크 에뮬레이션 플랫폼인 'ToyNet'을 설계했습니다. * ToyNet은 테이의 클라우드 배포 역량과 기술적 깊이를 증명하는 강력한 포트폴리오가 되었으며, 이는 데이터독에 SRE로 합류하는 결정적인 발판이 되었습니다. **데이터독에서의 적응과 시각적 분석의 힘** * 데이터독 합류 후 Kubernetes, 카오스 엔지니어링, Go 언어 등 생소한 기술 스택을 빠르게 습득하며 인프라 엔지니어로서 전문성을 쌓았습니다. * 데이터독의 카오스 자동화 도구인 'Chaos Controller'를 오픈소스화하는 과정에서, 복잡한 코드베이스를 상자와 화살표로 시각화하여 구조를 파악하는 자신만의 분석 방식을 적극적으로 활용했습니다. * 과거에는 약점으로 치부되었던 '꼼꼼하고 신중한 속도'가 이제는 대규모 시스템의 신뢰성을 보장하고 복잡한 기술 문제를 해결하는 강력한 무기가 되었습니다. 자신이 업계의 전형적인 틀(Cookie-cutter shape)에 맞지 않는다고 느낄 때, 포기하기보다는 자신의 독특한 사고방식이 빛을 발할 수 있는 세부 분야를 찾는 것이 중요합니다. 테이 니시무라의 사례처럼 사이드 프로젝트를 통해 실질적인 기술력을 증명하고 이를 직무 전환의 교두보로 활용하는 전략은 커리어 고민을 겪는 엔지니어들에게 실질적인 영감을 줍니다.