[Kotlin] 코틀린에서 JPA사용하기. LAZY 로딩이 의도대로 작동 하지 않는다면..

Intro 얼마전 코틀린으로 진행중인 토이프로젝트에서 응답속도가 생각만큼 나오지 않기에 쿼리 나가는걸 하나하나 확인 해 보았습니다. 그랬더니 분명 LAZY로 되어있는 여러가지 연관관계들이, 따로 사용하는 곳도 없는데 전부 다 하나씩 Eager Fetch 처럼 불러지는게 확인 되었습니다. 코틀린에서 JPA를 사용하다보면 자바와는 다른 코틀린의 설계로 인해 의도치 않은 문제가 많이 발생 할 수 있는데요. 어떤 문제가 있었는지, 그리고 LAZY 로딩이 의도대로 작동하게끔 하려면 어떻게 해야 하는지에 대해 알아보겠습니다. 필요시 모든 예제 코드는 https://github.com/Shane-Park/helloKotlin/tree/master/jpatest 에서 확인 하실 수 있습니다. 예제 코드 프로젝트 생성 ..

Programming/Kotlin 2022.12.05
(Linux 서버로 사용중인) 노트북 SSD/하드 추가 및 마운트

Intro 지난번에는 노트북에 램을 추가시켰습니다. 본격적으로 이것 저것 다양한 용도로 사용하려고 하는데 저장공간이 이미 거의 다 차버렸습니다. 하단의 비어있는 2.5인치 SATA 슬롯 다행히도 램을 추가하면서 확인해보니 여분의 2.5인치 sata 슬롯이 비어있는걸 확인 했었기에 저렴한 하드를 하나 구입하려고 알아보던 차에 쿠팡에서 512GB SSD가 하드보다도 싼 가격에 반짝 딜이 올라왔고, 바로 구입을 해서 설치 해 보았습니다. SSD 설치 SSD는 설치는 그냥 비어있는 슬롯에 꼽기만 하면 되기 때문에 정말 쉽습니다. 같은 공간에 2.5인치 하드디스크를 구입해서 설치 해도 됩니다. SSD는 그냥 꼽고 땡이지만 하드디스크는 물리적 충격에 민감하기 때문에 고정하는 작업이 보통 추가로 필요합니다. 파티션 ..

IT ⁄ Computer/Linux 2022.12.01
(Linux 서버로 사용중인) 노트북 메모리 추가

Intro 집에서 2년째 가벼운 서버 용도로 사용하고 있는 노트북이 있습니다. 클라우드를 저렴하게 사용할 수 있다면 그게 최선이겠지만, 여러 가지 무료 클라우드를 비교 해 보았을 때, 오라클에서 제공하는게 가장 좋음에도 불구하고 최대 2개의 인스턴스 및 각각 1GB의 메모리를 사용 할 수 있다보니 도커 기반의 무엇인가를 올리기에는 엄두가 나지 않습니다. 그러다 보니 오라클 클라우드는 개인 ip 주소를 드러내지 않기 위한 간단한 프론트 서버의 용도 정도로만 사용 하고 있습니다. 제가 필요한 컨테이너 중에는 메모리를 크게 차지하는게 몇몇 있는데, 그 중에서도 엘라스틱 서치는 평소에도 제 PC 기준 5GB 정도의 많은 메모리를 잡아먹습니다. 램 용량과 클라우드 비용은 정비례를 할 만큼 램의 크기는 비용에 큰 ..

IT ⁄ Computer/Linux 2022.11.27
[Java] 불변객체(Immutable Object)의 JSON 직렬화 및 역직렬화

Intro DTO 혹은 VO 객체를 생성 할 때, Immutable 하게 생성 한다면 여러가지 장점이 있습니다. 멀티 쓰레드 환경에서 동기화를 고려 할 필요 없이 안전하게 사용 할 수 있으며, 캐싱을 하기에도 유리합니다. 특히 mutable 객체를 잘못 코딩함으로서 생기는 사이드이펙트는 예측하기도 어려울 뿐더러 오류가 발견되는것도 쉽지 않습니다. 한참이 지나서야 도대체 알 수 없는 오류가 발생해서 이것 저것 한참을 디버깅을 하다가 객체를 잘못 다룬게 발견될때는 거의 소름이 돋을 정도입니다. 프로퍼티의 값이 변화될 일이 없고, 값이 변경되어서는 안되는 객체를 방어적 복사를 하는 거 보다는 애초에 불변객체로 생성 하는것이 성능을 비롯한 여러 가지 장점이 있습니다. 재사용도 얼마든지 할 수 있습니다. 이전의 ..

Programming/Java 2022.11.20
Cannot find a (Map) Key deserializer for type 해결

문제 Cannot find a (Map) Key deserializer for type [simple type, com.example.GroupView] Map의 키를 단순 String이 아닌 클래스로 했더니 Jackson의 역직렬화 중 에러 발생 키로 사용하는 코드는 아래와 같이 간단한 DTO 객체 public class GroupView { public GroupView(String uuid, String name, String alias) { this.uuid = uuid; this.name = name; this.alias = alias; } private final String uuid; private final String name; private final String alias; } 원인 ..

Development/Daily Error 2022.11.17