황호민
  • Blog
  • Resume

검색

태그

전체 · 23편

2026.05.2010분 읽기Visualization

가상 쓰레드를 인터랙티브 시각화 두 개로 가르쳐본 이야기 — 메이킹 & 사용 가이드

텍스트로는 안 잡히던 ForkJoinPool·Work-Stealing·Poller·커널 인터럽트 흐름을 인터랙티브 HTML 두 개로 풀어본 과정. 무엇을 어떻게 쪼개서 그렸는지, 어떻게 쓰면 가장 빨리 이해되는지.

#Visualization#JavaScript#VirtualThread#Learning
2026.05.1342분 읽기ThreadPool

쓰레드 풀과 커넥션 풀 완벽 정리 — 자원 풀링부터 가상 쓰레드까지

왜 풀이 필요한가부터 ThreadPoolExecutor 내부, BlockingQueue, HikariCP, 가상 쓰레드의 Continuation·Poller·ForkJoinPool, OS↔JVM 경계까지 동시성 처리의 전체 그림을 정리했습니다.

#ThreadPool#ConnectionPool#VirtualThread#Java
2026.04.305분 읽기JWT

체크 누르면 로그아웃되는 버그 — 204 No Content가 토큰을 날린 이야기

성공 응답인데 클라이언트만 강제 로그아웃되던 버그를 추적해보니, refresh 트리거 조건을 너무 단순하게 짠 게 원인이었습니다.

#JWT#Refresh Token#Frontend#디버깅
2026.04.305분 읽기PostgreSQL

"given이 저장 안 된다"는 보고의 진짜 원인은 priority CHECK 위반이었다

BDD 필드 매핑 버그를 찾으려고 한참을 헤맸는데, 실제로는 같은 INSERT 안의 priority enum 한 글자가 트랜잭션을 통째로 깨고 있었습니다.

#PostgreSQL#CHECK 제약#디버깅#enum
2026.04.307분 읽기Claude Code CLI

LLM을 필수 의존성에서 빼는 설계 — Claude Code CLI subprocess + baseline fallback

사이드 프로젝트에서 LLM API 비용을 피하면서도 LLM 품질을 활용하고 싶었습니다. Claude Code CLI를 subprocess로 띄우고, 항상 동작하는 baseline 템플릿을 fallback으로 깔아둔 설계 이야기입니다.

#Claude Code CLI#subprocess#Fallback 설계#LLM
2026.04.3016분 읽기Queue

큐(Queue) 완벽 정리 — 자료구조에서 Kafka까지

비동기 처리에 큐가 왜 필요한지부터 SQS와 Kafka의 차이까지, 실무 관점에서 큐를 정리했습니다.

#Queue#Kafka#SQS#RabbitMQ
2026.04.307분 읽기Outbox 패턴

SQS를 빼고 cron + DB outbox로 간 이야기 — 이 규모엔 큐가 과했다

월 수백 건짜리 PR 처리 파이프라인에 두 개의 큐를 두려다, DB 한 테이블 + nullable 타임스탬프 + cron 폴링으로 대체한 결정 과정입니다.

#Outbox 패턴#SQS#cron#NestJS
2026.04.305분 읽기API 설계

1건만 보냈는데 전체가 실행됐다 — 키 이름 한 글자 차이가 만든 폴백 함정

selectedTcIds 한 건만 보낸 요청이 버전 전체 TC를 실행시킨 사건 — 진짜 원인은 컨트롤러와 서비스 사이 키 이름 불일치였습니다.

#API 설계#NestJS#디버깅#방어적 검증
2026.04.035분 읽기Redis

Redis 야무지게 사용하기

Redis의 데이터 타입, 캐싱 전략, 아키텍처까지 실무에서 꼭 알아야 할 내용을 정리했습니다.

#Redis#Cache#Database#Backend
2026.03.285분 읽기API설계

API 하나가 병원 전체를 멈췄다 — 단일 API 비대화의 함정

환자+메타+결과를 한 API에서 다 주던 구조가 왜 무너졌는지. No-Offset 페이징, API 분리, 비동기 전환까지 실제 개선 과정.

#API설계#페이징#NoOffset#비동기
2026.03.146분 읽기Redis

배치 작업에서 중복 데이터가 생겼다 — Redis Lock으로 멱등성 잡은 과정

가끔 회원권이 2개씩 생기는 버그, 왜 생겼고 왜 Redis Lock이었나. 레이스 컨디션부터 멱등성 설계까지.

#Redis#동시성#멱등성#분산Lock
2026.02.256분 읽기MySQL

슬로우 쿼리를 EXPLAIN으로 잡은 과정 — 단일 인덱스에서 복합 인덱스로 (3s → 1.4s)

