[Spring boot] [JWT] Spring security와 Redis를 기반으로 한 인증 구현(2) - Mac OS에서 Docker에 Redis 컨테이너 등록, 실행하기

김영후·2023년 4월 16일
0

SpringBoot-JWT Auth

목록 보기
2/4
post-thumbnail

이전 글에서는 회원가입의 전체적인 플로우, 사용한 기술에 대해서 대략적으로 작성을 해보았다. 이번 글에서는 이 기술들의 설치, 사용에 대해서 써볼 예정이다.

Docker

우선 Docker에 대해 리마인드를 해보자.

Docker?
Docker는 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있다.

우리는 이 Docker를 이용해서 Redis 서버를 띄울 것이다. 하나의 컨테이너 안에서 Redis만 실행되는 것이다. 그럼 우선 Docker를 설치해보자.

설치

Docker는 공식 홈페이지에서 다운로드 혹은 Docker hub를 이용한 설치가 가능한데, 나는 Docker hub를 이용한 다운로드를 진행했다. 이 곳으로 접속해서 아래로 조금 내리다보면 아래와 같은 화면을 볼 수 있다.

여기서 각자 OS에 맞는 선택을 하면 된다. 나의 경우는 See Docker Desktoop for Mac을 선택했다. 여기로 들어가면 페이지 상단에서 아래와 같은 화면을 볼 수 있다.

여기서 각자 칩에 맞는 선택(Intel chip은 Intel chip, M1부터는 Apple silicon)을 하면 된다. 나의 경우는 M1칩이기에 Docker Desktop for Mac with Apple Silicon을 선택했다. 이후의 설치과정은 Mac 유저들이라면 겪어본 dmg파일 설치과정과 같이 응용 프로그램 폴더에 드래그앤 드롭이다.

실행


설치 후 런치패드로 들어가보면 위와 같이 Docker가 설치돼있음을 확인할 수 있다. 이를 실행해주면

사진의 제일 좌측에 보이듯 시스템 아이콘에 Docker가 등록된다. Docker가 실행 중이며, 이제부터는 터미널에서 cli로 이를 제어할 수 있다. 이제 Redis 컨테이너를 구성해보도록 하자.

이미지 등록

컨테이너를 구축하기 위해서는 실행시킬 이미지가 필요하다. 가상머신을 프로비저닝해본 분들이라면 이미지라는 것이 익숙할 것이다. 가상머신을 프로비저닝할 때 OS의 이미지를 사용하듯, Docker의 컨테이너를 구축하기 위해서도 어플리케이션의 이미지가 필요하다. 우리는 Redis를 이용할 것이니 Redis의 이미지를 다운로드해보자.

docker pull redis

터미널에서 위의 명령어를 입력하면 redis의 이미지가 다운로드된다. 이는 cli로도 확인가능하고, Docker 어플리케이션에서도 확인이 가능하다. 차례대로 cli, 어플리케이션으로 확인을 해보겠다.

컨테이너 구축(생성)

컨테이너 실행에 필요한 이미지를 다운로드 받았으니, 이제 이를 이용한 컨테이너를 구축(생성)해볼 것이다. 아래의 명령어로 컨테이너 생성이 가능하다.

docker run --name test-redis -p 6379:6379 -d redis

docker run 뒤에 옵션들이 붇는 것을 볼 수 있는데, --name은 말 그대로 컨테이너의 이름, -p는 포트포워딩이라고 보면 된다. 앞의 숫자는 호스트(쉽게 말해 Docker가 실행 중인 PC)의 포트, 뒤의 숫자는 컨테이너의 포트이다. 외부에서 6379포트로 접근을 하면, 이 접근은 컨테이너의 6379포트로 포트포워딩이 된다. (이해가 어렵다면 관련해서 정말 자세하고 쉽게 설명해주신 이 글을 참조하면 될 듯하다. 6379로 정한 이유는 일반적으로 이 포트를 사용하길래 그렇게 했다.) -d 옵션은 컨테이너를 데몬으로 실행하기 위한 것이다. 쉽게 말해 컨테이너를 백그라운드에서 실행시키기 위한 옵션이다. 마지막의 redis는 실행시킬 어플리케이션의 이름이다. 이 명령어를 실행하면 docker 컨테이너가 생성된 것을 확인할 수 있다. 이도 마찬가지로 cli, 어플리케이션을 통한 확인이 가능하다.


처음 컨테이너를 생성하면 컨테이너는 Running 상태일 것이다. 이를 끄고, 켜고, 재실행하는 명령어는 다음과 같으니 참고 바란다.

docker stop {container_name}
docker start {container_name}
docker restart {container_name}

여기까지 Docker에 Redis 컨테이너를 생성하는 과정이었다. 이제 실행된 컨테이너에서 Redis를 이용해보자.

Redis

Redis 역시 한 번 리마인드하고 가보겠다.

Redis?
Redis는 key, value 구조의 비정형 데이터를 저장, 관리하기 위한 오픈 소스 기반 NoSQL(비관계형 데이터베이스)이다. 인메모리 데이터 구조를 가졌다.

이런 key - value 구조의 데이터와 인메모리 데이터 구조인 점이 refresh token을 이용한 access token 재발급 기능에 적합하다고 판단이 되었기에 Redis의 이용을 채택했다.(물론 많은 분들이 이미 이런 용도로 이용 중이시다.) 이제 컨테이너에서 실행 중인 Redis의 bash와 cli환경에 접근해볼 것이다.

컨테이너 Shell 접근, client 환경(?) 접속

우리는 백그라운드에서 실행 중인 컨테이너(컨테이너의 shell에 접근)에 접근해야한다. 아래의 명령어를 통해 test-redis shell에 접근해보자.

docker exec -it test-redis /bin/bash

exec 명령어는 컨테이너에 특정 명령을 내릴 수 있는 명령어이다. 이의 옵션인 -it는 표준 입출력을 열고 tty를 통해 접속하겠다는 의미이다. 그 뒤에는 컨테이너 명, shell인 /bin/bash를 입력해준다. 명령어를 입력해보면, 아래와 같이 Redis가 실행 중인 컨테이너의 shell에 접근이 가능하다.

shell에 접근한 후에 우리는 client 환경에 접속해볼 것이다. 아래의 명령어를 입력해보자.

redis-cli


이와 같이 client 환경에 접근이 가능하다. 여기서 옵션을 따로 주지 않았기 때문에 localhost:6379로 접속이 된 것이다. 여기까지가 Redis를 Docker 컨테이너에서 실행해보는 과정이었다.

정리

이번 글에서는 Docker의 컨테이너에 Redis 어플리케이션을 등록하고 이 컨테이너에서 실행 중인 Redis의 shell - client 환경까지 접근을 해보았다. 다음 글에서는 이전 글에서 작성해둔 회원가입 플로우를 따라가며, Redis에 실제로 데이터가 저장된 모습, 이의 조회 등에 대한 글을 써보겠다.

참고
Mac OS에 Docker를 설치하는 법
Mac OS 기반 Docker 컨테이너에서 Redis를 실행하는 방법
Docker run 명령어의 -p 옵션에 관한 글

profile
PNU CSE 16th / Busan, South Korea

0개의 댓글