Latest Posts

Check out the latest posts — and filter by tag if you'd like.

Kubernetes Probe 이해하기 - Liveness, Readiness, Startup

What liveness, readiness, and startup probes actually do when they fail, based on the Kubernetes and Spring Boot docs and verified on a kind cluster, plus the misconfigurations that turn a small outage into a restart storm.

Liveness, Readiness, Startup Probe의 동작을 쿠버네티스, Spring Boot 공식 문서 기준으로 정리하고, kind 클러스터에서 실패 시 재시작과 트래픽 변화를 직접 확인한다. 설정 값, HTTP/TCP/Exec/gRPC 차이, Actuator가 만드는 엔드포인트, 잘못된 설정으로 생기는 장애까지 다룬다.

Posted Date: 2026-11-04

CORS 이해하기 - SOP부터 Preflight, 요청/응답 헤더, 에러 메시지까지

CORS is a browser mechanism for relaxing the Same-Origin Policy, not a server-side security layer. Covers simple vs preflighted requests, request and response CORS headers, Spring configuration, and how to map Chrome error messages to the missing header.

CORS를 SOP부터 다시 정리한다. Simple Request와 Preflight(OPTIONS)의 차이, 브라우저가 보내는 요청 헤더와 서버가 돌려주는 응답 헤더, Expose-Headers, credentials, Max-Age, Vary 같은 디테일을 Spring Boot 4.1과 Chrome으로 직접 확인한 결과로 살펴본다.

Posted Date: 2026-11-01 ・ Updated: 2026-11-02

Gradle Version Catalog로 의존성 버전 한 곳에서 관리하기

Gradle Version Catalog keeps dependency and plugin versions in one TOML file. Covers the libs.versions.toml structure, multi-module and cross-project sharing, and what the catalog does not do.

Gradle Version Catalog로 의존성과 플러그인 버전을 libs.versions.toml 한 곳에 모으는 방법을 정리한다. 기본 구조와 접근자 이름 규칙, 멀티 모듈과 여러 프로젝트에서 공유하는 방법, Dependabot 연동과 마이그레이션까지 Gradle 9.4로 직접 확인한 결과를 바탕으로 살펴본다.

Posted Date: 2026-10-24 ・ Updated: 2026-11-02

Pod 리소스를 줄였더니 GC가 바뀌었다 - JDK 21 ergonomics를 OTel과 Prometheus로 확인하기

Lowering a Pod's CPU and memory limits can silently switch the JVM from G1 to Serial GC. See the switch in OpenTelemetry and Prometheus metrics, and what it does to GC time and response latency.

JDK 21에서 Pod의 CPU, 메모리 limit을 줄이면 JVM ergonomics에 의해 G1GC가 Serial GC로 바뀔 수 있다. 실제 Kubernetes Pod에서 GC가 바뀌는 순간을 OpenTelemetry와 Prometheus 지표로 확인하고, GC가 바뀌었을 때 GC 시간과 응답 시간이 어떻게 달라지는지 살펴본다.

Posted Date: 2026-10-10 ・ Updated: 2026-11-02

Timeout 설정 헷갈리지 않기: Tomcat, WebFlux, HTTP Client, HikariCP 기준 정리

connection/socket/read/write timeout, max lifetime, keepalive - what each setting actually controls on Tomcat, HTTP clients, and HikariCP, and how to configure them without mixing up the layers.

이름은 비슷한데 하는 일이 다른 타임아웃/keepalive 설정들을 Tomcat, WebFlux(Reactor Netty), HTTP 클라이언트(Feign, RestTemplate, WebClient), HikariCP 기준으로 나눠서 정리한다.

Posted Date: 2026-09-02 ・ Updated: 2026-11-02

OpenFeign 기본값의 함정 - 커넥션 풀 없는 HttpURLConnection과 Spring HTTP Interfaces 마이그레이션

OpenFeign's default client silently runs on connection-pool-less HttpURLConnection - how to spot it and migrate to Spring 6 HTTP Interfaces (HttpServiceProxyFactory).

별다른 설정 없이 OpenFeign 을 쓰면 커넥션 풀이 없는 HttpURLConnection 이 기본 클라이언트로 동작한다는 함정을 데모로 검증하고, Apache HttpClient5/OkHttp 적용 및 Spring 6 HTTP Interfaces(HttpServiceProxyFactory)로의 마이그레이션 방법을 정리한다.

Posted Date: 2026-08-29 ・ Updated: 2026-11-02

URL 쿼리스트링에 허용되지 않는 문자를 넣으면 어떻게 될까 (RFC 7230, RFC 3986)

What happens when a URL query string contains a character not allowed by RFC 3986, and how Tomcat handles it.

URL 쿼리스트링에 RFC 3986 에서 허용하지 않는 문자를 인코딩 없이 전송하면 Tomcat 이 400 Bad Request 를 반환한다. 두 명세에서 허용 문자를 정의하는 방식을 살펴보고, FE encodeURIComponent 인코딩과 Tomcat relaxedQueryChars 설정을 정리한다.

Posted Date: 2026-07-21 ・ Updated: 2026-11-02

Demo로 이해하는 Istio Ambient mode (Gateway API + ext_authz)

Explore Istio Ambient mode and verify how Gateway API and ext_authz can replace an application-layer reverse proxy through a local demo.

Istio Ambient mode의 아키텍처와 트래픽 흐름을 알아보고, 기존 역방향 프록시 구조를 Istio Gateway(HTTPRoute)와 AuthorizationPolicy(ext_authz)로 전환하는 과정을 kind 기반 로컬 데모로 직접 검증한다.

Posted Date: 2026-06-23 ・ Updated: 2026-11-02

Thread Dump 분석과 활용

When to capture a Thread Dump, how to read one, and how to diagnose deadlocks, BLOCKED threads, and CPU spikes with real examples.

Thread Dump 수집 방법(jstack, kill -3, Spring Actuator)부터 스레드 상태 해석, 데드락/BLOCKED/CPU 스파이크 실제 예시까지 단계별로 살펴본다.

Posted Date: 2026-05-25 ・ Updated: 2026-11-02

Redis UnknownHostException 이 간헐적으로 발생할 때 확인할 DNS resolver 설정

Why UnknownHostException appeared intermittently in a Spring Boot MVC Redis Lettuce application even though Redis itself was running normally.

Spring Boot MVC Redis Lettuce 환경에서 UnknownHostException 이 간헐적으로 발생한 이유를 Redis 연결 재사용, 재연결, DNS resolver 설정 관점에서 정리한다.

Posted Date: 2026-05-06 ・ Updated: 2026-11-02