2026/03/17 9

#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 안쪽..

[정글 알고리즘] - [중] -백준 1629번 실버 I - 분할정복(Divide & Conquer) - 곱셈

A를 B번 곱한 뒤 C로 나눈 나머지를 구하는 문제입니다.B가 최대 2,147,483,647이므로 단순 반복 곱셈은 불가 → 분할정복으로 거듭제곱을 O(log B)에 계산합니다.핵심: B가 짝수면 절반 제곱을 두 번 곱하고, 홀수면 A를 한 번 더 곱합니다.📋 문제 정보항목내용문제 번호백준 1629번난이도🟡 실버 I알고리즘분할정복, 빠른 거듭제곱(Fast Exponentiation)입력A B C (한 줄, 공백 구분)A, B, C ≤ 2,147,483,647 (약 2.1×10⁹)출력A^B mod C❌ 왜 단순 반복은 안 되는가?단순 반복분할정복result = 1 for _ in range(b): # B번 반복 result *= a result %= cO(B) = O(2.1×10⁹) → TLEdef s..

[정글 알고리즘] - [하] -백준 1920번 실버 IV - 이분탐색(Binary Search) - 수 찾기

정렬된 배열에서 특정 수의 존재 여부를 이분탐색(Binary Search)으로 O(log N)에 찾는 문제입니다.핵심: left > right가 되면 탐색 실패(0 반환), 중간값과 비교해 범위를 절반씩 줄입니다.📋 문제 정보항목내용문제 번호백준 1920번난이도🟢 실버 IV알고리즘이분탐색, 정렬입력1행: N (1 ≤ N ≤ 100,000)2행: N개 정수3행: M (1 ≤ M ≤ 100,000)4행: 찾을 M개 정수출력M줄: 존재하면 1, 없으면 0정수 범위-2³¹ 이상 2³¹ 미만 (음수 포함)💡 핵심 아이디어정렬된 배열에서 탐색 범위를 매번 절반으로 줄입니다.단계조건동작①left > right탐색 실패 → 0 반환②j == num_list[mid]탐색 성공 → 1 반환③j > num_list[m..

[정글 알고리즘] - [하] - 백준 1406번 실버 II 연결 리스트(Linked List) - 에디터

커서가 있는 텍스트 에디터를 구현하는 문제입니다.단방향 연결 리스트로는 왼쪽 이동이 O(N)이라 시간 초과 → 이중 연결 리스트로 O(1) 구현합니다.핵심: 더미 head·tail 노드로 경계를 단순화합니다.📋 문제 정보항목내용문제 번호백준 1406번난이도🟢 실버 II알고리즘이중 연결 리스트, 자료구조 설계입력첫 줄: 초기 문자열 (최대 100,000자)둘째 줄: 명령어 수 M (1 ≤ M ≤ 500,000)이후 M줄: L / D / B / P $ 명령출력모든 명령 수행 후 편집기에 남은 문자열커서 초기 위치문자열 맨 뒤⌨️ 4가지 명령어명령설명예시예외 (무시)L커서를 왼쪽으로 한 칸abc| → ab|c커서가 맨 앞이면 무시D커서를 오른쪽으로 한 칸ab|c → abc|커서가 맨 뒤이면 무시B커서 왼쪽..

[정글 알고리즘] - [하] - 백준 2630번=분할정복(Divide & Conquer) - 색종이 만들기

분할정복 + 재귀의 대표 입문 문제입니다.정사각형 종이를 검사하여 단일 색이면 카운트, 섞여 있으면 4등분하여 재귀 호출하는 구조입니다.핵심: solve(x, y, size) 함수 하나로 전체 로직을 표현합니다.📋 문제 정보항목내용문제 번호백준 2630번난이도🟢 실버 II알고리즘분할정복, 재귀입력첫 줄: N (N = 2^k, 1 ≤ k ≤ 7, 최대 128)이후 N줄: 각 행의 색 정보 (0=흰색, 1=파란색)출력첫 줄: 흰색(0) 색종이 개수둘째 줄: 파란색(1) 색종이 개수크기 제한N ∈ {2, 4, 8, 16, 32, 64, 128} → 항상 2의 거듭제곱💡 핵심 아이디어: 분할정복 3단계단계상황동작1️⃣영역이 전부 0 (흰색)흰색 종이 카운트 +1, 재귀 종료2️⃣영역이 전부 1 (파란색)파..