관리 메뉴

효습

redis 배포하기 본문

프로젝트

redis 배포하기

효효효효 2025. 1. 2. 18:46

 

 

 

 

 

 

 

Karma 프로젝트를 진행하면서 가장 해보고 싶었던 건 OAuth 2.0 로그인이었다.

 

redis도 이론이랑 간단한 실습만 해봤지 실제 프로젝트에서 써본 적은 없어서 이번 기회에 redis도 사용해봤다.

 

하지만 refresh token을 redis에 보관하면 redis도 배포된 서버에서 같이 동작해야하는데

이걸 당시의 프로젝트 기한 내에 못할 것 같아  일단은 refresh token을  mysql에다가 저장했었다.

 

이제 시간 여유가 조금 생겨서 redis 서버 배포를 다시 시도해봤다.

 

 

 

https://sy-hj08.tistory.com/33

 

서버 배포 과정 이해하기

배포하는 과정을 캡쳐한 게 없어 자세한 배포 과정을 정리할 수 없지만 대략적인 과정을 정리하겠다. 이번 Spring Boot 프로젝트를 배포할 때는 Github Actions를 사용하여 자동으로 서버 배포 과정이

sy-hj08.tistory.com

 

 

이 프로젝트의 서버 배포를 내가 담당하지는 않았으나 배포 방식은 위에 블로그와 같다.

 

EC2 인스턴스가 애플리케이션 이미지를 docker hub에서 pull해서 가져오기 때문에 프로젝트 파일이 EC2 인스턴스에 없다

 

 

애플리케이션 컨테이너 이미지는 docker hub에서 가져오고,

 

아예 독립적으로 redis 컨테이너를 실행하게 한 다음, 두 컨테이너를 같은 네트워크를 쓰게 해서 통신하게 만드는 것이다.

 

 

이 글에서는 redis 컨테이너를 배포하기 위해 docker compose를 사용했지만  굳이 사용하지 않아도 됩니다.

 

왜냐하면 이미 karma 프로젝트는 GitHub Actions를 통해 단일 컨테이너로 서버를 구동하고 있는 상태에서

Redis는 이후에 추가로 배포하는 상황이며, 복잡한 서비스 구성이 아니라 독립적인 Redis 컨테이너 하나만 띄우면 충분합니다.

 

이번에는 Docker Compose를 경험보려는 것이 목적이어서 사용하는 것이지, 실제로는 단순히 Redis 컨테이너 하나만 추가하면 되는 상황이기 때문에 굳이 docker compose를 사용하지 않아도 됩니다.

 

 

1.  두 컨테이너를 같은 네트워크에 둬야하므로 커스텀 네트워크를 만들어준다.

docker network create karma-network

 

karma-network는 bridge 드라이버를 기반으로 한다.

 

 

 

2 . redis 컨테이너를 실행시킬 docker-compose.yml 파일을 만들어줌

version: '3.8'

services:
  redis:
    image: redis:latest
    container_name: redis-container
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    command: ["redis-server", "--appendonly", "yes"]
    networks:
      - karma-network

volumes:
  redis_data:

networks:
  karma-network:  
    external: true

 

EC2 인스턴스 안에 redis 폴더를 따로 만든 다음 , 위와 같은 docker-compose.yml 파일을 만들어줬다.

원래라면 다른 DB 관련 컨테이너에 대한 것도 넣던데 이미 배포된 서버의 DB가 AWS RDS랑 연결되어 있어서 필요하지 않았습니다.

redis는 이미지가 이미 docker hub에 있기 때문에 내가 따로 안만들어도 된다.

 

 

 

 

 

 

3. 기존의 애플리케이션  컨테이너의 network를  커스텀 네트워크와  연결해준다.

docker network connect karma-network [컨테이너 ID 혹은 이름]

 

 

 

커스텀 네트워크에 두 컨테이너가 잘 연결되어있는지 확인하면 됨

docker network inspect karma-network

 

 

 

 

두 컨테이너가 서로 통신할 수 있는지 확인하는 방법으로는 애플리케이션 컨테이너에서 redis 컨테이너에 접속해보는게 있다.

 

docker exec -it [컨테이너 ID 또는 이름] sh

 

이렇게 하면 애플리케이션 컨테이너에 접속할 수 있다.

 

잘 통신하는지 확인하기 위해서 netcat을 설치해준다.

내가 사용하는 EC2 인스턴스는 Ubuntu 기반이기 때문에 리눅스 네트워크 도구인 netcat을 사용할 수 있다.

 

애플리케이션 컨테이너에 접속한 다음,

apt update
apt install netcat -y

 

이렇게 netcat을 설치해준다.

 

redis는 보통 6379 포트를 사용하기도 하고 위에 docker-compose.yml을 보면 내가 6379라고 지정해놨다.

nc -zv redis 6379

 

위 명령어를 사용하면 redis가 6379포트를 열고 있는지 확인할 수 있다.

 

 

 

 

 

 

 

 

 

redis 컨테이너랑 애플리케이션 컨테이너가 같은 네트워크를 쓰고 있고 서로 통신이 가능한 상태이다.

 

기존 DB drop하고 새로 회원가입을 하고 redis 컨테이너 접속해서 제대로 refresh token이 들어와있는지 확인해보니까

 

 

 

잘 들어와있다.

 

 

 

 

 

 

 

 

 

 

참고 블로그

 

https://adjh54.tistory.com/503

 

[Docker] Docker 이해하기 -4 : Docker Compose 이해하고 구성하기

해당 글에서는 Docker Compose에 대해 알아보고 사용 예시를 통해서 처리 과정을 이해합니다.  💡 [참고] 이전에 작성한 Docker 관련 글들을 읽으시면 도움이 됩니다.분류설명링크이해하기Docker 환경

adjh54.tistory.com

 

 

 

'프로젝트' 카테고리의 다른 글

QueryDSL 사용하기  (1) 2024.10.05
Java에서 equals() 와 == 의 차이  (0) 2024.08.16
서버 배포 과정 이해하기  (1) 2024.06.19