- NoSQL 데이터베이스 중 하나이며 오픈소스 소프트웨어입니다. 주요한 특징은 ‘키-값(Key-Value)’ 형태로 데이터를 저장하고 이 데이터를 ‘인-메모리 데이터 저장소’에 저장합니다.
- ‘키-값(Key-Value)’ 형태로 데이터를 저장을 하며 ‘다양한 종류의 값’을 지정 가능합니다. 값으로는 문자열, 리스트, 셋, 정렬된 셋, 해시 등을 지원합니다. - '인 메모리 데이터 저장소’를 사용하기에 서버의 메인 메모리에 모든 데이터를 저장하므로, 디스크 I/O를 거치는 다른 데이터베이스 시스템보다 훨씬 빠른 성능을 보여줍니다. - 메모리에 저장되는 데이터 베이스는 디스크에 저장하여 휘발성으로 사용되는 데이터를 영구적으로 저장하는 기능을 제공하여 서버가 다운되더라도 데이터를 복구할 수 있습니다. - 주로 데이터베이스, 캐시, 메시지 브로커 등 다양한 용도로 사용될 수 있습니다.
- ‘Not Only SQL’ 또는 ‘Non-Relational SQL’이라는 의미를 가지며 관계형 데이터베이스 관리 시스템(RDBMS)이 아닌 다른 형태의 데이터 저장소를 의미하며 스키마가 없거나 유연한 스키마를 가지고 있어 데이터 구조가 고정되어 있지 않습니다. - 이로 인해 다양한 형태의 데이터를 저장하고 관리할 수 있습니다. - NoSQL은 대용량 분산 데이터 처리를 위해 개발되었으며 데이터의 구조적 유연성과 확장성을 제공합니다.
💡 Redis 서버를 내리고 다시 서버를 올리면 데이터가 모두 사라질까?
- Redis는 기본적으로 인-메모리 데이터 구조 저장소이기 때문에, 서버가 종료되면 메모리에 저장된 데이터는 사라집니다. 그러나 Redis는 디스크에 데이터를 저장하는 영구 저장 기능을 제공합니다. - 이 기능을 사용하면, 서버가 종료되어도 데이터를 복구할 수 있습니다. 이 영구 저장 방식은 RDB (Redis DataBase)와 AOF (Append Only File) 두 가지 방법이 있습니다.
2) Docker Compose
💡Docker Compose
- 여러 컨테이너가 함께 실행되는 환경에서, 하나의 파일 내에 정의하여 여러 컨테이너를 관리하기 위한 도구를 의미합니다. 즉, 여러 컨테이너를 관리할 때, 단일 명령어를 통해 생성-관리-배포하는 기능을 수행하는 역할을 합니다.
- 기존의 Dockerfile을 통해 단일 컨테이너를 ‘생성-관리-배포’하는 과정에서의 처리과정은 간단하였으나 여러 컨테이너를 일괄 띄우는데 시간 소요가 많이 되기에 이를 사용합니다. - 이러한 컨테이너 관리는 YAML 파일 형식을 사용하여 서비스, 네트워크 및 볼륨 같은 애플리케이션 서비스를 구성할 수 있습니다. 또한 개발, 테스트, 스테이징, 운영 및 CI 워크플로우 환경에서 애플리케이션을 이동하여 배포가 가능하기에 관리가 매우 편리합니다.
https://docs.docker.com/compose/
1. Docker Compose 처리 과정
💡 Docker Compose 처리 과정
1. Dockerfile에 필요한 모든 서비스를 정의합니다.(Define all your required services in a Dockerfile) - Dockerfile 내에 각 다운로드 할 이미지와 실행할 컨테이너에 대해 정의합니다.
2. Compose 파일(YAML/YML) 내에 각 서비스 간의 관계를 정의합니다.(Define the releationship between each service in a Compose file) - 이 파일에는 실행할 서비스(컨테이너)들과 그 설정들을 포함하고 있습니다. 사용할 파일 내용은 Docker 이미지, 포트 매핑, 볼륨 마운트, 네트워크 설정, 환경 변수 등이 정의됩니다.
3. Docker Compose를 사용하여 애플리케이션을 시작합니다.(Use Docker Compose to start the application) - Docker Compose의 실행 명령어 ‘docker-compose up’ 명령어를 수행하여 일괄 서비스를 실행합니다. - 이 명령어를 통해서 Docker Compose 파일에 정의된 모든 서비스를 시작합니다. - 필요한 Docker 이미지가 로컬에 없으면 자동으로 다운로드하고, 컨테이너를 생성하고 시작합니다.
4. Docker Compose의 서비스 상태를 확인합니다. - Docker Compose의 상태 확인 명령어 ‘docker-compose ps’ 명령어를 수행하여 서비스의 상태를 확인합니다. 현재 실행 중인 서비스의 상태를 확인할 수 있습니다.
+ 필요에 따라 Docker Compose의 서비스를 중지합니다. - Docker Compose의 중지 명령어 ‘docker-compose stop’ 명령어를 수행하거나 ‘docker-compose down’ 명령어를 수행하여 모든 서비스를 중지하고 컨테이너, 네트워크, 볼륨을 삭제합니다.
3) RedisInsight
💡 RedisInsight
- Redis Labs에서 제공하는 GUI 도구로, Redis 데이터베이스를 쉽게 관리하고 모니터링할 수 있도록 도와줍니다.
- 기존의 dockerfile 형태로 구성한 방법은 아래와 같이 간단한 형태로 구성하였습니다. - 해당 부분에서 Redis GUI 툴을 함께 컨테이너 배포가 안되기에 Docker Compose 형태로 함께 배포하는 방식을 이용합니다.
# Redis의 공식 Docker 이미지를 기반으로 합니다.
FROM redis:7.2.4-alpine3.19
# Redis의 기본 포트인 6379를 열어줍니다.
EXPOSE 6379
# Redis 서버를 실행합니다.
CMD ["redis-server"]
https://adjh54.tistory.com/449
2. Docker Compose 파일 구성 : Redis + RedisInsight
💡 Docker Compose : Redis + RedisInsight
- Docker Compose 설정 파일로 Redis 서비스와 redisinsight 서비스를 함께 동시에 컨테이너화하여 실행하도록 돕습니다.
1. redis
- image: Redis의 경량 이미지(redis:7.4.2-alpine)를 사용하였습니다. - container_name: simple-redis라는 이름의 컨테이너 이름을 지정하였습니다. - ports : 호스트의 6379 포트를 컨테이너의 6379 포트에 매핑하였습니다. - networks: 지정된 네트워크에 연결되어 다른 서비스와 통신할 수 있습니다. - volumes : Redis 데이터를 영구적으로 저장하기 위한 볼륨을 마운트 합니다
2. redisinsight - image : RedisInsight의 최신 이미지(redis/redisinsight:latest)를 사용하였습니다. - container_name: simple-redisinsight라는 이름의 컨테이너 이름을 지정하였습니다. - ports : 호스트의 8001 포트를 컨테이너의 8001 포트에 매핑하였습니다. - networks : Redis 서비스와 동일한 네트워크에 연결됩니다. - volumes : RedisInsight의 설정과 데이터를 영구적으로 저장하기 위한 볼륨을 마운트 합니다
3. network - driver : 브릿지 타입의 네트워크를 생성하여 두 서비스가 서로 통신할 수 있게 합니다.