자바 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..
테스트는 JPA 구현체인 하이버네이트를 주로 다룰 것이고 Spring Boot 기반에서 진행할 예정이다.Spring Boot에 대해서 논하기에는 이 또한 분량이 적지 않아 나중에 정리할 예정이다. SPRING INITIALIZR(https://start.spring.io) 에서 기본적인 프로젝트 구성을 다운 받아 다음과 같이 구성하였다. [JPA 테스트 버전]123JPA : 2.1hibernate : 5.0.12spring data jpa : 1.11.1cs pom.xml123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707..
이전 프로젝트에서 처음으로 JPA를 사용해 보았다.실무에 적용하기 전에는 JPA가 무엇인지 궁금하여 테스트 삼아 몇 번 공부한게 전부였다.허나 실무에서 직접 사용하려고 했을 때의 중압감은 사뭇 다르다는 것을 느꼈다.이유인 즉슨, 다음의 항목들에 대해서 이해를 하고 있어야 실무에 도입해도 큰 문제가 없다고 들었기 때문이다.JPQL 이란?즉시, 지연 로딩 전략영속성 컨텍스트에 대한 이해자동 변경 감지언제 영속성 컨텍스트가 flush 되는가?연관관계 매핑중에 mappedBy, inverse 이해OSIV 란?N+1 질의 문제 (query)쓰기 지연 솔직히 위의 항목 중 어느 한 가지도 제대로 이해하지 못한 상태였다.그렇게 JPA에 대한 상세 지식이 없는 상태에서 개발을 진행하게 되었고, 어찌됐든 개발이 완료되기..
kubernetes는 배포, 확장 및 운영을 자동화하는 컨테이너 관리툴이다. kubernetes가 왜 필요한지에 대해서 알아보자.kubernetes없이 Docker를 이용하여 애플리케이션을 서버에 배포하고 운영 하려면 shell script를 작성하거나 별도의 툴을 사용해야 한다.shell script를 이용한 배포를 예로 들면 docker image registry에서 애플리케이션이 포함되어 있는 custom docker image를 다운로드 받고 이를 각 서버에 배포하고 실행하는 수준이 될 것이다.이와 같은 배포는 최초 환경 구성 시 빡시게 하면 된다.단, 서비스 운영을 하면서 과도한 사용자 요청이 있을 경우 성능 저하가 발생하게 되는데 그때서야 부랴부랴 서버를 확장하고 애플리케이션을 각 서버에 적절..
Ubuntu 14.04 LTS, Kubernetes 1.5.1 버전을 기준으로 작성한다.Kubernetes 설치를 위한 호스트 정보는 다음과 같다. master 192.168.50.11 node(minion) 192.168.50.2 node(minion) 192.168.50.11 1.root로 로그인 2.모든 호스트에 docker 설치http://lng1982.tistory.com/268 3.kubernetes pods 내부의 컨테이너 관리를 위해 설치# apt-get install bridge-utils 4.git 설치 및 kubernetes clonemaster 노드에만 설치한다.# apt-get install git -y# git clone https://github.com/kubernetes/ku..
[설치 - Ubuntu 14.04]Docker를 설치하기 위해서는 64bit 리눅스 운영체제 및 커널 버전이 3.10 이상이어야 한다.uname -r 명령어를 통해 커널 버전을 확인할 수 있음 Ubuntu 14.04 버전에는 기본적으로 1.5.0 버전의 Docker가 설치되어 있는 것을 확인할 수 있었고, 최신 버전으로 업그레이드 하기 위해서 다음과 같이 진행하였다.패키지 인덱스 정보 업데이트$ sudo apt-get update 패키지 설치$ sudo apt-get install apt-transport-https ca-certificates apt 매니저 키 등록$ sudo apt-key adv \ --keyserver hkp://ha.pool.sks-keyservers.net:80 \ --recv-..
이클립스 NEON 버전 설치 후 사용해 보고 있는 중이다.여러 가지 기능들 중 가장 기억에 남는 것들만 정리해 본다. Word wrap in text editorsAlt + Shift + Y소스 코드가 길어서 editor 화면을 넘어가면 개행해 준다. Commands and shortcuts to zoom in text editorsCtrl + 더하기, 빼기소스 코드의 font 사이즈를 조절할 수 있음 Automatic Save of dirty editorsPreferences > General > Editors > Autosave소스 코드 자동 저장 기능5초로 설정하고 소스 코드를 수정한 후 저장하지 않으면 5초가 되었을 때 자동 저장된다.자동 저장하는 것은 좋으나 실수로 타이핑되는 코드 까지도 저장 ..