이중화(ALB)
다음과 같은 구성으로 2중화를 진행할 것이다.
보안 서버는 공인아이피로 접속하고 NAT 게이트웨이를 통해 was 서버에 접속할 것임
web 서버는 공인아이피를 할당받아 다이렉트로 접속해도 되고 보안서버를 통해 접속해도 됨
web 서버는 2A, 2C 2개의 인스턴스를 생성하고 로드밸런서를 통해 하나의 도메인으로 서비스 되도록 할 것임.

*NAT (Network Address Translation) : 공인 IP 를 사설 IP 로 바꿔준다
1. VPC 영역을 생성한다.
이름 : JON-PRD-VPC
IPv4 CIDR 블록 : 10.250.0.0/16
[VPC생성]

2. 서브넷을 5개 생성한다.
VPC > 서브넷 [서브넷 생성]
VPC ID : JON-PRD-VPC
| 서브넷 이름 | 가용 영역 | IPv4 서브넷 CIDR 블록 |
| JON-PRD-VPC-NGINX-PUB-2A | 아시아 태평양(서울) ap-northeast-2a | 10.250.1.0/24 |
| JON-PRD-VPC-BASTION-PUB-2A | 아시아 태평양(서울) ap-northeast-2a | 10.250.4.0/24 |
| JON-PRD-VPC-NGINX-PUB-2C | 아시아 태평양(서울) ap-northeast-2c | 10.250.11.0/24 |
| JON-PRD-VPC-TOMCAT-PRI-2A | 아시아 태평양(서울) ap-northeast-2a | 10.250.2.0/24 |
| JON-PRD-VPC-TOMCAT-PRI-2C | 아시아 태평양(서울) ap-northeast-2c | 10.250.12.0/24 |


3. 인터넷 게이트웨이 생성
VPC > 인터넷 게이트웨이
[인터넷 게이트웨이 생성] 클릭
이름 태그 : JON-PRD-IGW
[인터넷 게이트웨이 생성] 클릭


4. NAT 게이트웨이 생성
* 보안 서버(BASTION) 에서 private 서버에 접속하기 위해 공인 ip 를 사설 ip 로 변경해야 한다.
VPC > NAT 게이트웨이 > [NAT게이트웨이 생성] 클릭
이름 : JON-PRD-NGW-2A
가용성 모드 : 리전별 -신규
VPC : JON-PRD-VPC
연결유형 : 퍼블릭
탄력적 IP : 자동
[NAT 게이트웨이 생성] 클릭

5. 라우팅 테이블 생성
VPC> 라우팅 테이블 > [라우팅 테이블 생성]
VPC : JON-PRD-VPC
아래 2개 이름으로 생성
JON-PRD-RT-PUB
JON-PRD-RT-PRI

목록에서 JON-PRD-RT-PUB 선택 > 라우팅 탭 > [라우팅 편집] 클릭
[라우팅 추가]
대상 : 0.0.0.0/0
인터넷 게이트웨이 선택
JON-PRD-IGW 선택

목록에서 JON-PRD-RT-PUB 선택 > 서브넷 연결 탭 > [서브넷 연결 편집] 클릭
아래 3개 선택하고 [연결 저장]
JON-PRD-VPC-NGINX-PUB-2A
JON-PRD-VPC-NGINX-PUB-2C
JON-PRD-VPC-BASTION-PUB-2A

목록에서 JON-PRD-RT-PRI 선택 > 라우팅 탭 > [라우팅 편집] 클릭
[라우팅 추가]
대상 : 0.0.0.0/0
NAT 게이트웨이 선택
JON-PRD-NGW-2A 선택

목록에서 JON-PRD-RT-PRI 선택 > 서브넷 연결 탭 > [서브넷 연결 편집] 클릭
아래 2개 선택하고 [연결 저장]
JON-PRD-VPC-TOMCAT-PRI-2A
JON-PRD-VPC-TOMCAT-PRI-2C

