콘텐츠로 이동

Blog

Software Architecture Patterns 정리

Udemy "The Complete Cloud Computing Software Architecture Patterns" 강의를 듣고 복습을 위해 정리하였음

Pipes and Filters
Scatter Gather
Execution Orchestrator
Choreography
Map Reduce
Saga
Transactional Outbox
Materialized View
CQRS
CQRS + Materialized View
SideCar & Ambassador
Anti-Corruption Adaptor
BFF(Backend For Frontend)
Throttling and Rate Limiting
Retry
Circuit Braker
DLQ(Dead Letter Queue)
Rolling Deployment
Blue-Green Deployment
Canary Release, A/B test deployment
Chaos Engineering

Process restart automation

목적

memory leak 이슈에 일단 자동으로 대응하기 서비스를 재시작 하는 파이썬 코드를 작성했습니다.

설명

  1. python3.4 부터 호환 가능하도록 작성했습니다.
  2. 서비스명을 argument 형태로 입력받습니다.
  3. 현재 메모리 사용량을 확인합니다. /proc/meminfo를 활용합니다. free나 top등의 명령을 이용하도 되지만 datadog에서 확인했을때 동일한 usage를 확인할 수 있는 방법은 /proc/meminfo를 열어보는 것 밖에 없었습니다
  4. 1번에서 입력받은 서비스가 현재 동작중인지 확인합니다. argument설정 에러로 현재 동작중이지도 않은 서비스를 실행시킬수도 있기 때문입니다.
  5. 1번에서 입력받은 서비스들을 stop & start 합니다
  6. process가 잘 올라왔는지 검증합니다. /proc/ 를 이용해 확인합니다
  7. 서비스로그에서 추가 검증이 가능한 경우 로그도 검증합니다

재난안전문자 공공 API 활용하기

목적

재난문자 발생 시점마다 트래픽이 튀어서 광범위로 발송되는 재난문자 발생 시점 파악이 필요했습니다.
때문에 재난문자 발생 시 Slack으로 알람을 쏴주도록 구성해보았습니다

Python 환경 관리: alternatives, poetry, conda

  1. alternatives (심볼링 링크 자동화)
    • 장점:
      간단한 방식으로 시스템 전체에서 사용할 Python 버전을 쉽게 변경할 수 있습니다.
    • 단점:
      프로젝트별 가상 환경을 지원하지 않아, 여러 프로젝트에서 서로 다른 종속성을 가진 경우 관리가 어렵습니다.

3-Tier 기본 인프라 구성

개념도


3-Tier Basic Infra/Untitled.png

TODO


  • VPC생성
  • 서브넷생성(public X 2, private X 2)
  • public서버에 각각 bastion host 인스턴스 생성
  • ELB생성후 Auto Scaling 연계 → 웹 서버 인스턴스 자동생성(2~6개)
  • HOST → WebServer 접속 확인
  • RDS DB생성(MySQL)
  • HOST → Bastion Host → DB 접속 확인하기
  • MySQL Workbench 연결 (SSH 터널링) (SQL IDE)
  • Jetbrains DataGrip 연결 (SSH 터널링) (SQL IDE)

API Gateway with Lambda

목적


  • API Gateway의 기초적인 사용법 확인
  • API Gateway에 Lambda를 연결하여 동작 확인
  • HTTP GET Parameter(매개변수) 전송과 응답 확인
  • 두 개의 Lambda Function을 생성하여 Root·Resource Page에 각각 적용하기

Failover for HA

목표


  • 오케스트레이터를 이용한 HA 구현
  • 오케스트레이터 GUI도구를 이용한 쉬운 이해
  • Master가 다운되면 자동으로 Fail-Over 동작
  • 인위적으로 마스터를 다운시켜서 동작 확인
  • 사람의 개입 없이 자동으로 FailOver가 이뤄지도록 자동화를 구현

S3 object encryption

  1. 2023년 1월 5일 이후 업로드 되는 모든 오브젝트는 자동으로 암호화된다(SSE-S3) 관련정보
  2. S3 암호화 방식은 총 4가지가 존재한다
    • SSE-S3 (Server-Side Encryption with Amazon S3): AWS에서 키를 관리한다. 암호화 키 소유권은 AWS S3에 있다.
    • SSE-C (Server-Side Encryption with Customer-Provided Keys): 고객이 제공하는 암호화 키를 사용해 데이터를 암호화 한다. 암호화키는 암호화 및 복호와에 모두 사용된다(대칭키)
    • SSE-KMS (Server-Side Encryption with AWS Key Management Service): KMS 마스터키는 AWS KMS 서비스에서 관리된다. 암호화 키의 소유권이 고객에게 있다.
    • DSSE-KMS (Dual-layer Server-Side Encryption with AWS KMS): AWS KMS 키를 사용해 두 겹의 AES-256 암호화를 적용한다. 규제 준수 요건이 높은 환경에서 사용된다.
  3. 암호화 방식에 따라 오브젝트 업로드 명령 옵션이 상이하다
    • SSE-S3 (default)
      aws s3 cp <object> s3://<bucket>/<key>
      
    • SSE-C
      aws s3 cp <object> s3://<bucket>/<key> --sse-c AES256 --sse-c-key <encryption-key>
      
    • SSE-KMS
      aws s3 cp <object> s3://<bucket>/<key> --sse aws:kms --sse-kms-key-id