반응형

전체 글 295

9편. Redis Pub/Sub 실습: 실시간 메시지 전달

9편. Redis Pub/Sub 실습: 실시간 메시지 전달 📚 목차1. 실시간 알림 발행하기2. 캐시 무효화 메시지 발행하기3. 채팅 메시지 브로드캐스트하기4. 관리자 공지 발행하기 1. 실시간 알림 발행하기실시간 알림은 Pub/Sub을 설명하기 가장 좋은 예제입니다.예를 들어 다음 상황을 생각해 볼 수 있습니다.- 게시글에 좋아요가 눌림- 댓글이 작성됨- 주문 상태가 변경됨- 관리자 메시지가 도착함이런 이벤트는 DB에 저장할 수도 있지만, 현재 접속 중인 사용자에게 즉시 알려야 할 때는 Pub/Sub이 유용합니다.전체 흐름은 다음과 같습니다.NotificationService ↓Redis PUBLISH channel:notification ↓Notification Subscriber ↓We..

8편. Redis Stream 실습: 이벤트 로그와 비동기 작업 큐

8편. Redis Stream 실습: 이벤트 로그와 비동기 작업 큐 📚 목차1. 주문 이벤트 저장하기2. 알림 이벤트 큐 만들기3. 이메일 작업 큐 구현하기4. 감사 로그 저장하기 Redis Stream은 Redis에서 이벤트 로그와 비동기 작업 큐를 구현할 때 사용할 수 있는 자료구조입니다.List와 Pub/Sub도 메시지 처리에 사용할 수 있지만, Stream은 두 자료구조와 성격이 다릅니다. 📂 [GitHub 코드 보러가기] : https://github.com/cericube/nodejs-practice-lab/tree/main/redis-examples 1. 주문 이벤트 저장하기주문 서비스에서는 주문 생성, 결제 완료, 배송 시작, 주문 취소 같은 이벤트가 계속 발생합니다.예를 들어 주문 ..

7편. Redis Sorted Set 실습: 랭킹과 우선순위 처리

7편. Redis Sorted Set 실습: 랭킹과 우선순위 처리 📚 목차1. 인기 게시글 랭킹 만들기2. 인기 검색어 순위 만들기3. 사용자 포인트 랭킹 만들기4. 우선순위 큐 구현하기 📂 [GitHub 코드 보러가기] : https://github.com/cericube/nodejs-practice-lab/tree/main/redis-examples 1. 인기 게시글 랭킹 만들기게시글 서비스에서는 인기 게시글 기능이 자주 필요합니다.예를 들어 다음 기준으로 인기글을 만들 수 있습니다.- 조회수- 좋아요 수- 댓글 수- 공유 수- 가중치를 합산한 인기 점수Sorted Set에서는 다음처럼 저장합니다.key → zset:post-rankingmember → postIdscore → 인기 점..

6편. Redis Set 실습: 중복 제거와 상태 관리

6편. Redis Set 실습: 중복 제거와 상태 관리 📚 목차1. 게시글 좋아요 사용자 목록 관리하기2. 일일 방문자 중복 제거하기3. 온라인 사용자 관리하기4. 중복 요청 방지 처리하기5. 실습에서 사용한 Redis Set 명령어 정리 📂 [GitHub 코드 보러가기] : https://github.com/cericube/nodejs-practice-lab/tree/main/redis-examples 1. 게시글 좋아요 사용자 목록 관리하기게시글 좋아요는 Redis Set을 설명하기 가장 좋은 예제입니다.좋아요 기능에는 다음 요구사항이 있습니다.1. 한 사용자는 같은 게시글에 좋아요를 한 번만 누를 수 있다.2. 좋아요 취소가 가능해야 한다.3. 특정 사용자가 좋아요를 눌렀는지 확인할 수 있어야..

5편. Redis List 실습: 최근 기록과 간단한 버퍼 처리

5편. Redis List 실습: 최근 기록과 간단한 버퍼 처리 📚 목차1. 최근 본 게시글 목록 만들기2. 최근 검색어 저장하기3. 간단한 작업 큐 구현하기4. 로그 버퍼 만들기 Redis List는 순서가 있는 문자열 목록을 저장하는 자료구조입니다.List는 왼쪽과 오른쪽 양쪽에서 데이터를 넣고 뺄 수 있습니다.왼쪽 오른쪽LPUSH RPUSHLPOP RPOP- 최근 본 게시글- 최근 검색어- 간단한 작업 큐- 최근 로그 버퍼 📂 [GitHub 코드 보러가기] : https://github.com/cericube/nodejs-practice-lab/tree/main/redis-examples1. 최근 본 게시글 목록 만들기최근..

4편. Redis Hash 실습: 프로필, 세션, 재고, 사용자 설정

