3 Tier Architecture
3 Tier Architecture 개념
애플리케이션을 프레젠테이션 계층 또는 사용자 인터페이스, 데이터가 처리되는 애플리케이션 계층 그리고 애플리케이션과 관련된 데이터가 저장 및 관리되는 데이터 계층이라는 3개의 논리적이고 물리적인 컴퓨팅 계층으로 구성하는 확립된 소프트웨어 애플리케이션 아키텍처 각 계층이 자체 인프라에서 실행되기 때문에 각 계층이 별도의 개발 팀에 의해 동시에 개발될 수 있으며 다른 계층에 영향을 주지 않고 필요에 따라 업데이트되거나 확장될 수 있음
출처: IBM "3계층 아키텍처란?"
목표 아키텍처 구성도
[AWS] AWS로 구축하는 3티어 아키
VPC
VPC & Subnet
사설 IP C 클래스 IP 대역을 사용해 VPC 생성
Subnet은 이중화를 위해 2개의 Availibility Zone(AZ)으로 나눠 생성(고가용성 확보)
AZ당 Public Sunet 1개, Private Subnet 3개를 생성
총 8개의 Sunet으로 네트워크 구성
Routing Table
Public Subnet용 Routing Table(Public RT)와 Private Subnet용 Routing Table(Private RT)로 구성
Public RT은 Internet Gateway로 트래픽을 라우팅하도록 설정
Private RT는 NAT Instance로 트래픽을 라우팅하도록 설정
NAT instance
1. EC2 생성
- AMI: amzn-ami-vpc-nat
- Subnet: Public Subnet
- Security Group: SGnat
- Public IP: O
2. EC2 설정
- 대상 확인/변경 중지 처리
3. Routing Table 설정
- Private Routing Table에 라우팅 대상으로 등록
Security
Security Group
Name | Desc. | Rule |
SGnat | NAT instance를 위한 보안그룹 | HTTP, HTTPS (src: anywhere IPv4), SSH (src: myIP) |
SGdb | RDS를 위한 보안그룹 | MYSQL/Aurora (src: SGwas) |
SGwas | WAS를 위한 보안그룹 | TCP 8080port (src: SGnlb), HTTP, HTTPS (src: SGnat), SSH (src: SGnat) |
SGnlb | NLB를 위한 보안그룹 | TCP 8080port (src: SGweb) |
SGweb | Web Server를 위한 보안그룹 | HTTP (src: SGalb), HTTP, HTTPS (src: SGnat), SSH (src: SGnat) |
SGalb | ALB를 위한 보안그룹 | HTTP (src: anywhere IPv4) |
Database Tier
Subnet Group 생성
정의한 Subnet에 DB instance가 생성되도록 Subnet Group 생성
RDS 생성
MySQL Engine RDS 생성
- Engine: MySQL 8.0.35
- Option: 다중 AZ DB 인스턴스
- Instance: 스탠다드 클래스
- Storage: 범용 SSG(gp2)
- Public Access: NO
- SG: SGdb
파라미터 그룹 수정
시간대는 서울로 정하고, 한글이 깨지지 않도록 수정
Name | Value |
time_zone | Asia/Seoul |
character_set_client | utf8mb4 |
character_set_connection | utf8mb4 |
character_set_database | utf8mb4 |
character_set_results | utf8mb4 |
character_set_server | utf8mb4 |
collation_connection | utf8mb4_general_ci |
collation_server | utf8mb4_general_ci |
Failover Test
MySQL에 접근하여 Failover test 진행
- DB instance IP 출력 명령어 입력
while true; do host $RDS_Endpoing | grep address; sleep 1; done
- RDS > DB 장애조치 실행
- Private IP 주소 출력 변경 확인
Application Tier
Instance 생성
- AMI: Amazon Linux 2023
- SG: SGwas
프로그램 설정
1. JDK 설치
- Amazon Corretto 설치(OpenJDK)
2. MySQL 설치 및 DB 연동
- DB 연동을 위한 MySQL Yum Repository 설치
- DB 연동을 위한 MySQL comminity server 설치
- MySQL 실행 후 MySQL 접근 확인
- MySQL Test Data 생성
- Tomcat을 위한 MySQL Connector/J 설치 후 java lib에 위치시킴
3. tomcat10 디렉토리에 Tomcat 설치
4. tomcat service 파일 설정 (참고: service란)
[Unit]
Description=Tomcat 10 servlet container
After=network.target
[Service]
Type=forking
User=root
Group=root
Environment="JAVA_HOME=/usr/lib/jvm/java-21-amazon-corretto"
Execstart=/usr/local/tomcat10/startup.sh
ExecStop=/usr/local/tomcat10/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
5. tomcat 실행
6. 별도 경로에 index.jsp 생성
- WAS 공통점: testDB 데이터베이스의 test 테이블 데이터 출력하도록 함
- WAS별 차이점: WAS마다 다른 내용 출력하도록 함(WAS A, WAS C)
7. Root Path 설정
- server.xml에서 Context 설정
8. Tomcat restart
TG 생성
- Protocol: TCP
- Port: 8080
NLB 생성
- 체계: 내부
- SG: SGnlb
- 리스너 프로토콜: TCP
- 리스너 포트: 8080
- NLB AZ 교차 설정: on
Presentation Tier
Instance 생성
- AMI: Amazon Linux 2023
- SG: SGweb
프로그램 설정
1. nginx 설치
2. Nginx Redirect 설정
- Nginx로 접근 시 NLB로 리다이렉트하도록 설정
- ALB Health check를 위한 Location Block 추가
TG 생성
- Protocol: HTTP
- Port: 80
ALB 생성
- 체계: 인터넷경계
- SG: SGalb
- AZ: Public Subnet
- 리스너 프로토콜: HTTP
- 리스너 포트: 80
- Health check 경로: /health
ALB DNS 접근
도메인 설정
도메인 생성 및 매핑
무료 도메인 사이트에서 도메인 생성 후 CNAME에 ALB DNS 매핑
신규 도메인 접근
'프로젝트' 카테고리의 다른 글
AutoScalingGroup 구축(Amazon Linux의 Nginx 배포 시작템플릿 및 검증) (0) | 2024.04.21 |
---|---|
3 Tier Architecture (0) | 2024.04.18 |