🔍 검색 키워드: Redis WRONGTYPE 에러, Redis 데이터 타입 오류, Redis 자료구조, Redis 디버깅
Redis WRONGTYPE 에러 완벽 해결 가이드
증상: WRONGTYPE Operation against a key holding the wrong kind of value
Redis 명령어를 실행했는데 갑자기 이런 에러가 뜨나요?
(error) WRONGTYPE Operation against a key holding the wrong kind of value
이것이 WRONGTYPE 에러입니다. 이미 다른 자료구조로 저장된 키에 맞지 않는 명령어를 사용할 때 발생합니다.
원인 분석
원인 1: 키에 저장된 자료구조와 명령어 불일치
예를 들어 String로 저장된 키에 List 명령어(LPUSH)를 사용하면 에러가 납니다.
SET user:1:name "John"
LPUSH user:1:name "extra"
결과: WRONGTYPE 에러 (String 키에 List 명령어 사용)
원인 2: 키 이름 재사용으로 인한 타입 충돌
여러 개발자가 같은 키 네이밍 규칙 없이 사용하다 보면 흔히 발생합니다.
원인 3: 캐시 데이터 구조 변경 후 기존 키 미정리
애플리케이션 로직이 바뀌어 자료구조를 변경했는데 기존 키가 남아있는 경우
해결 방법
방법 1: TYPE 명령어로 현재 키의 타입 확인
TYPE user:1:name
결과: string 또는 list, hash, set, zset 중 하나 반환
먼저 문제가 되는 키의 실제 타입을 확인하는 것이 첫 걸음입니다.
방법 2: 올바른 명령어로 재시도
확인된 타입에 맞는 명령어를 사용합니다.
- String이면: GET, SET, INCR
- List면: LPUSH, RPUSH, LRANGE
- Hash면: HSET, HGET, HGETALL
- Set이면: SADD, SMEMBERS
- Sorted Set이면: ZADD, ZRANGE
방법 3: 키를 삭제하고 재생성
기존 키의 데이터가 더 이상 필요 없다면 DEL로 삭제 후 새로 생성합니다.
DEL user:1:name
LPUSH user:1:name "value1" "value2"
주의: 프로덕션 환경에서는 DEL 실행 전 반드시 데이터 백업 여부를 확인해야 합니다.
방법 4: 키 네이밍 컨벤션 도입으로 예방
프로젝트 차원에서 키 이름에 자료구조를 명시하는 규칙을 도입하면 재발을 막을 수 있습니다.
예시:
- str:user:1:name (String)
- list:user:1:orders (List)
- hash:user:1:profile (Hash)
- set:user:1:tags (Set)
방법 5: 애플리케이션 코드에서 사전 타입 체크
Redis 클라이언트 라이브러리에서 명령어 실행 전 TYPE 체크 로직을 추가하면 에러를 사전에 방지할 수 있습니다. 특히 배치 작업이나 마이그레이션 스크립트에서 유용합니다.
정리
- WRONGTYPE은 키의 실제 자료구조와 명령어가 맞지 않을 때 발생
- TYPE 명령어로 먼저 확인하는 것이 가장 빠른 진단법
- 키 네이밍 컨벤션으로 예방하는 것이 근본적인 해결책
- 프로덕션에서 DEL 사용 시 반드시 백업 확인
Redis는 스키마리스 데이터베이스이기 때문에, 팀 차원의 키 관리 규칙이 없으면 이런 문제가 반복될 수 있습니다.