4편. Redis Hash 실습: 프로필, 세션, 재고, 사용자 설정 📚 목차1. 사용자 프로필 캐시 저장하기2. 로그인 세션 저장하기3. 상품 재고 상태 캐싱하기4. 사용자 설정 정보 관리하기 📂 [GitHub 코드 보러가기] : https://github.com/cericube/nodejs-practice-lab/tree/main/redis-examples Redis Hash는 하나의 Redis key 안에 여러 개의 field-value를 저장하는 자료구조입니다.String이 하나의 key에 하나의 문자열 값을 저장한다면, Hash는 하나의 key 안에 객체처럼 여러 필드를 저장할 수 있습니다.String 예시cache:user:1→ '{"id":1,"email":"kim@example.com..

3편. Redis String 실습: 캐시, 인증 코드, 카운터, Rate Limiting

3편. Redis String 실습: 캐시, 인증 코드, 카운터, Rate Limiting 📚 목차1. 사용자 조회 결과 캐싱하기2. 이메일 인증 코드 저장하기3. 게시글 조회수 카운터 구현하기4. Rate Limiting 구현하기 📂 [GitHub 코드 보러가기] : https://github.com/cericube/nodejs-practice-lab/tree/main/redis-examples 1. 사용자 조회 결과 캐싱하기사용자 정보는 서비스에서 자주 조회되는 데이터입니다.예를 들어 다음과 같은 API에서는 사용자 정보를 반복적으로 조회할 수 있습니다.- 마이페이지 조회- 게시글 작성자 정보 조회- 댓글 작성자 정보 조회- 로그인 사용자 기본 정보 조회이때 매번 DB를 조회하면 불필요한 DB ..

2편. Redis 실습 프로젝트 구성하기: Prisma, SQLite, Redis, Vitest

2편. Redis 실습 프로젝트 구성하기: Prisma, SQLite, Redis, Vitest 📚 목차1. Redis 실습 프로젝트 목표와 전체 구조 설계하기2. Prisma 7과 SQLite로 스키마 구성하기3. Redis 연결 코드와 공통 라이브러리 구성하기4. Vitest 기반 테스트 환경 구성하기 📂 [GitHub 코드 보러가기] : https://github.com/cericube/nodejs-practice-lab/tree/main/redis-examples 1. Redis 실습 프로젝트 목표와 전체 구조 설계하기Redis의 여러 자료구조를 단순 명령어 수준에서만 확인하지 않고, 실제 백엔드 서비스 코드에서 어떻게 활용할 수 있는지 확인해 보겠습니다.String → 사용자 조..

1편. Redis 설치 및 기본 명령어 정리

1편. Redis 설치 및 기본 명령어 정리 📚 목차1. Redis와 실습 환경 이해하기2. Docker로 Redis 설치 및 실행하기3. Redis 기본 설정 이해하기4. redis-cli와 기본 명령어 정리 📂 [GitHub 코드 보러가기] : https://github.com/cericube/nodejs-practice-lab/tree/main/redis-examples 1. Redis와 실습 환경 이해하기 🔷 Redis 란 2026.05.26 - [5. IT기술노트/인프라&개발] - Redis의 기술적 특징과 고성능 데이터 처리 구조Redis는 메모리에 데이터를 저장하는 key-value 기반 데이터 저장소입니다.일반적인 관계형 데이터베이스처럼 영구 데이터를 중심으로 다루기보다는, 빠르게 ..

Redis의 기술적 특징과 고성능 데이터 처리 구조

Redis의 기술적 특징과 고성능 데이터 처리 구조 1. Redis 개요와 인메모리 데이터 저장 방식Redis는 데이터를 빠르게 저장하고 조회하기 위해 사용하는 인메모리 기반 데이터 저장소입니다. 일반적인 데이터베이스는 요청이 들어올 때마다 디스크에서 데이터를 조회합니다. 반면 Redis는 자주 사용하는 데이터를 RAM에 미리 올려두고, 요청이 들어오면 메모리에서 바로 꺼내 제공합니다. 아래 그림을 통해 일반적인 데이터베이스와 Redis의 처리 방식 차이를 확인할 수 있습니다. 디스크는 데이터를 읽고 쓰는 과정에서 상대적으로 많은 시간이 필요하지만, RAM은 전기 신호를 기반으로 데이터를 빠르게 처리합니다. 이 구조적인 차이가 Redis가 빠른 응답 속도를 제공할 수 있는 핵심 이유입니다. Redis는 ..

시간복잡도란? Big-O 표기법과 코드 분석으로 이해하기

