#파고들기

JVM GC 파고들기 — 컬렉터마다 다르게 도는 이유

weak generational hypothesis 하나로는 설명 안 되는 컬렉터별 동작 차이를, 같은 메모리 압박 상황에서 Serial·Parallel·G1의 실제 GC 로그로 비교해 확인한다

·JAVA·파고들기, JVM, Java, GC

코틀린 suspend 함수는 스레드 없이 어떻게 중단하고 재개하는가

suspend 함수가 컴파일 시점에 상태 머신으로 변환되는 과정을 바이트코드로 직접 확인하고, 콜백 기반 API 위에서 스레드를 블로킹하지 않고 중단·재개되는 동작을 재현한다.

·Kotlin·파고들기, Kotlin, 코루틴, 바이트코드

Kotlin List.contains를 Set으로 바꾸면 빨라지는 이유

리스트 원소 포함 여부를 반복 확인할 때 Set으로 미리 바꾸는 것과 그냥 List로 쓰는 것을 벤치마크로 비교하고, 차이의 근거를 stdlib 소스에서 찾는다

·Kotlin·파고들기, Kotlin, 컬렉션, 성능

Kotlin 프로퍼티가 여러 JVM 요소로 컴파일되는 이유

use-site target이 왜 필요한지 실제 바이트코드를 javap로 확인한다

·Kotlin·파고들기, Kotlin, 애노테이션, 바이트코드

행 추정치 1이 조인 플랜을 뒤집는 과정

통계에 없는 값의 선택도가 0이 되고, 1로 clamp된 추정치가 Nested Loop을 부르기까지

·데이터베이스·파고들기, Database, PostgreSQL, 테스트

같은 클래스 안에서 부른 @Transactional은 왜 동작하지 않을까

Spring AOP의 프록시 기반 동작을 테스트로 확인했다

·Spring·파고들기, Spring, 트랜잭션, AOP

예외를 잡았는데 왜 롤백될까

@Transactional 전파 속성과 rollback-only 표시를 테스트로 확인했다

·Spring·파고들기, Spring, 트랜잭션, 테스트

트랜잭션 격리 수준은 DBMS마다 다르게 동작한다

표준 정의만 외우면 실무에서 틀리는 이유와, 테스트로 직접 확인한 기록

·데이터베이스·파고들기, Database, 트랜잭션, 테스트