효습
redis 배포하기 본문
Karma 프로젝트를 진행하면서 가장 해보고 싶었던 건 OAuth 2.0 로그인이었다.
redis도 이론이랑 간단한 실습만 해봤지 실제 프로젝트에서 써본 적은 없어서 이번 기회에 redis도 사용해봤다.
하지만 refresh token을 redis에 보관하면 redis도 배포된 서버에서 같이 동작해야하는데
이걸 당시의 프로젝트 기한 내에 못할 것 같아 일단은 refresh token을 mysql에다가 저장했었다.
이제 시간 여유가 조금 생겨서 redis 서버 배포를 다시 시도해봤다.
https://sy-hj08.tistory.com/33
이 프로젝트의 서버 배포를 내가 담당하지는 않았으나 배포 방식은 위에 블로그와 같다.
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
'프로젝트' 카테고리의 다른 글
QueryDSL 사용하기 (1) | 2024.10.05 |
---|---|
Java에서 equals() 와 == 의 차이 (0) | 2024.08.16 |
서버 배포 과정 이해하기 (1) | 2024.06.19 |