전체 글
MSA 환경에서의 JPA 사용법
MSA 환경은 기본적으로 도메인 별로 분리되어있는 마이크로서비스 환경이다. 모놀리스 아키텍처에서 JPA를 사용할 때는 DDD를 이용해 도메인 별로 분리 시켜서 구현할 수도 있었지만 그렇게 하지 않더라도 시스템 상 제약은 없었다. 근데 MSA 환경에서는 아예 물리적으로 서비스가 떨어져 있기 때문에 DDD를 강제해야하는 부분이 존재한다. 그래서 아래 Popit에서 본 글을 정리해보고자 한다. 서로 다른 Aggregate에서 연관관계 사용하지 않기 예를 들어 User와 Post라는 도메인이 서로 분리되어있는 마이크로 서비스라고 가정하자. User는 여러개의 Post를 작성할 수 있기 때문에 1:N 관계에 놓여있다. Post 테이블에는 당연히 '작성자'라는 User 정보가 담겨져 있긴 하지만 그 외에 User에..
[Kotlin] Optional vs Kotlin Nullable 문법 비교하기
번외 Optional을 안쓰고 전부 Kotlin 문법으로 하기 val user = userRepository.findByUsername(username) .orElseThrow { CannotFindUserException(username) } val user = userRepository.findByUsername(username) ?: throw CannotFindUserException(username) Optional optionalValue = // Optional 타입의 값 String result = optionalValue.orElse("default"); // 값이 존재하면 해당 값을 사용하고, 값이 없으면 "default"를 사용 Optional optionalValue = // Opt..
Kotlin에서 JPA 사용법
Kotlin에서 JPA를 사용하면서 겪은 시행착오를 좀 짧게 적어보려고 한다. 다른 글들도 많지만 개인 정리 겸 한꺼번에 모아서 보기 위함이다. plugin.jpa 사용하기 plugins { kotlin("plugin.allopen") version "1.3.71" kotlin("plugin.noarg") version "1.3.71" kotlin("plugin.jpa") version "1.3.72" } allOpen { annotation("javax.persistence.Entity") } noArg { annotation("javax.persistence.Entity") } JPA에서 Lazy Loading을 사용하려면 프록시 객체를 이용해야한다. 하지만 Kotlin에서의 모든 클래스, 함수, 프..
java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
문제 java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter 해결방법 gradle implementation 'javax.xml.bind:jaxb-api:2.3.0' maven javax.xml.bind jaxb-api 2.3.0 이유 DatatypeConverter가 해당 모듈에 있을만한 기능이 아니고 JAXB에 있을 기능이라서 모듈간의 분리를 위해서 기능이 분리가 되었다. 그러므로 Java 9 이후부터는 DatatypeConverter 사용을 위해선 jaxb를 위처럼 추가해준다.