코틀린 썸네일형 리스트형 [kotlin] JPA 3: Spring Boot에서 Entity 매핑 확장 들어가기이번에는 엔티티 정의위한 확장된 어노테이션에 대해서 다룰려고 한다. 더 다양한 타입과 알아두면 좀더 도움이 되는 어노테이션에 대해서 다룰 예정이다.작성자: http://ospace.tistory.com/ (ospace114@empal.com)엔티티 정의엔티티 정의를 위한 추가적인 어노테이션이다.@IdClass, @EmbeddedId: 복합키 정의@Enumerated: enum 타입 매핑@Temporal: 날짜 타입 매핑@Transient: 매핑 무시@Lob: BLOB CLOB 타입 매핑@CreationTimestamp: insert 시간 자동 저장@UpdateTimestamp: update 시간 자동 저장@CreateDate: 엔티티 생성시간@LastModifiedDate: 엔티티 변경시간@Cre.. 더보기 [kotlin] JPA 12: Spring Boot에서 2차 캐시 들어가기JPA에서 캐시는 2단계를 걸쳐서 동작한다. 1차 캐시는 영속 컨텍스에 해당하며 세션이 유지될때까지 현재 세션의 모든 엔티티는 영속 컨텍스트 내에서 캐싱된다. 영속 컨텍스트는 트랜잭션 범위에서 유효한데 보통 트랜잭션이 종료되면 영속 컨텍스트도 같이 종료된다. 그렇기 때문에 세션과 영속 컨텍스트의 생명이 동일하다고 할 수 있다. 세션이 종료된 경우 1차 캐시가 사라지기 때문에 애플리케이션 전체에서 보면 동일한 요청을 할 경우 새로 캐싱해서 처리하기 때문에 효율적이지 않다. 결국, 세션에 상관 없이 캐시를 유지 관리하는 2차 캐시가 필요하다. 2차 캐시에 대해서 살펴보자.작성자: http://ospace.tistory.com/ (ospace114@empal.com)2차 캐시애플리케이션 라이프타임에.. 더보기 [kotlin] JPA 11: Spring Boot에서 트랜잭션과 락 들어가기트랜잭션은 단순해보이면서도 복잡하다. 이는 단지 한개 처리만 다루는게 아니라 여러 처리가 동시에 발생할 경우를 다루기 때문이다. 데이터베이스에서도 이를 해결하기 위한 기능을 제공하고 있지만 JPA에서 트랜잰션을 다룰 다양한 기능을 제공하고 있다. 하나씩 살펴보자.작성자: http://ospace.tistory.com/ (ospace114@empal.com)트랜잭션트랜잭션은 ACID를 보장하기 위한 기술이다. ACID는 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)의 약자이다. 만약, 여러 트랜잭션이 실행될 경우 다른 트랜잭션에서 대한 액세스 권한을 제어 해야한다. 이를 위해 ANSI에서는 트랜잭션 격리 수준 4단계로 나누어서 .. 더보기 [kotlin] JPA 9: Spring Boot에서 엔티티 이벤트 리스너 들어가기엔티티 이벤트 리스너에 대해서 다룰려고 한다. 여기서 이벤트는 엔티티와 관련된 이벤트로 로딩, 변경, 추가 등이 있다. 이벤트 처리 방식은 비동기 방식에서 자주 사용하는 방식으로 현재 실행 중인 메인 로직에 영향을 주지 않으면서 처리 중인 작업과 연관되서 실행하는 경우에 매우 유용하다. 여기서 사용한 환경은 Spring Data JPA을 사용했고 데이터베이스는 H2를 사용했다.작성자: http://ospace.tistory.com/ (ospace114@empal.com)이벤트 어노테이션JPA에서 엔티티의 생명주기 동안에 여러가지 이벤트를 발생한다. 이를 적절한 핸들러도 처리할 수 있도록 어노테이션을 사용해서 설정할 수 있다. 엔티티에서 발생하는 이벤트에 대해 다음과 같은 어노테이션을 사용해서 실.. 더보기 [kotlin] JPA 8: Spring Boot에서 엔티티 매니저와 Criteria 쿼리 들어가기JPQL 작성을 도와주는 API로 Criteria Query와 QueryDSL이 있다. Criteria Query는 표준이지만 QueryDSL은 표준은 아니다. 사용에 있어서는 QueryDSL이 더 좋기 때문에 알아두면 좋다. 여기는 JPA 표준인 Criteria Query에 대해서 다룰려고한다. 쿼리에 대한 자세한 설명이 이전 글을 참고하시기 바란다. 여기서는 Criteria Query 작성에 집중했다.작성자: http://ospace.tistory.com/ (ospace114@empal.com)Entity Manager 사용Criteria Query를 사용하기 위해 기존 리포지토리를 확장해서 엔티티 매니저(EntityManager)를 가져와야 한다. 엔티티 매니저는 엔티티 객체를 영속 컨텍스트.. 더보기 [kotlin] JPA 7: Spring Boot에서 JPQL과 @Query 들어가기Repository를 사용해 쿼리 메소드로 어느정도 데이터 처리하는데 문제는 없지만 정교하고 복잡한 처리를 할 경우 한계가 있다. 이런 한계를 JPQL을 사용해서 다양한 쿼리를 실행할 수 있다. Spring Data에서 @Query을 사용해서 쉽게 JPQL을 사용할 수 있도록 만들어준다. 사전에 Ansi SQL 학습을 권장한다.작성자: http://ospace.tistory.com/ (ospace114@empal.com)환경 구성앞으로 사용할 엔티티는 총 3개로 아래와 같이 구성된다.아래는 데이터베이스에서 사용할 초기 데이터이다.insert into member(name, likes) values ('bar', 1);insert into member(name, likes) values ('fox'.. 더보기 [kotlin] JPA 6: Spring Boot에서 Repository 활용 들어가기 데이터베이스에서 데이터를 조회하거나 저장하기 위해서 연동해주는 객체가 필요하다. 이를 리포지토리라고 한다. 일반적인 리포지토리이면 실제 데이터베이스에 데이터를 저장하거나 조회하기 위한 JDBC를 사용하거나 라이브러리 사용할 경우 쿼리를 작성해 줘야한다. 그러나 JPA에서는 더 쉽게 자동으로 처리해준다. 어떻게 할 수 있는지 살펴보자. 작성자: http://ospace.tistory.com/ (ospace114@empal.com) 리포지트리 구조 Spring Data에서 리포지토리를 위한 Repository 인터페이스를 제공한다. 이 인터페이스를 통해 데이터베이스와 연동된다. 아래는 Spring Data JPA에서 제공되는 Repository의 상속 트리 구조이다. Repository 인터페이스를.. 더보기 [kotlin] JPA 4: Spring Boot에서 Entity 연관관계 들어가기 엔티티는 여러 개가 존재하고 엔티티 간에 관계가 존재하다. 이런 관계는 대부분 데이터베이스 기준으로 ER 다이어그램에서 카디널리티(cardinality)에 해당한다. 결국 데이터베이스에 테이블 간에 관계를 엔티티로 매핑하는 방식을 기술한다. 이런 엔티티 간에 관계를 연관관계라고 한다. 작성자: http://ospace.tistory.com/ (ospace114@empal.com) 샘플 아래는 샘플로 사용할 엔티티 클래스 다이그램이다. 사용자가 서비스에 가입하고 게시물을 관리하기위한 구조이다. 앞으로 다룰 엔티티 연관관계를 다루기 위해 만든 샘플이므로 참고만 하시기 바란다. 연관관계 관계는 다중성과 방향을 알아야 한다. 다중성은 두 대상이 서로 1:1, 1:N, N:M 관계인지를 의미한다. 방향은.. 더보기 이전 1 2 다음