빙글 테크톡 두번째
Techtalk at Vingle 2
5분에 끝내는 관리와 배포
- 너무 크고 복잡한 프로젝트 + 서비스간 극심한 커플링 + 최소 2시간 이상 걸리는 배포, 롤백
독립 프론트엔드 서버 구축시 필요한 사항들
- 원래 웹서버와 완벽히 분리된 환경
- 빌드, 배포, 테스트, 롤백을 모두 자동화하여 관리할 수 있는 CI환경
- 실시간 변동적인 Scalability 확보
- 서버 상황에 대한 실시간 모니터링 환경 확보
- 서버 로거와 같은 필수기능 확보
- Universal Rendering(isomorphic)이 가능해야 함(Serverside Rendering)
독립 서버를 위한 대안 후보들
- Static Page - Vingle Mobile Web
- NodeJS server - No Service
- AWS Lambda - Vingle Desktop Web
- Static Page
- index.html 과 bundle.JS를 S3에 업로드
- 웹 서버(Nginx) -> CDN -> S3 식으로 앞단에 CDN배치
- 장점
- CDN을 통한 모니터링
- 가변적 Scalability 확보
- 단점
- 클라이언트 사이드 렌더링
- SEO보장되지 않음
- 느린 최초 렌더링
AWS Lambda
- Universal (isomorphic) Rendering
- 가변적 Scalability 확보
- 모니터링 및 배포 관리 시스템 기본 제공
- 서버리스와 AWS 클라우드포메이션을 통한 다중 AWS 서비스 관리 가능
- SSL, Cors 세팅 등 번거로운 설정 기본 제공
- 일반 서버보다 훨씬 저렴한 가격
- New branch - Build bundleJS - Unit&E2E test - Upload bundle to S3 - Notify Slack
Pull Request - Build bundleJS - Unit & E2E test - Deploy - Notify Slack
- 실제로는 New branch를 푸시만 하면 나머진 젠킨스가 해준다.
Techtalk at Vingle 3
피쳐 플래그 사용기 - 배포와 분리된 롤아웃 & 롤백
- 문제
피쳐블래그 도입 전엔 기능 배포 == 기능 출시
그래서, 실서버에서 테스트 불가 - 테스트 환경이 실제환경과 완전히 같을 순 없다.
롤백이 오래걸리고, 출시 시작과 완료의 간극이 있음.
해결
특정 유저에게만 새로운 기능 열고 닫기.
if 문으로 코드레벨에서 컨트롤
if FeatureFlag.active?('featureFoo',user) c = b == 0 ? 0 : (a/b) else c = a / b end
이득
실서버에서 테스트 가능
원하는 시기에 기능 출시가능
롤백도 실시간 ( 플래그 값만 바꾸면 된다. )
간이 A/B 테스트
Client에서도 사용 가능
피쳐 플래그를 안써도 될 만한 경우
- 새로 만든 API
- 버그가 생길 가능성이 없는 수정
- 기능을 가치없게 만드는 수준의 버그를 수정하는 경우
- 피쳐플래그의 문제와 해결
- 쓰지 않는 팀원 - 코드리뷰로 플래그 없으면 머지 안함.
- 너무 큰 기능 변화 - 변화의 End Point에서만 쪼개면 문제 없음.
- 버려진 피쳐플래그 누적 - 지우기 번거로움..아직 해결 못함
- 피쳐플래그간의 종속성 - QA 안 끝나면 피쳐플래그 위에 피쳐플래그..아직 해결 못함
- 참조
- https://martinfowler.com/articles/feature‑toggles.html
- https://martinfowler.com/bliki/FeatureToggle.html
- https://msdn.microsoft.com/en‑us/magazine/dn683796
- http://apptimize.com/feature‑flags‑launch/
2023년 새해에는 성장하고 함께하고 싶다면?
Pre A 단계 이상의 스타트업 C 레벨들이 모여서 커뮤니티를 만들었습니다. 같이 스터디하고 친해질 일잘러를 찾습니다.