1. EC2 생성, 보안 그룹 설정 + 자동화 쉘 스크립트
2. RDS PostgreSQL 생성, EC2 에 Redis 설치
3. GitHub Actions 로 자동 배포
4. 도메인 연결하기
5. Nignx 무중단 배포
RDS 인스턴스 생성하기
RDS
`AWS Console` > `Aurora and RDS` > `데이터베이스 생성`
(아래는 내가 설정한 방식이다. 참고만 바람!)
- 생성 방식: 표준 생성
- 엔진 옵션 : `PostgreSQL`
(`Aurora` 를 선택하면 비용이 발생한다 ... !! `PostgreSQL` 을 선택해야 프리티어에서 무료로 사용할 수 있다.)
- DB 인스턴스 Id : `notepad-db`
- DB 이름 : `notepad_db`
- 마스터 사용자 이름 : 기본값 `postgres`
- 자격 증명 관리 : 자체 관리 (마스터 암호 설정)
- 컴퓨팅 리소스 : 연결 안함
(자동 연결을 하지 않고, 수동 연결을 통해 같은 네트워크 `VPC` 안에 설정해서 서로 통신하도록 하면 된다.)
(수동 연결은 직접 보안 그룹을 설정할 수 있어 특정 포트만 허용 or 특정 Ip 만 허용 가능)
- 퍼블릭 액세스 가능 여부 : `No`
(퍼블릭 IP 가 할당되어 외부에서 접근 가능하도록 한다. 예를 들어 `VPC` 외부의 `EC2` 인스턴스, 온프레미스 서버 등)
(같은 `VPC` 내의 `EC2` 인스턴스, `VPN` 등을 통해 연결된 네트워크만 접근 가능)
(처음에 모르고 `Yes` 로 해서 `USD 1.00` 비용이 발생하였다... 😂)
- VPC : EC2 와 같은 VPC 선택
- 보안 그룹: 기존 보안 그룹 `notepad-secure` 선택
여기서 DB 엔드포인트, 포트, 사용자 이름, 마스터 암호를 기억해야 한다
이렇게 하고 데이터베이스 생성 을 누르면 된다.
보안 그룹 설정
이제 보안 그룹 설정을 통해 `EC2` 에서도 `RDS` 에 접근 가능하도록 해야 한다.
`AWS Console` > `EC2` > `네트워크` > `보안 그룹`
`RDS` 인스턴스에 연결된 보안 그룹을 선택하여 인바운드 규칙을 추가해 준다.
`PostgreSQL` `5432` 포트로 EC2 인스턴스가 속한 `보안 그룹 Id` 를 복사하여 넣어준다.
이렇게 보안 그룹을 참조하여 `EC2` 가 변경되어도 끊기지 않고 항상 연결된다.
RDS 실행
ssh -i [key.pem] ubuntu@[EC2 퍼블릭 IP]
명령어를 통해 `EC2` 서버에 접속한다.
(이때, `key.pem` 파일이 있는 디렉토리로 이동 후 실행해야 한다.)
psql -h [DB 엔드 포인트] -U [사용자 이름] -d [DB 이름] -p 5432
이 명령어를 입력하고, 마스터 암호를 입력하면 DB 에 접근할 수 있다.
application-pord.yml 설정
spring:
datasource:
url: jdbc:postgresql://[DB 엔드 포인트]:5432/[DB 이름]
username: [사용자 이름]
password: [마스터 암호]
driver-class-name: org.postgresql.Driver
스프링 부트 애플리케이션과 DB 를 연결하기 위해 해당 설정을 추가해 준다.
EC2 내부에 Redis 설치하기
Redis 설치
ssh -i [key.pem] ubuntu@[EC2 퍼블릭 IP]
명령어를 통해 `EC2` 서버에 접속한다.
(이때, `key.pem` 파일이 있는 디렉토리로 이동 후 실행해야 한다.)
sudo apt update
sudo apt install redis-server -y
이 명령어를 통해 `Redis` 를 설치한다.
그리고 서비스를 안정적으로 띄우기 위해 설정을 바꿔줘야 한다.
sudo nano /etc/redis/redis.conf
`nano` 편집기를 통해 설정 파일을 열고,
supervised systemd
daemonize no
이렇게 변경한다.
이 설정은 `Redis` 서버가 `systemd` (리눅스 서비스 관리자) 와 연동해서 실행되며,
`systemd` 가 `Redis` 프로세스를 관리하고, 로그 수집 / 재시작 담당하도록 한다.
따라서 `systemctl start redis` 명령으로 `Redis` 제어가 가능해진다.
(기존 `supervised no` 로 두면, 백그라운드 데몬으로만 동작된다.)
sudo systemctl restart redis
설정을 변경하고 다시 시작해 준다.
application-pord.yml 설정
spring:
data:
redis:
host: localhost
port: 6379
스프링 부트 애플리케이션과 Redis 를 연결하기 위해 해당 설정을 추가해 준다.
(같은 `EC2` 서버 안에서 실행되기 때문에 `LocalHost` 로 해주었다.)
`application.yml` 기본 설정은 같이 배포하고,
`application-prod.yml` 은 보안 문제로 같이 배포하지 않고, 추후에 `EC2` 서버에 따로 올려줄 것이다.
'💠프로젝트 및 경험 > 프로젝트' 카테고리의 다른 글
[메모장 프로젝트] 도메인 연결하기 (AWS 4) (0) | 2025.07.18 |
---|---|
[메모장 프로젝트] GitHub Actions 로 자동 배포 (AWS 3) (0) | 2025.07.18 |
[메모장 프로젝트] EC2 생성, 보안 그룹 설정 + 자동화 쉘 스크립트 (AWS 1) (0) | 2025.07.18 |
[모플 프로젝트] Vector Loki Grafana로 로그 수집 파이프라인 구축하기 !! (1) | 2025.06.14 |
[메모장 프로젝트] JWT 기반 일반/소셜 로그인 구현하기 (1) | 2025.05.27 |