[aws] 프록시 패스: 도메인 톰캣 화면으로 바꾸기
이전 내용
[aws] 프라이빗 서브넷 생성하기(feat. NAT 게이트웨이)
이전 내용 [aws] Bastion Hub 만들기이전 내용 Bastion Hub 란? [Bastion Hub 개요]Bastion Hub는 클라우드 환경에서 보안과 관리의 편의성을 높이기 위해 설계된 플랫폼으로, 주로 클라우드 애플리케이션
puppy-foot-it.tistory.com
3-Tier
이번에는 3 티어 구조를 만드는 법에 대해 실행해 보려 한다. AWS(Amazon Web Services)의 3티어 아키텍처는 웹 애플리케이션의 구조를 세 가지 주요 계층으로 나누어 관리하고 설계하는 접근 방식으로, 다중 계층 아키텍처의 가장 인기 있는 구현이며 단일 프레젠테이션 계층, 논리 계층 및 데이터 계층으로 구성된다.
이 아키텍처는 일반적으로 프레젠테이션 계층(프론트엔드), 애플리케이션 계층(중간 계층), 데이터 계층(백엔드)으로 구분된다.
[3-Tier 구조 설명]
1. 프레젠테이션 계층 (Presentation Tier)
- 역할: 사용자와 상호작용하는 계층으로, 애플리케이션의 사용자 인터페이스(UI)를 제공하는 부분. 사용자가 웹 브라우저 또는 모바일 애플리케이션을 통해 데이터를 입력하거나 결과를 확인할 수 있는 계층.
- AWS 구현:
- Amazon S3: 정적 웹 사이트 호스팅을 위해 사용.
- Amazon CloudFront: 콘텐츠 전송 네트워크(CDN)를 통해 빠른 콘텐츠 전송을 제공.
- AWS Amplify: 프론트엔드 웹 애플리케이션을 구축하고 배포하는 데 유용.
2. 애플리케이션 계층 (Application Tier)
- 역할: 비즈니스 로직을 처리하고 클라이언트의 요청을 데이터 계층에 전달하는 역할. 이 계층은 애플리케이션의 주요 기능을 담당하며, 사용자의 요청을 처리하고 결과를 프레젠테이션 계층으로 반환.
- AWS 구현:
- Amazon EC2: 가상 서버를 호스팅하여 애플리케이션을 실행.
- AWS Elastic Beanstalk: 웹 애플리케이션을 손쉽게 배포 및 관리할 수 있는 서비스.
- AWS Lambda: 서버리스 아키텍처로, 이벤트 기반의 코드 실행을 통해 애플리케이션 로직 처리.
3. 데이터 계층 (Data Tier)
- 역할: 애플리케이션이 필요로 하는 데이터 저장 및 관리를 담당. 이 계층은 데이터베이스와 관련된 모든 작업을 수행하며, 다른 계층에서 요청한 데이터를 제공.
- AWS 구현:
- Amazon RDS: 관계형 데이터베이스 서비스를 통해 SQL 기반의 데이터베이스를 제공하며, 자동화된 백업 및 패치 관리 기능 지원.
- Amazon DynamoDB: 완전 관리형 NoSQL 데이터베이스로, 초고속 성능과 확장성 제공.
- Amazon S3: 오브젝트 스토리지를 통해 대용량 비정형 데이터 저장.
[3티어 아키텍처의 장점]
- 모듈화: 각 계층이 책임과 역할이 분리되어 있어 유지 보수 및 확장이 용이.
- 확장성: 각 계층을 독립적으로 확장할 수 있어, 트래픽 급증 시 유연하게 대응 가능.
- 신뢰성: 각 계층이 독립적으로 동작하므로, 특정 계층의 문제 발생 시 다른 계층에 영향을 미치지 않도록 설계.
프라이빗 서버에 톰캣 설치하기
앞선 과정들을 통해 프라이빗 서브넷을 생성하고 톰캣을 설치하는 과정을 수행했다.
▶ 이는 연습용으로 Bastion Hub에 설치한 것이라, 프라이빗 서버에 설치할 때는 퍼블릭 IP가 없기 때문에 nginx로 바로 연결이 불가능하다. 이때 이용하는게 바로 Bastion Hub다.
nginx에서 생성한 Bastion Hub를 통해 프라이빗 서버에 접근하기 위해 하단의 명령어를 입력한다. (본인 환경에 맞게)
chmod 400 키파일명.pem
그리고나서 하단의 명령어도 입력 (본인 환경에 맞게)
※ 단, ssh를 통해 연결하므로, 프라이빗 서버 역시 보안 그룹에 ssh 포트(22) 를 추가해줘야 한다.
ssh -i 키파일 유저명@ip주소
- 유저명: Xshell 8에서 Bastion 서버의 유저명
- 키파일: 키 페어 파일이 저장된 파일명과 확장자(.pem)
- IP주소: 프라이빗 서버의 프라이빗 IP주소
그러면 정말 연결할 거냐 (Are you sure you want to continue connecting)? 이라는 문구가 나오는데, yes를 입력하면 Xshell8에서 Bastion 서버를 통해 프라이빗 서버에 연결된다.
그리고 나머지 과정은 동일하니, 링크를 통해 확인.
도메인 화면 톰캣 메인화면으로 바꾸기
프라이빗 서버에 톰캣을 설치하고 나서 앞서 만들었던 퍼블릭 서버의 메인 화면을 톰캣 메인 화면으로 바꿔볼 예정이다.
이 과정이 궁금하다면,
[aws] VPC, 서브넷, IGW, 라우팅 테이블 설정하기
먼저 default.conf 라는 파일로 접근해야 하는데,
그전에 deafult.conf 파일에 대해 설명하자면,
default.conf 파일은 일반적으로 웹 서버, 특히 NGINX와 같은 리버스 프록시 서버나 Apache HTTP 서버의 기본 설정 파일을 의미한다. 이 파일은 특정 도메인이나 IP 주소에 대한 기본 동작 및 설정을 정의하는 데 사용된다.
이번에는 (화면을 바꿔줄) 퍼블릭 서버로 연결된 Xshell 8 로 넘어와서,
아래의 순서대로 한줄씩 명령어를 입력한다.
sudo -i
cd /
ls
cd etc
cd nginx
ls
cd conf.d
ls
이렇게 하면 default.conf 파일에 접근할 수 있다.
그리고나서, default.conf 파일을 vi 에디터로 여는 명령어를 입력한다..
vi default.conf
이렇게 하면 아래와 같은 화면이 나오는데, 우측 메모장에 있는 내용을 좌측의 내용과 바꿔준다.
해당 메모장의 내용은 아래와 같다. (본인 환경에 맞게 바꿔야 한다.)
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://프라이빗 서버 ip 주소/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
그리고나서 아래 명령어를 한 줄씩 입력한 다음
systemctl stop nginx
systemctl start nginx
이중화를 위해 서브넷이 두 개이므로, (나머지 하나도 똑같은 방식으로 변경해야 한다.) 본인의 도메인에 접속하면 아래와 같이 잘 변경되었다.
이 기술을 프록시 패스(Proxy Pass) 라고 한다.
★ 프록시 패스
프록시 패스(Proxy Pass)는 주로 웹 서버에서 사용되는 기능으로, 클라이언트의 요청을 다른 서버나 서비스로 전달하는 역할을 한다.
이 기능은 리버스 프록시 서버 설정에서 일반적으로 사용되며, 특히 NGINX 및 Apache와 같은 웹 서버에서 구현된다.
[프록시 패스의 개념]
- 리버스 프록시: 프록시 패스는 리버스 프록시 설정의 일환으로, 클라이언트가 요청한 리소스를 직접 제공하는 것이 아니라, 다른 백엔드 서버나 서비스에 요청을 전달한 후 응답을 클라이언트에 반환하는 방식이다.
- 요청 전송: 클라이언트가 특정 URL로 요청을 보내면, 프록시 서버는 그 요청을 지정된 다른 서버로 전달하고, 해당 서버로부터 가져온 데이터를 클라이언트에 다시 전달한다.
[프록시 패스의 주요 사용 이유]
- 보안: 클라이언트가 내부 서버에 직접 접근하는 것을 방지하여 보안을 강화한다. 서버의 IP 주소를 숨길 수 있다.
- 부하 분산: 여러 개의 백엔드 서버가 있을 때, 요청을 분산시키거나 특정 서버로만 전달하여 부하를 관리할 수 있다.
- SSL 종료: SSL(HTTPS) 처리를 프록시 서버에서 처리하고, 내부 통신은 HTTP로 진행할 수 있다.
- 접근 제어: 특정 리소스에 대한 접근을 제어하거나 인증을 관리하는 등 유연한 접근 제어를 구현할 수 있다.
톰캣 화면을 다른 화면으로 바꾸려면?