본문으로 건너뛰기

VM 기반의 웹 서비스 구성

이 문서에서는 3-tier 아키텍처를 기반으로 클라우드에서 웹 서비스를 구성하는 방법을 소개합니다. 특히, Bastion Host를 활용하여 보다 안전하고 효율적인 웹 서비스 아키텍처를 설계하는 방법을 살펴보겠습니다. 3-tier 아키텍처는 웹 애플리케이션을 논리적으로 세 가지 계층으로 나누어 구성하는 방법으로, 주로 다음과 같이 구성됩니다.

  • Web 계층: 사용자와 직접 상호작용하는 부분으로, 웹 브라우저를 통해 접근됩니다.
  • App 계층: 비즈니스 로직이 실행되는 부분으로, 사용자의 요청을 처리하고 데이터베이스와 상호작용합니다.
  • 데이터베이스 계층: 데이터를 저장하고 관리하는 부분으로, 애플리케이션 계층에서 필요한 데이터를 제공합니다.

시나리오 소개

이번 시나리오에서는 3-tier 아키텍처를 활용하여 카카오클라우드 도서관이라는 웹사이트를 생성합니다. 주요 특징은 다음과 같습니다.

  • 3-tier 아키텍처를 활용하여 Web 호스팅을 위한 컴퓨팅 환경 구성
  • Bastion 서버를 활용하여 안전하고 효율적인 웹 서비스 아키텍처 설계
  • 카카오클라우드 LoadBalancer을 사용하여 고가용성 확보
  • 카카오클라우드 MySQL을 사용하여 데이터베이스 구성
기본 정보

이미지 시나리오 아키텍처

사전 작업

사전 작업 단계에서는 3 Tier 아키텍처 기반의 웹 서비스 구성에 필요한 리소스를 생성합니다. 우선 3 Tier 아키텍처를 배포하기 위한 카카오클라우드 네트워크 환경을 구축합니다. 그 다음 VM에서 Web 서버 인스턴스, App 서버 인스턴스와 함께, 보안적인 이유로 외부에서 직접적으로 접속할 수 없는 사설 네트워크에 위치한 서버에 접근하기 위해, 중간 단계의 서버인 Bastion 서버 인스턴스를 구성해 보겠습니다.

네트워크 환경 구축

카카오클라우드에서 컴퓨팅 환경을 구축하기 전에 먼저 네트워크 환경 설정이 필요합니다. 이를 위해, 다중 가용 영역에서 NAT 인스턴스를 이용한 네트워크 구축 문서를 참조하여 3 Tier 아키텍처를 위한 네트워크 환경을 구축하세요. 이 문서는 프라이빗 서브넷에서도 인터넷에 안전하게 연결할 수 있도록 NAT 인스턴스를 생성하는 방법에 대해서 설명합니다. 이 문서에서 설명하는 네트워크 설정은 다중 가용 영역에서 NAT 인스턴스를 이용한 네트워크 구축 문서에서 정한 값에 기반합니다.

작업 순서 항목을 참고하여 Step에 따라 구성하시길 바랍니다.

