[Datadog] 12년차 스타트업의 아키텍처 리팩토링 돌아보기 by 드라마앤컴퍼니 후기

Damongsanga·2024년 9월 29일
0

요약

드라마앤컴퍼니의 인프라 팀에서 AWS 기반 인프라 리팩토링 과정 중 데이터독이 어떻게 사용되었는지 곁들여 설명했다. 데이터독 내용이 메인은 아니지만 서비스 확장 및 팀 규모 성장에 따른 인프라 환경 분리, 권한 분리 필요시 참고하기 좋다! 1년여간의 AWS 기반 인프라 리팩토링 과정을 담아 내용이 매우 많은 발표였으며, 인프라 리팩토링에 관심이 있다면 추후 데이터독 유튜브에 올라갈 풀 영상을 감상해보기를 추천한다!


Intro

  • 입사 첫날 AWS 계정을 받았는데… 막막함 투성이..!
    • AWS 계정이 1개에 모두 배포
    • default VPC에 모두 배포
    • 정적 컨텐츠가 대부분 CDN 사용 안함
    • 로그가 호스트, cloudwatch, APM 등 산발적으로 흩어져있음
    • ISMS 인증 의무 대상

리팩토링을 해보자!

1. 확장 가능한 인프라 아키텍처

1.1. provisioning

  • IaC & GitOps 도입
  • 여러 작업자가 작업하더라도 인프라의 형상이 무너지지 않도록 대비
  • GUI로 작업하는 것처럼 편하게 해야 함
  • AS-IS
    • 소스코드 & Terraform으로 리소스 관리
    • 개발자 로컬 환경에서 Terraform 코드를 배포
      • 모든 개발자들에게 배포에 필요한 IAM 권한 부여한 상태
    • ECS Task Definition, Redis만 Terraform으로 관리
  • TO-BE
    • 가능한 모든 것을 IaC로 배포
      • AWS, Asure, Github, Datadog, Cloudflare
    • 각 배포마다 테라폼 코드를 모듈로 관리하는 별도의 repo 사용
      • Terraform 선택, 배포 중앙화 및 GitOps를 위해 Atlantis를 도입
    • Git PR를 통해 Terraform 코드 배포
    • DynamoDB를 사용하여 StateLock 설정하여 동시에 배포하며 꼬이는 것을 방지

1.2. AWS Account

  • 다양한 개발 Stage 분리 필요
  • 용도용 개정을 분리
  • 네트워크와 데이터 격리
  • 업무 담당자에 한해 접근 권한 부여
  • 비용 추적성 증가
    • 도메인, 팀, stage 단위의 운영 비용 확인 가능

1.3. 마이그레이션 & 트래픽 비용

  • 리전 도쿄 > 서울로 이동

    • 기존에는 도쿄에 있었다고 함
  • 모든 트래픽을 transit gateway (TGW)를 통하도록 관리

    • 테이블에서 라우팅 관리
  • 트래픽 비용

    • API to API가 internal이 아니라 public으로 통신했던 문제
    • static object가 S3에서 바로 서빙되어 캐싱이 이루어지지 않고 S3 API + Outbound DataTransfer 비용 발생
  • 이를 감소하려면?

    • API 간 internal 통신 구조
    • CDN 도입
  • NAT gateway 대신 privatelink 사용

    • privatelink 로 AWS 서비스를 호출할 때는 natgateway의 프로세싱 비용이 들지 않아 5~6배 감소
  • 모든 프로젝트 컨테이너화

2. 통합 가시성 확보

2.1. AS-IS

  • 데이터가 정말 많은데 보기가 어려웠음
    • cloudwatch, container log, host log, local log …
    • AWS 로그 외 서드파티 로그는 직접 확인했어야 햇음
  • 이미 구축된 APM 이 있었지만
    • 클라이언트 메트릭이 잘 적용 X
    • 인프라, 네트워크, 보안 지표는 거의 수집 X
    • 러닝커브가 있고 백엔드 개발자 친화적으로 느껴지는 UX
    • 때문에 백엔드 개발자만 잘 사용
  • 모두가 같은 화면을 보고 이야기할 수 있도록 하자!
    • PO, PM, 디자이너
    • CX
    • Data Analyst
    • DevOps, Security

2.2. TO-BE : Datadog 사용 예시

  • E2E 모니터링 환경 구현

  • Backend APM 연동

  • Frontend, Mobile RUM 및 Session Replay

  • Dashboard

  • 비개발 직군 (CX) dashboard 생성

    • 해당 사용자가 어떤 화면에서 어떤 불편함을 겪었는지?
    • 전화로 사용자에게 직접 전화 > 유저 ID만 입력하면 세션 리플레이, 에러 이슈 리스트를 한번에 조회할 수 있도록 함
  • 인프라 E2E

    • WAF, CDN, Host, Container, Cache, DB
  • Network Performance Monitoring 매우 유용

    • 특정 ECS task에서 public IP를 호출하는 경우를 필터링
  • 어떤 도메인을 호출했는지 추가적으로 확인

  • 노랑색 경우는 개선 가능한 영역

    • AWS 엔드포인트라면 private Link를 통하는 것이 좋다
  • Security Log를 한데 모아서 확인

    • WAF Log
    • image!

3. 보안성 향상

3.1. IAM 관리

  • AS-IS
    • 개발자마다 IAM User를 생성하여 권한 부여
    • IAM Access Key를 Rotate하지 않음
    • 권한 부여 방법이 너무 다양했음
    • 개발자가 스스로 IAM 권한을 변경할 수 있는 경우도
    • AWS 접근 인원이 50+ 이상인데 이를 어떻게 관리해야 하는지 고민
  • TO-BE
    • AWS IAM Identity Center 사용
      • 이를 기반으로 사용자에게 원한 부여
    • 모두 ECS Task Role만을 사용하도록 함
      • 인스턴스 하드코딩 키들 모두 삭제
      • 외부 어플리케이션들은 OIDC로 인증하여 Role 부여 (github action pipeline)
    • 현재는 IAM User 전혀 생성 X
      • 유저별 MFA 관리 X

3.2 DATADOG 활용

  • SIEM Investigator로 사용자 행동 확인 가능
    • 어떤 사용자가 어떤 API 요청했다!
    • 권한 이슈 디버깅으로도 잘 활용 가능
  • 미사용되는 Permission 삭제 제안
    • “너 이 Role은 15일동안 사용한 적 없어. 삭제할래?” 제안
    • 시스템적으로 권한 관리가 유용함

Conclusion

  • RUM, Session Replay는 좀 비싸지만 개발자 ↔ 비개발자에게 모두 매우 유용하다
  • datadog 헬프를 적극적으로 받아라!!
profile
향유하는 개발자

0개의 댓글