6. 보안그룹 생성
서브넷 마다 보안그룹 필요 + 로드밸런서용 보안그룹. 총 6개의 보안 그룹을 생성해야 한다.

VPC : JON-PRD-VPC 모두 동일하게 선택
보안그룹 이름, 설명(이름과 동일) 만 입력하고 생성한다. 생성후 편집
| 보안그룹 이름, 설명 | 참고 |
| JON-PRD-VPC-NGINX-PUB-SG-2A | NGINX서버 2A 용 보안그룹 |
| JON-PRD-VPC-NGINX-PUB-SG-2C | NGINX서버 2C 용 보안그룹 |
| JON-PRD-VPC-BASTION-PUB-SG-2A | BASTION 서버 용 보안그룹 |
| JON-PRD-VPC-TOMCAT-PRI-SG-2A | 톰켓서버 2A 용 보안그룹 |
| JON-PRD-VPC-TOMCAT-PRI-SG-2C | 톰켓서버 2C 용 보안그룹 |
| JON-PRD-ALB-SG | Application load balancer 용 보안그룹 |

목록에서 JON-PRD-ALB-SG 선택. 인바운드 규칙 탭 > [인바운드 규칙 편집]
HTTP,
HTTPS 추가

JON-PRD-VPC-BASTION-PUB-SG-2A 선택.인바운드 규칙 탭 > [인바운드 규칙 편집]
모든 ICMP -IPV4,
SSH 추가

JON-PRD-VPC-NGINX-PUB-SG-2A 선택 . 인바운드 규칙 탭 > [인바운드 규칙 편집]
모든 ICMP -IPV4,
SSH,
HTTP,
HTTPS 추가

JON-PRD-VPC-NGINX-PUB-SG-2C 선택 . 인바운드 규칙 탭 > [인바운드 규칙 편집]
모든 ICMP -IPV4,
SSH,
HTTP,
HTTPS 추가

JON-PRD-VPC-TOMCAT-PRI-SG-2A 선택 . 인바운드 규칙 탭 > [인바운드 규칙 편집]
사용자 지정 TCP (포트 8080),
모든 ICMP -IPV4,
SSH,
HTTP,
HTTPS 추가

JON-PRD-VPC-TOMCAT-PRI-SG-2C 선택 . 인바운드 규칙 탭 > [인바운드 규칙 편집]
사용자 지정 TCP (포트 8080),
모든 ICMP -IPV4,
SSH,
HTTP,
HTTPS 추가

7. EC2 인스턴스 생성
EC2 > 인스턴스 [인스턴스 시작]
어플리케이션 및 OS 이미지 : Ubuntu 22.04LTS
인스턴스 유형 : t3.micro
키페어 : 본인 키페어 선택
네트워크 설정 > [편집] 클릭
VPC : JON-PRD-VPC
| 이름 , 서브넷 (동일하게 입력, 선택) | 퍼블릭IP 자동 할당 |
보안그룹 | 기본 IP |
| JON-PRD-VPC-NGINX-PUB-2A | 활성화 | JON-PRD-VPC-NGINX-PUB-SG-2A | 10.250.1.0/24 |
| JON-PRD-VPC-BASTION-PUB-2A | 활성화 | JON-PRD-VPC-BASTION-PUB-SG-2A | 10.250.4.0/24 |
| JON-PRD-VPC-NGINX-PUB-2C | 활성화 | JON-PRD-VPC-NGINX-PUB-SG-2C | 10.250.11.0/24 |
| JON-PRD-VPC-TOMCAT-PRI-2A | 비 활성화 | JON-PRD-VPC-TOMCAT-PRI-SG-2A | 10.250.2.0/24 |
| JON-PRD-VPC-TOMCAT-PRI-2C | 비 활성화 | JON-PRD-VPC-TOMCAT-PRI-SG-2C | 10.250.12.0/24 |


생성 완료후 목록