Security Group 설정

  1. 카카오클라우드 콘솔 > VPC 메뉴에서 Security Group을 선택합니다.

  2. 우측의 [+ Security Group 만들기] 버튼을 클릭하여 새로운 Security Group을 생성합니다. 아래를 참고하여 Security Group을 생성합니다.

    보안 그룹: tutorial-bastion-sg
    1. Security Group 이름과 설명을 아래와 같이 입력합니다.

      이름설명(선택)
      tutorial-bastion-sgBastion호스트의 보안정책
    2. 하단의 [+ 추가하기] 버튼을 클릭 후, 인바운드 조건을 아래와 같이 설정하고 [적용] 버튼을 클릭합니다.

      나의 Public IP 확인하기

      다음 버튼을 클릭하면 현재 사용 중인 나의 Public IP를 확인할 수 있습니다.

      추가할 인바운드 정책항목설정값
      bastion inbound policy 1프로토콜TCP
      패킷 출발지{사용자 공인 IP}/32
      포트 번호10000-10010
      정책 설명(선택)bastion inbound policy 1
      bastion inbound policy 2프로토콜TCP
      패킷 출발지{사용자 공인 IP}/32
      포트 번호81
      정책 설명(선택)bastion inbound policy 2
      bastion inbound policy 3프로토콜TCP
      패킷 출발지{사용자 공인 IP}/32
      포트 번호22
      정책 설명(선택)bastion inbound policy 3
    보안 그룹: tutorial-web-sg
    1. Security Group 이름과 설명을 아래와 같이 입력합니다.

      이름설명(선택)
      tutorial-web-sg웹서버의 보안정책
    2. 하단의 [+ 추가하기] 버튼을 클릭 후, 인바운드 조건을 아래와 같이 설정하고 [적용] 버튼을 클릭합니다.

      추가할 인바운드 정책항목설정값
      web inbound policy프로토콜TCP
      패킷 출발지10.0.0.0/20
      포트 번호80
      정책 설명(선택)web inbound
    보안 그룹: tutorial-app-sg
    1. Security Group 이름과 설명을 아래와 같이 입력합니다.

      이름설명(선택)
      tutorial-app-sg어플리케이션 서버의 보안정책
    2. 하단의 [+ 추가하기] 버튼을 클릭 후, 인바운드 조건을 아래와 같이 설정하고 [적용] 버튼을 클릭합니다.

      추가할 인바운드 정책항목설정값
      app inbound policy프로토콜TCP
      패킷 출발지10.0.32.0/20
      포트 번호8080
      정책 설명(선택)app inbound

Bastion 인스턴스 생성

3-Tier 아키텍처에 Bastion Host를 결합하면 클라우드 기반의 웹 서비스를 안전하고 효율적으로 운영하고 관리할 수 있습니다. Bastion 서버는 원격에서 클라우드 인스턴스에 접속하기 위한 게이트웨이 역할을 수행하는 중요한 구성 요소로서, 클라우드 환경에 접근하면 직접적으로 웹과 애플리케이션 계층에 접근하는 것을 방지하여 보안을 강화합니다. 또한 효율적인 원격 접속 및 클라우드 인스턴스를 관리하고, 각 계층간 통신을 원활하게 조율하는데 도움이 됩니다.

VM에서 Bastion 인스턴스를 생성하는 방법은 다음과 같습니다.

  1. 카카오클라우드 콘솔 > Beyond Compute Service > Virtual Machine 메뉴로 이동합니다.

  2. Instance 탭에서 [Instance 만들기] 버튼을 클릭한 후, 다음과 같이 VM 인스턴스를 생성합니다.

    구분항목설정/입력값비고
    기본 정보이름tutorial-bastion
    개수1
    ImageUbuntu 20.04
    Instance 타입m2a.large
    VolumeRoot Volume20
    Key Pair{USER_KEYPAIR}⚠️ 키 페어는 최초 1회 안전하게 보관해야 합니다.
    잃어버린 키는 복구할 수 없으며, 재발급이 필요합니다.
    NetworkVPCtutorial
    Subnetmain (10.0.0.0/20)
    Security Grouptutorial-bastion-sg

Web 인스턴스 생성

웹 서비스 구축을 위한 기반을 마련하기 위해, VM 인스턴스를 생성합니다.

  1. 카카오클라우드 콘솔 > Beyond Compute Service > Virtual Machine 메뉴로 이동합니다.

  2. Instance 탭에서 [Instance 만들기] 버튼을 클릭한 후, 다음과 같이 VM 인스턴스를 생성합니다.

    주의
    • 키 페어(Key Pair)는 최초 1회 생성하여 잘 저장해두세요. 잃어버린 키는 복구할 수 없습니다.
    • 보안 그룹은 설정되어 있는 기본값 그대로 생성합니다. 이후 Security Group은 상세 조건에 맞게 변경할 예정입니다.
    구분항목설정/입력값비고
    기본 정보이름tutorial-web
    개수2
    ImageUbuntu 20.04
    Instance 타입m2a.large
    VolumeRoot Volume20
    Key Pair{USER_KEYPAIR}위에서 생성 또는 사용한 키 페어를 선택
    NetworkVPCtutorial
    Subnet{VPC_ID}_sn_2 (10.0.16.0/20)
    Security Grouptutorial-web-sg

App 서버 인스턴스 생성

