클라우드 인프라의 개념과 AWS 설정 방법

Y_Sevin·2023년 4월 22일
0

온프레미스와 클라우드의 차이

온프레미스(On-Premises) 환경에서는 모든 서버와 네트워크 장비를 직접 관리해야 합니다. 이는 초기 비용이 많이 들고, 유지보수에 많은 인력이 필요하다는 단점이 있습니다. 반면, 클라우드 환경에서는 AWS와 같은 서비스 제공업체가 물리적 장비를 관리합니다. 사용자는 가상화된 자원들을 활용하여 인프라를 구축할 수 있습니다. 이는 초기 비용 절감과 유연한 자원 관리가 가능하게 합니다.

오토스케일링과 탄력성

오토스케일링(Auto Scaling)은 클라우드 인프라의 핵심 기능 중 하나입니다. 서버의 가동률이 특정 수준(예: 70%)을 넘으면 자동으로 서버를 추가하여 부하를 분산시키고, 반대로 가동률이 낮아지면 서버 수를 줄여 비용을 절감할 수 있습니다. 이는 클라우드 인프라의 탄력성(elasticity)을 극대화합니다.

  • 오토스케일링 설정: 시스템 아키텍처에 따라 다양한 조건을 설정할 수 있습니다. 예를 들어, CPU 사용률이 70%를 초과하면 새로운 인스턴스를 추가하고, 30% 이하로 떨어지면 인스턴스를 줄이는 방식입니다.
  • 탄력적 확장: 필요에 따라 자원을 추가하거나 줄일 수 있어 효율적인 자원 관리가 가능합니다.

고가용성과 리던던시

고가용성(High Availability)은 시스템이 지속적으로 운영될 수 있도록 구성하는 것을 의미합니다. AWS에서는 여러 가용 영역(AZ)에 걸쳐 인프라를 분산하여 단일 장애 지점을 없앱니다.

  • 고가용성 예시: 여러 가용 영역에 데이터 센터를 분산하여 운영합니다. 예를 들어, 판교 데이터센터에 문제가 발생했을 때 다른 지역의 데이터센터가 서비스를 지속하는 방식입니다.
  • 리던던시(Redundancy): 주요 컴포넌트를 이중화하여 장애 발생 시 대체할 수 있도록 하는 것입니다. 예를 들어, 여러 대의 웹 서버를 운영하고 로드 밸런서를 통해 트래픽을 분산시킵니다.

로드 밸런서와 헬스체크

애플리케이션 로드 밸런서(Application Load Balancer)는 트래픽을 여러 서버로 분산시켜 부하를 줄이는 역할을 합니다. 로드 밸런서는 헬스체크(Health Check)를 통해 서버의 상태를 지속적으로 모니터링하며, 문제가 있는 서버를 자동으로 제외시킵니다.

  • 헬스체크: 로드 밸런서는 주기적으로 서버의 상태를 점검합니다. 만약 서버가 응답하지 않으면 트래픽을 다른 서버로 전환합니다. 헬스체크는 URL과 포트를 사용하여 서버의 상태를 확인합니다.

VPC와 네트워크 설정

VPC(Virtual Private Cloud)는 AWS에서 제공하는 가상 네트워크입니다. 사용자는 VPC를 통해 자신의 클라우드 인프라를 논리적으로 분리하고, 서브넷을 통해 네트워크를 세분화할 수 있습니다.

  • 퍼블릭 서브넷: 인터넷과 통신하는 자원들을 포함합니다. 예를 들어, 웹 서버가 여기에 속합니다.
  • 프라이빗 서브넷: 내부 통신만을 담당하는 자원들을 포함합니다. 예를 들어, 데이터베이스 서버가 여기에 속합니다.

보안 그룹과 NACL

보안 그룹(Security Group)은 인스턴스 수준에서 트래픽을 제어하며, NACL(Network ACL)은 서브넷 수준에서 트래픽을 제어합니다.

  • 보안 그룹: 허용된 트래픽만을 통과시킵니다. 예를 들어, TCP 포트 80과 443을 통해 웹 트래픽을 허용할 수 있습니다.
  • NACL: 서브넷 수준에서 IP 레벨의 트래픽을 제어합니다. 허용 및 거부 규칙을 설정할 수 있습니다.

