JPA(5)
-
JPA(Jakarta Persistence API) - Type Conversion
Converter 말 그대로 자료형을 적재할 때 또는 로드할 때 바꿔서 가져오는 것입니다.다만 그렇다고 숫자인데 굳이 문자열로 바꿔서 만들 필요는 없습니다.즉 기본형에 대해서는 그닥 쓸 필요가 없죠. 하지만 때로는 유용한 게, 바로 List, Map 입니다.예를 들어보죠. 여기 Tomato 엔티티가 있고 컬럼 중에 tags가 있습니다.@Entity@Table(name = "tomatoes")class Tomato( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val srl: Long = Long.MIN_VALUE, val tags: MutableList = mutableListOf()) 안타깝지만, JPA에서는 Collectio..
2024.08.02 -
JPA(Jakarta Persistence API) - Entity Operation
Persistence Context 영속성 컨텍스트(persistence context)는 엔티티 인스턴스들이 관리되는 장소입니다.그리고 엔티티 매니저(entity manager)는 영속성 컨텍스트를 방문해 상호작용 할 수 있는 인터페이스를 가지고 있고요.쉽게 말해 엔티티 매니저는 우리가 어플리케이션에서 생성한 엔티티 인스턴스들을영속성 컨텍스트에 방문해서 가져와, 이를 통해 실제 데이터베이스에 CRUD를 수행한다고 생각하면 됩니다. 그렇기에 당연히 엔티티 매니저는 쿼리(query)를 생성할 수 있습니다.예를 들어 JPA(Jakarta Persistence API) - Entity 글에서 작성한 코드 중 하나를 실행해보면val peach = entityManager.find(Peach::class.java..
2024.06.06 -
JPA(Jakarta Persistence API) - Entity
Entity 엔티티(entity)란 가벼운 영속성 도메인 객체를 의미합니다.An entity is a lightweight persistent domain object. 가볍다라는 건, 최소한의 노력과 자원을 써야된다는 말과 같습니다.Jakarta에서 가장 쉽게 엔티티를 표현할 수 있는 건 그저 클래스(class)입니다. 그리고 영속성(persistent)이라는 건 없어지지 않는 특성을 생각하면 됩니다.쉽게 이해하면 우리가 파일을 저장했을 때 컴퓨터를 껐다 켜도 파일 내용이 사라지지 않는 것처럼이죠. 바로 뒤에 도메인(domain)이라는 용어를 썼는데,이는 곧 엔티티를 수단으로써 데이터의 변경 사항을 어딘가에 기록해둔다는 것입니다.즉 엔티티 자체가 데이터를 영속화하지 않고, 무언가가 엔티티를 통해서 데이..
2024.05.22 -
Kotlin 플러그인 All-open 파헤치기 (feat, JPA Fetch)
All-open 코틀린의 클래스와 메소드들은 기본적으로 final 입니다.예를 들어 아래와 같은 Parent 클래스가 있다고 하면class Parent { fun hello() = "hello world!"} 이제 Parent 클래스를 상속하지 못합니다. 말 그대로 final 이기 때문에 건드릴 수 없죠 클래스를 open 시켜준다고 한들open class Parent { fun hello() = "hello world!"} 마찬가지입니다. 따라서 아래와 같이 모두 open 키워드를 달아주어야 상속하거나 오버라이드 할 수 있습니다.open class Parent { open fun hello() = "hello world!"} all-open 플러그인은 사전에 정해둔 어노테이션을 클래..
2024.05.18 -
Mockito를 이용해 JpaRepository 테스트하기
Mockito Mock이란 건 진짜를 흉내내는 가짜를 의미합니다.가령 아래 코드가 있다고 하면repository.save(entity)실행하고 싶으면 repository 구현부가 존재해야겠죠.하지만 테스트 단계에서 실제 데이터베이스를 연결해서 사용하기란 참 난감합니다.로컬의 데이터베이스를 사용한다고 해도, 테스트 자체가 실제 데이터베이스에 강하게 결합되어 있다는 건 여전합니다. 따라서 저 구현부를 그럴듯하게 흉내내주는 것이 필요하고, 이때 Mock 개념을 사용하는 것입니다.repository.save 함수에 어떤 걸 인자로 제공하면, 이걸 무조건 리턴하도록 하세요. 이렇게 코드에서 직접 주고 받고하는 것들을 작성하므로 다른 모듈에 의존하지 않는다는 장점이 있습니다. Mockito는 mocking 프레임..
2024.04.30