비즈니스 로직이 실행되는 애플리케이션 계층의 기반을 마련하기 위해, VM 인스턴스를 생성합니다.

  1. 카카오클라우드 콘솔 > Beyond Compute Service > Virtual Machine 메뉴로 이동합니다.

  2. Instance 탭에서 [Instance 만들기] 버튼을 클릭한 후, 다음과 같이 VM 서버 인스턴스를 생성합니다.

    구분항목설정/입력값비고
    기본 정보이름tutorial-app
    개수2
    ImageUbuntu 20.04
    Instance 타입m2a.large
    VolumeRoot Volume20
    Key Pair{USER_KEYPAIR}위에서 생성 또는 사용한 키 페어를 선택
    NetworkVPCtutorial
    Subnet{VPC_ID}_sn_4 (10.0.48.0/20)
    Security Grouptutorial-app-sg

작업 순서

본격적인 Web 서비스 구성을 위한 세부 작업은 다음과 같습니다.

Step 1. Bastion 호스트 설정

Bastion 서버는 Web 서버와 App 서버의 게이트웨이며, 외부에서 접근할 수 있도록 공인 IP를 부여해야 합니다.

안내

키 페어 파일 권한 문제로 bad permissions 오류가 발생할 경우, sudo 명령어를 추가하여 문제를 해결할 수 있습니다.

  1. VM > Instance 탭에서 위에서 생성했던 Bastion 인스턴스를 선택 후, 우측의 [Public IP 연결] 버튼을 클릭합니다.

    • 연결된 Public IP는 Network 탭에서 확인할 수 있습니다.
  2. 로컬 환경에서 터미널 실행 후, cd 명령어를 사용하여 Key Pair 파일을 다운로드받은 폴더로 이동합니다.

    • 키 파일을 최초 생성해서 사용했다면, 기본적으로 다운로드 폴더에 저장됩니다. (cd ~/Downloads)
  3. 다음 명령어를 실행하여 SSH 접근합니다.

    chmod 400 ${PRIVATE_KEY}.pem # 읽기 권한 부여
    ssh -i ${PRIVATE_KEY}.pem ubuntu@${BASTION_PUBLIC_IP}
    환경변수설명
    PRIVATE_KEY🖌키 파일 이름
    BASTION_PUBLIC_IP🖌VM > Instance 탭에서 생성해둔 `Bastion` 인스턴스 클릭 후, Network 탭에서 확인 가능
  4. Nginx Proxy Manager를 실행하기 위해, 먼저 Bastion 호스트를 구성합니다. 다음의 명령어로 프로비저닝을 수행합니다.

    sudo curl -o /tmp/install-bastion.sh https://raw.githubusercontent.com/kakaoenterprise/kakaocloud-tutorials/bastion-host/install-bastion.sh
    bash /tmp/install-bastion.sh
    Nginx Proxy Manager(NPM)란?

    Nginx Proxy Manager(NPM)는 Nginx를 기반으로 한 웹 서버를 쉽게 설정하고 관리할 수 있도록 도와주는 오픈 소스 프로젝트입니다. 이 도구를 사용하면 사용자는 웹 서버를 효과적으로 구성하고 여러 도메인을 관리할 수 있습니다.

  5. 사용자 로컬 환경에서 브라우저를 열고, 아래 주소를 입력하여 관리 페이지에 접속합니다.

    • http://${BASTION_PUBLIC_IP}:81/login

    • 아이디 : admin@example.com
    • 비밀번호 : changeme
    항목설명
    {BASTION_PUBLIC_IP}VM > Instance 탭에서 생성해둔 Bastion 인스턴스를 클릭 후, Network 탭에서 확인 가능
  6. Dashboard > Streams로 이동합니다.

  7. 다음과 같이 Web과 App 호스트의 정보를 각각 입력합니다.

    구분항목설정값
    tutorial-web-1Incoming Port10000
    Forward Host생성해둔 tutorial-web-1 인스턴스의 Private IP
    - VM > Instance 탭에서 생성해둔 tutorial-web-1 인스턴스를 클릭 후, Network 탭에서 확인 가능
    Forward Port22
    tutorial-web-2Incoming Port10001
    Forward Host생성해둔 tutorial-web-2 인스턴스의 Private IP
    - VM > Instance 탭에서 생성해둔 tutorial-web-2 인스턴스를 클릭 후, Network 탭에서 확인 가능
    Forward Port22
    tutorial-app-1Incoming Port10002
    Forward Host생성해둔 tutorial-app-1 인스턴스의 Private IP
    - VM > Instance 탭에서 생성해둔 tutorial-app-1 인스턴스를 클릭 후, Network 탭에서 확인 가능
    Forward Port22
    tutorial-app-2Incoming Port10003
    Forward Host생성해둔 tutorial-app-2 인스턴스의 Private IP
    - VM > Instance 탭에서 생성해둔 tutorial-app-2 인스턴스를 클릭 후, Network 탭에서 확인 가능
    Forward Port22
  8. 내부 호스트로 들어오는 트래픽은 Bastion을 통해 전달됩니다. 따라서 Web과 App 호스트가 Bastion에서 보낸 트래픽을 받을 수 있도록 Security Group을 다음과 같이 설정합니다.

    Web 인스턴스
    1. VM > Instance 탭으로 이동 후, 생성해둔 Web 인스턴스를 클릭합니다.

    2. Security 탭에서 하이퍼링크 처리된 tutorial-web-sg↗️를 클릭 후, 인바운드 정책 관리를 선택합니다.

    3. [추가하기] 버튼을 클릭하여, 다음과 같이 인바운드 정책을 추가하고 [적용] 버튼을 클릭합니다.

      주의

      [적용] 버튼을 클릭하지 않으면 저장되지 않습니다.

      구분항목설정값
      Web프로토콜TCP
      패킷 출발지{BASTION_PRIVATE_IP}/32
      - VM > Instance 탭에서 생성해둔 Bastion 인스턴스를 클릭 후, Network 탭에서 확인 가능
      포트 번호22
      정책 설명(선택)Web inbound policy
    App 인스턴스
    1. VM > Instance 탭 > 생성해둔 App 인스턴스를 클릭합니다.

    2. Security 탭에서 하이퍼링크 처리된 tutorial-app-sg↗️를 클릭 후, 인바운드 정책 관리를 선택합니다.

    3. [추가하기] 버튼을 클릭하여, 다음과 같이 인바운드 정책을 추가하고 [적용] 버튼을 클릭합니다.

      주의

      [적용] 버튼을 클릭하지 않으면 저장되지 않습니다.

      구분항목설정값
      App프로토콜TCP
      패킷 출발지{BASTION_PRIVATE_IP}/32
      - VM > Instance 탭에서 생성해둔 Bastion 인스턴스를 클릭 후, Network 탭에서 확인 가능
      포트 번호22
      정책 설명(선택)App inbound policy
  9. 사용자 로컬 환경에서 각 호스트로 접근이 가능한지 확인합니다. 앞에서 진행한 포워딩 정보를 바탕으로 포트에 맞게 매핑해준 내부 호스트로 연결됩니다. Key Pair 파일이 존재하는 폴더로 이동하여 실행합니다.

    *tutorial-web-1  
    ssh -i ${PRIVATE_KEY}.pem ubuntu@${BASTION_PUBLIC_IP} -p 10000

    *tutorial-web-2
    ssh -i ${PRIVATE_KEY}.pem ubuntu@${BASTION_PUBLIC_IP} -p 10001

    *tutorial-app-1
    ssh -i ${PRIVATE_KEY}.pem ubuntu@${BASTION_PUBLIC_IP} -p 10002

    *tutorial-app-2
    ssh -i ${PRIVATE_KEY}.pem ubuntu@${BASTION_PUBLIC_IP} -p 10003
    환경 변수설명
    PRIVATE_KEY🖌키파일 이름
    BASTION_PUBLIC_IP🖌VM > Instance 탭에서 생성해둔 `Bastion` 인스턴스 클릭 후, Network 탭에서 확인 가능

