Docker 기반 CI·CD 파이프라인 구축

CI/CD - GitLab으로 AWS Cloud로의 지속적인 배포 (CD) - (3) / 다음 단계로 넘어가기 전 간단하게 새로나왔던 개념 공부

wy-family 2024. 12. 8. 21:05

1. Application Load Balancer

2. Target Group

3. Listener

 

AWS Cloud 위에 VPC (Virtual Private Cloud)를 만들었다.

VPC는 account를 만들때 기본으로 만들어졌던 네트워크

VPC는 가상 네트워크, 거대한 가상 네트워크이다.

이 네트워크(VPC) 위에 어플리케이션을 구축하는 것.

이 네트워크 위에 ECS Cluster를 만들었고

그리고 Service 를 하나 만들었다.

이 Service는 2개의 Container, task로 구성이 되어 있다. task 1, task2.

이 2개의 task는 target group으로 묶었다.

그렇게 묶은 이유는, 사용자 클라이언트 요청이 80번으로 들어왔을때,

Listener가 연결된 target group으로 사용자 요청을 load balancing, 부하 분산을 하기 위해서 만든 것이다.

결과적으로, 사용자가 어떤 요청을 하게 되면 (아까 나는 DNS 80번 포트 요청을 해봤었다)

Listener의 연결된 target group으로 요청을 보내게 되고, task 2개 중에 하나의 task로 요청을 보내게 된다.

task 2개로 구성을 하게 되면, 1개가 문제가 생기더라도 나머지 하나로 계속 서비스를 할 수 있으니까 고가용성 구성을 할 수가 있는것.


AWS ECS와 관련된 개념 설명

AWS ECS 환경에서 사용되는 주요 개념인 Application Load Balancer (ALB), Target Group, Listener에 대해 차근차근 자세히 설명하겠습니다. 이를 VPC와 ECS Cluster, Service, Task와의 관계 속에서 이해하면 더 명확합니다.


1. Application Load Balancer (ALB)

ALB는 AWS에서 제공하는 Elastic Load Balancing (ELB) 서비스의 한 종류로, **애플리케이션 계층(HTTP/HTTPS, L7)**에서 작동하는 부하 분산 도구입니다.

기능과 역할

  • ALB는 사용자 클라이언트의 요청을 받아서, 적절한 서버(또는 컨테이너)로 요청을 라우팅(전달)합니다.
  • L7 계층에서 작동하므로 요청 URL, 헤더, 쿼리 문자열 등에 따라 세밀하게 요청을 분배할 수 있습니다.
    • 예: example.com/api 요청은 특정 서버로, example.com/web 요청은 다른 서버로 라우팅.

작동 과정

  1. 사용자는 ALB에 설정된 DNS 이름을 통해 요청을 보냅니다. (example-alb.amazonaws.com)
  2. ALB는 Listener를 통해 클라이언트 요청을 수신하고 처리합니다.
  3. 요청은 연결된 Target Group으로 전달되고, Target Group 내의 TaskInstance로 분배됩니다.

왜 사용하는가?

  • ALB는 여러 Task(컨테이너)나 인스턴스에 부하를 분산하여 고가용성확장성을 제공합니다.
  • 상태 확인(Health Check)을 통해 비정상적인 Task를 자동으로 제외합니다.

2. Target Group

Target Group은 ALB가 요청을 전달하는 대상을 그룹화한 것입니다.

구성과 역할

  • Target Group은 한 개 이상의 Target(ECS Task, EC2 인스턴스, Lambda 함수 등)으로 구성됩니다.
  • 각 Target은 특정 포트에서 동작하는 서비스(예: Task의 8080 포트)를 의미합니다.
  • Target Group은 Health Check를 수행하여 개별 Target의 상태를 확인하고, 비정상적인 Target을 제외합니다.

작동 과정

  • ALB의 Listener가 요청을 Target Group으로 전달합니다.
  • Target Group은 요청을 내부 Target들(Task나 Instance)로 로드 밸런싱합니다.

왜 사용하는가?

  • 여러 ECS Task 또는 인스턴스를 묶어서 관리할 수 있습니다.
  • Target Group에 소속된 대상들의 상태를 관리하여 비정상적인 대상을 제외하고, 요청을 정상 대상에만 보내도록 보장합니다.

3. Listener

Listener는 ALB에서 클라이언트 요청을 수신하고 처리하는 구성 요소입니다.

구성과 역할

  • Listener는 특정 포트와 **프로토콜(HTTP/HTTPS)**에서 동작합니다.
    • 예: 80번 포트(HTTP), 443번 포트(HTTPS)
  • Listener는 클라이언트 요청을 **규칙(Rule)**에 따라 특정 Target Group으로 전달합니다.

