전체 글 251

#9 💾 퍼시스턴스: RDB·AOF·복구 체크

"Redis는 메모리 DB니까 꺼지면 다 날아가지 않나요?" — 아닙니다! RDB와 AOF로 데이터를 안전하게 보관하는 방법을 알아봅니다.❓ "Redis 꺼지면 데이터 다 사라지나요?""Redis는 메모리에 데이터를 올려놓는 DB잖아요. 서버가 꺼지거나 재시작되면 데이터가 다 날아가는 거 아닌가요?" 이 질문은 Redis를 처음 배우는 분들이 가장 많이 하는 질문 중 하나입니다.반은 맞고 반은 틀립니다. 기본 설정에서는 데이터가 유실될 수 있습니다. 하지만 Redis는 디스크 퍼시스턴스 기능을 제공하며, 올바르게 설정하면 재시작 후에도 데이터를 복구할 수 있습니다.Redis의 퍼시스턴스 방식은 크게 두 가지입니다. RDB(Redis Database)는 특정 시점의 메모리 스냅샷을 디스크에 저장합니다. A..

개발/REDIS 2026.03.19

#8 ⚔️ 동시성 제어: 트랜잭션(MULTI/EXEC)·WATCH

재고 5개인데 동시 주문 10개가 들어왔다면? Redis 트랜잭션과 WATCH로 경쟁 상태(Race Condition)를 안전하게 처리하는 법을 배웁니다.🛒 경쟁 상태: 재고가 마이너스가 됐어요!온라인 쇼핑몰에서 마지막 남은 티켓 1장에 두 명이 동시에 "구매" 버튼을 눌렀습니다. 두 요청이 거의 동시에 처리되면 어떻게 될까요? 첫 번째 요청이 재고를 읽고(1개), 두 번째 요청도 재고를 읽고(여전히 1개), 첫 번째가 1을 빼고(0개), 두 번째도 1을 빼면 재고가 -1이 됩니다.이것이 경쟁 상태(Race Condition)입니다. 두 요청이 서로의 존재를 모르고 같은 데이터를 동시에 수정하면서 데이터 무결성이 깨지는 상황이죠. 일반적인 데이터베이스에서는 트랜잭션과 잠금(Lock)으로 이를 해결합니다..

개발/REDIS 2026.03.19

#7 📡 Pub/Sub vs Streams: 실시간 메시징

채팅, 실시간 알림, 이벤트 처리... Redis에는 두 가지 메시징 방식이 있습니다. 언제 Pub/Sub을 쓰고, 언제 Streams를 써야 할까요?🔔 실시간 알림, 어떻게 구현하나요?사용자가 댓글을 달면 원글 작성자에게 즉시 알림을 보내고 싶습니다. 주문이 들어오면 주방 화면에 즉시 표시되어야 합니다. 이런 "실시간 전달"이 필요한 순간, Redis는 두 가지 선택지를 제공합니다.첫 번째는 Pub/Sub(발행/구독)입니다. 이름 그대로 누군가 메시지를 발행(Publish)하면 구독(Subscribe) 중인 모든 수신자에게 즉시 전달됩니다. 마치 라디오 방송처럼, 방송 중에 채널을 켠 사람만 들을 수 있습니다.두 번째는 Streams입니다. Streams는 메시지를 로그처럼 디스크에 기록합니다. 나중..

개발/REDIS 2026.03.19

#6🏆 Sorted Sets: 랭킹/리더보드

실시간 게임 랭킹, 인기 게시물 순위, 주간 판매량 TOP10... Redis Sorted Set 하나면 O(log N)으로 즉시 구현됩니다.🎮 실시간 랭킹, 어떻게 만드나요?모바일 게임에서 "주간 랭킹" 기능을 만든다고 생각해 봅시다. 수십만 명의 점수를 매번 DB에서 ORDER BY로 정렬해서 가져오면 어떻게 될까요? 랭킹 화면을 열 때마다 전체 테이블을 스캔해야 하고, 동시 접속자가 많아지면 DB가 과부하에 걸립니다.Redis의 Sorted Set(정렬된 집합)은 이 문제를 원천적으로 해결합니다. 데이터를 넣는 순간부터 자동으로 정렬되어 있고, 순위 조회는 O(log N)으로 매우 빠릅니다. 100만 명의 랭킹도 밀리초 수준에서 조회할 수 있죠.Sorted Set은 각 멤버에 점수(score)를 ..

개발/REDIS 2026.03.19

#5 📬 Lists·Sets: 큐와 중복 방지

이메일 발송, 알림 처리 같은 비동기 작업을 어떻게 안전하게 처리할까요? List와 Set으로 큐와 중복 방지를 구현해 봅니다.🤔 비동기 작업, 어떻게 처리하나요?사용자가 회원가입을 하면 환영 이메일을 보내야 합니다. 그런데 이메일을 보내는 작업은 느립니다. 외부 메일 서버에 요청을 보내고, 응답을 기다리고, 실패하면 재시도해야 하죠. 만약 이 작업을 사용자가 회원가입 버튼을 누르는 순간에 동기적으로 처리한다면 어떻게 될까요?사용자는 가입 완료 화면이 뜨기까지 수 초를 기다려야 합니다. 메일 서버가 잠깐 다운된다면 회원가입 자체가 실패할 수도 있습니다. 이런 상황을 막기 위해 "작업을 등록만 하고, 처리는 나중에"라는 비동기 큐 패턴을 사용합니다.Redis의 List는 바로 이 큐 역할을 아주 쉽게 구..

개발/REDIS 2026.03.19

