1. 헥사고날 아키텍처에 대하여[ 헥사고날 아키텍처의 도메인 엔티티(Domain Entity) ]우리는 소프트웨어를 개발할 때 어떠한 의미를 갖는 이론적 토대를 바탕으로 개발을 하게 된다. 예를 들어 우리가 헥사고날 아키텍처라는 아키텍처 패턴으로 시스템을 개발한다고 하자.헥사고날 아키텍처(Hexagonal Architecture)는 소프트웨어 설계 패턴 중 하나로, 포트와 어댑터 아키텍처(Ports and Adapters Architecture)라고도 불린다. 이 아키텍처의 주요 목표는 애플리케이션의 비즈니스 로직(핵심 도메인 로직)을 외부 의존성으로부터 분리하여 애플리케이션의 유지보수성, 테스트 용이성, 유연성을 높이는 것이다. 해당 포스팅은 헥사고날 아키텍처를 다루는 것이 아니기에, 단순히 “도메인을..
1. AttributeConverter registered multiple times 에러(JPA, Hibernate)[ 문제 상황 공유 ]문제가 발생했던 환경은 다음과 같다.Spring Boot 2.7Hibernate: 5.6.16.Final통합테스트에서만 발생 그리고 문제가 생겼던 코드는 다음의 부분이였다. YearMonth 타입의 필드를 데이터베이스에 저장하기 위해 String 타입으로 변환하도록 컨버터를 사용하는 부분이다.@Converterclass YearMonthConverter : AttributeConverter { override fun convertToDatabaseColumn(attribute: YearMonth?): String? { return attribute..
1. @Transactional에서 첫 쿼리 실행까지(실제 Connection이 필요할 때까지)커넥션 점유를 늦추는 LazyConnectionDataSourceProxy[ @Transactional의 동작 방식 ]스프링에서 개발을 하다 보면 @Transactional 애노테이션을 활용하게 된다. @Transactional은 AOP(Aspect-Oriented Programming) 기반으로 데이터베이스 커넥션으로부터 트랜잭션 관련 기능을 지원하도록 도와준다. 스프링의 트랜잭션에 대한 자세한 내용은 여기 링크를 참고하도록 하자.@Transactional 애노테이션을 선언하면, Transaction 처리를 위한 부가 기능(Advice) 클래스인 TransactionInterceptor 클래스에서 요청을 가로..
1. @PostConstruct 내부에서 @Bean 메서드 호출로 인해 발생하는 circular dependencies 문제 해결하기[ 문제 상황 공유 ]예를 들어 다음과 같은 코드가 있다고 하자.@Configuration@Slf4jpublic class ProfileConfiguration { @Value("spring.profiles.active") private String profile; @PostConstruct void init() { ServerProfile serverProfile = serverProfile(); if (serverProfile != null) { log.info("Using server profile: {..