![](https://hackmd.io/_uploads/rkLPfuTqn.png) 1. VPC 및 서브넷 구성 - vpc: 최소 10.0.0.0/16 - subnet - public subnet - 10.0.0.0/24 - 10.0.10.0/24 - private subnet (web) - 10.0.1.0/24 - 10.0.11.0/24 - private subnet (was) - 10.0.2.0/24 - 10.0.12.0/24 - private subnet (db) - 10.0.3.0/24 - 10.0.13.0/24 - - nat gateway - 10.0.10.0/24에 위치 - ex-alb - public에 위치 - ex-alb 타겟: apache2.4 ASG - private subnet (web)에 위치 - in-alb - private에 위치 - in-alb 타겟: tomcat8.5 ASG - private subnet (was)에 위치 - aurora db - private subnet (db)에 위치 2. NAT 게이트웨이 설정 - 퍼블릭 서브넷에 NAT 게이트웨이를 배치하고, 사설 서브넷의 라우팅 테이블을 업데이트하여 퍼블릭 인터넷을 통한 아웃바운드 트래픽을 NAT 게이트웨이로 라우팅 2-2. 라우팅테이블 - 대상: vpc cidr, 대상: local (= 이 트래픽은 같은 VPC 내에서 유지) - 대상: 0.0.0.0/0, 대상: nat게이트웨이 id (= 0.0.0.0/0은 인터넷을 의미하는데, nat만이 인터넷으로부터의 통로가 되어 프라이빗 쪽으로 인터넷 트래픽을 보내주겠다는 의미) 3. 보안 그룹 및 NACL 설정: 각 서브넷과 연관된 보안 그룹과 네트워크 ACL을 설정합니다. 이는 서브넷의 리소스에 대한 액세스를 제어합니다. 4. EC2 인스턴스 설정 - EC2 인스턴스를 생성하고 적절한 서브넷과 보안 그룹에 연결 5. ASG 및 Launch Configuration 설정 - 웹과 WAS 계층을 위한 Auto Scaling Group을 설정. ASG를 생성하기 전에 Launch Configuration을 생성하여 ASG가 사용할 인스턴스를 정의해야함. 6. RDS 설정 7. ALB 설정 - 두 개의 ALB를 설정. 하나는 퍼블릭 서브넷에 위치한 외부 ALB이며, 이는 인터넷에서 들어오는 트래픽을 웹 계층의 인스턴스로 라우팅하고, 다른 하나는 사설 서브넷에 위치한 내부 ALB이며, 이는 웹 계층에서 WAS 계층으로의 트래픽을 라우팅. - https://docs.aws.amazon.com/ko_kr/autoscaling/ec2/userguide/attach-load-balancer-asg.html 8. Target Group 설정 - ALB의 각 타겟 그룹을 설정. 이는 ALB가 트래픽을 전달할 인스턴스를 결정하는 데 사용. 9. Application Deployment - 마지막으로, 웹과 WAS 계층에 애플리케이션 코드를 배포. 이 경우 Apache 서버와 Tomcat 서버에 mod_jk 또는 mod_proxy를 설정하여 WAS 계층으로의 트래픽 라우팅을 구성. # 그 외 읽어볼만한 글 - https://sweetysnail1011.tistory.com/57 - https://sweetysnail1011.tistory.com/59 - https://hanrabong.com/entry/AWS-Public-Subnet-Private-Subnet-ALB-ASG-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%84%9C%EB%B2%84-%EC%95%84%ED%82%A4%ED%85%8D%EC%B3%90-%EA%B5%AC%EC%B6%952-AutoScaling-Group-%EB%A7%8C%EB%93%A4%EA%B8%B0 - https://aws.amazon.com/ko/blogs/compute/re-platform-java-web-applications-on-aws/ - gcp로 같은 작업한 사례: https://seonggi.kr/148 # 추가 첨부사항 ## 메이븐 배포가 뭔지 java로 jar을 실행하는게 맞는지 - Maven이란? Apache Maven은 자바용 프로젝트 관리 도구입니다. 자바 프로젝트의 라이프사이클에 포함되는 테스트들을 관리 및 지원해 주고, Build를 자동화 해 주는 일종의 빌드 툴을 말합니다. 쉽게 말하면 라이브러리의 관리(의존성 관리)를 용이하게 해 주고, 빌드 절차를 간소화 시켜주는 역할을 합니다. 예를 들어, pom.xml 파일에 필요한 라이브러리를 정의할 경우 Maven이 네트워크상에서 알아서 라이브러리를 자동으로 다운받아 줍니다. 최근 안드로이드 스튜디오에서 적용하고 있는 Gradle도 이러한 관리 툴의 일종입니다. - 읽어보실만한 글: https://www.devkuma.com/docs/maven/maven-jar-plugin-%EC%8B%A4%ED%96%89-%EA%B0%80%EB%8A%A5%ED%95%9C-jar-%EC%83%9D%EC%84%B1/