1. 대상 그룹(Target Group) 설정
리스너 및 라우팅 설정은 ELB로 들어온 요청을 어떤 EC2 인스턴스에 전달할지 설정하는 부분이다.

ELB로 들어온 요청을 전달할 "어떤 곳"을 대상 그룹(Target Group)이라고 한다. 대상 그룹을 생성해야 한다.
1) 대상 유형 선택

EC2에서 만든 특정 인스턴스로 트래픽을 전달할 것이기 때문에 "인스턴스" 옵션을 선택한다.
2) 대상 그룹 이름, 프로토콜, IP 주소 유형, 프로토콜 버전 설정
대상 그룹 이름 : test-server-target-group

ELB가 사용자로부터 트래픽을 받아 대상 그룹에게 어떤 방식으로 전달할지 설정한다. HTTP(HTTP1), 80번 포트, IPv4 주소로 통신하도록 설정하는데, 이 방식은 현업에서도 많이 쓰는 세팅이다.
3) 상태 검사 설정

ELB의 부가 기능으로 상태 검사(=Health Check, 헬스 체크)기능이 있다. 굉장히 중요한 기능이다.
ELB로 들어온 요청을 대상 그룹에 있는 여러 EC2 인스턴스로 전달하는데, 특정 EC2 인스턴스 내에 있는 서버가 예상치 못한 에러로 고장난다면, ELB 입장에서 고장난 서버에 요청(트래픽)을 전달하는 것은 비효율적이다.
이런 상황을 방지하기 위해 ELB는 주기적으로(기본 30초 간격) 대상 그룹에 속한 각각의 EC2 인스턴스에 요청을 보낸다. 그 요청에 대한 응답이 200번대(HTTP Status Code)로 온다면 서버가 정상 작동된다고 판단한다. 만약 200번대 응답이 오지 않는다면 서버가 고장났다고 판단하여 요청(트래픽)을 보내지 않는다.
이런 작동 과정을 통해 조금 더 효율적인 요청(트래픽) 분배가 가능해진다.
설정한 값을 해석하면, 대상 그룹의 각각의 인스턴스에 GET /health (HTTP 프로토콜 활용)로 요청을 보내도록 설정한다. 정상적인 헬스 체크 기능을 위해 EC2 인스턴스에 작동하고 있는 백엔드 서버에 Health Check용 API를 만들어야 한다.
하단의 "다음" 버튼을 클릭한다.
4) 대상 등록

사용 가능한 인스턴스 선택 후 80번 포트로 지정하여 "아래에 보류 중인 것으로 포함" 버튼을 클릭하면, 하단에 대상 그룹에 추가할 인스턴스가 표시된다. "다음" 버튼을 클릭한다.

"대상 그룹 생성" 버튼을 클릭한다.
5) ELB 생성 창으로 돌아와 대상 그룹(Target Group) 등록

ELB에 HTTP를 활용해 80번 포트로 들어온 요청(트래픽)을 설정한 대상 그룹으로 전달하도록 설정했다.
6) 로드 밸런서 생성

나머지 부가적인 옵션들은 그대로 두고 "로드 밸런서 생성" 버튼을 클릭한다.

상태가 "프로비저닝 중"이라는 것은 생성하고 있다는 뜻이다.
2. Health Check API 추가
링크 : https://github.com/JSCODE-EDU/elb-express-health-sample
GitHub - JSCODE-EDU/elb-express-health-sample: <비전공자도 이해할 수 있는 AWS 입문/실전> 中 예제 프로젝트
<비전공자도 이해할 수 있는 AWS 입문/실전> 中 예제 프로젝트. Contribute to JSCODE-EDU/elb-express-health-sample development by creating an account on GitHub.
github.com
- app.js
const express = require('express');
const app = express();
const port = 80;
app.get('/', (req, res) => {
res.send(`Hello World!`);
})
// GET /health 요청에 대해 상태코드 200으로 응답하는 API
app.get('/health', (req, res) => {
res.status(200).send("Success Heatlth Check");
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
status() 부분의 응답 코드를 200으로 설정하는 것이 중요하다.
ELB의 상태 검사(=Health Check, 헬스 체크)에 응답할 수 있는 API를 추가한 뒤, EC2 인스턴스의 서버를 업데이트 한다.
EC2 인스턴스에 실행된 서버의 app.js 파일을 수정한다.
- Ubuntu
ubuntu@ip-172-31-37-154:~$ cd ec2-express-sample
ubuntu@ip-172-31-37-154:~/ec2-express-sample$ sudo su
root@ip-172-31-37-154:/home/ubuntu/ec2-express-sample# ls
app.js node_modules package-lock.json package.json
root@ip-172-31-37-154:/home/ubuntu/ec2-express-sample# vi app.js
- Ubuntu Vim
require('dotenv').config();
const express = require('express');
const app = express();
const port = 80;
app.get('/', (req, res) => {
res.send(`.env 테스트 : ${process.env.DATABASE_NAME}`);
})
// GET /health 요청에 대해 상태코드 200으로 응답하는 API
app.get('/health', (req, res) => {
res.status(200).send("Success Heatlth Check");
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
~
~
~
~
:wq
서버를 재시작한다.
- Ubuntu
root@ip-172-31-37-154:/home/ubuntu/ec2-express-sample# pm2 reload 0
Use --update-env to update environment variables
[PM2] Applying action reloadProcessId on app [0](ids: [ '0' ])
[PM2] [app](0) ✓
브라우저 새 창에서 퍼블릭 IP에 /health 를 추가하여 GET 요청을 보내본다.

응답이 성공적으로 이루어진 것을 확인할 수 있다.
3. 로드밸런서 주소를 통해 서버 접속
로드 밸런싱 > 로드밸런서 메뉴로 들어와 로드 밸런서 목록에서 직전에 생성한 로드 밸런서의 세부 정보를 확인한다.

로드밸런서 주소인 DNS 이름을 확인한다. 로드밸런서의 특징은 IP가 없이 도메인으로 접속한다. 브라우저 새 창에서 DNS 이름에 명시된 도메인 주소로 접속한다.

EC2 인스턴스에서 실행한 서버로 접속했을 때와 똑같은 화면이 뜬다.

Health Check API 응답도 확인할 수 있다.
이렇게 ELB와 EC2 인스턴스가 연결되어, ELB를 통해 EC2 인스턴스에 요청과 응답받는 것을 확인했다.
참고링크 : https://www.inflearn.com/course/%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-%EC%9D%B4%ED%95%B4%ED%95%A0%EC%88%98%EC%9E%88%EB%8A%94-aws-%EC%9E%85%EB%AC%B8%EC%8B%A4%EC%A0%84
비전공자도 이해할 수 있는 AWS 입문/실전| JSCODE 박재성 - 인프런 강의
현재 평점 4.9점 수강생 2,848명인 강의를 만나보세요. 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 AWS 입문 강의를 만들어봤습니다! EC2를 활용한 백엔드 API 서버 배포, R
www.inflearn.com
'강의 실습 > 비전공자도 이해할 수 있는 AWS 입문 실전' 카테고리의 다른 글
| [실습] 5. HTTPS 적용을 위해 인증서 발급받기 (0) | 2025.12.29 |
|---|---|
| [실습] 4. ELB에 도메인 연결하기 (0) | 2025.12.28 |
| [실습] 2. ELB 셋팅하기 - 보안 그룹 (0) | 2025.12.27 |
| [실습] 1. ELB 셋팅하기 - 기본 구성 (0) | 2025.12.27 |
| ELB를 활용한 아키텍처 구성 (0) | 2025.12.27 |
댓글