Tech Blog

직접 구현하고 검토를 거친 기술적 선택과 설계를 정리해 남깁니다

전체 게시글 (22)

결제 도메인 거래·환불의 동시성 제어 전략

서비스에서 수익 창출을 이루려면 결국 결제 도메인을 구축해야합니다. 필자가 극초기 스타트업에서 결제 도메인을 처음부터 구축하고, 25년 9월까지 6억 매출을 처리한 시스템을 개발한 경험을 토대로 결제 도메인에 대해 분석 및 발생할 수 있는 문제상황과 처리 전략에 대해 소개하겠습니다. 결제 도메인에 대한 설명이나 PG사 연동 방법 같은 부분은 소개하지 않겠습니다. 또한 저 역시 스타트업에서 필요한 결제 시스템 구축 경험에서 비롯되어 핸들링을 하기 때문에 큰 규모의 서비스에서 필요한 요구사항과는 다를 수 있습니다. 결제와 같이 실제


결제 도메인 거래·환불의 동시성 제어 전략
결제
환불
+1

Kafka Consumer - 오프셋 커밋과 재처리 전략, Dead Letter Queue(DLQ)

지난 글에선 카프카 프로듀서 측 주요 개념과 발생할 수 있는 시나리오 및 대응법들을 살펴봤습니다. 사실 프로듀서 측은 세팅만 잘 해두면 큰 문제가 생기지는 않습니다. 데이터의 영속화와 메시지 발행간의 무결성만 잘 지킨다면 외에는 크게 신경 쓸 부분이 없기 때문이죠. 다만 컨슈머 측엔 토픽을 다루는 서비스 로직이 들어가다 보니 발생할 수 있는 상황의 복잡도가 굉장히 높습니다. 이번 글에선 컨슈머 측에서 여러 상황을 컨트롤하기 위해 필요한 개념과 방법들에 대해 알아보겠습니다. 오프셋 커밋 전략 오프셋은 파티션 내에서 각 메시지가


Kafka Consumer -  오프셋 커밋과 재처리 전략, Dead Letter Queue(DLQ)
Kafka
메시지큐
+1

Kafka Producer - ACKS 옵션과 ISR, 메시지 전송 신뢰도

지난 글에서는 프로듀서, 컨슈머, 브로커, 토픽, 파티션 등 카프카의 핵심 개념과 아키텍처에 대해 알아보았습니다. 프로듀서가 producer.send()를 통해 메시지를 발행하면, 해당 메시지는 토픽의 파티션으로 전송되고 컨슈머가 이를 가져가 처리하는 흐름을 이해했습니다. 그런데 여기서 한 가지 중요한 질문이 생깁니다. producer.send()를 호출하고 나면, 우리는 "메시지가 안전하게 전송되었다"라고 언제 확신할 수 있을까요? 프로듀서의 요청이 리더 브로커에 도달하자마자일까요? 아니면 모든 복제본에 저장이 완료되었을 때일까


Kafka Producer - ACKS 옵션과 ISR, 메시지 전송 신뢰도
Kafka
메시지큐

아파치 카프카란? 기본 개념 및 철학

\*본 시리즈는 필자가 Confluent의 문서들과 강의 한번에 끝내는 Kafka Ecosystem, 이외의 여러 자료들을 통해 학습한 내용을 기반으로, 응용 서비스 개발자들이 카프카를 사용하는데 필요한 개념과 코드들을 컴팩트하게 모아 정리하는 것을 취지로 합니다. 따라 인프라적인 내용이나 DevOps 관점에서의 깊이 있는 탐구는 다루지 않습니다. 시작하며: 왜 Kafka인가? Spaghetti Code 현대의 소프트웨어는 점점 더 복잡해지고, 비즈니스가 성장함에 따라 관여하는 이해관계자와 기능의 수도 늘어납니다. 자연스럽게


아파치 카프카란? 기본 개념 및 철학
Kafka
메시지큐
+1

2025 하반기 삼성SDS 알고리즘 특강 & PRO 시험 합격 후기

4학년 2학기를 앞둔 방학에서, 슬슬 취준 및 코테 준비를 시작하던 중, 대학교 지인한테 추천받아서 삼성 SDS 대학생 알고리즘 특강을 지원해보았습니다. 2주간 매일 8시간동안 알고리즘만 풀고, 시험도 치고 드디어 모든 과정이 끝난 김에 복기겸 글을 써봅니다! 지원 과정 25년 하반기에 올라온 포스터 사진입니다. 포스터에 있는 QR을 통해 구글폼을 제출하는 식으로 지원서를 작성하실 수 있습니다. 생각보다 서류가 복잡한데, 자기소개서, 재학증명서, 성적증명서를 제출했었던 걸로 기억합니다. 특히 자기소개서 대충 쓴 지인들을 다 떨


