빙글 테크톡 두번째



Techtalk at Vingle 2

5분에 끝내는 관리와 배포

  • 너무 크고 복잡한 프로젝트 + 서비스간 극심한 커플링 + 최소 2시간 이상 걸리는 배포, 롤백
  1. 독립 프론트엔드 서버 구축시 필요한 사항들

    • 원래 웹서버와 완벽히 분리된 환경
    • 빌드, 배포, 테스트, 롤백을 모두 자동화하여 관리할 수 있는 CI환경
    • 실시간 변동적인 Scalability 확보
    • 서버 상황에 대한 실시간 모니터링 환경 확보
    • 서버 로거와 같은 필수기능 확보
    • Universal Rendering(isomorphic)이 가능해야 함(Serverside Rendering)
  2. 독립 서버를 위한 대안 후보들

    • 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/





© 2019. by Moonan

Powered by Moonan