생성된 인스턴스 중 nginx 2a, 2c 서버에 nginx 를 설치하고 설정하는 것은
아래 페이지참고
https://mamdragors.tistory.com/m/27
AWS - 3. NGINX 설치 및 이중화(CLB)
AWS 에서 VPC 를 생성했으므로 생성된 서버에 접속하여 Nginx 를 설치해볼 것이다. vpc 생성은 아래 참고https://mamdragors.tistory.com/25 AWS - 2. VPC생성하여 쉘접속아래 작업을 진행할 것이다. 1. 도메인생성
mamdragors.tistory.com
8. 로드 밸런싱 생성(ALB)

EC2 > 로드 밸런서 > [로드밸런서 생성]
로드 밸런서 유형 : Applicatino Load Balancer
로드 밸런서 이름 : JON-PRD-ALB
체계 : 인터넷 경계
로드 밸런서 IP 주소 유형 : IPv4
네트워크 매핑
- VPC : JON-PRD-VPC
- 가용 영역 및 서브넷
ap-northeast2-2a : JON-PRD-VPC-NGINX-PUB-2A
ap-northeast2-2c : JON-PRD-VPC-NGINX-PUB-2C
보안그룹 : JON-PRD-ALB-SG
리스너 및 라우팅
- HTTP:80 - 대상 그룹 JON-PRD-ALB-TG
- HTTPS:443 - 대상 그룹 JON-PRD-ALB-TG
보안 리스너 설정
- 인증서(ACM에서) : 생성한 인증서 선택
[로드밸런서 생성] 클릭







목록에서 JON-PRD-ALB 활성 상태 확인

9. 호스팅 영역 레코드 생성
Route 53 > 호스팅 영역 > 호스팅 영역 이름 의 링크 클릭
호스팅 영역 세부정보 화면에서 [레코드 생성] 클릭
2개 레코드 추가 (레코드 이름 없이1개, 레코드 이름 www 1개)
레코드 유형 : A
별칭 : 활성화
트래픽 라우팅 대상 : Application/Classic Load Balancer,
아시아 태평양(서울)
JON-PRD-ALB



목록에서 생성된 레코드 확인

https://도메인 으로 접속 되는것을 확인한다.

여기까지 ALB 이중화 끝.
TOMCAT 서버 설정
1. 보안 키파일 복사
JON-PRD-VPC-TOMCAT-PRI-2A, JON-PRD-VPC-TOMCAT-PRI-2C 인스턴스 생성시 지정한 키페어의 .pem 파일이 필요하다.
지정한 키페어를 생성시 PC 에 다운로드 해 두었다면 해당 파일을 BASTION 서버에 FTP 로 업로드 한다.
[ 아래는 xshell 프로그램을 사용한 방법 ]
BASTION 에 접속한 상태에서 FTP 아이콘 클릭

***.pem 파일을 /home/ubuntu 폴더에 업로드 한다.

BASTION 으로 접속된 쉘에서 pem 파일의 권한을 변경한다.
sudo -i
chmod 400 파일명.pem

pem 키를 숨김 폴더로 이동 한다. /home/ubuntu /.ssh
mv 파일명.pem ~/.ssh/
또는
mv 파일명.pem ./.ssh/
ssh 로 단축 접속 하기 위한 설정파일을 만든다
vi /home/ubuntu /.ssh/config
------------- 내용 -------------
Host nginx2a
HostName 10.250.1.240
User ubuntu
IdentityFile ~/.ssh/jongnoaws.pem
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
Host nginx2c
HostName 10.250.11.240
User ubuntu
IdentityFile ~/.ssh/jongnoaws.pem
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
Host tomcat2a
HostName 10.250.2.240
User ubuntu
IdentityFile ~/.ssh/jongnoaws.pem
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
Host tomcat2c
HostName 10.250.12.240
User ubuntu
IdentityFile ~/.ssh/jongnoaws.pem
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
------------- 내용 끝 -------------

또는 /etc/ssh/ssh_config 파일 하단에 추가하여 모든 계정에서 접속 가능하도록 설정할 수도 있다.
이때 pem 의 경로는 절대경로로 설정한다. 그러나 모든 계정에게 열어주면 보안에 안좋겠지.
vi + /etc/ssh/ssh_config

