JDK 25와 Linux 6.x에서 외부 프로세스를 실행할 때 필요한 출력 처리, 시간제한, 종료 정책을 예제로 정리합니다. zt-exec과 Apache Commons Exec의 API와 기본값을 비교하고, 기본 실행 방식인 posix_spawn의 동작, 큰 힙에서의 실행 지연과 실행 방식 설정의 변경 이력을 다룹니다.
Continue Readinggetter/setter만 있는 데이터 운반용 객체를 VO(Value Object)라고 부르는 관행은 혼란을 부릅니다. VO는 값의 의미와 동등성에 관한 분류이고, DTO는 데이터를 전송하는 역할에 관한 분류입니다. Java/J2EE 진영에서 용어 혼용을 확산시킨 Core J2EE Patterns의 사례와 두 패턴의 정의를 정리합니다.
Continue ReadingCall by value와 call by reference의 정의를 정리하고, Java, Kotlin, JavaScript, C, C++, C#, Python, Go, Rust, Ada가 인자를 어떻게 전달하는지 비교합니다.
Continue ReadingString을 +로 더하는 코드가 javac과 JDK 런타임에서 버전에 따라 어떻게 최적화되는지 정리합니다. JDK 1.4의 StringBuffer 치환, JDK 5의 StringBuilder 치환, JDK 9의 invokedynamic 도입, JDK 15의 대안 전략 제거, JDK 24의 hidden class 기반 구현까지의 변화를 JDK 25에서 확인한 바이트코드와 함께 설명합니다.
Continue ReadingIEEE 754 표현이 0.1 같은 십진 소수를 정확히 담지 못하는 이유와, 자바에서 그 오차를 피하는 BigDecimal과 정수형 최소 단위 두 대안, 그 위에 얹는 Java Money 같은 도메인 특화 라이브러리를 정리합니다.
Continue Reading실행 중인 JVM에 붙어서 MySQL Connector/J 내부 메서드의 호출 횟수와 평균 실행 시간을 집계하는 BTrace 스크립트 예제를 설명합니다.
Continue ReadingJUnit 4 확장인 junit-benchmarks로 HTTP API에 동시 요청을 보내 응답 시간을 측정하던 2012년경의 예제를 설명하고, 지금 같은 일을 한다면 어떤 도구를 쓸지 정리합니다.
Continue ReadingSpring Retry의 RetryTemplate과 @Retryable, @Recover, @CircuitBreaker로 재시도, 리커버, 서킷 브레이커 정책을 적용하고 테스트 코드로 검증하는 방법을 정리합니다.
Continue ReadingJackson으로 JSON을 파싱한 속성값을 객체의 생성자로 전달할 수 있는 여러가지 방법을 정리했습니다.
Continue Reading하나의 개발 장비에 여러 배포판/버전의 JDK를 설치하고 선택해서 사용할 때 편하게 쓸 수 있는 도구들을 소개합니다.
Continue Reading수정한 클래스 파일만 재로딩하는 Spring Loaded를 tomcat7-maven-plugin, Eclipse WTP와 함께 사용하는 방법을 정리합니다.
Continue Reading통합 테스트 안에서 내장 Tomcat을 띄워 JSP 렌더링까지 검증하는 tomcat-bed 예제를 설명합니다. Spring 테스트 컨텍스트에 bean으로 등록하면 여러 테스트가 WAS 하나를 공유하고, 포트가 이미 사용 중이면 떠 있는 서버를 그대로 씁니다.
Continue Reading스레드 안전성을 Javadoc에서 어떻게 표시하는 것이 좋을지와 멀티스레드에서 위험한 코드가 배포되지 않도록 애너테이션과 정적 분석 도구, 테스트로 방어하는 방법을 정리합니다.
Continue Readingint와 Integer를 섞어 쓸 때 생기는 auto boxing·unboxing이 Integer.valueOf()와 intValue() 호출로 컴파일되는 과정을 JDK 25의 바이트코드로 확인합니다. IntegerCache의 -128~127 범위와 JLS 5.1.7의 요구사항, -XX:AutoBoxCacheMax 옵션, 박싱된 타입을 반복문에 쓸 때의 비용, 그리고 캐시 구현과 wrapper 생성자 deprecation이 JDK 5부터 25까지 어떻게 바뀌었는지 정리합니다.
Continue Reading