본문 바로가기
Redis

[Redis] AWS EC2에서 Redis를 활용해보자! (2)

by jn4624 2024. 10. 25.
반응형

1. EC2에 Redis 설치

 

생성한 EC2에 접속하기 위해 연결을 클릭한다.

 

연결을 누르면 EC2 인스턴스에 원격 접속을 하게 된다.

 

EC2 인스턴스에 접속이 완료되었다.

 

Redis 설치

# apt update 명령어
sudo apt update

# Redis 설치 명령어
sudo apt install redis

 

Redis 설치 및 통신 확인

 

2. EC2에 JDK 설치

JDK 설치

 

JDK 설치 여부 확인

 

3. Spring Boot 프로젝트에 배포 환경 설정 추가

로컬 환경과 분리하여 배포 환경의 설정을 추가해준다.

데이터베이스 설정 정보는 일전에 생성한 RDS의 정보로 작성한다.

# local 환경
spring:
  profiles:
    default: local
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
  data:
    redis:
      host: localhost
      port: 6379

logging:
  level:
    org.springframework.cache: trace

---
# prod 환경
spring:
  config:
    activate:
      on-profile: prod
  datasource:
    url: jdbc:mysql://instagram-db.cfqanhnkrusz.ap-northeast-2.rds.amazonaws.com:3306/mydb
    username: admin
    password: password

참고

RDS 주소는 생성한 데이터베이스에서 확인할 수 있다.

 

연결 및 보안 부분에 있는 엔트포인트가 생성한 RDS의 주소다.

 

4. Github Repository에 프로젝트 올리기

EC2 인스턴스로 Spring Boot 프로젝트를 옮기기 위해서 사용하는 방법이다.

Repository 생성 과정은 여기서는 생략하겠다.

참고

편의상 지금은 application.yml 정보를 .gitignore 처리하지 않았지만, 실제로는 보안을 위해 .gitignore 처리해야 한다.

 

5. EC2에서 프로젝트 Clone

Github에서 주소를 복사한 후 EC2 인스턴스에서 Clone을 진행한다.

# Github Clone 명령어
git clone https://github.com/jn4624/redis-in-spring.git

# Clone 프로젝트 확인 명령어
ls

참고

Clone 과정에서 Github 계정과 발급 받은 Token 정보가 있어야 하니 미리 준비해두면 좋다.

 

6. Spring Boot 서버 실행

Clone한 프로젝트 디렉토리로 이동하여 프로젝트를 빌드하고 서버를 실행하자!

# 테스트 과정 없이 프로젝트 빌드 명령어
./gradlew clean build -x test

# 빌드 디렉토리로 이동 명령어
cd build/libs

# 배포 환경 profiles 지정하여 서버 실행 명령어
java -jar -Dspring.profiles.active=prod redis-in-spring-0.0.1-SNAPSHOT.jar

 

엔티티가 RDS에 정상적으로 반영되었는지 확인해보자.

 

잘 반영된 것을 확인할 수 있었다!

 

7. 더미 데이터 추가

-- 높은 재귀(반복) 횟수를 허용하도록 설정
-- (아래에서 생성할 더미 데이터의 개수와 맞춰서 작성하면 된다.)
SET SESSION cte_max_recursion_depth = 1000000; 

-- boards 테이블에 더미 데이터 삽입
INSERT INTO boards (title, content, created_at)
WITH RECURSIVE cte (n) AS
(
  SELECT 1
  UNION ALL
  SELECT n + 1 FROM cte WHERE n < 1000000 -- 생성하고 싶은 더미 데이터의 개수
)
SELECT
    CONCAT('Title', LPAD(n, 7, '0')) AS title,  -- 'Title' 다음에 7자리 숫자로 구성된 제목 생성
    CONCAT('Content', LPAD(n, 7, '0')) AS content,  -- 'Content' 다음에 7자리 숫자로 구성된 내용 생성
    TIMESTAMP(DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 3650 + 1) DAY) + INTERVAL FLOOR(RAND() * 86400) SECOND) AS created_at -- 최근 10년 내의 임의의 날짜와 시간 생성
FROM cte;

참고

위 SQL문은 MySQL 8.0 이상부터 사용 가능하다.

 

8. Redis 적용 전,후 성능을 또 비교해보자

데이터베이스 성능 수치

 

Redis 적용 전, 조회 성능의 평균적인 수치는 500ms 정도로 확인되었다.

 

Redis 성능 수치

 

Redis 적용 후, 조회 성능의 평균적인 수치는 30ms 정도로 확인되었다.

 

따라서, 배포 환경에서도 데이터베이스보다 Redis가 16배 정도 성능이 뛰어난 것을 확인할 수 있었다!!!! 대박!

 

Reference.

https://www.inflearn.com/course/%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-redis-%EC%9E%85%EB%AC%B8-%EC%84%B1%EB%8A%A5-%EC%B5%9C%EC%A0%81%ED%99%94

 

비전공자도 이해할 수 있는 Redis 입문/실전 (조회 성능 최적화편) 강의 | JSCODE 박재성 - 인프런

JSCODE 박재성 | 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 'Redis 입문/실전 (조회 성능 최적화편)' 강의를 만들어봤습니다!, 🤬 에라이, 못 해먹겠네!비전공자로 개발

www.inflearn.com

 

반응형