분류 전체보기
-
[23.12.26] Outbox Transaction Pattern블로그 번역 2023. 12. 26. 21:27
이번 주제는 트랜잭션 패턴 중 하나인 Outbox Pattern에 관한 주제입니다. 소개 기존 모놀리틱 서버에서의 Transaction은 간단하게 처리가 가능했다. 그러나 서버가 나뉘어지며 이벤트 중심의 로직 처리가 중요해졌다. 결과적으로 Transaction을 처리하기 위해 새로운 패턴이 필요하게 되었다. 패턴들이 필요한 이유에 대해서 상세히 알아보자. 실패를 성공으로, 성공을 실패로 만들 수 있는 상황 사례 1: 성공을 실패로 @Transactional public Product registerProduct(RegisterProduct product) { Product product = Product.toEntity(product); productorRepository.save(product); re..
-
[23.12.20] Spring Data JPA 성능 최적화블로그 번역 2023. 12. 21. 11:37
소개글 Spring Data JPA는 데이터 베이스 관리 및 상호 작용 시 강력한 Tool이다. 그러나 잘못 사용하는 경우 성능이 떨어질 수 있다. 성능을 최적화하는 방법에 대해서 알아보자. 1. 적절한 인덱싱 사용 WHERE, JOIN, ORDER BY에 자주 사용하는 Column Index를 생성하여 쿼리 속도를 높이자. 과도한 인덱싱은 피하는 것이 좋다. INSERT/UPDATE 성능에 영향을 줄 수 있다. @Entity public class Book { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; private String isbn; @ManyToOne @JoinColum..
-
[23.12.19] 단위 테스트에서 환경 변수 Mocking블로그 번역 2023. 12. 19. 18:35
소개 Unit Test 작성 업무 중 Enviroment Mocking에 대한 글을 읽었다. 자바는 환경 변수가 JVM 시작과 동시에 Immutable 하기 때문에 다른 언어에 비해서 Mocking이 어렵다. 해결하기 위해 최선의 방법은 로딩 될 때 환경변수를 로딩하는 것이지만 상황에 따라 환경 변수를 변경해야 할 때가 있다. 방법1: Pioneer 이 방법은 리플렉션 기반의 동작이기 때문에 JDK 17부터 사용 불가능하다. 만약 사용하고 싶다면 maven 옵션을 추가해주자. org.apache.maven.plugins maven-surefire-plugin --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UN..
-
[23.12.19] JVM: 아키텍처 및 성능 최적화블로그 번역 2023. 12. 19. 10:09
소개글 JVM은 코드와 실행 성능에 중요한 요소이면서 복잡하게 동작한다. JVM을 아는 것은 코드를 구성할 때 성능을 고민하며 작성할 수 있게 도움을 준다. JVM Architecture 1. Class Loader Subsystem 동적 로딩, 링킹, 클래스 초기화를 하는 시스템이다. * 동적 로딩: 클래스 로더는 바이너리 형식으로 데이터를 일고 런타임 영역으로 클래스를 가져오는 역할. * 링킹: 로딩 후 로드 클래스가 정확한지, 클래스의 요소에 대해 메모리 할당 및 고정 값 초기화하는 역할. Class Loader의 종류 * Bootstrap Class Loader: 자바 Core Class 로드(ex> java.lang.Object) * Extension Class Loader: JRE에 있는 클래..