Step 2. 관리형 MySQL 데이터베이스 생성

카카오클라우드의 MySQL은 완전 관리형 데이터베이스 서비스로 VPC 환경에서 제공됩니다. 이 서비스를 사용하면 복잡한 설치 과정 없이 콘솔에서 쉽게 MySQL 인스턴스를 프로비저닝할 수 있고, 논리적으로 분리된 네트워크에서 안전하게 사용할 수 있습니다.

  1. 카카오클라우드 콘솔 > Data Store > MySQL 메뉴로 이동합니다.

  2. Instance Group 탭에서 [인스턴스 그룹 만들기] 버튼을 클릭 후, 다음을 참고하여 인스턴스 그룹을 생성합니다.

    구분항목설정/입력값
    기본 설정인스턴스 그룹 이름tutorial-mysql
    설명선택
    MySQL 설정엔진 버전지정된 값을 사용
    MySQL 사용자 이름admin
    MySQL 비밀번호root1234
    인스턴스 가용성/개수단일 (Primary 인스턴스)
    인스턴스 타입m2a.large
    스토리지 타입/크기100
    로그 스토리지 타입/크기100
    네트워크 설정VPCtutorial
    서브넷{VPC_ID}_sn_5 (10.0.64.0/20)
    자동 백업자동 백업 옵션미사용

