[Spring] JWT 토큰을 도커를 이용하여 Redis 에 저장(2)

CodeByHan·2024년 9월 27일

스프링

목록 보기
4/33
post-thumbnail

이전 포스트에서 JWT 토큰이 어떻게 활용될 것인지랑 쿠키에 저장할 것 인지 아니면 localStroage에 저장할 것 인지를 알아보았다.

이제 Docker에다가 Redis서버를 띄어볼려고 한다.하나의 컨테이너 안에서 Redis만 실행되는 것으로 한다.

도커(Docker)

도커(Docker)
컨테이너를 사용해 응용 프로그램을 더 쉽게 만들고 배포, 실행할 수 있도록 설계된 도구

  • 컨테이너 기반의 오픈소스 가상화 플랫폼
  • 리눅스나 윈도우 기반의 애플리케이션 모두 사용할 수 있으며 인프라에 관계없이 항상 동일하게 실행
  • 컨테이너를 사용하여 각각의 프로그램을 분리된 환경에서 실행 및 관리할 수 있는 툴

컨테이너(Container)란?

  • 컨테이너는 코드와 모든 종속성을 패키지화하여 응용 프로그램이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 하는 소프트웨어의 표준 단위

윈도우 환경을 예시로 들어보면 하나의 컴퓨터에 여러 사용자로 나눠서 사용할 수 있도록 구성되어있다.예를 들면 Park,Kim 이렇게 각각 다른 사용자로 로그인 할 수 있도록 구성되어 있고 Park에서 카카오톡을 설치 하면 Park으로 로그인 된 환경에서는 카카오톡이 존재하지만 Kim으로 로그인 된 환경에서는 카카오가 존재하지 않는다.그 말은 각 사용자의 환경에 들어가보면 독립적으로 구성 되어 있어서 필요하 프로그램을 각 사용자 환경에 따로따로 설치해주어야 한다는 것이다.
컨테이너도 이와 비슷한 개념이다.하나의 컴퓨터 환경에 독립적인 컴퓨터 환경을 구성하여,각 환경에 프로그램을 별도로 설치할 수 있게 만든 개념이다.
하나의 컴퓨터 환경내에서 여러개의 미니 컴퓨터 환경을 구성할 수 있는 형태이다.여기서 얘기하는 미니 컴퓨터를 보고 도커(Docker)에서는 컨테이너라고 부른다.그리고 미니 컴퓨터를 구성하고 있는 컴퓨터를 호스트 컴퓨터라고 부른다

  • 컨테이너(Container) 독립성
    • 디스크(저장 공간) : 각 컨테이너마다 서로 각자의 저장 공간 존재
    • 네트워크(IP,PORT) : 각 컨테이너마다 고유의 네트워크(IP) 존재

이미지(Image)란??

  • 도커에서 서비스 운영에 필요한 서버 프로그램, 소스코드 및 라이브러리, 컴파일된 실행 파일을 묶는 형태를 도커 이미지라한다. 다시 말해, 특정 프로세스를 실행하기 위한(즉, 컨테이너 생성(실행)에 필요한) 모든 파일과 설정값(환경)을 지닌 것으로, 더 이상의 의존성 파일을 컴파일하거나 이것저것 설치할 필요 없는 상태의 파일

쉽게 생각하면 닌텐도 칩을 생각하면 된다.기기만 있으면 여러가지 칩을 넣게되면 다양한 게임을 즐길 수 있다.도커에서 닌텐도 칩과 같은 역할을 하는 개념이 이미지(Image)이다.

예를 들면 MariaDB 서버를 이미지로 만들었다면,이 이미지를 도커로 실행시키는 순간 MariaDB 서버가 컨테이너(Container) 환경에서 실행된다.일일히 MariaDB를 설치할 필요없이 MariaDB를 사용할 수 있게 된다.

  • 이미지(Image)는 프로그램을 실행하는데 필요한 복잡한 설치 과정,설정,버전 정보등을 포함하고 있다.즉 프로그램을 실행하는데 필요한 모든 것을 포함하고 있다.

도커 설치

일단 도커는 공식 홈페이지에서 설치 할 수 있고 자신의 OS에 알맞게 설치하자

도커 공식 홈

이미지 등록

컨테이너를 구축하기 위해서는 실행시킬 이미지가 필요하다.우리는 Redis가 필요하니 Redis의 이미지를 설치하자

docker pull redis

redis를 다운받고

docker images

명령어를 입력하면

Redis가 잘 다운로드 된 것을 확인할 수 있다.

컨테이너 구축(생성)

컨테이너 실행에 필요한 이미지를 다운로드 받았으니, 이제 이를 이용한 컨테이너를 구축(생성)해볼 것이다.

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

docker run 뒤에 붙은 --name은 컨테이너의 이름을 의미하며 -p는 포트포워딩을 의미한다.앞의 숫자 6379는 호스트(docker가 실행 중인 PC)의 포트,뒤의 숫자 6379는 컨테이너 포트를 의미한다.외부에서 6379포트로 접근을 하게되면,이 접근은 컨테이너의 6379포트로 포트 포워딩 된다.-d는 컨테이너를 데몬으로 실행하기 위한 것(쉽게 풀이하면 컨테이너를 백그라운드에 실행)이다.마지막의 redis는 실행시킬 어플리케이션 이름이다.

docker ps

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

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

컨테이너 Shell 접근

docker exec -it test-redis /bin/bash
  • exec 명령어는 컨테이너에 특정 명령을 내릴 수 있는 명령어이다. 이의 옵션인 -it는 표준 입출력을 열고 tty를 통해 접속하겠다는 의미

shell에 접근한 후에 우리는 client 환경에 접속

redis-cli

Redis 에 저장된 key 값들 조회

keys * 

Redis 키 값을 통한 값 조회

get 17

모든 키 삭제

FLUSHALL

다음번에는 RefreshToken이 어떻게 스프링부트에서 Redis로 저장되는지 작성 해야겠다

참고:https://velog.io/@ragnarok_code/%EB%8F%84%EC%BB%A4-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88Container%EC%99%80-%EC%9D%B4%EB%AF%B8%EC%A7%80Image%EB%9E%80

참고:https://www.youtube.com/watch?v=ah95uGgS99A

profile
노력은 배신하지 않아 🔥

0개의 댓글