IT/프로젝트

[프로젝트/사이드] 1-1. 메인 서버 배포(1) : AWS EC2, RDS(MySQL), 보안 그룹 설정, S3 bucket 생성

토끼개발자 조르디 2025. 6. 6. 17:55

 

 

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 버킷 생성 관련 글을 보면서 따라하던 중, 권한 설정 관련 페이지가 달라졌음을 확인했다. 

버킷 정책 부분의 편집 버튼을 누르면 글에 있는 사진 페이지가 아닌, 좀 바뀐 페이지가 나온다. 처음에 페이지 잘못들어간줄 알았다

 

그런데 디자인만 좀 바뀌었을 뿐이지 수정해야하는 내용이나 입력해야하는 부분은 같아서 그대로 따라하면 된다.

 

https://bunnydev-jordy.tistory.com/entry/IAM-%EA%B3%84%EC%A0%95-%ED%99%9C%EC%9A%A9-S3-Springboot-ACLs-ERROR-400

 

[프로젝트/대외활동] 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 를 구축하는 과정에 대해 작성하겠습니다. 

 

 


참고 페이지

https://velog.io/@zriag/EC2-RDS-Redis-Docker%EB%A1%9C-Spring-Boot-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0

 

EC2 + RDS + Redis + Docker로 Spring Boot 애플리케이션 배포하기

이 글에서는 AWS 인프라를 기반으로 EC2,RDS(MySQL), ElastiCache(Redis), Docker를 활용하여 Spring Boot 애플리케이션을 배포하는 전체 과정을 정리해보겠습니다.

velog.io