Cloud/AWS

3 Tier 아키텍처 구축

dev_yu 2024. 3. 27. 15:18
728x90

안녕하세요, devyu입니다.
저는 현재 AWS DDWU 에서 Final Project의 인프라를 담당하고 있는데요, 해당 프로젝트에서는 3-Tier 아키텍처를 구축함으로써, 각 계층의 독립적인 개발과 확장이 가능한 모듈성을 확보하고, 보안성을 강화하며, 유지보수의 용이성을 높였습니다.

또한 이 구조를 통해 각 계층별 성능 최적화와 리소스의 효율적 관리가 가능해져, 프로젝트의 전반적인 안정성과 확장성을 크게 향상시켰습니다.

프로젝트 아키텍처 설계

요구사항 및 시나리오 정의

  • 수강신청 서비스는 새학기가 시작될 때 사용자가 몰릴 것이다.
    • 특정 기간에 사용자 트래픽이 과중된다.
    • 트래픽 분산이 필요하다.
  • 사용자의 데이터와 서비스의 안정성을 위해 이중화 구성(Multi - AZ)이 필요하다.
    • 사용자 1 ~ n 명의 경우 인스턴스 경량화가 필요하다.
    • 사용자가 100명이 될 경우, 관리형 서비스가 필요할 것이다.
    • 사용자가 1000명 이상이 될 경우, 부하를 줄이기 위한 아키텍처 구성이 필요하다.우리 프로젝트에서는 1000명 이상의 사용자를 가졍하여 설계를 진행하였습니다.

적은 사용자에 대한 고려

1000명 이상의 사용자 이전에, 그보다 적은 수의 사용자가 접속하는 아키텍처에 대해 구상하여 Bottom-Up 방식으로 구현을 생각해보기로 하였습니다.

[ 고려 사항 ]

  • 기본 아키텍처
    • 적절한 인스턴스 선택
    • 인스턴스 경량화 - 데이터베이스 분리, web/was 분리 → 3 Tier 구축
    • 기본 보안 및 모니터링
  • 비용 효율적인 구성

[아키텍처 구성]

  • 단일 퍼블릭 서브넷 → Public과 Private으로 분리함으로써 외부 사용자가 접근하는 네트워크와 데이터가 저장된 네트워크를 나눈다.
  • 인스턴스 경량화를 위해 WEB/WAS 역할을 하는 인스턴스와 DB 역할을 하는 인스턴스를 분리한다.
  • 사용자는 Route53이라고 하는 DNS서비스를 통해 Public IP를 찾아서 AWS VPC 안에 구성된 인스턴스와 연결하여 서비스를 이용한다.
  • 퍼블릭 서브넷에 있는 탄력적 ip 가 사용되는 Instance는 Web과 WAS 역할을 하고 프라이빗 서브넷에 있는 인스턴스는 데이터베이스 역할을 한다.
  • 기본 모니터링
    • CloudWatch를 통한 리소스 메트릭 및 로그 모니터링
    • 자동 대시보드 생성, 임계치 초과 알람(Slack 연결)
      • 2계층 구성
    • 인스턴스 경량화 - 3tier 분리 구축
      • public subnet
        • web server
      • private subnet
        • was
        • db

따라서, 최종적으로는 위와 같은 간단한 아키텍처를 구상해볼 수 있다.

사용자가 1000명인 경우

여전히 소규모 서비스이기는 하지만 사용자와 트래픽 증가에 대한 대비를 미리 해보자!

→ 고 가용성에 집중을 하자

[ 아키텍처 설계 ]

1. HA(고가용성)을 위한 방안

  • 이중화
  • 다중 가용영역 (Multi -AZ)
    서비스를 보다 안전하게 구성하려면 1개 이상의 가용 영역을 사용해야 한다.
    단일 인스턴스, 단일 데이터베이스 개수를 늘리는 Scale Out
    • 인스턴스 개수가 여러 개일 때 트래픽을 어떻게 처리할까? → 인스턴스 앞 단에서 사용자 트래픽을 받아서 각 인스턴스에게 분배해줘야 한다.
    • ELB를 사용함으로써 트래픽을 받아 부하를 분산시키고 가용성을 높여줄 수 있다.
  • ELB를 이용한 수평적 확장

2. 트래픽 분산

  • 트래픽 분산 대상
    1. EC2 인스턴스
    2. 컨테이너
    3. IP 주소
  • 다중 가용 영역 지원
  • 자동으로 용량 확장
  • 오토 스케일 그룹 지원(자동으로 인스턴스를 ELB에 등록하고 제외)
  • ELB Service
    • ALB(Application Load Balancer)
      • 고가용성, 자동확장
      • L7기반 로드 밸런서
      • 컨텐츠 기반 라우팅
      • HTTP, HTTPS, HTTP/2 지원
      • 헬스 체크
      • 세션 유지
      • 모니터링/로깅

트러블 슈팅

WEB 구축 중 프리티어 스펙을 가용영역 b2에서 사용할 수 없음을 몰랐다

ALB

WAF 설정