실무에서 elasticsearch 와 연동해야 할 일이 생겼다.검색을 통해서 알아보니 Spring Data 프로젝트 하위에 Spring Data Elasticsearch 프로젝트가 존재했다.https://github.com/spring-projects/spring-data-elasticsearch그 외에 Elasticsearch와 연동 가능한 Java API가 있었지만 Spring Boot를 사용하고 있어 Spring Data를 선택하게 되었다.선택 이유는 Spring Boot + Spring Data Elasticsearch 통합이 쉽기 때문이다. 일단 ElasticSearch와 연동하기 위해선 설치 작업이 선행되어야 한다.개발 환경이 윈도우라서 난 윈도우 버전을 설치했다.다른 환경이라고 해서 딱히 설..
테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리이다.이게 뭔 말이냐 하면다음과 같이 테이블 명이 JPQL_PERSON 인 Person 엔티티 클래스가 있다.123456@Data@Table(name = "JPQL_PERSON")@Entityclass Person { ... }cs JPQL_PERSON 테이블의 데이터를 모두 추출하고자 할 때 SQL로 작성하게 되면 "select * from JPQL_PERSON" 처럼 될 것이다.그럼 JPQL을 이용하면 어떻게 작성되어야 할까?"select p from Person p" 처럼 하면 된다.이처럼 JPQL은 객체지향쿼리이기 때문에 엔티티 클래스를 기반으로 쿼리를 작성해야 한다. 한번쯤은 궁금해 할지도 모르겠다.왜? "select p from JPQL_PE..
자바 enum 타입을 엔티티 클래스의 속성으로 사용할 수 있다.@Enumerated 애노테이션에는 두 가지 EnumType이 존재한다.EnumType.ORDINAL : enum 순서 값을 DB에 저장EnumType.STRING : enum 이름을 DB에 저장cs 예를 들어 enum이 다음과 같이 생겼다고 하자.enum Gender { MALE, FEMALE;}cs ORDINAL로 지정하고 gender 속성에 Gender.MALE 값을 셋팅하면 DB에 저장되는 값은 1이다.그럼 Gender.FEMALE 값으로 셋팅하면 어떻게 될까?Gender에 선언되어 있는 순서가 값이 되기 때문에 2가 DB에 저장된다.@Enumerated(EnumType.ORDINAL)private Gender gender;cs STR..
Attribute Converter에 대해서 알아보자.말 그대로 속성 변환기이다.다음 그림과 같이 엔티티와 DB 사이에서 동작한다.흔히 개발을 진행하다 보면 DB에는 코드성의 데이터가 쌓이게 된다. 가령 gender 컬럼에 존재하는 데이터가 (1 이면 남자) (2 이면 여자)와 같은 식이거나 은행 컬럼에 존재하는 데이터가 (1 이면 신한은행) (2 이면 국민은행)과 같은 경우이다.허나 웹 애플리케이션에서는 DB에 존재하는 1이나 2와 같은 코드성의 데이터를 화면에 출력하는 일은 거의 없을 것이다.화면상에서는 코드에 부여한 의미 있는 문자열을 보여줘야 한다.이런 경우 처리할 수 있는 방법은 entity의 속성에 저장되어 있는 integer 값을 if 조건으로 분기처리하는 방법이 있다.그렇지만 이와 같은 방..
JPA에는 두 가지 로딩 기법이 존재한다.즉시로딩과 지연로딩이라고 한다.이 두 개의 로딩 전략은 엔티티를 조회할 때 적용된다. update, delete, insert에는 로딩 전략 대상이 아니다. 즉시로딩은 뭔가?엔티티 매니저를 통해 엔티티를 조회하면 연관관계에 매핑되어 있는 엔티티도 함께 조회 지연로딩은 뭔가?엔티티 매니저를 통해 엔티티를 조회하면 연관관계에 매핑되어 있는 엔티티를 실제 사용할 때 조회 즉시로딩, 지연로딩에 대한 설명을 글로만 보면 이해하기 쉽지 않다.예를 들어 설명해보자. Member 엔티티 클래스, Phone 엔티티 클래스가 있다고 하자.이 둘은 서로 객체 연관관계 설정이 되어 있다. 아래와 같이 Member 테이블에 Phone 엔티티가 즉시로딩 전략으로 설정되어 있다고 하자.이와..
영속성 전이에 대해 이해하기 위해서는 영속성 컨텍스트의 선행 학습이 필요하다.영속성 컨텍스트가 뭔지 잘 모르겠다면 http://lng1982.tistory.com/273 페이지 읽기를 추천한다. (내가 쓴 글을 내가 추천하니 뭔가 이상하다.) 영속성 전이라는 용어가 다소 생소할 것이다.예를 들어 Member, MemberPhone 엔티티 객체가 존재한다고 하자.Member엔티티를 엔티티매니저를 통해 영속화하면 MemberPhone엔티티도 함께 영속 상태가 되는데 이를 두고 영속성 전이라고 한다. 이처럼 둘의 엔티티가 영속 상태가 되었다면 영속성 컨텍스트가 flush될 때 DB에 insert문이 전송된다. JDBC로 개발 했을 때에는 부모가 되는 Member 테이블에 insert를 먼저 하고 그 다음에 M..
What is the EntityManager?The EntityManager API is used to access a database in a particular unit of work. It is used to create and remove persistent entity instances, to find entities by their primary key identity, and to query over all entities. This interface is similar to the Session in Hibernate. 엔티티 매니저는 특정 작업을 위해 데이터베이스에 액세스 하는 역할을 가진 녀석이다.또한 엔티티를 데이터베이스에 등록, 수정, 삭제, 조회할 수 있다.엔티티와 관련된 모든 ..
What is the EntityManagerFactory?1. 엔티티 매니저 팩토리는 엔티티 매니저를 관리한다. > 이름 그대로 엔티티를 관리하는 관리자다. > 엔티티 매니저는 엔티티를 저장하고, 수정하고, 삭제하고, 조회하는 등 엔티티와 관련된 모든 일을 처리한다. (쉽게 말해서 JDBC의 Connection 객체로 생각하면 된다.) 2. 엔티티 매니저 팩토리는 애플리케이션 전체에서 딱 한 번만 생성하고 공유해서 사용해야 한다. > 애플리케이션에서 바라보는 DB가 한 개라면 엔티티 매니저 팩토리도 한 개이다. 3. 엔티티 매니저 팩토리는 여러 쓰레드가 동시에 접근해도 안전하므로 서로 다른 쓰레드 간에 공유해도 된다.테스트 코드를 통해서 엔티티 매니저 팩토리에 대해서 더 알아보자. 다음과 같이 @Per..
내가 처음 영속성 컨텍스트라는 단어를 접했을 때 해당 용어가 의미하는 바를 정확히 이해하지 못하였다."영속성" + "컨텍스트" 두 단어의 조합으로 이루어진 용어인 것 같은데단어 하나하나를 따져보면 영속성은 오래도록 계속 유지되는 성질을 의미하고컨텍스트는 저장소로써 어떤 정보들을 저장하고 관리하는 용도로써 많이들 생각한다. 영속성 컨텍스트 = "오래도록 계속 유지되는 성질들을 저장하고 관리" 라고 정의할 수 있겠는데...이게 뭔 소린가?오래도록 계속 유지되는 성질이라니.. 여튼 용어가 전달하는 의미를 내 나름대로의 해석을 통해 이해해 보려고 했다.그래서 생각해 낸 것이 JPA에서 사용되는 엔티티라는 단어이다."엔티티를 저장하고 관리"사실 JPA를 처음 접하는 분들은 엔티티가 뭔지 궁금해 할 것이다.Enti..