들어가며
Redis를 처음 접하면 많은 분들이 이렇게 생각하시죠.
"그냥 데이터 넣고 빼면 되는 거 아냐? 키 이름이 뭐가 중요해?"
하지만 실제 프로덕션 환경에서는 조금 다릅니다. 수천, 수만 개의 키가 쌓이기 시작하면... 😱
잘 설계된 키 네이밍은 여러분의 구원자가 될 수 있습니다!
이런 경험 있으신가요? 🤔
# 어느 날 갑자기 마주친 Redis 키들
u1
temp_data_15
x_55_info
mysterious_key_123
이런 키들이 수백 개라면? 디버깅할 때 눈물이 앞을 가릴 겁니다...
자, 이제 제대로 된 키 네이밍 전략을 알아볼까요?
Redis Key 설계의 황금률 ⭐️
1. 계층 구조를 활용하세요
// 기본 패턴
`object-type:id:field`
// 예시
`user:1001:profile`
`product:5001:details`
2. 데이터의 성격을 명확히 하세요
// 임시 데이터
`temp:verification:user:1001` // 24시간 후 삭제될 인증 코드
// 영구 데이터
`user:1001:profile` // 사용자 프로필 정보
3. 검색이 용이하게 만드세요
// 특정 서비스의 모든 키를 찾기 쉽게
`service:shopping:*` // SCAN 명령어로 쉽게 찾을 수 있음
실전 활용 예시 (현직 개발자의 노하우) 💡
1. 전자상거래 시스템
// 상품 정보 관리
const productKeys = {
details: (id: string) => `product:${id}:info`, // 상품 기본 정보
stock: (id: string) => `product:${id}:stock`, // 재고 정보
price: (id: string) => `product:${id}:price`, // 가격 이력
}
// 장바구니 관리
const cartKeys = {
items: (userId: string) => `cart:user:${userId}:items`, // 장바구니 아이템
total: (userId: string) => `cart:user:${userId}:total`, // 총 금액
}
2. 실시간 분석 시스템
// 일별 통계 데이터
const statsKeys = {
daily: (date: string, metric: string) => `stats:daily:${date}:${metric}`,
hourly: (date: string, hour: string, metric: string) =>
`stats:hourly:${date}:${hour}:${metric}`
}
// 실시간 카운터
const counterKeys = {
likes: (postId: string) => `counter:likes:post:${postId}`,
views: (videoId: string) => `counter:views:video:${videoId}`
}
실제 구현 예시 (현업에서 바로 쓰는 코드) 🔥
class RedisKeyManager {
private readonly prefix: string;
constructor(service: string) {
this.prefix = `service:${service}`; // 서비스별 구분을 위한 prefix
}
// 사용자 관련 키
user = {
profile: (userId: string) =>
`${this.prefix}:user:${userId}:profile`,
sessions: (userId: string) =>
`${this.prefix}:user:${userId}:sessions`,
cart: (userId: string) =>
`${this.prefix}:user:${userId}:cart`
}
// 상품 관련 키
product = {
info: (productId: string) =>
`${this.prefix}:product:${productId}:info`,
stock: (productId: string) =>
`${this.prefix}:product:${productId}:stock`
}
// 통계 관련 키
stats = {
daily: (metric: string, date: string) =>
`${this.prefix}:stats:daily:${date}:${metric}`,
realtime: (metric: string) =>
`${this.prefix}:stats:realtime:${metric}`
}
}
// 사용 예시
const shopKeys = new RedisKeyManager('shop');
// 사용자 프로필 키
console.log(shopKeys.user.profile('1001'));
// => "service:shop:user:1001:profile"
// 상품 재고 키
console.log(shopKeys.product.stock('5001'));
// => "service:shop:product:5001:stock"
실전 꿀팁 🍯
서비스 규모별 전략
- 소규모: 단순한 키 구조로 시작
- 중규모: 계층화된 키 구조 도입
- 대규모: 서비스별 prefix 추가
성능 고려사항
- 너무 긴 키 이름은 메모리 낭비
- 너무 짧으면 의미 파악 어려움
- 적절한 길이: 20-40자 내외
협업 시 주의사항
- 팀 내 네이밍 컨벤션 문서화
- 주석으로 키 사용 목적 명시
- 정기적인 키 패턴 리뷰
마치며 ✨
Redis 키 네이밍은 작은 차이가 큰 결과를 만듭니다.
지금 당장은 번거롭게 느껴질 수 있지만, 이런 체계적인 접근이 여러분의 프로젝트를 한 단계 더 성장시킬 것입니다.
"좋은 설계는 한번의 수고로움, 나쁜 설계는 영원한 고통" - 개발자 명언
도움이 되셨다면 좋아요와 공유 부탁드립니다! 💕
궁금한 점은 댓글로 남겨주세요.
'개발 > devOps' 카테고리의 다른 글
AWS Lambda에서 axios 사용하기: 삽질 기록과 해결 방법 (0) | 2024.12.20 |
---|---|
AWS API Gateway와 Lambda 연동하기: Cognito로 보안까지 챙기자!🚀 (1편 Lambda 세팅) (0) | 2024.12.18 |
[AWS] RDS 다른 계정으로 이전 (0) | 2023.05.23 |
[AWS] EC2 HTTPS적용 (Load Balancer, Target Group) (0) | 2023.05.18 |
[AWS] CloudFront 배포 완전정복!!! (0) | 2023.05.16 |
댓글