Step 3. Application 서버 생성

WAS(Web Application Server)는 DB와 연결되어 회원가입, 로그인, 댓글 등 복잡한 기능의 서비스를 제공할 수 있습니다.

  1. nginx-proxy-manager에서 설정한 포트에 맞게 매핑해둔 VM으로 접속합니다.

    # tutorial-app-1
    ssh -i ${PRIVATE_KEY}.pem ubuntu@${BASTION_PUBLIC_IP} -p 10002

    # tutorial-app-2
    ssh -i ${PRIVATE_KEY}.pem ubuntu@${BASTION_PUBLIC_IP} -p 10003
    환경 변수설명
    PRIVATE_KEY🖌키파일 이름
    BASTION_PUBLIC_IP🖌VM > Instance 탭에서 생성해둔 `Bastion` 인스턴스 클릭 후, Network 탭에서 확인 가능
  2. 예제 프로젝트을 설치합니다.

    git clone -b kakaocloud-library https://github.com/kakaoenterprise/kakaocloud-tutorials
  3. 예제 프로젝트가 위치한 폴더로 이동합니다.

    cd kakaocloud-tutorials
  4. 예제 프로젝트을 빌드 및 실행하는데 필요한 패키지를 설치합니다.

    bash install-requirements.sh
  5. 환경변수 입력한 뒤, 예제 application을 실행합니다.

    sudo docker run -it \
    -e MYSQL_HOST=${MYSQL_HOST} \
    -e DB_USERNAME=${DB_USERNAME} \
    -e DB_PASSWORD=${DB_PASSWORD} \
    -p 8080:8080 \
    --name kakaocloud-library-server -d \
    $(sudo docker build -q -f ./server/deploy/Dockerfile ./server)
    환경 변수설정 값설명
    MYSQL_HOST🖌MYSQL_ENDPOINTMySQL 호스트의 주소, MySQL > Instance Group 탭에서 생성해둔 `tutorial-mysql` 인스턴스 그룹을 클릭 후, 상단 엔드포인트에서 확인 가능
    DB_USERNAME🖌admin데이터베이스 유저 이름
    DB_PASSWORD🖌root1234데이터베이스 유저 패스워드

