블로그
글 목록
섹션 제목: “글 목록”
Bluetape4k Exposed Part 6: BigQuery, Trino, CockroachDB, DuckDB 통합 예제 분석 플랫폼과 특수 DB를 Exposed DSL에 붙일 때, 실행보다 먼저 검증해야 할 경계를 예제로 봅니다.
OCR 서비스를 실전에서 운영하기: 큰 이미지 전처리와 실패 응답 계약 OCR 서비스를 글자 인식 endpoint가 아니라 큰 이미지 입력 경계, native OCR runtime, 실패 응답 계약으로 나누어 봅니다.
Bucket4j Rate Limiting: caller identity부터 정해야 bucket도 맞다 Bucket4j rate limiting을 Caffeine vs Redis 문제가 아니라 caller identity, proxy trust, response header 계약으로 나눠서 봅니다.
bluetape4k Flow extensions: 복잡한 stream 조립을 이름 있는 운영 계약으로 바꾸기 여섯 개 workshop 예제로 Kotlin Flow extensions가 debounce, fallback, callback bridge, aggregation, parallel enrichment, sampling 계약을 어떻게 드러내는지 살펴봅니다.
Coroutine Observability: Micrometer tracing과 readiness가 실제로 지키는 경계 Coroutine service에서 trace가 끊기지 않게 만들고, readiness를 실제 운영 계약으로 검증하는 workshop 예제를 살펴봅니다.
Transactional Outbox Part 2: Kafka 우선 fallback으로 hot transaction 줄이기 orders만 transaction으로 저장하고, Kafka publish 실패시에만 durable fallback row를 저장하는 outbox 변형을 살펴본다.
Transactional Outbox와 Idempotency: Spring, Ktor 예제로 보는 실패 경계 domain row와 outbox row를 같이 쓰고, retry와 duplicate request를 DB 경계에서 다루는 방법을 Spring/Ktor 예제로 설명합니다.
Bluetape4k Text Part 4: 사전과 금칙어 변경을 테스트로 다루기 사전 파일 한 줄은 작지만 tokenizer와 금칙어 필터의 동작을 바꿉니다. 사전 변경을 어떻게 정리하고, 어떤 테스트로 막아야 하는지 살펴봅니다.
Bluetape4k Text Part 3: Aho-Corasick 검색과 workshop 시나리오 금칙어와 위험 키워드가 늘어나면 contains 반복은 금방 관리하기 어려워집니다. Aho-Corasick automaton을 한 번 만들고 입력을 한 번 훑는 구조로 바꿔봅니다.
Bluetape4k Text Part 2: tokenizer와 언어 감지로 입력을 라우팅하기 한국어, 일본어, 그 외 입력을 같은 문자열 처리 코드로 밀어 넣으면 금방 한계가 옵니다. tokenizer와 Lingua detector를 서비스 경계에서 나눠 쓰는 기준을 봅니다.
Bluetape4k Text Part 1: 텍스트 처리의 시작점과 품질 기준 문자열을 자르고 찾는 일도 서비스 경계로 들어오면 설계 문제가 됩니다. bluetape4k-text의 모듈 지도와 품질 기준을 먼저 봅니다.
Spring Boot 4 Workshop에서 Jackson3로 갈아타기 Spring Boot 4 예제는 Jackson3 기준에 맞아야 한다. 의존성, import, mapper bean, 예외 사례를 점검한다.
Batch benchmark 다시 세우기: measureTimeMillis를 보내고 kotlinx-benchmark로 간 이유 숫자는 금방 나옵니다. 문제는 그 숫자를 믿어도 되는가입니다. batch benchmark를 다시 세운 이유를 정리합니다.
Exposed R2DBC Workshop: Ktor 멀티테넌트 라우팅 패턴 Ktor에서는 tenant 상태를 ThreadLocal에 숨기지 말고, call attributes와 명시적인 route 값으로 다루는 편이 안전합니다.
Bluetape4k Graph Part 5: Virtual Threads benchmark 읽기 Virtual Threads는 더 빠른 graph 호출이 아니라, 기다리는 graph 호출을 더 단순한 코드로 많이 처리하기 위한 선택지입니다.
bluetape4k-dependencies 제작기 Part 3: Maven Central에는 롤백 버튼이 없다 여러 저장소를 순서대로 배포하는 일은 운영 이야기 같지만, 방심하면 뒤통수를 맞고 꽤 성실한 삽질이 기다린다.
bluetape4k-dependencies 제작기 Part 2: 1.0.0 BOM을 공개 계약으로 만들기 BOM은 버전 표가 아니라 사용자 프로젝트의 dependency resolution을 바꾸는 공개 계약이다.
bluetape4k-dependencies 제작기 Part 1: 왜 BOM이 필요했나 라이브러리가 하나일 때는 버전 하나면 충분하지만, 여러 저장소가 같이 움직이면 BOM은 선택이 아니라 운영 장치가 된다.
bluetape4k-dependencies 1.3.0 활용기 Part 4: 입력 경계에서 치운 똥들 입력 경계는 작은 샘플로는 멀쩡하고 운영 데이터에서 아프다. Image와 Text 쪽 보강을 실제 API 관점에서 본다.
bluetape4k-dependencies 1.3.0 활용기 Part 3: 운영에서 티 나는 변화 운영에서 무서운 문제는 티가 늦게 나는 문제다. 1.3.0에서 어떤 신호를 더 볼 수 있게 되었는지 살펴본다.
bluetape4k-dependencies 1.3.0 활용기 Part 2: 서비스 조합하기 BOM을 가져왔다면 다음 질문은 어떤 모듈을 함께 고를지다. 서비스 조합 예제로 1.3.0 사용 경로를 살펴본다.
bluetape4k-dependencies 사용 가이드: 여러 라이브러리 같이 쓰기 여러 bluetape4k 라이브러리를 같이 쓸 때는 각 모듈 버전을 외우는 대신 BOM을 먼저 가져오면 된다.
bluetape4k-dependencies 1.3.0 활용기 Part 1: 새 기능도 넣고 똥도 치우고 버전 숫자보다 중요한 것은 각 라이브러리에서 무엇이 나아졌고, 같은 실수를 어떻게 줄였는지다.
Global Unique ID 생성기 성능 개선기: Go, Kotlin 중심으로 Go ID generator 구현, Phase 1 비교, Go entropy 개선, Phase 2 비교, Kotlin ULID/KSUID/Snowflake 개선, Phase 3 비교까지 chart 중심으로 정리합니다.
Bluetape4k Graph Part 4: workshop 시나리오와 서비스 통합 API 설명만으로는 부족합니다. 실행 가능한 workshop 예제로 어떤 문제를 graph로 푸는지 봅니다.
Bluetape4k Graph Part 3: graph I/O와 benchmark 읽기 그래프 데이터는 서비스 밖으로 내보내고, 다시 불러오고, 테스트에서 재현할 수 있어야 합니다.
Bluetape4k Graph Part 2: core API와 실행 모델 graph storage를 바꿔도 서비스 코드가 바로 무너지지 않도록 core API와 실행 모델을 먼저 잡습니다.
Bluetape4k Graph Part 1: 그래프 데이터베이스 선택 지도 그래프 데이터베이스를 도입하기로 했다면, 다음 문제는 어떤 graph db로 시작하느냐입니다.
Bluetape4k JaVers Part 3: DDD와 workshop audit 예제 manual audit table에서 출발해 JaVers snapshot, DDD repository, Kafka/Redis projection 흐름으로 확장한다.
Bluetape4k JaVers Part 2: Exposed, Redis, Kafka persistence 선택 Exposed는 durable history, Redis는 빠른 snapshot read, Kafka는 write-only event stream으로 본다.
Bluetape4k JaVers Part 1: audit와 diff의 기본 모델 entity별 audit table을 직접 만들기 전에 JaVers commit, snapshot, diff 모델부터 잡는다.
Bluetape4k AWS Part 5: 실전 예제로 적용하기 examples/와 bluetape4k-workshop/aws를 따라 Spring Boot, Ktor, S3, SQS, DynamoDB 적용 흐름을 본다.
Bluetape4k AWS Part 4: Spring Cloud AWS와 비교하기 Spring Cloud AWS와 bluetape4k-aws를 기능 수가 아니라 적용 범위와 운영 선택지로 비교한다.
Bluetape4k AWS Part 3: Spring Boot와 Ktor 통합 Spring Boot 4 auto-configuration과 Ktor 3 plugin이 같은 AWS 공통 helper 위에 올라가는 방식을 본다.
Bluetape4k AWS Part 2: core module과 AWS 서비스 지원 현황 Java SDK v2 방식, Kotlin SDK 방식, CRT 기반 S3 TransferManager, compileOnly 의존성 모델을 함께 본다.
Bluetape4k AWS Part 1: Kotlin 서비스의 AWS 작업대 AWS SDK, coroutine wrapper, Spring Boot 4, Ktor 3, LocalStack/Floci 테스트 모델을 한 장으로 정리한다.
Bluetape4k Leader Part 5: Backend, 운영 기능, Benchmark leader election backend는 API 취향보다 이미 운영 중인 기반, lease 저장 방식, 관측 가능성으로 고르는 편이 안전합니다.
Bluetape4k Leader Part 4: Spring Boot와 Ktor 통합 직접 runIfLeader를 부르던 코드를 Spring AOP와 Ktor scheduler/management 경계로 끌어올리는 방법.
Bluetape4k Leader Part 3: Multi-leader와 전략 선출 리더 한 명으로 부족할 때: group slot과 candidate strategy로 실행 권한을 나누는 방법.
Bluetape4k Leader Part 2: Core API와 실행 모델 같은 job을 위한 네 가지 실행 모델: blocking, CompletableFuture, coroutine, virtual thread.
Bluetape4k Leader Part 1: 리더 선출의 기본 모델 scheduled job, migration, poller, cache warmer가 모든 replica에서 동시에 실행되지 않게 하는 방법.
Bluetape4k Exposed Part 5: 실전 예제 - 다양한 캐시 전략, 멀티테넌시 Exposed repository와 transaction 경계 위에 성능 최적화와 멀티테넌시를 실전 기능으로 얹어 봅니다.
Bluetape4k Exposed Part 4: JSON, 암호화, 다이얼렉트 DB별 세부사항을 domain 코드에 흩뿌리지 않고 typed column과 dialect module로 격리한다.
Bluetape4k Exposed Part 3: R2DBC, 코루틴, 가상 스레드 R2DBC는 streaming에 강하고, JDBC + Virtual Threads는 익숙한 driver 방식을 살린다. 숫자로 고르자.
Bluetape4k Exposed Part 2: JDBC repository와 SQL DSL SQL DSL은 숨기지 말고, 반복되는 repository 경계만 줄인다.
Bluetape4k Exposed Part 1: 왜 Exposed인가 R2DBC, Vert.x, Virtual Threads, Exposed DSL을 지나 production Exposed 확장으로 가는 선택 기준.
Bluetape4k Projects Part 6: Spring Boot 4와 Ktor Spring Boot 4와 Ktor 3에서 coroutine, data, Redis, observability, testing 경계를 잡는 방법.
Bluetape4k Projects Part 5: utility와 adoption path 작은 utility 모듈을 필요한 만큼만 고르고 예제와 benchmark로 검증하는 채택 순서.
Bluetape4k Projects Part 4: data와 infrastructure DB, Redis, messaging, observability, resilience 경계를 Kotlin 서비스에서 덜 거칠게 쓰는 방법.
Bluetape4k Projects Part 3: bytes가 지나가는 길 파일, buffer, serializer, HTTP/RPC, 암호화가 만나는 I/O 경계 정리.
Bluetape4k Projects Part 2: 공통 기반의 안쪽 서비스 요청과 테스트 fixture가 함께 기대는 core, coroutines, logging, tests 기반.
Bluetape4k Projects Part 1: 공유 Kotlin/JVM 기반 core, coroutines, I/O, data, infra, Spring Boot, Ktor, testing이 한 저장소에 모인 이유.
Bluetape4k Cache Part 4: Workshop 예제로 캐시 전략 감 잡기 Caffeine, Redis, Near Cache, resilience를 예제로 비교하고 서비스 코드에 붙이는 방법.
Bluetape4k Cache Part 3: Near Cache와 Exposed로 캐싱 전략 만들기 Read-through, write-through, write-behind. 이름은 비슷하지만 사고 방식은 꽤 다르다.
Bluetape4k Cache Part 2: Near Cache, Redis 왕복을 줄이는 현실적인 방법 Remote cache는 공유되지만 멀다. Near Cache는 뜨거운 읽기를 JVM 가까이 둔다.
Bluetape4k Cache Part 1: 캐시 모듈은 왜 이렇게 생겼나 로컬 캐시, JCache, suspend API, memoizer, NearCache가 한 상자에 들어간 이유.
Virtual Threads 4편: Java 21과 Java 25를 하나의 API로 감추기 Java 21과 25 차이는 내부로 숨기고, application code에는 하나의 Virtual Threads API만 보여주는 방법.
Virtual Threads 3편: JDBC가 R2DBC를 생각보다 자주 이긴 이유 R2DBC가 당연히 이길 줄 알았는데, benchmark 결과는 꽤 달랐다. JDBC + Virtual Threads의 반격.
Virtual Threads 2편: 실전에서 바로 걸리는 규칙들 Virtual Threads를 켰다고 끝이 아니다. pool, semaphore, context, lock에서 바로 차이가 나는 실전 규칙들.
Virtual Threads 1편: 싸지만 마법은 아닌 스레드 Blocking code를 다시 꺼내도 된다는 반가운 소식. 단, timeout과 resource limit까지 같이 챙길 때만.
부끄러운 실수가 더 나은 안전장치를 만들 때 null이 0이 되고, 테스트가 낡고, cleanup이 timeout에 막히고, cancellation과 interrupt를 놓친 다섯 가지 실수 회고.
Ktor CIO가 HTTP 벤치마크를 이상하게 만들었을 때 Ktor CIO의 느린 초기 숫자에서 출발해 공정한 benchmark, Vert.x pool 병목 수정, workload별 HTTP client 선택 기준까지 정리한 글.
CSV Writer가 모래주머니를 벗었을 때 Okio CSV writer 후속 작업. Flow row pipeline, UTF-8 sink, CSV semantics 보호, 그리고 large export 3.25배 개선을 정리합니다.
Okio 세그먼트로 CSV 파서 할당 줄이기 CSV parser 최적화 작업을 Reader 기반 파싱에서 Okio UnsafeCursor segment scanning까지 benchmark와 함께 정리합니다.
Pure JVM에서 libvips로: bluetape4k 이미지 처리 벤치마크 scrimage와 libvips 벤치마크, Java 21 JNI host 제약, Java 25 FFM 실측값, workshop derivative pipeline 예제를 정리합니다.
Backend 서비스는 언제 GraphDB를 도입해야 할까? GraphDB 도입 기준, PostgreSQL traversal baseline, AGE, Neo4j, Memgraph, graph storage가 잘 맞는 use case를 benchmark 결과로 정리합니다.
Bluetape4k 생태계 한눈에 보기 Spring Boot 4, Ktor 3, domain capability, data, infrastructure, foundation layer로 Bluetape4k 전체 구조를 정리합니다.
AI와 일하는 환경을 인프라로 만들기 AGENTS.md, bluetape4k skills, qmd, memory, hooks로 Codex와 Claude가 같은 기준을 읽고 검증하게 만든 방식입니다.
AI와 3개월 동안 키운 대규모 Kotlin 라이브러리 생태계 Claude Code와 Codex로 자동화, 문서화, 테스트, 연구, 예제, 대규모 repo 작업을 안정화한 과정과 배운 점입니다.