[프로젝트/사이드] 1-1. 메인 서버 배포(1) : AWS EC2, RDS(MySQL), 보안 그룹 설정, S3 bucket 생성
1. AWS EC2
AWS에서 제공하는 가상 서버로, 애플리케이션 실행 환경을 제공합니다
1-1. 인스턴스 생성 준비
아래 화면에서 오른쪽에 있는 인스턴스 시작을 클릭
( 이때 위에 아시아 태평양(서울) 되어있는지 꼭 다시 확인)
1-2. 인스턴스 생성 시작
1) 이름 입력
원하는 인스턴스 이름을 입력합니다 (저는 프로젝트 이름을 적었습니다)
2) 애플리케이션 및 OS 이미지(Amazon Machine Image)
우분투 와 프리티어 관련 내용을 선택해줍니다
3) 인스턴스 유형
프리티어 관련으로만 선택을 해야하기 때문에 그대로 놔둡니다 (t2.micro 선택)
4) 키 페어(로그인)
키 페어를 생성해줍니다. 이를 통해 인스턴스에 연결해야 하기 때문에 키페어를 잘 확인합시다.
새 키페어 생성 👉 이름 입력 / 유형 선택 (RSA) / 키 파일 형식 선택 (.pem)
생성 버튼을 누르면 아래처럼 생성한 새 키 페어가 보입니다.
5) 네트워크 설정
위치 무관 관련해서 고민을 좀 하였으나,,, 혼자 하는 프로젝트도 아니고 해서 ,,,
어차피 키 파일만 안 잃어버리면 된다는 스터디원들의 의견을 받아 그냥 위치 무관으로 선택했습니다.
6) 스토리지 구성
최대 30까지가 가능하다기에 6 -> 30 으로 변경을 해주었습니다.
7) 인스턴스 시작
고급 세부정보는 따로 수정하지 않고 그대로 놔두었습니다.
오른쪽에 있는 인스턴스 시작 을 눌러줍니다.
로딩이 되다가 아래의 화면이 뜹니다.
1-3. 인스턴스 생성 확인
모든 인스턴스 보기 를 클릭하고, 리스트로 이동해서 새로고침을 누르면, 아래의 화면을 확인할 수 있습니다.
2. AWS RDS
AWS에서 제공하는 관계형 데이터베이스 서비스로, MySQL, PostgreSQL 등 다양한 DB를 운영할 수 있습니다.
저는 이번 프로젝트에서 MySQL 을 사용합니다.
2-1. 데이터베이스 생성 준비
아래 화면에서 오른쪽에 있는 데이터베이스 생성을 클릭
2-2. 데이터베이스 생성
1) 데이터베이스 생성 방식 선택
표준 생성을 선택합니다.
2) 엔진 옵션
엔진 유형을 선택합니다. 저는 MySQL 을 선택했습니다.
그 아래는 원래 되어있던 설정 그대로를 유지했습니다. ( 엔진버전 : MySQL 8.0.41 )
3) 템플릿 / 가용성 및 내구성
샘플 템플릿은 프리티어를 선택했고 자동으로 그 아래의 가용성 및 내구성이 결정됩니다.
4) 설정
- DB 인스턴스 식별자의 경우, 프로젝트 이름과 관련있게 입력해주었습니다.
- 마스터 사용자 이름은 root
- 자격 증명 관리는 자체 관리를 선택
- 마스터 암호는 암호강도가 매우 강하게 지어두었습니다
5) 인스턴스 구성
EC2 인스턴스 생성시 선택한 스펙에 맞추어 db.t3.micro 로 선택해줍니다.
6) 스토리지
스토리지 유형과 할당 스토리지는 그대로
아래에 있는 추가 스토리지 구성을 열어 자동 조절 활성화를 체크 OFF 해줍니다
(과금 발생 가능성이 있습니다)
7) 연결
컴퓨팅 리소스 / 네트워크 유형 / VPC 설정 / DB 서브넷 그룹 을 디폴트 설정으로 놔둡니다.
그 아래도 사진처럼 설정해줍니다.
8) 데이터베이스 인증 / 모니터링
아래 사진처럼 설정되도록 놔둡니다.
9) 추가 구성
초기 스키마 이름을 설정해줍니다. 그 아래는 디폴트 설정으로 놔둡니다.
그 아래의 백업 / 암호화 / 유지관리 쪽의 체크를 아래처럼 해제해줍니다.
10) 데이터베이스 생성 확인
위에 선택한 내용에 따른 월별 추정 요금을 확인하고 아래에 있는 데이터베이스 생성 버튼을 클릭합니다.
2-3. 데이터베이스 생성 확인
데이터베이스 리스트로 이동하고 생성을 기다리면, 아래와 같은 화면을 확인할 수 있습니다.
3. 보안그룹 설정
AWS에서는 네트워크 접근을 제어하기 위해 보안그룹(Security Group)을 사용합니다.
보안그룹은 가상 방화벽처럼 작동하며, EC2 인스턴스와 RDS 인스턴스에 대한 인바운드(Inbound) 및 아웃바운드(Outbound) 트래픽을 제어합니다.
> 인바운드
📌 외부 → EC2 인스턴스로 들어오는 트래픽을 허용하는 규칙
예1 ) 내 로컬 PC에서 EC2로 SSH 접속
예2 ) 사용자가 웹페이지를 보기 위해 HTTP 요청을 보낼 때
EC2 보안그룹에 추가해야 하는 인바운드 규칙
아래는 Docker 내 Spring Boot 서비스, Redis, RDS 연동을 위한 필수 인바운드 규칙
이때, ✅ Redis 포트(6379)는 외부에 노출금지 👉 보안그룹에서 6379를 EC2 내부 IP만 허용하거나 Docker 내부 네트워크로 제한
유형 | 프로토콜 | 포트 범위 | 소스 | 설명 |
SSH | TCP | 22 | 내 IP (또는 개발자 팀 IP) | EC2에 터미널 접속용 |
HTTP | TCP | 80 | 0.0.0.0/0 | Spring Boot가 80포트로 운영 중인 경우 |
HTTPS | TCP | 443 | 0.0.0.0/0 | HTTPS 접속이 필요한 경우 |
애플리케이션 포트 | TCP | 8080 | 0.0.0.0/0 또는 특정 IP | Spring Boot가 8080포트에서 실행 중이라면 |
Redis | TCP | 6379 | EC2 내부 IP 또는 Docker 브리지 네트워크 | Redis는 외부에 열지 말고 내부에서만 접근 |
RDS 접근 | TCP | 3306 | EC2 보안그룹 | RDS 보안그룹에서 설정 (EC2 → RDS 방향 접근 허용) |
정리된 시나리오 흐름
1) EC2 인바운드
사용자 → [포트 22, 80, 443, 8080] → EC2
2) EC2 내부 통신
Docker 컨테이너(Spring Boot) → Redis (localhost:6379)
3) EC2 → RDS
Spring Boot → MySQL (RDS) → 보안그룹으로 허용된 포트 3306
> 아웃바운드
📌 EC2 인스턴스 → 외부로 나가는 트래픽을 허용하는 규칙
예1 ) EC2 내의 Spring Boot 애플리케이션이 RDS에 데이터를 요청
예2 ) 외부 API를 호출
👉 AWS 기본 보안그룹은 모든 아웃바운드 트래픽을 허용. 특별히 막을 이유가 없다면 기본 설정을 유지
3-1. EC2 보안그룹 설정
1) 보안그룹 탭 이동
먼저 EC2 페이지에서 보안그룹 탭으로 이동합니다
이때 기본 생성된 보안그룹 이름이 launch-wizard-1 입니다 👉 이 보안그룹을 클릭해서 들어가줍니다.
2) 인바운드 규칙 편집 진행
선택해서 들어간 페이지에서 인바운드 규칙 편집 버튼을 클릭합니다.
아래는 이동한 페이지 화면입니다.
** 추가 사항
아래의 규칙들을 추가하고 규칙 저장을 클릭 합니다.
- HTTP 접속 허용
- HTTPS 접속 허용
- Redis 접속 허용
- MySQL 접속 허용
규칙 저장과 동시에 아래의 화면으로 이동합니다. 생성한 규칙 리스트를 확인할 수 있습니다.
3-2. RDS 보안그룹 설정
1) 보안그룹 탭 이동
다시 EC2 페이지 보안그룹 탭으로 이동합니다
RDS 생성시 만들어진 보안그룹을 클릭해서 들어가줍니다. (wetripmain-db-security)
2) 인바운드 규칙 편집을 진행
선택해서 들어간 페이지에서 인바운드 규칙 편집 버튼을 클릭합니다.
아래는 이동한 페이지 화면입니다.
저 소스를 아까 생성한 EC2 내 보안그룹으로 선택해줍니다.
그런데 만약 아래와 같이 나온다면,,, 기존 것을 삭제 하고 규칙 추가를 눌러서 다시 저장을 해줍니다.
그러면 아래와 같은 화면을 볼 수 있습니다.
4. S3 버킷 생성
전에 작성해둔 S3 버킷 생성 관련 글을 보면서 따라하던 중, 권한 설정 관련 페이지가 달라졌음을 확인했다.
버킷 정책 부분의 편집 버튼을 누르면 글에 있는 사진 페이지가 아닌, 좀 바뀐 페이지가 나온다. 처음에 페이지 잘못들어간줄 알았다
그런데 디자인만 좀 바뀌었을 뿐이지 수정해야하는 내용이나 입력해야하는 부분은 같아서 그대로 따라하면 된다.
[프로젝트/대외활동] IAM 계정 활용 AWS EC2 와 S3 연결 (Springboot) ~ ACLs ERROR 400
수정 배경EC2 계정을 바꾸었고 기존 EC2 데이터를 삭제하면서 S3 연결 오류가 발생했다.EC2 계정은 나의 계정이 아니었고, 계정 주인 친구가 IAM 을 만들어주어 그걸로 접속해 S3 버킷을 새로 생성하
bunnydev-jordy.tistory.com
버킷 정책 편집 페이지
아래는 바뀐 디자인의 페이지
Add Statement 버튼 클릭 결과
5. 다음 내용
다음 글에서는 생성한 EC2 에 docker 를 설치하고 springboot 프로젝트 이미지를 docker 에 푸시하는 과정
docker 에 redis 를 설치하는 과정, 배포 파일 작성을 통해 GithubAction 에 CI/CD 를 구축하는 과정에 대해 작성하겠습니다.
참고 페이지
EC2 + RDS + Redis + Docker로 Spring Boot 애플리케이션 배포하기
이 글에서는 AWS 인프라를 기반으로 EC2,RDS(MySQL), ElastiCache(Redis), Docker를 활용하여 Spring Boot 애플리케이션을 배포하는 전체 과정을 정리해보겠습니다.
velog.io