2025 하반기 삼성SDS 알고리즘 특강 & PRO 시험 합격 후기
알고리즘
커리어

NestJS API 응답, 지네릭으로 일원화하고 Swagger 문서도 한 줄로 정리하기

시작하며 NestJS + Swagger로 controller 레이어 만들다보면 한번쯤 아래와 같은 코드를 본 적 있을 겁니다. 저 주렁주렁 달린 데코레이터 때문에 마음이 불편하신 분들이 한 둘이 아니실 텐데요. 거기에 심지어 API 응답 타입을 일원화 하려고 하니 swagger 문서화 시점엔 지네릭이 사라져서 아래처럼 지네릭에 넣은 응답 타입에 대한 내용이 유실되는 걸 많이 보셨을 겁니다. 대부분 그냥 모든 응답타입 class를 CommonResponse를 extends하는 식으로 처리하거나 하실텐데, 이를 지네릭 기반으


NestJS API 응답, 지네릭으로 일원화하고 Swagger 문서도 한 줄로 정리하기
NestJS
Swagger
+2

static 키워드의 메커니즘 해부 - TypeScript / Python 편

시작하며 지난 글에서는 Java와 Kotlin에서의 static 키워드를 깊이 있게 분석해봤습니다. JVM 기반 언어들이 공유하는 메모리 구조와 클래스 로딩이라는 메커니즘 위에서, 각 언어의 설계 철학이 어떻게 다르게 표현되는지 확인할 수 있었습니다. 이번 글에서는 그 관점을 넓혀, TypeScript와 Python이라는 두 언어에서의 정적 멤버 처리 방식을 살펴보겠습니다. TypeScript와 Python은 JVM과 완전히 다른 런타임 환경과 언어 설계를 갖추고 있습니다. JavaScript를 기반으로 하는 TypeScript


static 키워드의 메커니즘 해부 - TypeScript / Python 편
OOP
TypeScript
+2

static 키워드의 메커니즘 해부 - Java / Kotlin 편

AI를 활용한 코딩이 일상화되면서, 더 이상 특정 언어의 API나 문법에 대한 ‘암기’가 개발자의 핵심 역량이 되진 않는 시대가 되었습니다. 이제는 “어떤 자료구조를 쓰겠다”, “이런 방식으로 구성하겠다”는 정도의 아이디어만 정리하면, AI가 문법과 구현은 대부분 완성해줍니다. 더불어, 언어들 자체도 점차 닮아가고 있습니다. 각 언어가 가진 고유한 문법 차이보다는, 객체지향 프로그래밍(OOP)이라는 공통 패러다임 아래 구조적 유사성이 강해졌습니다. 특히 실무에서 주력으로 사용되는 TypeScript, Java, Kotlin, Py


static 키워드의 메커니즘 해부 - Java / Kotlin 편
OOP
Java
+2

NestJS에 자연스럽게 녹아드는 모듈러 모놀리식 아키텍처 가이드

시작하며: NestJS와 아키텍처 NestJS는 Node.js 생태계에서 보기 드물게, 강력한 객체지향 기반의 설계 철학을 갖춘 백엔드 프레임워크입니다. Angular에서 영향을 받은 구조와 함께, 실질적으로는 Spring Framework에 가까운 모듈 기반 구조와 DI(Dependency Injection) 컨테이너, 그리고 데코레이터 중심의 선언적 구성 방식을 갖추고 있습니다. 하지만 NestJS는 Spring과는 다릅니다. Spring이 @Bean, @ComponentScan 등의 클래스 스캐닝 기반 설정과 런타임 리플렉


NestJS에 자연스럽게 녹아드는 모듈러 모놀리식 아키텍처 가이드
NestJS
아키텍처
+2

AWS ECS로 만드는 무중단 인프라: OIDC, CD, 로드밸런싱까지

시작하며: 문제 및 필요성 초기 서비스 단계에서는 관리의 직관성과 환경의 단순성을 이유로 EC2와 같은 가상 머신(VM) 기반의 인프라를 선택하는 경우가 많습니다. 이는 빠른 배포와 소규모 운영에는 일정 수준의 유효성을 지니지만, 점차 서비스 트래픽이 증가하고 배포 주기가 짧아질수록 인프라 운영의 비효율성과 확장성의 한계가 드러납니다. 가장 큰 제약 중 하나는 수평 확장의 어려움입니다. VM 기반 서버는 물리적 또는 논리적 자원을 기준으로 스케일링해야 하며, 신규 인스턴스를 프로비저닝하는 데 시간이 소요되고, 설정과 이미지 관리


AWS ECS로 만드는 무중단 인프라: OIDC, CD, 로드밸런싱까지
AWS
ECS
+5