
1. 스프링이 구현한 Aggregate Root(애그리거트 루트)와 도메인 이벤트 [ Aggregate(애그리거트)와 도메인 이벤트 ] 도메인을 중심으로 하는 애플리케이션을 개발할 때 등장하는 개념으로 애그리거트가 있다. 애그리거트(Aggregate)란 관련된 객체들을 모아둔 하나의 단위로, 값 객체(Value Object)와 엔티티(Entity)로 구성된다. 그리고 애그리거트의 중심에는 애그리거트 루트가 존재하는데, 이를 애그리거트 루트(Aggregate Root)라고 부른다. 객체들은 애그리거트 루트를 중심으로 관리된다. (해당 포스팅은 이러한 내용을 자세히 다루는 것이 주목적이 아니므로 간략히만 살펴보도록 하자.) 이를 주문 도메인을 기준으로 그려보면 다음과 같다. 애그리거트 루트가 영속화 될 때 ..
1. 언제 추상 클래스(Abstract Class) 또는 인터페이스(Interface)를 사용해야 하는가? [ 인터페이스와 추상 클래스의 특징 ] 인터페이스 인터페이스(Interface)는 상호 작용 방식을 명세해둔 것이다. 인터페이스의 호출자는 인터페이스의 구현에 대한 지식 없이도 원하는 기능을 수행할 수 있어야 한다. 예를 들어 우리는 자동차가 어떻게 움직이는지 세부 구현을 모르지만, 엑셀을 밟으면 앞으로 가고 브레이크를 밟으면 멈춘다는 약속을 통해 자동차를 운전할 수 있다. 따라서 인터페이스는 일종의 계약(contract)이라고도 불린다. 추상 클래스 추상 클래스(Abstract Class)는 인터페이스와 유사하다. 인터페이스와 마찬가지로 인스턴스화 할 수 없으며, 구현을 포함하거나 포함하지 않은 ..

1. JVM의 체크포인트 생성과 복구를 위한 CRaC 프로젝트 [ CRaC 프로젝트란? ] CRaC(Coordinated Restore at Checkpoint) 프로젝트는 실행 중인 Java 인스턴스에 체크포인트(이미지 혹은 스냅샷의 생성)를 생성하고 복구하는 방법을 연구한다. 이 프로젝트의 주요 목표는 자바 프로그램에 체크포인트 생성과 복구를 알리는 새로운 표준이 되는 독립적인 API를 개발하는 것이다. CRaC은 Azul Systems에서 개발하였으며 AWS Lambda에서 지원했던 기능으로, 현재는 OpenJDK 프로젝트이다. 이는 리눅스(Linux)에서 체크포인트/복원 기능을 구현한 CRIU 프로젝트를 기반으로 하며, 자바 애플리케이션에 맞게 몇 가지 개선 및 조정 사항이 추가되었다.이를 통해 ..

1. EmptyResultDataAccessException 예외가 발생한 SQL 쿼리와 파라미터 로깅하기 [ 요구 사항 ] 서비스를 개발하다 보면 존재하지 않는 리소스에 접근하여 EmptyResultDataAccessException 에러가 발생하는 경우가 있다. 하지만 EmptyResultDataAccessException를 통해서는 어떤 쿼리의 어떤 파라미터로 인해 문제가 발생했는지 정확한 파악이 어렵다. 만약 여러 개의 레포지토리에 접근하는 중에 리소스를 접근하고 있다면 더욱 파악이 어렵다. 따라서 에러가 발생한 쿼리를 로깅하여 에러 로그를 보완하도록 하자. [ 기능 추가 ] 쿼리와 파라미터를 저장하기 위한 컨텍스트 추가 파라미터를 컨텍스트에 저장하기 위한 AOP 추가 실행 쿼리를 컨텍스트에 저장..