Tag: java

VO vs DTO: 정의와 용어 혼용의 역사

getter/setter만 있는 데이터 운반용 객체를 VO(Value Object)라고 부르는 관행은 혼란을 부릅니다. VO는 값의 의미와 동등성에 관한 분류이고, DTO는 데이터를 전송하는 역할에 관한 분류입니다. Java/J2EE 진영에서 용어 혼용을 확산시킨 Core J2EE Patterns의 사례와 두 패턴의 정의를 정리합니다.

Continue Reading

Call by value vs Call by reference

"primitive type은 call by value, 객체는 call by reference"라는 설명은 오해입니다. Java와 JavaScript는 객체를 전달할 때도 참조값의 복사본을 전달하는 call by value 방식만 씁니다. swap 예제와 그림으로 참조 재할당과 객체 상태 변경의 차이를 정리하고, 진짜 call by reference를 지원하는 언어와 비교합니다.

Continue Reading

Java 문자열 더하기 연산의 최적화

String을 +로 더하는 코드가 javac과 JDK 런타임에서 버전에 따라 어떻게 최적화되는지 정리합니다. JDK 1.4의 StringBuffer 치환, JDK 5의 StringBuilder 치환, JDK 9의 invokedynamic 도입, JDK 15의 대안 전략 제거, JDK 24의 hidden class 기반 구현까지의 변화를 JDK 25에서 확인한 바이트코드와 함께 설명합니다.

Continue Reading

IEEE 754 부동소수점 오차와 BigDecimal

IEEE 754 표현이 0.1 같은 십진 소수를 정확히 담지 못하는 이유와, 자바에서 그 오차를 피하는 BigDecimal과 정수형 최소 단위 두 대안, 그 위에 얹는 Java Money 같은 도메인 특화 라이브러리를 정리합니다.

Continue Reading

Spring Retry로 구현하는 재시도와 서킷 브레이커

Spring Retry의 RetryTemplate과 @Retryable, @Recover, @CircuitBreaker로 재시도, 리커버, 서킷 브레이커 정책을 적용하고 테스트 코드로 검증하는 방법을 정리합니다.

Continue Reading

junit-benchmarks로 HTTP API의 응답 시간 측정하기

JUnit 4 확장인 junit-benchmarks로 HTTP API에 동시 요청을 보내 응답 시간을 측정하던 2012년경의 예제를 설명하고, 지금 같은 일을 한다면 어떤 도구를 쓸지 정리합니다.

Continue Reading

BTrace로 MySQL JDBC 드라이버의 내부 동작 측정하기

실행 중인 JVM에 붙어서 MySQL Connector/J 내부 메서드의 호출 횟수와 평균 실행 시간을 집계하는 BTrace 스크립트 예제를 설명합니다.

Continue Reading

Jackson으로 파싱한 JSON 속성값을 생성자로 전달하기

Jackson으로 JSON을 파싱한 속성값을 객체의 생성자로 전달할 수 있는 여러가지 방법을 정리했습니다.

Continue Reading

여러 개의 JDK를 설치하고 선택해서 사용하기

하나의 개발 장비에 여러 배포판/버전의 JDK를 설치하고 선택해서 사용할 때 편하게 쓸 수 있는 도구들을 소개합니다.

Continue Reading

'네이버를 만든 기술, 읽으면서 배운다 - 자바편' 출간

Continue Reading

Spring Loaded로 Tomcat 재시작 없이 수정한 클래스 반영하기

수정한 클래스 파일만 재로딩하는 Spring Loaded를 tomcat7-maven-plugin, Eclipse WTP와 함께 사용하는 방법을 정리합니다.

Continue Reading

통합 테스트를 위한 내장 Tomcat, tomcat-bed

통합 테스트 안에서 내장 Tomcat을 띄워 JSP 렌더링까지 검증하는 tomcat-bed 예제를 설명합니다. Spring 테스트 컨텍스트에 bean으로 등록하면 여러 테스트가 WAS 하나를 공유하고, 포트가 이미 사용 중이면 떠 있는 서버를 그대로 씁니다.

Continue Reading

Java에서 여러줄에 걸친 문자열 선언을 편하게 하는 @Multiline

Continue Reading

스레드 안정성의 문서화와 JCIP 애너테이션

Continue Reading

Java Stack dump 다운로드를 편하게

Continue Reading

SpringSource Tool Suite의 Java Agent based reloading 사용해 보기

Continue Reading

Java에서 XML없이 SQL개발하기

Continue Reading

BeanUtils 성능비교 - Apache commons, Opensymphony, Spring

Continue Reading

Java auto boxing의 컴파일 방식과 Integer 캐시

int와 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

Effective & Agile Java Generics

Continue Reading

Effective Java 2nd Edition

Continue Reading

Java에서 Checked Exception은 언제 써야 하는가?

Continue Reading

JDBC에서 Connection, Statement,ResultSet의 close

Continue Reading

Effective Java에 대한 서평에 재미있는 댓글

Continue Reading

Java Coding Convention 관련 문서들

Continue Reading

java의 List와 반복문(loop), 그리고 변수 선언 위치에 대해서

Continue Reading