Step 4. Application 서버에 로드밸런서 생성

  1. 카카오클라우드 콘솔 > Load Balancing** 메뉴로 이동 후, [Load Balancer 만들기] 버튼을 클릭합니다.

  2. 생성할 로드밸런서의 이름과 설명을 입력하고 매핑할 VPC와 Subnet을 설정합니다. 아래 정보를 참조하여 리스너 설정은 아래의 조건으로 진행하고 [만들기] 버튼을 클릭합니다.

    구분항목설정/입력값
    타입 선택Network Load Balancer (L4)
    기본 정보Load Balancer 이름tutorial-app-lb
    NetworkVPCtutorial
    Subnet{VPC_ID}_sn_3 (10.0.32.0/20)
    Listener프로토콜TCP
    포트8080
  3. 생성한 Load Balancer의 Provisioning 상태Active가 될떄까지 대기합니다.

    • 1~3분 정도 시간이 소요됩니다.
  4. 좌측 사이드바에서 Target Group을 클릭 후, [Target Group 만들기] 버튼을 클릭합니다.

  5. 다음을 참고하여 정보를 설정 후, [다음] 버튼을 클릭합니다.

    구분항목설정/입력값
    Load BalancerAvailable Zonekr-central-2-a
    Load Balancertutorial-app-lb
    ListenerTCP:8080
    기본 정보Target Group 이름tutorial-app-target-group
    프로토콜TCP
    알고리즘Round Robin
    Sticky Session미사용
    Health Check사용
    타입TCP
    체크 주기10
    타임 아웃5
    상태 전환 기준 (성공)3
    상태 전환 기준 (실패)3
  6. 목록에서 타깃 그룹에 추가할 App 인스턴스를 선택합니다.

  7. 다음과 같이 포트 정보를 입력하고, [Target 추가] 버튼을 클릭한 뒤 [다음] 버튼을 클릭합니다.

    타깃 인스턴스포트
    tutorial-app-18080
    tutorial-app-28080
  8. 생성한 정보를 확인 후 [만들기] 버튼을 클릭합니다.

  9. 로드밸런서와 헬스체크는 연결한 타깃인 Application 서버에 접근할 수 있어야 합니다. 이를 위해 Application 서버의 Security Group인 tutorial-app-sg에 아래와 같은 인바운드 정책을 추가합니다.

    1. VPC > Security Group으로 이동하여, tutorial-app-sg을 선택합니다.

    2. [인바운드 정책 관리] 버튼을 클릭하고 다음 정책을 추가합니다. Health Check IP는 2개를 추가해야 합니다.

      인바운드 정책정책 설명프로토콜패킷 출발지포트 번호
      app inbound policy 1로드밸런서의 접근TCP{app-lb-private-ip}/32
      - LB 목록에서 생성한 App 서버 LB를 선택 후, 세부 정보 탭에서 확인 가능
      8080
      app inbound policy 2헬스체크하는 호스트의 접근 1TCP{healthcheck-ip1}/32
      - LB > Target Group 탭 > Target 탭 > Subnet별 Health Check IP에서 확인 가능
      8080
      app inbound policy 3헬스체크하는 호스트의 접근 2TCP{healthcheck-ip2}/32
      - LB > Target Group 탭 > Target 탭 > Subnet별 Health Check IP에서 확인 가능
      8080

Step 5. Web 서버 생성

WEB 서버는 인터넷 네트워크 위에서 HTTP 프로토콜을 이용해 HTML, CSS, Javascript 코드와 같은 정적인 정보들을 웹 브라우저에 전송하는 역할을 합니다.
정적 데이터를 제공하기 위해 웹 서버 애플리케이션인 nginx를 설치하고, 예제 react 프로젝트를 웹 서버 접속 시 정적 데이터로 제공되도록 설정합니다. /api 이하 경로로 들어오는 요청은 app 서버로 포워딩합니다.

  1. Nginx Proxy Manager에서 설정한 포트에 맞게 매핑해둔 VM으로 접속합니다. Key Pair 파일이 존재하는 폴더로 이동하여 실행합니다.

    # tutorial-web-1
    ssh -i ${PRIVATE_KEY}.pem ubuntu@${BASTION_PUBLIC_IP} -p 10000

    # tutorial-web-2
    ssh -i ${PRIVATE_KEY}.pem ubuntu@${BASTION_PUBLIC_IP} -p 10001
    환경 변수설명
    PRIVATE_KEY🖌키 파일 이름
    BASTION_PUBLIC_IP🖌VM > Instance 탭에서 생성해둔 `Bastion` 인스턴스 클릭 후, Network 탭에서 확인 가능
  2. 예제 프로젝트을 설치합니다.

    git clone -b kakaocloud-library https://github.com/kakaoenterprise/kakaocloud-tutorials
  3. 예제 프로젝트가 위치한 폴더로 이동합니다.

     cd kakaocloud-tutorials
  4. 예제 프로젝트을 빌드 및 실행하는데 필요한 패키지를 설치합니다.

    bash install-requirements.sh
  5. 환경변수 입력한 뒤, 웹서버를 실행합니다.

    sudo docker run -it \
    -e SERVER_ENDPOINT=${SERVER_ENDPOINT} \
    -p 80:80 -p 443:443 \
    --name kakaocloud-library-client -d \
    $(sudo docker build -q -f ./client/deploy/Dockerfile ./client)
    환경 변수설정 값설명
    SERVER_ENDPOINT🖌http://{APP_LB_PRIVATE_IP}:8080생성한 Application 로드밸런서의 프라이빗 아이피를 `{APP_LB_PRIVATE_IP}`에 입력합니다.

