[메모장 프로젝트] RDS PostgreSQL 생성, EC2 에 Redis 설치 (AWS 2)

728x90

 

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` 서버에 따로 올려줄 것이다.

 

 

 

 

 

 

 

 

 

728x90