설정파일을 만든 후 ssh 서비스를 재시작 한다.
sudo systemctl restart ssh
2. ssh 접속
| 내부 IP | |
| JON-PRD-VPC-TOMCAT-PRI-2A | 10.250.2.240 |
| JON-PRD-VPC-TOMCAT-PRI-2C | 10.250.12.240 |
BASTION ip 로 접속하여 ssh 로 Tomcat2A, Tomcat2C 에 접속한다.
ip 를 지정하여 접속하거나 ssh -i (자신의 펨키 이름) (계정명)@내부IP
ssh -i /home/ubuntu/.ssh/파일명.pem ubuntu@10.250.2.240
ssh -i /home/ubuntu/.ssh/파일명.pem ubuntu@10.250.12.240
alias 를 이용할 수도 있다. alias 를 이용한 접속은 ubuntu 계정 상태일때 사용 가능하다.
ssh tomcat2a
ssh tomcat2c

2.240 서버와 12.240 서버 둘 다에서 진행
root 계정으로 변경하고 apt update

3. JDK 설치( 2A, 2C 둘다 진행)
sudo apt install openjdk-11-jdk -y

4. 환경변수 추가 ( 2A, 2C 둘다 진행)
맨 아래 추가한다.
sudo vim + /etc/profile
---- 추가할 내용 ----
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/lib/tools.jar

4. TOMCAT 설치 ( 2A, 2C 둘다 진행)
apt 로 목록을 한번 확인하고

아카이브에서 파일을 다이렉트로 다운로드 받는다
wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.108/bin/apache-tomcat-9.0.108.tar.gz

그룹추가, 폴더추가, 추가한 폴더에 압축해제, 유저 추가
sudo groupadd tomcat
sudo mkdir /home/tomcat
sudo tar -xf apache-tomcat-9.0.108.tar.gz -C /home/tomcat/
sudo useradd -s /usr/sbin/nologin -g tomcat -d /home/tomcat tomcat
ls /home/tomcat/apache-tomcat-9.0.108/

tomcat 설정파일 생성
sudo vi /etc/systemd/system/tomcat.service
----- 내용 -----
[Unit]
Description=Apache Tomcat 9.0 Web Application Container
After=network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
Environment=CATALINA_PID=/home/tomcat/apache-tomcat-9.0.108/temp/tomcat.pid
Environment=CATALINA_HOME=/home/tomcat/apache-tomcat-9.0.108
Environment=CATALINA_BASE=/home/tomcat/apache-tomcat-9.0.108
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'
ExecStart=/home/tomcat/apache-tomcat-9.0.108/bin/startup.sh
ExecStop=/home/tomcat/apache-tomcat-9.0.108/bin/shutdown.sh
User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
----- 내용 끝-----

설정 적용
sudo systemctl daemon-reload
sudo systemctl enable tomcat.service
그룹, 소유자, 권한 변경
sudo chgrp -R tomcat /home/tomcat/
sudo chown -R tomcat /home/tomcat/
sudo chmod +x /home/tomcat/apache-tomcat-9.0.108/bin/*.sh
서비스 시작
sudo systemctl start tomcat

Tomcat 설치가 완료되면 curl 명령어를 통해 테스트 가능. html 페이지가 출력된다.
curl localhost:8080

'클라우드 | 가상화 > AWS' 카테고리의 다른 글
| AWS + kubernetes 3tier 설정 (0) | 2026.04.19 |
|---|---|
| AWS - 5. Nginx <-> Tomcat 통신, RDS 설치 (0) | 2025.12.10 |
| AWS - 3. NGINX 설치 및 이중화(CLB) (0) | 2025.12.05 |
| AWS - 2. VPC생성하여 쉘접속 (0) | 2025.12.03 |
| AWS - 0. 기본 용어 정리 (0) | 2025.12.03 |