Redis에서 DTO 업데이트는 전체 덮어쓰기? 필드 단위 수정?

김준호·2025년 3월 29일

Redis

목록 보기
1/1

Redis에서 DTO 업데이트는 전체 덮어쓰기? 필드 단위 수정?

Redis를 캐시로 사용할 때 가장 많이 하는 고민 중 하나는 다음과 같습니다.

"데이터를 수정해야 할 때, DTO 전체를 Redis에 다시 저장해야 할까? 아니면 변경된 필드만 수정할 수 있을까?"


✅ Redis는 데이터를 어떻게 저장할까?

Redis는 다양한 자료형을 지원합니다. DTO(Data Transfer Object)를 캐시할 때는 주로 두 가지 방식 중 하나를 사용합니다.


1. String 타입에 직렬화된 JSON 형태로 저장

redisTemplate.opsForValue().set("post:123", dto); // JSON 직렬화된 전체 DTO

이 방식은 Redis에 전체 객체를 문자열로 저장하는 방식입니다.
즉, 필드 하나만 바뀌었더라도 Redis에는 전체 값을 덮어써야 합니다.

🔁 업데이트 예시

dto.setTitle("수정된 제목");
redisTemplate.opsForValue().set("post:123", dto); // 전체 덮어쓰기
  • ✅ 장점: 사용이 간단하고 빠르게 구현 가능
  • ⚠️ 단점: 필드 하나 변경해도 전체 교체 → 네트워크 비용, (de)serialization 비용 증가

2. Hash 타입으로 필드 단위 저장

redisTemplate.opsForHash().put("post:123", "title", "제목");
redisTemplate.opsForHash().put("post:123", "content", "내용");

이 방식은 DTO의 각 필드를 Redis의 Hash 구조에 key-value로 저장합니다.
필드 단위로 접근하거나 수정할 수 있어 필드 하나만 바꿔도 해당 필드만 업데이트하면 됩니다.

🔁 업데이트 예시

redisTemplate.opsForHash().put("post:123", "title", "수정된 제목");
  • ✅ 장점: 필드 단위 업데이트 가능 → 성능 효율적
  • ⚠️ 단점: 구조 설계 복잡, 객체로 역직렬화 필요

⚖️ 어떤 방식이 더 효율적일까?

구분String(JSON 직렬화)Hash(필드 단위 저장)
장점구현 간단, 통째로 직렬화필드 단위로 업데이트 가능
단점전체 덮어쓰기만 가능구조 설계 복잡, 역직렬화 필요
적합한 상황변경이 적은 데이터필드 일부가 자주 변경될 때

🧠 팁: 상황에 따라 선택하자!

✅ 변경이 거의 없는 캐시 (예: 게시글 본문, 작성자 정보)

  • String 방식으로 간단하게 처리
  • Redis는 메모리 기반이라 전체 교체도 빠름

✅ 자주 바뀌는 필드 (예: 좋아요 수, 댓글 수)

  • Hash 방식 사용
  • 필드만 업데이트해서 네트워크 비용 최소화

🔚 마무리

Redis는 빠르지만, 데이터 업데이트 전략은 매우 중요합니다.
특히 DTO 캐싱에서 전체 덮어쓰기와 필드 단위 수정은 성능과 코드 복잡도에 큰 영향을 미칩니다.

🚀 변경이 적다면 String으로,
🔁 자주 바뀌면 Hash로 관리하자!


profile
공부한 내용 정리하고 복습하는 블로그

0개의 댓글