안녕하세요
제가 관심있는 것들을 연구하고 가지고 놀며 기록하는 블로그입니다.
저에 대해 좀 더 알고싶다면 About_Me를 읽어주세요.
2026 목표
- 이직 [시작]
- 결제가 있는 서비스 띄우기 [시작]
- 클라이밍 검정 난이도 풀기 [시작]
- 70kg로 유지하기 [시작]
안녕하세요
제가 관심있는 것들을 연구하고 가지고 놀며 기록하는 블로그입니다.
저에 대해 좀 더 알고싶다면 About_Me를 읽어주세요.
모니터링 도구 Kafka 클러스터를 모니터링하기 위한 다양한 도구와 설정 방법을 살펴봅니다.
성능 튜닝 가이드 Kafka 클러스터의 성능을 최적화하기 위한 가이드입니다.
장애 대응 Kafka 클러스터에서 발생할 수 있는 장애 상황과 대응 방법을 살펴봅니다.
주요 메트릭 Kafka 클러스터를 효과적으로 모니터링하기 위한 핵심 메트릭을 살펴봅니다.
Consumer Group 설계 효과적인 Consumer Group 설계는 Kafka 기반 시스템의 확장성과 안정성에 핵심적입니다.
Dead Letter Queue 패턴 처리 실패한 메시지를 별도 토픽으로 분리하여 관리하는 패턴입니다.
Error Handling 전략 Kafka 기반 시스템에서 발생할 수 있는 다양한 오류를 효과적으로 처리하는 전략을 살펴봅니다.
Partition 수 결정 토픽의 파티션 수는 성능, 확장성, 운영에 큰 영향을 미치는 중요한 설계 결정입니다.
Replication Factor 결정 Replication Factor는 데이터 내구성과 가용성을 결정하는 중요한 설정입니다.
Schema 관리 Kafka에서 메시지 스키마를 효과적으로 관리하기 위한 방법과 Schema Registry 활용법을 살펴봅니다.
메시지 키 설계 Kafka에서 메시지 키는 파티션 할당과 메시지 순서 보장에 핵심적인 역할을 합니다.
Consumer Group과 Rebalancing Consumer Group은 Kafka에서 메시지를 병렬로 소비하고 장애 복구를 제공하는 핵심 메커니즘입니다.
Consumer Lag 모니터링 Consumer Lag은 Kafka 시스템의 건강 상태를 나타내는 핵심 지표입니다. Consumer Lag 개념 정의 Consumer Lag은 Producer가 생산한 메시지와 Consumer가 소비한 메시지 간의 차이입니다.
Consumer 기본 개념 Kafka Consumer는 Kafka 클러스터의 토픽에서 메시지를 읽어오는 클라이언트 애플리케이션입니다.
Consumer 주요 설정 Kafka Consumer의 동작을 제어하는 핵심 설정들을 살펴봅니다. 필수 설정 bootstrap.servers 브로커 연결 주소입니다.
Offset 관리 Offset은 Kafka에서 Consumer가 메시지를 어디까지 읽었는지 추적하는 핵심 메커니즘입니다. Offset 개념 정의 Offset은 파티션 내에서 각 메시지의 고유한 순차적 ID입니다.
At-most-once, At-least-once, Exactly-once 메시지 전달 보장(Delivery Semantics)은 분산 시스템에서 메시지가 어떻게 전달되는지를 정의하는 핵심 개념입니다.
Exactly-once Semantics 구현 Kafka에서 Exactly-once Semantics(EOS)를 구현하는 방법과 내부 동작 원리를 살펴봅니다.
Transactional Messaging Kafka의 트랜잭션 기능을 사용하여 여러 메시지를 원자적으로 처리하는 방법을 살펴봅니다.
Batch Processing Kafka는 배치 처리를 통해 네트워크 오버헤드를 줄이고 처리량을 극대화합니다.
Compression Kafka는 다양한 압축 알고리즘을 지원하여 네트워크 대역폭과 저장 공간을 절약합니다.
Log Compaction Log Compaction은 각 키의 최신 값만 유지하여 무한 Retention을 효율적으로 지원합니다.
Log Retention 정책 Kafka는 디스크 공간을 관리하기 위해 오래된 메시지를 자동으로 삭제하는 Retention 정책을 제공합니다.
Log Segment와 파일 구조 Kafka는 메시지를 디스크에 효율적으로 저장하기 위해 Log Segment 구조를 사용합니다.
Page Cache 활용 Kafka는 OS의 Page Cache를 적극 활용하여 높은 처리량과 낮은 지연시간을 달성합니다. Page Cache 개념 정의 Page Cache는 운영체제가 디스크 I/O를 최적화하기 위해 메모리에 유지하는 캐시입니다.
Zero Copy Zero Copy는 Kafka가 높은 처리량을 달성하는 핵심 기술 중 하나입니다.
Broker 설정 Kafka Broker의 핵심 설정들을 살펴봅니다.
ISR (In-Sync Replicas) ISR은 Leader와 동기화된 Replica 집합으로, Kafka의 데이터 일관성과 가용성을 결정합니다.
Leader Election Leader Election은 Kafka 파티션의 리더를 선출하는 프로세스입니다.
Partition Reassignment Partition Reassignment은 파티션의 Replica를 다른 Broker로 이동하는 작업입니다.
Replication Factor 설정 Replication Factor는 Kafka의 고가용성과 데이터 내구성을 결정하는 핵심 설정입니다.
Authentication (인증) Kafka에서 클라이언트와 브로커의 신원을 확인하는 인증 메커니즘을 살펴봅니다.
Authorization (인가) Kafka에서 ACL(Access Control Lists)을 사용하여 리소스에 대한 접근 권한을 관리합니다.
Encryption (암호화) Kafka에서 데이터를 암호화하여 보호하는 방법을 살펴봅니다.
Quota 관리 Kafka에서 클라이언트의 리소스 사용량을 제한하여 클러스터를 보호합니다.
이 글은 실제 프로덕션 환경에서 Docker 빌드 시간을 197초에서 50초로 단축한 경험을 바탕으로 작성되었습니다.
React 개발 치트시트 & 가이드 (심화) 이 문서는 React 개발의 핵심 개념과 모범 사례를 정리한 치트시트 및 가이드입니다. 1.
데이터 흐름 클라이언트 요청 ↓ ① Middleware (글로벌) ↓ ② Guard (인증/인가) ↓ ③ Interceptor (Before) - 요청 전처리 ↓ ④ Pipe (유효성 검증/변환) ↓ ⑤ Controller Handler (실제 로직) ↓ ⑥ Service (비즈니스 로직) ↓ ⑦ Interceptor (After) - 응답 후처리 ↓ ⑧ Exception Filter (에러 처리) ↓ 클라이언트 응답 시각적 흐름 Request → Middleware (CORS, 로깅) → Guard (JWT 검증, 인증/인가) →...
Idempotent Producer (멱등성 프로듀서) Idempotent Producer는 중복 메시지를 자동으로 방지하는 기능으로, Kafka 0.11부터 도입되었습니다.
Partitioner와 메시지 분배 전략 Partitioner는 Producer가 메시지를 어느 파티션으로 전송할지 결정하는 컴포넌트입니다. 올바른 파티셔닝 전략은 데이터 분산, 처리 순서, 성능에 큰 영향을 미칩니다.
Producer 기본 개념 Kafka Producer는 메시지를 Kafka 클러스터의 토픽으로 전송하는 클라이언트 애플리케이션입니다.
Producer 주요 설정 Kafka Producer의 성능, 신뢰성, 처리량을 최적화하기 위한 주요 설정들을 다룹니다.
Transactional Producer (트랜잭션 프로듀서) Transactional Producer는 Kafka에서 Exactly-once semantics를 구현하기 위한 핵심 기능입니다. 여러 파티션에 대한 메시지 전송을 원자적으로 처리할 수 있습니다.
메시지 전송 방식 Kafka Producer는 세 가지 메시지 전송 방식을 제공합니다. 각 방식은 성능, 신뢰성, 복잡성 측면에서 서로 다른 특성을 가지고 있습니다. 1.
이 후기는 기술적 세부사항보다는 회사에 적용 가능한 실용적 인사이트를 중심으로 작성되었습니다. 1.
문제 상황 CentOS 환경에서 주기적으로 실행되어야 할 cron 작업이 어느 순간부터 동작하지 않는 현상이 발생했습니다. 원인 파악 Cron 로그 확인 CentOS에서는 /var/log/cron을 통해 크론잡의 실행 여부와 상태를 확인할 수 있습니다.
Broker와 클러스터 Broker란? Broker는 Kafka 서버를 의미하며, 메시지를 저장하고 클라이언트의 요청을 처리하는 핵심 컴포넌트입니다.
Kafka 학습 가이드 Apache Kafka는 분산 스트리밍 플랫폼으로, 대용량 실시간 데이터 처리를 위한 핵심 기술입니다. 목차 1. 기초 개념 Kafka란 무엇인가 메시징 시스템과 Kafka의 차이점 Kafka의 주요 특징과 장점 Kafka 사용 사례 2.
Kafka 사용 사례 Kafka는 다양한 산업과 시나리오에서 활용됩니다. 실제 기업들이 어떻게 Kafka를 사용하는지 살펴보겠습니다. 1. 메시징 시스템 (Messaging) 개요 전통적인 메시지 브로커를 대체하여 시스템 간 비동기 통신을 처리합니다.
Kafka란 무엇인가 정의 Apache Kafka는 분산 이벤트 스트리밍 플랫폼(Distributed Event Streaming Platform)입니다. LinkedIn에서 개발하여 2011년 Apache 오픈소스 프로젝트로 공개되었습니다.
Kafka의 주요 특징과 장점 1.
메시징 시스템과 Kafka의 차이점 전통적인 메시징 시스템 메시지 큐 (Message Queue) 대표적인 시스템: RabbitMQ, ActiveMQ, Amazon SQS 특징: Producer → Queue → Consumer Point-to-Point 모델 메시지가 한 번 소비되면 큐에서 삭제됨 Consumer가 메시지를 가져가면(pull) 다른 Consumer는 받을 수 없음 사용 사례: 작업 분배 (Task Distribution) 비동기 처리 (Async Processing) Pub/Sub 시스템 (Publish/Subsc...
컨테이너 기술은 애플리케이션을 실행하는 데 필요한 모든 파일, 라이브러리, 설정 등을 하나의 패키지로 묶어 어떤 환경에서도 일관되게 실행될 수 있도록 만든 기술 특징 경량화 컨테이너는 운영체제(OS)를 공유하고, 필요한 최소한의 리소스만 사용하기 때문에 가볍습니다.
들어가며 최근 이직을 준비하며 깨닫는 바가 있어 글로 남기려 합니다. 저는 커리어를 시작하고 현재 2번째 이직을 준비하고 있습니다.
왜 NestJS WebSocket Gateway를 선택했나? 프로젝트에는 이미 Hocuspocus 소켓 서버가 공동편집용으로 존재합니다. 하지만 폴더 트리 동기화를 위해 Hocuspocus에 API 포트를 추가로 열고 싶지 않았습니다.
PostgreSQL 인덱스 비교: GIN(pg_bigm) vs B-tree 개요 PostgreSQL에서 텍스트 검색을 위한 두 가지 주요 인덱스 방식인 GIN(pg_bigm)과 B-tree 인덱스의 특성과 성능을 비교 분석합니다. 인덱스 구조 상세 분석 1.
이 문서는 클라이언트-서버 간 실시간 데이터 통신을 위한 주요 기술인 Polling, Long Polling, SSE(Server-Sent Events), WebSocket을 비교하고, 특정 시나리오(1500개 동시 연결 및 방송)에 가장 적합한 기술을 분석합니다.
8개월간의 꾸준한 코딩테스트 준비 여정과 체계적인 알고리즘 템플릿 활용법 - 초보에서 중급자로 성장하기까지의 실전 경험과 노하우 공유
정적 사이트 생성기 Quartz에 Supabase를 활용한 실시간 댓글 시스템을 구축하는 완전한 가이드 - 실제 문제 해결 과정 포함
이전 글에서 Git 방식을 선택했던 SCSS 모듈화 프로젝트가 다시 Verdaccio 서버 방식으로 돌아온 이유와 Docker 기반 Verdaccio 구축 과정을 상세히 공유합니다.
사내 SCSS 모듈화 프로젝트 진행 과정에서 고민했던 다양한 배포 방식들(Verdaccio, 웹 개시 방식, Git 방식)을 비교 분석하고, 최종적으로 AWS CodeCommit을 활용한 Git 방식을 선택한 이유와 구현 방법을 공유합니다.
AI 툴의 힘을 체감한 일주일 최근 일주일 동안 AI 개발 도구들과 함께 두 가지 특별한 경험을 했습니다.
xbar 앱 그룹 실행 플러그인 이 플러그인은 macOS용 무료 메뉴바 유틸리티인 xbar를 사용하여 자주 사용하는 애플리케이션 그룹을 한 번에 실행할 수 있도록 도와줍니다.
복잡한 JWT Access Token 관리, 이제 그만\! 프론트엔드에서 메모리 기반 싱글톤 관리, 401 에러 시 자동 재발급 및 요청 재시도 로직을 TypeScript로 구현한 방법을 공유합니다. 직접 개발한 JWT 디버깅 크롬 익스텐션 'JWT Badge'로 개발 효율도 높여보세요.
프로젝트가 커질수록 “JAR로 배포해야 할까, WAR가 나을까?”, “Nginx 같은 웹 서버랑 Tomcat 같은 WAS는 뭐가 달라?” 같은 질문이 자주 등장합니다.
NestJS 환경에서 JWT, Passport, Strategy 패턴을 사용하여 인증을 구현하는 방법에 대한 기술 블로그입니다. 장점, 구현 방식, 더 활용할 수 있는 방향을 제시합니다.
NestJS, NextJS 등 다양한 기술 스택 사용 시 발생하는 버전 충돌 문제를 mise를 통해 해결하고, 설치 및 사용법을 알아봅니다.
OAuth2와 JWT는 현대 웹 애플리케이션에서 인증(Authentication) 과 인가(Authorization) 를 구현할 때 자주 마주치는 핵심 개념입니다.
Tiptap 공동편집 에디터의 Redis 장애 시나리오를 기반으로 개선 사항과 대응 전략을 정리한 기술 포스트입니다.
Tiptap 에디터 공동 편집 기능이 들어간 에디터를 개발했습니다. (25.03.24 ~) 언제까지 유효할진 모르겠지만, 공동편집 체험하기에 가볍게 띄워놨습니다.
모니터링의 필요성 저는 최근 홈서버를 통해 블로그를 운영중입니다.현재의 사이트가 그 블로그이죠. 제 블로그는 이상하게도 자주 404에러가 발생하고 있었습니다. 블로그 외의 다른 서비스들을 많이 띄워놨지만 다른 서비스들은 아무 문제가 없었습니다.
SOILD 원칙 S: 단일 책임 원칙(Single Responsibility Principle, SRP) ‘하나의 객체가 하나의 책임만 져야 한다.’ 클래스를 단 한 가지 목표만 가지고 작성해야 한다.
객체지향 객체 객체는 실세계의 개체를 의미합니다. 객체는 상태(field)와 동작(method)을 가지고 있습니다. 객체는 클래스의 인스턴스로 field에 상태를 저장하고 method로 동작을 표현합니다. 클래스 클래스는 탬플릿, 청사진과 같이 레시피와 비슷합니다.
Kafka를 먼저 읽어보시면 이해가 더 잘되실겁니다. 도입기 기존에는 node 서버가 요청을 받아서 데이터를 가공하여 FCM으로 전달하는 서버로 구성되어 있었는데, 몇가지 문제가 있었습니다.
일반적인 구조 점선은 구독을 의미하고, 실선은 요청 및 응답을 의미합니다. Producer 특정 Topic의 특정 파티션으로 메시지를 발행하는(생산하는) 생산체. 기본적으론 response를 받지 않는 단방향 통신입니다.

최근에는 젠킨스 대신 GitHub Action을 이용해 CI/CD 파이프라인을 구성하는 사례가 많아졌습니다. GitHub에 코드가 이미 호스팅되어 있는 환경에서는 설정이 간단하고 GitHub와의 연동이 원활하기 때문에 효과적입니다.
1. 배포 개요 • 기본 개념: 로컬에서 Git에 push하면 서버의 Bare Repository에 코드가 업데이트되고, Git Hook(주로 post-receive)이 실행되어 최신 코드가 지정한 배포 디렉토리(DEPLOY_DIR)로 복사됩니다.
내부 개발 서버에서 chart.js(v4.4.7)를 새로 도입하던 중, @kurkle/color 의존성 문제로 인해 이슈가 발생했습니다.
러너스하이 1기를 마치고 토스 러너스하이 1기가 끝난 지 벌써 한 달이 지났습니다. 너무 달려온 탓인지 지쳐서 빠르게 후기를 남기지 못했네요.
이번에 토스 러너스하이 1기에 참여하게 되었습니다. 자세한 내용은 어디까지 말해도 되는지 잘 모르겠어서 다 말할 순 없겠지만 간략하게는 아래와 같습니다.
각 요소의 정의 SSLCertificateKeyFile 서버의 **개인 키(Private Key)**가 저장된 파일을 가리킵니다.
해보고 싶은게 많은 주니어 저장만 해두고 미뤄두었던 글들과 링크들을 하나씩 살펴보며 공부하는 요즘. 해보고 싶은 것들이 많이 생겼습니다.
프록시 프록시 서버(proxy server)란 “클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다.
About 사이트 소개 이 사이트는 개발자로서의 경험과 지식을 공유하는 개인 블로그입니다. 주로 백엔드 개발, 데이터베이스, 시스템 아키텍처, 그리고 다양한 기술 스택에 대한 실무 경험을 바탕으로 한 글들을 작성합니다.
Contact 연락처 정보 궁금한 점이나 협업 문의, 기술적인 질문이 있으시면 언제든 연락주세요.
Privacy Policy 최종 수정일: 2025년 7월 5일 개인정보 처리방침 본 사이트는 이용자의 개인정보를 중요하게 생각하며, 관련 법령에 따라 개인정보를 보호하고 있습니다.
배경 우리 회사의 고질적인 VOC 중 하나로 채팅에서 검색 시 이전 채팅 데이터에서 내용, 파일, 이미지에 대해서 조회가 되는데 없는 단어로 검색 시(ex.
Java 개발자로 일하고 공부하며 JDBC와 JPA, Mybatis는 다 사용해봤지만, 이들의 차이점이 정확히 무엇인지, 어떨 때 사용하는 것이 좋을지 고민을 해본 적이 없어서 이번 기회에 정리해보려고 한다.
여러 개의 사이트, 서비스에서 한 번의 로그인으로 여러가지 다른 서비스와 사이트들에 자동적으로 접속하여 이용하는 로그인 방식. 사용자 정보를 연동하여 하나의 사용자 정보를 기반으로 여러 시스템을 하나의 통합 인증을 사용하게 하는 것을 말한다.
사용자의 ID를 migration 해줘야 하는 작업이 생겼다. 그냥 UPDATE를 진행해보니 사용기간이 길어 업데이트 해야 할 데이터가 많아 프로세스가 종료되는 문제가 발생했다.
이번에 같이 게임하는 친구들의 요청을 받아 디코봇에 유튜브 음악 스트리밍 기능을 추가해봤다. 기본적으론 github.com/brokiem/broki-s-music-bot/tree/master 해당 깃허브 소스를 참고했다.
Interface와 Abstract Class는 상속(extends)받거나, 구현(implements)하는 Class가 Interface나 Abstract Class 안에 있는 Abstract Method를 구현하도록 강제하는 공통점을 가지고 있다.
자바스크립트로 웹 개발을 하다보면 데이터를 저장할 일이 생기는데, 보통 이럴 때 데이터베이스(DB) 서버나 클라우드(Cloud) 플랫폼, 세션, 쿠키 등에 데이터를 저장하는 경우가 많습니다.
저는 게임을 좋아했습니다. 공부를 한다고 2년 정도 안하다가 최근 다시 시작했는데, 만들어보고 싶은게 생겼습니다. 유튜브를 보면 뽑기를 통해 강제로 특정 캐릭터를 올리는 룰을 진행하는데, 한 번 재밌어보여서 원랜디의 디스코드 봇을 만들어보고 싶어졌습니다.
댓글 (0)