Next.js에서 SSR/CSR timezone 불일치가 만든 Hydration 예외, Cookie로 timezone 동기화해서 해결하기
·
웹 프론트엔드
이 글은 React 19, Next.js 16, App Router를 기준으로 설명합니다.글에서 설명하는 코드 예시는 설명을 위해서 간단하게 작성했습니다.문제 상황글로벌 서비스를 개발하면서 서버에서 날짜를 어떻게 내려줄지 고민했습니다. Java의 LocalDateTime은 타임존 정보를 포함하지 않아, 서버의 실행 환경(OS 타임존 설정 등)에 따라 같은 값이 서로 다른 시점을 의미하게 될 위험이 있습니다. 반면 Instant는 UTC 기준의 절대 시각을 나타내기 때문에 어느 환경에서든 동일한 시각을 보장합니다. 글로벌 사용자를 대상으로 하는 서비스라면 서버는 Instant로 내려주고, 브라우저에서 사용자의 timezone에 맞게 포맷하는 것이 자연스러운 선택이었습니다. 구현은 단순해 보였습니다. 서버에..
의사결정 기록 MCP 구현하기 (테크 스펙, 기획, 인프라 등)
·
협업
들어가며프로젝트를 진행하면서 분산된 테크 스펙, 인프라, 정책들을 의사결정 기록(Decision Record)으로 통합하고, MCP 서버를 만들어 특정 시점에 어떤 결정을 했고 어떻게 변화해 왔는지를 빠르게 검색할 수 있도록 한 경험을 정리해보겠습니다. 구체적인 구현보다는 경험 위주의 글입니다.문제 상황현재 진행 중인 프로젝트에서 팀원이 개인 사정으로 잠시 자리를 비운 상태였습니다. 그 사이 한 달 간 AI Agent의 도움을 받아 총 600개의커밋, 2만 줄 가량의 코드를 작성했습니다. 팀원이 돌아올 시점이 되었을 때, 너무 많은 코드와 결정들이 쌓여 있어 부담스러운 상황이었습니다.기존에는 GitHub에서 두 가지 방식으로 기록했습니다. Tech Spec은 GitHub Issue와 PR로 관리했고, 분..
선착순 쿠폰 발급 시스템 개선과 정합성 문제 해결 (Redis·Kafka)
·
서버
🔷 들어가며안녕하세요. 이번 글에서는 B2B 쿠폰 솔루션인 굿폰 서비스를 개발하며 겪었던 선착순 쿠폰 발급의 성능 개선 과정과, 그로 인해 발생한 데이터 정합성 문제를 해결한 경험을 공유하려 합니다. 굿폰은 커머스 서비스를 운영하는 고객사가 자체 개발 없이도 손쉽게 쿠폰 및 프로모션 기능을 도입할 수 있도록 돕는 서비스입니다. 시스템은 크게 관리자용 Dashboard와 고객사 커머스 서비스 서버와 연동되는 Partner OpenAPI로 구성됩니다.Dashboard: 고객사 관리자가 계정과 상점을 생성하고, 쿠폰 템플릿 발행 및 관리하는 시스템입니다. 사용자별/주문별 쿠폰 내역을 조회하여 효율적인 운영을 지원합니다.Partner OpenAPI: 고객사의 커머스 서비스와 직접 연동되는 API 서버입니다. ..
Resilience4j CircuitBreaker, 직접 구현하면서 이해해보자! - 4편: 설정, 사용, Fallback
·
서버
※ 시리즈 글Resilience4j CircuitBreaker, 직접 구현하면서 이해해보자! - 1편: 이해와 설계Resilience4j CircuitBreaker, 직접 구현하면서 이해해보자! - 2편: 상태 머신, 상태 전이Resilience4j CircuitBreaker, 직접 구현하면서 이해해보자! - 3편: 슬라이딩 윈도우Resilience4j CircuitBreaker, 직접 구현하면서 이해해보자! - 4편: 설정, 사용, Fallback (현재 글)🔷 들어가며이번 글에서는 직접 구현한 CircuitBreaker를 Spring 환경에서 편리하게 사용할 수 있게 하는 방법을 살펴보겠습니다. 이 글에서 다룰 내용은 다음과 같습니다.YML 기반으로 CircuitBreaker를 설정하고 생성하는 방..
Resilience4j CircuitBreaker, 직접 구현하면서 이해해보자! - 3편: 슬라이딩 윈도우
·
서버
※ 시리즈 글Resilience4j CircuitBreaker, 직접 구현하면서 이해해보자! - 1편: 이해와 설계Resilience4j CircuitBreaker, 직접 구현하면서 이해해보자! - 2편: 상태 머신, 상태 전이Resilience4j CircuitBreaker, 직접 구현하면서 이해해보자! - 3편: 슬라이딩 윈도우 (현재 글)Resilience4j CircuitBreaker, 직접 구현하면서 이해해보자! - 4편: 설정, 사용, Fallback🔷 들어가며이전 글인 2편: 상태 머신, 상태 전이에서는 CircuitBreaker가 어떤 기준으로 상태를 전이하는지, 그리고 그 기준이 되는 통계를 어떻게 활용하는지를 살펴봤습니다. 하지만 상태 전이는 결국 통계가 어떻게 계산되느냐에 달려 있습..
Resilience4j CircuitBreaker, 직접 구현하면서 이해해보자! - 2편: 상태 머신, 상태 전이
·
서버
※ 시리즈 글Resilience4j CircuitBreaker, 직접 구현하면서 이해해보자! - 1편: 이해와 설계 Resilience4j CircuitBreaker, 직접 구현하면서 이해해보자! - 2편: 상태 머신, 상태 전이 (현재 글)Resilience4j CircuitBreaker, 직접 구현하면서 이해해보자! - 3편: 슬라이딩 윈도우Resilience4j CircuitBreaker, 직접 구현하면서 이해해보자! - 4편: 설정, 사용, Fallback🔷 들어가며저번 글인 1편: 이해와 설계에서는 Resilience4j CircuitBreaker의 기본적인 이해와 구조에 대해서 살펴보았습니다. CircuitBreaker는 3가지 핵심적인 상태인 CLOSED, OPEN, HALF_OPEN을 가..