작동 과정

  1. 클라이언트가 ALB의 DNS 이름을 통해 요청을 보냅니다.
  2. Listener는 요청을 수신하고, 미리 정의된 규칙에 따라 어떤 Target Group으로 요청을 전달할지 결정합니다.
    • 기본 규칙(Default Rule): 모든 요청을 특정 Target Group으로 전달.
    • 세부 규칙: URL 경로나 헤더 조건에 따라 다른 Target Group으로 전달.

왜 사용하는가?

  • Listener는 ALB의 핵심 구성 요소로, 클라이언트 요청을 Target Group으로 라우팅합니다.
  • HTTPS 요청 처리를 위해 SSL 인증서를 Listener에 설정할 수 있습니다.

사용 예시: 네트워크 구조와 요청 흐름

  1. VPC:
    • AWS 계정 생성 시 기본적으로 제공되는 가상 네트워크로, ECS 클러스터와 서비스가 동작할 네트워크 환경입니다.
  2. ECS Cluster와 Service:
    • ECS Cluster 안에 Service를 생성했습니다.
    • Service는 2개의 Task(Task 1, Task 2)로 구성되었습니다.
  3. Target Group:
    • Task 1과 Task 2는 동일한 Target Group에 속합니다.
    • Target Group은 2개의 Task에 요청을 부하 분산합니다.
  4. ALB와 Listener:
    • ALB는 80번 포트의 Listener를 통해 클라이언트 요청을 수신합니다.
    • Listener는 요청을 Target Group으로 전달합니다.
  5. 요청 흐름:
    • 사용자가 ALB의 DNS 이름으로 80번 포트로 요청 → ALB의 Listener가 요청을 수신 → 연결된 Target Group으로 전달 → Target Group 내 Task 1 또는 Task 2 중 하나로 요청 전달.

고가용성 구성의 장점

  1. 부하 분산:
    • ALB가 두 개의 Task에 요청을 나눠 처리하므로, 특정 Task에 과부하가 걸리지 않습니다.
  2. 장애 대비:
    • Task 1이 비정상 상태가 되더라도, Task 2가 요청을 계속 처리할 수 있습니다.
    • Health Check를 통해 Task 1이 비정상 상태임을 감지하고 제외합니다.
  3. 확장성:
    • 요청이 많아지면 Task를 추가하여 Target Group에 포함시키면 됩니다. ALB가 자동으로 추가 Task에 요청을 분산합니다.
1. 사용자 요청
   ┌───────────────────────────────────────────────────┐
   │                                                   │
   ▼                                                   │
[Client] (브라우저/앱 등)  ─── DNS 요청 (ALB DNS 이름) ─┘
   │
   ▼
2. Application Load Balancer (ALB)
   ┌───────────────────────────────────────────────────┐
   │ - 요청 수신 (Listener: Port 80)                  │
   │ - 규칙에 따라 Target Group으로 요청 전달        │
   └───────────────────────────────────────────────────┘
   │
   ▼
3. Listener
   ┌───────────────────────────────────────────────────┐
   │ - 요청을 특정 Target Group으로 라우팅            │
   │   (e.g., 모든 요청 -> Default Target Group)     │
   └───────────────────────────────────────────────────┘
   │
   ▼
4. Target Group
   ┌───────────────────────────────────────────────────┐
   │ - 여러 Target(Task)으로 요청을 로드 밸런싱        │
   │ - Health Check 수행                               │
   └───────────────────────────────────────────────────┘
   │
   ▼
5. ECS Task (Target)
   ┌───────────────────────┬───────────────────────────┐
   │ Task 1                │ Task 2                    │
   │ - 서비스 처리          │ - 서비스 처리            │
   └───────────────────────┴───────────────────────────┘
   │                        │
   ▼                        ▼
6. 응답 반환
   ┌───────────────────────────────────────────────────┐
   │ Task가 요청 처리 후 사용자(Client)에게 응답 반환 │
   └───────────────────────────────────────────────────┘

단계별 흐름 요약

  1. 사용자 요청: 브라우저나 앱에서 ALB의 DNS 이름으로 요청을 보냄.
  2. ALB: 요청을 수신하고 Listener를 통해 처리 시작.
  3. Listener: 규칙에 따라 Target Group으로 요청 전달.
  4. Target Group: 요청을 Health Check를 통과한 Task로 로드 밸런싱.
  5. ECS Task: 요청을 처리하고 결과를 생성.
  6. 응답 반환: Task에서 처리한 결과가 사용자에게 반환.

구조 요약

  • ALB → Listener → Target Group → Task 순으로 요청이 전달됨.
  • Task는 ECS Service에서 실행되며 고가용성 구성 가능.
  • Target Group은 ALB와 Task를 연결하고, Task 상태를 관리.

 

 

.