Step 6. Web 서버에 로드밸런서 생성

이번 단계에서는 Web 서버에 클라이언트의 요청을 수신하고 받은 트래픽을 여러 개의 서버로 분산하는 로드밸런서를 생성합니다.

  1. 콘솔 내 **Load Balancing > [Load Balancer 만들기] 버튼을 클릭합니다.

  2. 생성할 로드밸런서의 이름과 설명을 입력하고 매핑할 VPC와 Subnet을 설정합니다. 아래 정보를 참조하여 리스너 설정은 다음과 같은 조건으로 진행하고 [만들기] 버튼을 클릭합니다.

    구분항목설정/입력값
    타입 선택Application Load Balancer
    기본 정보Load Balancer 이름tutorial-web-lb
    NetworkVPCtutorial
    Subnetmain
    Listener프로토콜HTTP
    포트80
  3. 생성한 Load Balancer의 Provisioning 상태Active가 될떄까지 대기합니다.

    • 1~3분 정도 시간이 소요됩니다.
  4. 좌측 사이드바에서 Target Group을 선택 후, [Target Group 만들기] 버튼을 클릭합니다.

  5. 다음을 참고하여 설정 후, [다음] 버튼을 클릭합니다.

    구분항목설정/입력값
    Load BalancerAvailable Zonekr-central-2-a
    Load Balancertutorial-web-lb
    ListenerTCP::80
    기본 정보Target Group 이름tutorial-web-target-group
    프로토콜HTTP
    알고리즘Round Robin
    Sticky Session미사용
    Health Check사용
    타입HTTP
    HTTP 메서드GET
    HTTP 버전 1.1
    HTTP 상태 코드200
    체크 경로/
    체크 주기10
    타임 아웃5
    상태 전환 기준 (성공)3
    상태 전환 기준 (실패)3
  6. 목록에서 타깃 그룹에 추가할 인스턴스를 선택합니다.

  7. 포트 입력란에 다음의 정보를 입력하고 [Target 추가] 버튼과 [다음] 버튼을 순차적으로 클릭합니다.

    타깃 인스턴스포트
    tutorial-web-180
    tutorial-web-280
  8. 생성한 정보를 확인 후 [만들기] 버튼을 클릭합니다.

  9. 로드밸런서와 헬스체크는 연결한 타깃인 Web 서버에 접근할 수 있어야 합니다. 이를 위해 Web 서버의 Security Group인 tutorial-web-sg에 아래와 같은 인바운드 정책을 추가합니다.

    1. VPC > Security Group으로 이동하여, app-sg을 선택합니다.

    2. [인바운드 정책 관리] 버튼을 클릭하고 다음 정책을 추가합니다. Health Check IP는 2개를 추가해야 합니다.

      인바운드 정책정책 설명프로토콜패킷 출발지포트 번호
      web inbound policy 1로드밸런서의 접근TCP{web-lb-private-ip}/32
      - LB 목록에서 생성한 Wen 서버 LB를 선택 후, 세부 정보 탭에서 확인 가능
      80
      web inbound policy 2헬스체크하는 호스트의 접근 1TCP{healthcheck-ip1}/32
      - LB > Target Group 탭 > Target 탭 > Subnet별 Health Check IP에서 확인 가능
      80
      web inbound policy 3헬스체크하는 호스트의 접근 2TCP{healthcheck-ip2}/32
      - LB > Target Group 탭 > Target 탭 > Subnet별 Health Check IP에서 확인 가능
      80

Step 7. Web 서버 로드밸런서에 공인 IP 연결

  1. Load Balancing > Load Balancer 탭으로 이동 후, 생성해둔 Web 로드밸런서를 선택합니다.
  2. [Public IP 연결]을 클릭합니다.
  3. 세부 정보 탭에서 Public IP를 확인합니다.

Step 8. 서비스 접속 확인

브라우저에서 등록한 Public IP로 접속하여 서비스를 확인합니다. 정상적으로 연결된 경우, 다음과 같은 '카카오클라우드 도서관' 서비스 화면을 볼 수 있습니다.
카카오클라우드 도서관