WSL과 Redis 설정 문제 해결 및 JWT 인증 구현 과정

송현진·2025년 4월 6일
0

Spring Boot

목록 보기
8/23

✅ 목표

  • AccessToken + RefreshToken 인증 구조 완성
  • RefreshToken은 Redis에 저장
  • 로그아웃 시
    • Redis에서 RefreshToken 제거
    • AccessToken을 블랙리스트로 Redis에 등록하여 차단
  • Redis 키 값 확인을 위한 CLI 환경 설정

⚠️ 트러블슈팅

❗ 문제: WSL 실행 실패 (0x800705aa)

오류 메시지: 시스템 리소스가 부족...

🔍 원인: 메모리/디스크 부족 또는 WSL 리소스 과다 사용이었다.

🛠️ 해결

C:\Users\{User} 폴더에 .wslconfig 파일 생성했다.

  • .txt 파일로 생성해 내용 넣고 .txt를 다시 지우고 생성하면 된다.
[wsl2]
memory=2GB
processors=2

이후 wsl --shutdown 후 재실행했지만 또 다른 문제가 있었다.

❗문제: getpwuid(0) 오류 등 Ubuntu 부팅 실패

🔍 원인: Ubuntu 배포판이 파일 시스템이 제대로 설정되지 않거나, 설치 중 오류로 인해 손상된 경우였다.

🛠️ 해결

  • wsl --unregister Ubuntu 명령으로 초기화하고
  • wsl --install -d Ubuntu로 재설치했다.

Ubuntu 구성

  • 첫 실행 시 사용자 계정 생성 (username, password)
  • 기본 셸 환경 구성 완료

1. Redis 설치 (Ubuntu WSL 내부)

sudo apt update
sudo apt install redis

설치 시 약 7MB 내외의 용량만 사용되고 설치 완료 후, Redis 버전 7.x 자동 설치된다.

2. Redis 실행 및 확인

백그라운드 실행

sudo service redis-server start

작동 확인

redis-cli ping
# PONG 이 출력되면 성공

⚠️ redis-server 직접 실행 시 주의
bind: Address already in use 에러가 발생한 이유는 이미 백그라운드에서 Redis 서버가 실행 중이었기 때문이었다.
그래서 redis-cli ping로 서버가 잘 동작하고 있는 지 확인을 해주고 잘 작동중이어서 넘어갔다.

작업명령어
Redis 실행sudo service redis-server start
Redis 중지sudo service redis-server stop
Redis 상태 확인udo service redis-server status
Redis 클라이언트 접속redis-cli

3. 구현 과정 요약

application.ymlRedis 설정 추가

spring:
  data:
    redis:
      host: localhost
      port: 6379

RedisUtil 유틸 클래스 작성
set, get, delete, hasKey 등 유틸 메서드 구현

JWT 인증 구조 + Redis 연동

로그인 시 RefreshToken 생성 후 Redis 저장

String refreshToken = jwtProvider.createRefreshToken(user.getId());
redisUtil.set("RT:" + user.getId(), refreshToken, 14, TimeUnit.DAYS);

로그아웃 시

  • Redis에서 RT:{userId} 키 삭제
  • AccessTokenBL:{token} 형식으로 블랙리스트에 저장
redisUtil.delete("RT:" + userId);
redisUtil.set("BL:" + accessToken, "logout", expiration, TimeUnit.MILLISECONDS);

상세한 코드는 JWT, Redis, TokenService, UserService

❗ 문제: WSL redis-cli에서 keys * 조회 시 값이 없음

🔍 원인
RedisUtil 쪽에 set 메서드에서 값이 잘 들어오는 지 확인해보니 잘 들어와서 찾아보니 WSL에서 127.0.0.1WSL 내부 Redis를 가리키는 것이었다. 하지만 Spring Boot 앱은 Windows Redis를 사용하고 있었다. 그래서 서로 다른 Redis 인스턴스를 바라보고 있었기 때문에 조회할 수 없었던 것이었다.

🛠️ 해결
로컬에서 실행시키려면 Redis가 있어야되서 다운받아줬다.

설치 후 시스템 PATH 설정redis-cli 명령어 어디서든 사용 가능하도록 처리했다.

  • C:\Program Files\Redis\로 시스템 변수 PATH에 넣어주면 된다. (본인이 다운로드 받은 곳을 넣어줘야 함)

CMD에서 아래 명령으로 Redis 접속

redis-cli

확인

> keys RT:*
> keys BL:*

결과

127.0.0.1:6379> keys RT:*
1) "RT:6"
127.0.0.1:6379> keys BL:*
1) "BL:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."

✅ RefreshToken 저장, AccessToken 블랙리스트 등록 모두 성공했다.


🤔 회고

처음에는 WSL이 제대로 작동하지 않아 고생했지만, 시스템 자원 설정과 .wslconfig 파일을 통해 해결할 수 있었다. Redis는 예상보다 설치와 실행이 간단했고, 스프링 부트 프로젝트와의 연동도 쉽게 완료할 수 있었다.

다만, Redis 인스턴스가 다르다는 점을 놓친 부분에서 문제를 해결하는 데 시간이 조금 걸렸지만, 결국 Windows Redis 설치로 해결됐다.

이런 소소한 문제들이 있었지만 Redis와 Spring Boot를 연동해 Jwt 인증 + Redis 구조를 구현할 수 있었던 좋은 경험이었다.

profile
개발자가 되고 싶은 취준생

0개의 댓글