시간복잡도란? Big-O 표기법과 코드 분석으로 이해하기 1. 시간복잡도란?입력 크기 N이 커질수록 알고리즘이 얼마나 느려지는지를 예측하는 도구 시간복잡도는 입력 크기가 증가할 때 알고리즘의 실행 시간이 얼마나 빠르게 증가하는지를 나타내는 개념입니다.여기서 중요한 점은 실제 실행 시간이 몇 초인지가 아니라, 입력 데이터의 크기 N이 커질수록 연산 횟수가 어떤 비율로 증가하는지를 보는 것입니다. 시간복잡도를 이해해야 하는 이유는 단순합니다.작은 입력에서는 잘 동작하는 코드도 큰 입력에서는 전혀 사용할 수 없을 수 있기 때문입니다. 코딩 테스트나 실무 시스템에서는 데이터가 수천 개, 수백만 개 이상으로 커질 수 있습니다. 🔷 Big-O 복잡도 그래프 2. Big-O 표기법 이해하기시간복잡도를 표현할 때..

TypeScript 개발 명령어 핸드북

TypeScript 개발 명령어 핸드북 📚 목차1. TypeScript 설치 및 초기화2. 컴파일(Build) vs 타입 체크(Type-Check)3. TypeScript 파일 직접 실행 (tsx vs ts-node)4. 스크립트 템플릿 예시 1. TypeScript 설치 및 초기화글로벌 설치보다는 프로젝트별 버전 고정 및 협업 일관성을 위해 개발 의존성(devDependencies) 설치를 권장합니다. 🔷 설치 및 초기화 npm install -D typescript # 1. 패키지 설치npx tsc --version # 2. 설치 버전 확인npx tsc --init # 3. tsconfig.json 생성 🔷 tsconfig.json 핵심 옵션 예시{ ..

[REST API] 10편. Post 첨부파일 관리 구현: 업로드, 다운로드, 게시글 연결 구조 설계

10편. Post 첨부파일 관리 구현: 업로드, 다운로드, 게시글 연결 구조 설계 📚 목차1. 게시글 첨부파일 도메인 구조와 메타데이터 설계2. Multipart 파일 업로드와 DB 메타데이터 저장 구현3. 게시글 작성 이후 파일 연결, 목록 조회, 삭제 처리4. 다운로드 구현과 스트림 응답 처리 📂 [GitHub 코드 보러가기] : https://github.com/cericube/nodejs-practice-lab/tree/main/fastify-api-rest 1. 게시글 첨부파일 도메인 구조와 메타데이터 설계게시글 기능을 구현하다 보면 제목, 본문, 작성자 같은 기본 데이터 외에도 첨부파일 기능이 필요해집니다. 처음에는 게시글을 저장할 때 파일도 함께 저장하면 단순해 보입니다. 하지만 실제..

V모델로 이해하는 테스트 레벨과 테스트 방법

V모델로 이해하는 테스트 레벨과 테스트 방법 1. V모델 개념 이해하기V모델은 개발 단계와 테스트 단계를 서로 대응시켜 보는 소프트웨어 개발 및 테스트 모델입니다. 일반적인 개발 흐름에서는 요구사항을 분석하고, 설계하고, 구현한 뒤 테스트를 수행합니다.이 흐름은 이해하기 쉽지만, 테스트를 구현 이후의 활동으로만 생각하게 만들 수 있습니다. V모델은 이 관점을 조금 다르게 봅니다.개발 단계에서 만들어지는 산출물은 나중에 대응되는 테스트 단계에서 검증되어야 하며, 각 테스트의 계획이나 테스트 케이스도 해당 개발 단계에서 미리 준비해야 한다고 봅니다. 즉, V모델의 핵심은 다음과 같습니다.▸ 각 테스트의 계획과 테스트 케이스는 대응되는 개발 단계에서 미리 작성한다.▸ 구현 이후에는 미리 준비한 테스트를 해당 ..

행위 주도 개발 BDD(Behavior-Driven Development) 이해하기

행위 주도 개발 BDD(Behavior-Driven Development) 이해하기1. BDD 개념 이해하기BDD, 즉 Behavior-Driven Development는 한국어로 행위 주도 개발이라고 합니다. BDD는 단순히 테스트 코드를 작성하는 방법이 아닙니다.사용자의 행동과 비즈니스 요구사항을 중심으로 기능을 정의하고, 이를 기준으로 개발과 검증을 진행하는 방식입니다. 일반적인 개발 과정에서는 요구사항이 문서로 전달되고, 개발자가 이를 해석해 기능을 구현합니다.요구사항 작성 ↓개발자 해석 ↓기능 구현 ↓테스트 작성 ↓QA 검증 이 방식은 익숙하지만, 다음과 같은 문제가 자주 발생합니다.▸ 기획자가 의도한 요구사항과 개발자가 이해한 내용이 다를 수 있다.▸ 테스트 코드는 있지만 비즈니스 관점..

