Redis 사용하기

ParkIsComing·2023년 2월 8일
0

DB

목록 보기
2/3
post-thumbnail

몇주전 서버에 올려두었던 redis가 해킹 당해서 채굴에 이용되고 있던 것을 알게되었다. 금방 알게 되어 빨리 조치할 수 있었지만 꽤나 오싹했던 경험이었기 때문에 재발을 막고자 환경설정 과정을 공유한다.

~환경~

  • GCP를 이용한 스프링 백엔드 서버 배포
  • redis는 refresh token 저장 용도로 사용

1. apt-get 업그레이드

sudo apt-get update
sudo apt-get upgrade

2. redis-server 설치

sudo apt-get install redis-server

3. cli 환경 접속

redis-cli

4. 테스트 해보기

set, get를 이용해 저장, 조회가 가능한 간단한 구조다.

set [key] [value] # 저장
get [key]         # 조회
get keys *        # 전체 키 조회

테스트용으로 값 저장해두고 그냥 나가버리면 날아간다.
그걸 처음에 몰라서 자꾸 데이터가 날아가는 줄 알고 헤맸다..

# 변경 사항 저장하고 서버 stop
shutdown save
# 변경 사항 저장 없이 서버 stop
shutdown nosave

5. 세부 환경 설정

여기서 암호를 꼭 설정하자. 안 하면 해킹 당해서 채굴용으로 쓰일지도 모른다..

redis.conf로 먼저 들어간다.

sudo vi /etc/redis/redis.conf

다음을 설정할 것이다.

  1. redis 비밀번호
  2. redis 서버에 접속할 수 있는 ip
  3. redis가 사용할 수 있는 최대 메모리
  4. 메모리가 가득찬 경우 데이터 교체 우선순위를 결정하는 알고리즘

1) redis 비밀번호 설정하기

검색 기능을 사용해서 해당 부분을 찾자.

# requirepass foobared

주석을 해제하고 foobared를 원하는 비밀번호로 바꿔 적어주면 된다.

2) redis 서버에 접속할 수 있는 ip 설정하기

검색을 이용해 해당 부분을 찾자.

# bind 127.0.0.1 ::1 

주석을 해제하고 bind 뒷부분을 자신이 원하는 ip 주소로 바꿔주면 된다.

다음처럼 여러개의 ip에 대해서 열어줄 수도 있다.

bind 127.0.9.1 ::1
bind 0.0.0.0 

3) redis가 사용할 수 있는 최대 메모리 설정하기

검색을 이용해 해당 부분을 찾자.

# maxmemory <bytes>

주석을 해제하고 <bytes> 부분에 maxmemory에 1gb, 500kb와 같이 원하는 최대 메모리 크기를 적어준다.

4) 메모리가 가득찬 경우 데이터 교체 우선순위를 결정하는 알고리즘

검색을 이용해 해당 부분을 찾자.

# maxmemory-policy noeviction

noeviction 부분을 자신이 원하는 알고리즘명으로 바꾸면 되는데, 적용가능한 알고리즘은 다음과 같다.

출처 : https://redis.io/docs/reference/eviction/

설정이 끝났다! :wq로 저장하고 나가면 된다.

5. redis 백그라운드 설정

redis는 인메모리 데이터베이스이다. 따라서 백그라운드에서도 실행중이도록 systemctl 명령어를 사용해줘야 한다.

sudo systemctl start redis-server       #실행
sudo systemctl restart redis-server     #재실행

6. 기타 외부 환경 설정

1) 인스턴스 방화벽 설정

redis는 디폴트로 6379번 포트를 사용한다. 자신이 사용하는 인스턴스에 대해서 설정해주도록 하자.
GCP의 경우 VPC 네트워크 > 방화벽에서 설정해주면 된다!

2) Spring application.yml 설정

필자는 스프링에서 redis를 사용하고 있기 때문에 application.yml에도 설정을 추가해주었다.

spring:
    redis:
        port: 6379
        host: [서버 고정ip]
        password : [비밀번호]

비밀번호가 노출되지 않도록 .gitignore에 잘 추가해두자.

0개의 댓글