인덱스를 바꾸면 된다는 건 알았는데, 어떻게 찾았고 왜 복합이어야 했는지. EXPLAIN 결과 읽는 법부터 복합 인덱스 컬럼 순서 결정까지.

#MySQL#EXPLAIN#Index#쿼리최적화
2026.02.094분 읽기Architecture

화면 캡처로 PDF 만들던 시스템을 MQ 워커로 바꾼 이야기 (9s → 1.5s)

단순 최적화가 아니라 구조 자체를 바꿔야 했던 이유. 왜 화면 캡처가 근본적으로 틀린 접근이었는지, 왜 Message Queue를 선택했는지.

#Architecture#MessageQueue#PDF#비동기
2026.01.178분 읽기QA

QA 없는 팀에서 E2E 테스트 대시보드를 만든 이야기 — Maestro + SQS + 로컬 워커

외주 QA가 YAML을 입력하면 로컬 워커가 받아서 Maestro로 앱을 테스트하고 결과를 대시보드에 쌓는 시스템. 왜 이 구조가 됐는지.

#QA#Maestro#SQS#테스트자동화
2025.12.086분 읽기ECS

파일질라 배포에서 ECS Fargate 무중단 배포까지 — 왜 매번 인프라를 바꿨나

FileZilla 수동 배포 → CodeDeploy → ECS Fargate까지, 두 번의 배포 개선을 관통하는 이야기. 수동 배포의 진짜 비용과 컨테이너로 넘어간 이유.

#ECS#Fargate#GitHubActions#무중단배포
2025.11.245분 읽기Kotlin

코루틴(Coroutine) vs 쓰레드(Thread)

코루틴과 쓰레드의 차이를 공부해 봅시다

#Kotlin#CS
2025.10.215분 읽기Next.js

Flask + Vanilla JS 백오피스를 Next.js로 다시 짠 이유 — 재구축 결정 기준

돌아가는 코드를 왜 건드렸나. 기능 추가가 불가능한 시점을 어떻게 판단했고, 왜 점진적 개선이 아닌 전면 재구축을 선택했는지.

#Next.js#TypeScript#리팩토링#레거시
2025.09.154분 읽기Node.js

Jira API를 10번 순차 호출하던 코드, Promise.allSettled로 바꾼 이야기 (10s → 1.8s)

단순히 Promise.all로 바꾼 게 아니라, 부분 실패 허용·응답 순서 보장·Rate Limit 대응까지 병렬 처리의 트레이드오프를 하나씩 해결한 과정.

#Node.js#Promise#비동기#API최적화
2025.08.195분 읽기OAuth

Jira 연동 플러그인 인증을 설계할 때 발견한 토큰 탈취 취약점

세션 기반 자동 로그인이 편리하다는 건 알았지만, 토큰 하나가 탈취되면 연결된 모든 서드파티 앱에 연쇄 접근이 가능하다는 걸 설계하다 발견했다.

#OAuth#JWT#보안#인증
2025.07.084분 읽기ETL

고객사가 내부 로그를 달라고 했다 — 폐쇄망 Splunk ETL 파이프라인 설계기

원본 로그는 줄 수 없고, 아무것도 안 줄 수도 없었다. 개인정보 마스킹 ETL + 폐쇄망 Splunk 주입까지 제약 조건 속에서 설계한 과정.

#ETL#Splunk#보안#개인정보
2025.05.224분 읽기Spring Batch

LMS와 실서비스가 같은 DB를 쓰고 있었다 — DB 분리 + ETL로 조회 20s → 1s

10년 된 LMS의 히스토리 DB가 실서비스 메모리를 잡아먹기 시작했다. 캐싱이 안 되는 이유, DB를 분리한 이유, ETL 파이프라인을 어떻게 설계했는지.

#Spring Batch#ETL#DB분리#MySQL
2024.02.205분 읽기MSA

모놀리식에서 MSA로: 전환 여정과 교훈

전자상거래 플랫폼을 모놀리식 아키텍처에서 마이크로서비스로 전환한 경험을 공유합니다. 아키텍처 설계, 데이터 분리, 배포 전략 등을 다룹니다.

#MSA#Architecture#Spring Cloud#Kubernetes
2024.01.153분 읽기Spring Boot

Spring Boot 애플리케이션 성능 최적화 실전 가이드

실무에서 적용한 Spring Boot 성능 최적화 기법과 그 결과를 공유합니다. JPA N+1 문제 해결, 캐싱 전략, 커넥션 풀 튜닝 등을 다룹니다.

#Spring Boot#Performance#JPA#Redis

© 2026 황호민

GitHubEmail