1. H2 데이터베이스에서 @Transactional(readOnly=true)일때 save를 호출하는 경우[ H2 데이터베이스에서 @Transactional(readOnly=true)일때 save를 호출하는 경우 ]다음과 같이 트랜잭션을 시작하고 데이터를 저장하는 로직이 있다고 하자. 그런데 실수로 @Transactional을 readOnly로 설정하고 작업했다면 어떻게 동작할까?@RestControllerclass SystemController( private val memberRepository: MemberRepository,) { @GetMapping("/member") @Transactional(readOnly = true) fun health() { memb..
1. JVM의 init 메서드, 객체의 초기화를 위한 인스턴스 초기화 메서드(instance initialization method)[ 인스턴스 초기화 메서드 (instance initialization method) ]JVM은 객체 인스턴스를 초기화 할 때 init이라는 고유한 메서드를 활용한다. 예를 들어 다음과 같이 Object 객체를 생성하는 코드가 있다고 하자.Object obj = new Object(); 해당 코드를 컴파일하고 javap -c 명령어로 바이트 코드를 살펴보면 다음과 같음을 확인할 수 있다.0: new #2 // class java/lang/Object3: dup4: invokespecial #1 // Method java/lang/Obje..
이직을 하게 되면서, 기존에 자바만 사용하다가 처음으로 코틀린을 사용하게 되었다. 코틀린으로 작성된 코드를 읽는데, 지나치게 kotlin-specific 한 문법들이나 인지 부하를 초래하는 코드들로 인해 코드가 전혀 읽히지 않았다. 그래서 코틀린 공식 문서를 포함하여 책 3권 및 코틀린 관련 많은 영상들을 참고하여, 코틀린을 입문할 때 알면 좋은 내용들을 정리하였다. 1. 자바 개발자가 코틀린을 입문할 때 알면 좋은 내용들 모음[ 코틀린 공통 ]코틀린의 설계 목적컴퓨터가 인식할 수 있는 코드는 바보라도 작성할 수 있지만, 인간이 이해할 수 있는 코드는 실력 있는 프로그래머만 작성할 수 있다.- 마틴 파울러(Martin Fowler), 리팩터링 -“개발자가 코드를 작성하는 데는 1분 걸리지만, 이를 ..
1. Jackson ObjectMapper의 성능을 높여줄 Blackbird 모듈[ Blackbird 모듈이란? ]기존에 Jackson 라이브러리의 성능 향상을 위해 Jackson Afterburner 모듈이 사용되고 있었다. 하지만 Afterburner 모듈은 끔찍한 바이트코드 조작을 사용하고 있었고, 곧 지원이 중단되는 Unsafe.defineClass 를 사용하고 있었다. 즉, 최신 JVM(JVM 11+)와의 호환성이나 쓰기 접근 제한 등을 고려하여 노후화 징후를 보이고 있었던 것이다.따라서 이를 대체하기 위한 새로운 모듈이 등장하게 되었다. Jackson 2.1.2 릴리스(2020년 12월)와 함께 등장한 Blackbird 모듈은 뛰어난 성능 뿐만 아니라 새로운 구조(ex LambdaMetafac..
아래의 내용은 해외의 다음 포스팅을 변역 및 정리한 내용입니다. 1. 리플렉션(Reflection)을 포함한 다양한 코드 접근 방식들의 성능 [ 코드 접근 방식의 성능 요구사항 ] 우리는 특정 클래스를 요청/응답에 사용하거나 혹은 ORM에 사용하는 등의 많은 경우에 직렬화/역직렬화 과정을 거쳐야 하며, 이를 위해 특정 클래스의 Getter에 접근해야 할 때가 있다. 제네릭 혹은 Object 등을 사용하면 컴파일 타입이 존재하지 않으므로 어떤 클래스에 대한 직렬화/역직렬화를 하는지 모르는데, 이때 특정 클래스에서 Getter를 읽는 가장 빠른 방법은 무엇일까?예를 들어 다음과 같은 Person 클래스가 있다고 하자.public class Person { ... public String get..