본문 바로가기

반응형

spring

(22)
[하이버네이트 유저 가이드 파헤치기] JPA 2.1 AttributeConverters 실습 모든 실습 코드는 필자의 github의 리포지토리에서 볼 수 있다. 실습 환경은 spring boot(2.2.6) + kotlin이다. 자세한 사항은 build.gradle.kts 참고바란다. 공식 문서에 나와있는대로 해보기 우선 공식 문서의 예제를 그대로 재현해서 attributeConverter가 제대로 동작하는지 테스트해보겠다. example1. 엔티티 Event 정의 @Entity class Event( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(insertable = false, updatable = false) val id: Long? = null, @Convert(converter = PeriodStringConverte..
[하이버네이트 유저 가이드 파헤치기] 매핑 타입 - 2.1 2.1 매핑 타입 (Mapping types) 하이버네이트는 애플리케이션 데이터의 자바와 JDBC 표현을 모두 이해한다. 애플리케이션 데이터를 데이터베이스에서 조회하고 입력하는 기능은 하이버네이트 타입의 기능이다. 이런 사용 사례에서 타입은 org.hibernate.type.Type interface의 구현이다. 또한, 이 하이버네이트 타입은 자바 타입의 동등성 확인 방법이나 값 복사와 같은 다양한 행동적 측면을 설명한다. 필자 해설 잘 이해가 안 될 수 있는 대목이다. 이후 유저 가이드에서 자세하게 다룰 부분이지만 대략적으로 설명하겠다. 하이버네이트 타입 중 StringType은 JDBC 타입 VARCHAR과 자바 타입 java.lang.String를 연결해준다. 그렇기 때문에 애플리케이션 데이터를 D..
[하이버네이트 유저 가이드 파헤치기] 도메인 모델 - 2 Domain Model 도메인 모델이라는 용어는 데이터 모델링에서 유래되었다. 도메인 모델은 궁극적으로 당신이 작업하고 있는 문제 도메인을 설명하는 모델이다. 또한, 당신은 때때로 persistent classes라는 용어를 들어보았을 것이다. 궁극적으로 애플리케이션 도메인 모델은 ORM의 주요한 특성이다. ORM은 당신이 도메인 모델과 연결하기 원하는 클래스를 구성한다. 만약, POJO나 자바 프로그래밍 모델을 따르는 클래스라면 하이버네이트는 최고로 동작한다. 그러나, 이 규칙들은 전혀 어려운 요구사항이 아니다. 사실, 하이버네이트는 매우 조금만 당신의 persistent objects에 대해서 가정한다. (거의 가정하지 않는다는 뜻) 당신은 도메인 모델을 다른 방법으로도 표현할 수 있다. ( 예를 들..
[하이버네이트 유저 가이드 파헤치기] 아키텍처 - 1 이번 글은 원문을 번역하는 방식으로 하고, 추가적으로 Spring boot에서 EntityManager를 가져오는 방법을 추가적으로 다루고자한다. 번역은 의역으로 하되, 번역기의 의미 전달이 더 명료한 경우 그대로 구글 번역기의 번역을 사용하거나 다듬어서 차용했다. 유저 가이드의 설명이 부족한 경우에는 필자의 지식을 토대로 해설을 넣었고, 잘 모르는 내용은 참고 자료에 첨부된 자료들을 참고해서 작성했다. 하이버네이트 아키텍처에 대하여 위 다이어그램에서 알 수 있듯이 ORM 솔루션으로써 하이버네이트는 Java application data access layer와 RDBMS 사이에 알맞게 위치한다. 자바 애플리케이션은 하이버네이트 API를 데이터베이스에서 도메인 데이터를 불러오고, 저장하고, 질의하고, 그..
[하이버네이트 유저 가이드 파헤치기] 들어가며 - 0 들어가며 처음 개발자로 일을 시작한 시점(2017년)에는 mybatis라는 SQL Mapper를 사용해서 개발을 했었습니다. 아무래도, 당시에는 한국 IT 개발이 SI 중심으로 이루어져서 그런 것 같습니다. 그런데 최근 몇년간 IT 서비스를 개발하는 스타트업들이 많아지고 투자도 많아져서 그런지 JPA를 많이들 사용하기 시작한 것 같습니다. 많은 개발자들이 입사하고 싶어하는 네카라쿠배당토 같은 회사들에서 JPA를 적극적으로 사용하고 있기 때문에 그런지도 모르겠습니다. 아래 구글 트렌드를 보니, 확실히 JPA의 관심도가 꾸준히 올라갔고 최근에는 마이바티스와 거의 비등해지고 있는 것을 알 수 있습니다. 저는 개인 프로젝트에 JPA를 적용하기 시작해 실무에서 JPA를 사용한지 2년이 넘었습니다. 처음에는 김영한..
@DataJpaTest를 이용해 Lazy loading 테스트할 때 주의할 점 0. 들어가며 현재 JPA에서 일대일 연관관계 매핑에 대한 글을 적고 있다. 그래서 코드를 작성해서 테스트하는데. 내가 원하는 테스트 결과가 안 나와서 헤매다가 해법을 찾았다. 해법을 찾으면서 몰랐던 지식을 습득하기도 했다 그런데 돌이켜보니 2년전에 이미 문제를 겪어서 거기에 대한 조치를 취한 적도 있었다는 것을 알았다. 그래서 기록으로 남기려고 한다. 1. 문제 상황 아래는 이번에 문제가 생겼던 코드이다. 일단 엔티티 Post와 PostDetails의 관계는 일대일 연관관계로 Post가 연관관계의 주인으로 외래키를 가지고 있는 구조이다. @Entity class Post( @Id @GeneratedValue val id: Long? = null, var title: String? = null, @Col..
Querydsl을 사용하는 자바(JAVA) Spring Framework 프로젝트에 코틀린(Kotlin) 설정 1. QueryDSL이란? Spring Framework에서 JPA, QueryDsl 조합을 애용하고 있다. 특히, QueryDsl을 사용하면 SQL, JPQL을 type safe하게 작성할 수 있다. type safe하게 작성할 수 있다는 것은 IDE의 지원을 받아서 쉽고 안전하게 Query를 작성할 수 있다는 의미이다. 그리고 Spring Data JPA를 사용하면 다이나믹 쿼리를 사용할 수 없어서 코드가 장황해지고 중복되는데. QueryDsl는 다이나믹 쿼리를 작성가능해서 반복되는 코드수를 줄일 수 있다. 2. 자바(Java)를 사용하는 Spring data jpa project에서 QueryDsl 설정 QueryDsl을 사용하려면 컴파일(Compile)시에 QClass를 생성하기 위한 설정을 해야..
[spring cloud] hystrix 도입하면서 alpine linux에서 jvm error 발생 저번에 t아카데미에서 MSA에 관한 세미나에 참석하고 이번에 클라우드 네이티브 자바라는 책을 접하면서(완독은 못하고 일부 읽었다.)퍼블릭 클라우드 서비스를 사용하고 컨테이너 기술을 사용하고 있다면 내가 공부한 내용을 실천해야겠다고 생각했다. OOP의 단일책임원칙처럼 애플리케이션이 가급적 하나의 목적(하나의 도메인이라고 표현해야할지도 모르겠다...)을 가지고 기능하도록 서비스 컴포넌트로 분리하고자 했다. 스토리지를 서비스 컴포넌트마다 하나씩 두고 각 서비스 컴포넌트가 단일 인터페이스로 통신하는 형식으로 바꿔야 겠다는 생각을 했다.사용자 로그를 현재 하나의 컨텐츠를 조회할 때만 기록하는데 사용자가 검색할 때 무엇을 검색했는지 기록에 남기는 요구사항이 있었다. Firestore를 저장소로 사용하고 로직을 작성..

반응형