AWS 서비스와 설정 예시

  1. 도메인 구매 및 설정: Route 53을 사용하여 도메인을 등록하고, HTTPS 인증서를 구입하여 보안 통신을 설정합니다.
    • 도메인 설정: Route 53에 도메인 정보를 저장합니다. 예를 들어, example.com 도메인을 등록하고, 이를 Route 53에 설정합니다.
  2. VPC 및 서브넷 생성: 먼저, AWS 콘솔에 로그인하여 서울 리전을 선택합니다. 서울 리전은 ap-northeast-2로 표시됩니다. VPC(Virtual Private Cloud)는 여러분만의 클라우드 네트워크 공간을 만들어주는 서비스입니다. VPC를 생성할 때 IP 대역을 준비하고 퍼블릭 및 프라이빗 서브넷으로 나누어야 합니다. 예를 들어, 10.0.0.0/16 대역을 사용하여 아래와 같이 서브넷을 나눕니다.
    - 퍼블릭 서브넷 1: 10.0.0.0/24
    - 퍼블릭 서브넷 2: 10.0.1.0/24
    - 프라이빗 서브넷 1: 10.0.2.0/24
    - 프라이빗 서브넷 2: 10.0.3.0/24

    서브넷은 VPC 내에서 특정 IP 대역을 분할하여 사용할 수 있도록 해줍니다. 가용성을 높이기 위해 각기 다른 가용영역(AZ)에 서브넷을 생성합니다.
    일반적으로 웹 서버와 데이터베이스 서버를 위해 총 4개의 서브넷을 생성합니다.
    - 퍼블릭 서브넷: 각각 다른 가용영역에 위치
    - 프라이빗 서브넷: 각각 다른 가용영역에 위치

  3. EC2 인스턴스 생성: 필요한 애플리케이션을 실행할 EC2 인스턴스를 생성하고, 보안 그룹을 설정하여 접근을 제어합니다.
    • 부트스트랩 스크립트: EC2 인스턴스가 생성될 때 자동으로 실행되는 스크립트를 설정할 수 있습니다. 예를 들어, MySQL을 설치하는 스크립트를 사용할 수 있습니다.
  4. 로드 밸런서 설정: 로드 밸런서를 설정하여 트래픽을 분산시키고, 헬스체크를 통해 인스턴스 상태를 모니터링합니다.
    회원가입 기능이 있는 경우, 로드밸런서를 이용해 웹 서버 1과 2로 트래픽을 분산시킵니다.
    - 라운드 로빈 알고리즘
    기본적으로 라운드 로빈 알고리즘을 사용하여 트래픽을 분산합니다. 그러나 세션 유지가 필요할 경우, 애플리케이션 레이어 로드밸런서를 사용하여 쿠키 기반 세션 지속성을 설정합니다. 이를 통해 사용자가 로그인한 서버로 지속적으로 연결되도록 합니다.
  5. 오토스케일링 설정: 오토스케일링 그룹을 설정하여 서버의 가동률에 따라 인스턴스 수를 자동으로 조절합니다.
  6. 데이터 저장소 설정: RDS와 S3를 사용하여 데이터베이스와 파일 저장소를 설정합니다.
    • RDS: 관계형 데이터베이스 서비스를 사용하여 데이터베이스를 관리합니다.
    • S3: 객체 저장소를 사용하여 파일을 저장하고 관리합니다.

고급 설정: Redis와 세션 관리

  • Redis: 인메모리 데이터베이스로 세션 저장소와 데이터 캐싱 용도로 사용됩니다. AWS에서는 ElastiCache를 통해 Redis를 쉽게 설정할 수 있습니다.
    • 세션 클러스터링: 웹 서버의 세션 정보를 Redis에 저장하여 여러 서버 간의 세션을 공유할 수 있습니다.
    • DB 캐싱: 데이터베이스와 웹 서버 사이에 Redis를 두어 쿼리 결과를 캐싱함으로써 성능을 향상시킬 수 있습니다.

profile
매일은 아니더라도 꾸준히 올리자는 마음으로 시작하는 개발블로그😎

0개의 댓글