#4 List와 Queue 활용하기: 비동기 작업 큐 만들기

🔥 들어가며 — "회원가입 축하 이메일이 5분 뒤에 도착했어요"회원가입 버튼을 눌렀는데 화면이 멈추고, 잠시 후 "가입 완료 + 환영 이메일 발송됨"이라는 메시지가 뜹니다. 이 경험, 답답하지 않으신가요? 이메일 발송에 2~3초가 걸린다면, 사용자는 그 시간 내내 버튼을 누른 채 기다려야 합니다.더 나쁜 경우도 있습니다. 이메일 서버가 일시적으로 다운됐을 때 가입 자체가 실패하는 상황입니다. 이메일 발송은 가입의 핵심이 아닌데도 말이죠. 이런 문제를 해결하는 패턴이 비동기 작업 큐(Async Job Queue)입니다.방식은 간단합니다. "이메일 발송"이라는 작업을 큐(Queue)에 넣어두고, 가입 API는 즉시 응답합니다. 별도로 돌고 있는 워커(Worker)가 큐에서 작업을 꺼내 이메일을 보내죠. 사..

개발/REDIS 2026.03.17

#3 Strings: 카운터·간단 캐시 만들기

🔥 들어가며 — 조회수 1,000만 번도 Redis면 끄떡없다유튜브 영상 조회수, 인스타그램 좋아요 수, 웹사이트 방문자 카운터. 이런 숫자들은 매 초마다 수천 번씩 증가합니다. 이걸 매번 MySQL 같은 DB에 UPDATE SET count = count + 1로 처리하면 어떻게 될까요?DB는 해당 행에 잠금(Lock)을 걸고, 읽고, 더하고, 쓰고, 잠금을 풀어야 합니다. 동시에 1,000명이 좋아요를 누르면 1,000개의 잠금 요청이 줄을 서게 되죠. 결과는 DB 과부하, 응답 지연, 최악의 경우 서비스 장애입니다.Redis의 String 타입과 INCR 명령어는 이 문제를 우아하게 해결합니다. Redis는 싱글 스레드로 명령을 처리하기 때문에, INCR은 잠금 없이도 원자적(Atomic)으로 안..

개발/REDIS 2026.03.17

#2 키·TTL·만료: 캐시의 핵심 규칙

🔥 들어가며 — TTL 없는 캐시는 시한폭탄이다지난 편에서 Redis를 설치하고 첫 PING → PONG을 확인했습니다. 이제 Redis를 "그냥 빠른 저장소"로 쓰기 전에, 반드시 알아야 할 규칙이 있습니다.TTL(Time To Live, 데이터 유효 시간)을 설정하지 않은 캐시는 메모리가 조용히 차오르다가 어느 날 갑자기 서버가 멈추는 원인이 됩니다. 실제로 "Redis가 이유 없이 느려졌다"는 장애 신고의 상당수는 TTL 없이 쌓인 키들이 메모리를 다 써버린 경우입니다.오늘은 딱 세 가지를 배웁니다. 키 이름을 어떻게 짓는지, TTL을 어떻게 설정하고 확인하는지, 그리고 "만료됐다 = 즉시 삭제된다"는 흔한 오해를 바로잡는 것입니다.또 한 가지 — 지난 편에서 KEYS *를 잠깐 썼는데, 이 명령..

개발/REDIS 2026.03.17

#1 Redis 시작하기: 설치·실행·첫 명령(PING)

🔥 들어가며 — "DB가 느려서 화면이 안 뜬다고요?"쇼핑몰 이벤트 페이지를 클릭했는데 로딩 스피너가 3초, 5초 넘게 돌고 있다면 — 개발자 입장에서는 가슴이 내려앉는 순간입니다. 이 지연의 가장 흔한 주범은 데이터베이스(DB)입니다. 요청이 올 때마다 수백만 건 데이터를 디스크에서 긁어 오니 어쩔 수 없이 느립니다.이럴 때 가장 자주 등장하는 해결사가 바로 Redis입니다. "자주 요청되지만 거의 안 바뀌는 데이터는 빠른 곳에 미리 꺼내놓자" — 이게 캐시(Cache)이고, Redis는 이 역할을 아주 잘합니다. 캐시 외에도 로그인 세션 저장, 실시간 알림 큐, 랭킹 처리 등 현대 웹 서비스 곳곳에 Redis가 쓰이고 있습니다.한 줄 정의를 드리면: Redis는 메모리(RAM) 위에서 데이터를 저장..

개발/REDIS 2026.03.17

[정글 알고리즘] - [상] -백준 10000번 스택_원_영역

📋 문제 소개항목내용📌 문제 번호백준 10000번🏷️ 난이도플래 4📂 분류스택, 정렬, 좌표 변환📥 입력첫 줄 N (1 ≤ N ≤ 100,000), 이후 N개 줄에 원의 중심 x와 반지름 r📤 출력원들이 만드는 영역의 수⏱️ 시간 제한3초💬 문제 핵심: x축 위 반원 형태로 놓인 N개의 원이 서로 교차하지 않을 때, 이 원들이 평면을 나누는 영역의 개수를 구하세요.시작 영역(외부)은 1개이며, 각 원이 등장하면서 새로운 영역을 추가로 만듭니다.🖼️ 예제 시각화원의 위치 관계에 따라 영역이 어떻게 나뉘는지 색깔로 확인해 보세요.예제 1 — N=2, 원 2개가 완전히 분리된 경우 답: 3📥 Input20 37 2📤 Output3영역색상설명① 외부흰색두 원 바깥 전체② A 내부파랑원 A 안쪽..