Latency Numbers로 설계하는 백엔드 아키텍처

Latency Numbers로 설계하는 백엔드 아키텍처 1. 백엔드 개발자가 알아야 할 주요 Latency NumbersLatency Numbers를 볼 때 가장 중요한 것은 절대값이 아니라 상대적 차이입니다.예를 들어 “메모리 접근”, “Redis 조회”, “DB query”, “외부 API 호출”은 모두 데이터를 가져오는 작업처럼 보일 수 있습니다.하지만 latency 관점에서는 완전히 다른 비용을 가집니다.아래 표는 백엔드 개발자가 설계할 때 참고하면 좋은 대표적인 latency입니다.실제 값은 CPU, 네트워크, cloud provider, region, payload 크기, connection 상태, DB 부하에 따라 달라질 수 있습니다.따라서 아래 숫자는 정확한 기준값이라기보다 대략적인 규모를..

테스트 주도 개발 TDD(Test-Driven Development) 이해하기

테스트 주도 개발 TDD(Test-DrivenDevelopment)이해하기1. 테스트 주도 개발이 필요한 이유일반적인 개발 방식에서는 보통 기능 코드를 먼저 작성한 뒤 테스트를 진행합니다.흐름은 대략 다음과 같습니다.요구사항 확인 ↓기능 구현 ↓테스트 작성 또는 수동 테스트 ↓버그 수정이 방식은 익숙하고 빠르게 시작할 수 있다는 장점이 있습니다.하지만 코드가 커지고 기능이 복잡해질수록 다음과 같은 문제가 발생하기 쉽습니다. ✔️ 일반적인 개발 방식에서 자주 발생하는 문제▸ 구현이 끝난 뒤에야 요구사항을 잘못 이해했다는 사실을 알게 됩니다.▸ 테스트 코드가 구현 코드에 맞춰 작성되어 검증력이 약해질 수 있습니다.▸ 리팩토링 시 기존 동작이 깨졌는지 확인하기 어렵습니다.▸ 수동 테스트에 의존하면..

[REST API] 9편. Post 도메인 고급 조회 구현: 복합 조건 검색과 Keyset Pagination

9편. Post 도메인 고급 조회 구현: 복합 조건 검색과 Keyset Pagination 📚 목차1. 고성능 조회를 위한 데이터 모델 및 인덱스 설계2. 복합 조건 검색과 범위 필터링 구현3. Keyset Pagination 기반 고성능 페이지네이션4. 집계 컬럼 기반 정렬과 응답 최적화 전략 📂 [GitHub 코드 보러가기] : https://github.com/cericube/nodejs-practice-lab/tree/main/fastify-api-rest 1. 고성능 조회를 위한 데이터 모델 및 인덱스 설계조회 성능을 개선하려고 할 때, 보통은 Service나 Repository 코드를 먼저 떠올리게 됩니다.하지만 실제로 여러 프로젝트를 경험해 보면, 성능의 상당 부분은 코드보다 데이터 모..

[REST API] 8편. 테스트 전략 : Repository · Service · Route 계층별 테스트 구현하기

8편. 테스트 전략 : Repository · Service · Route 계층별 테스트 구현하기 📚 목차1. 계층 책임 기반 테스트 전략 설계2. Repository 테스트 : 데이터 정책과 무결성 검증3. Service Layer 테스트: 비즈니스 로직과 흐름 제어4. Route Layer 테스트: HTTP 계약 및 인터페이스 보장 📂 [GitHub 코드 보러가기] : https://github.com/cericube/nodejs-practice-lab/tree/main/fastify-api-rest1. 계층 책임 기반 테스트 전략 설계테스트는 코드 파일을 기준으로 나누기보다 각 계층이 맡은 책임(Responsibility)을 기준으로 나누는 편이 훨씬 안정적입니다. 현재 구조는 다음과 같습니다...

[REST API] 7편. User API 설계와 구현:DTO,Repository,Service,Route

7편. User API 설계와 구현 : DTO,Repository,Service,Route 📚 목차1. User API 전체 구조와 요청 처리 흐름2. 요청·응답 스키마 정의 (TypeBox DTO 설계)3. Prisma 기반 데이터 접근 구현 (Repository 구현)4. 요청 처리 로직과 DTO 변환 (Service 구현)5. API 엔드포인트 구성과 검증 (Route 구현)6. 공통 성공 응답 구조 구현 📂 [GitHub 코드 보러가기] : https://github.com/cericube/nodejs-practice-lab/tree/main/fastify-api-rest1. User API 전체 구조와 요청 처리 흐름 ✔️ 요청/응답 처리 흐름User 도메인은 다음과 같은 계층 구조로 구현..

반응형