본문 바로가기

Java, Kotlin, Spring/JPA18

Spring Data Common - Web 기능 Spring Data JPA - Web 스프링 데이터는 다양한 웹 지원 기능을 제공한다. 스프링부트를 사용할 시 모든 것이 자동 설정된다. 일반 스프링을 사용하는 경우 자바 설정 파일에 @Configuration 과 함께 @EnableSpringDataWebSupport 를 붙이면 된다. Spring Data 가 지원하는 여러 웹 기능을 알아보자. 도메인 클래스 컨버터 Pageable, Sort @RequestHandler 메소드에서 Pageable, Sort 매개변수를 사용할 수 있다. HATEOAS 또한 Page 관련해서 HATEOAS 기능을 제공한다. HATEOAS 란 Hypermedia As The Engine Of Application State 의 약자로 쉽게 말해, 리소스 자원의 위치(uri.. 2021. 2. 10.
Spring Data JPA - JPA Repository, save Spring Data JPA - JPA Repository 스프링 부트를 사용할 때는 @EnableJpaRepositories 가 자동으로 등록된다. @SpringBootApplication 안에 연결되어 있다. 스프링 부트는 사용하지 않는다면 @Configuration 과 위 어노테이션을 같이 사용해주면 JpaRepository를 사용할 수 있다. JpaRepository 의 구현체인 SimpleJpaRepository 에 이미 @Repository 가 이미 붙어있기 때문에 빈 으로 등록하기 위해 JpaRespository 에 @Repository 를 꼭 붙이지 않아도 된다. 스프링이 제공하는 @Repository 는 SQLException 또는 JPA와 관련된 Exception을 스프링의 DataAc.. 2021. 2. 10.
Spring Data Common - QueryDSL 쿼리 메소드는 대부분 두 가지 중 하나로 결정된다. Optional findOne(Predicate) : 어떤 조건으로 1개를 찾는다. List|Page|Iterable ... findAll(Predicate) : 어떤 조건으로 여러개를 찾는다. 스프링 데이터는 QuerydslPredicateExecutor 인터페이스를 제공한다. 여러 메소드가 있지만 위의 2가지가 대표적이다. 너무 긴 쿼리메소드는 무엇을 실행시키는지 읽기가 너무 어렵다 그래서 쿼리 DSL 을 사용한다. QueryDSL query domain specific lanaguage (쿼리 도메인 특화 언어) 를 말한다. 타입-세이프한 쿼리를 만들 수 있도록 돕는 라이브러리이다. JPA, SQL, MongoDB, JDO, Lucene, Coll.. 2021. 2. 10.
Spring Data Common - 도메인 이벤트 이벤트 프로그래밍 스프링 프레임워크는 이벤트 기능을 제공한다. ApplicationContext 는 BeanFactory 인터페이스를 상속받았고, ApplicationEventPublisher 인터페이스도 상속받은 인터페이스이다. 이벤트는 ApplicationEvent 를 상속받아 만들면 되고, 리스너는 ApplicationListener를 구현하여 만들면 된다. 또는 스프링부트가 제공하는 어노테이션 @EventListener를 사용해도 된다. 1 이벤트 생성 @Getter public class PostPublishEvent extends ApplicationEvent { private final Post post; public PostPublishEvent(Object source) { super(s.. 2021. 2. 10.
Spring Data Common - 커스텀 Repository Spring Data JPA - Repository Custom Repository 짤막한 Intellij 단축키 Tip command + 1 : 왼쪽 옆에 프로젝트 창 커서가도록 하기 esc : 다시 코드 창으로 커서가 온다. command + ` : 프로젝트 2개이상 띄워져있을 때 프로젝트 변경 shift + command + T : Test 로 탭 전환 쿼리 메소드(쿼리 생성 및 쿼리 찾아쓰기)로 해결되지 않는 경우 코딩으로 스프링 데이터 리포지토리 인터페이스에 필요한 기능을 직접 구현 가능하다. 1) 새로운 기능을 추가 테스트 코드 @DataJpaTest class PostRepositoryTest { @Autowired PostRepository postRepository; @Test publi.. 2021. 2. 10.
Spring Data Common - 쿼리(Query) Spring Data JPA - Spring Data Common Query Spring Data 저장소의 메소드 이름으로 쿼리를 만들 수 있다. 1) 메소드 이름을 분석해서 쿼리를 만든다. (CREATE) 2) 미리 정의해 둔 쿼리를 찾아 사용한다. (USE_DECLARED_QUERY) 3) 미리 정의한 쿼리를 찾아보고 없으면 생성한다. (CREATE_IF_NOT_FOUND) 아래와 같이 설정할 수 있다. @SpringBootApplication @EnableJpaRepositories(queryLookupStrategy = QueryLookupStrategy.Key.CREATE_IF_NOT_FOUND) public class Application { ... 기본값은 CREATE_IF_NOT_FOUND.. 2021. 2. 9.
Spring Data Common - Repository Spring Data Common Spring data 안에는 Spring data Common, Spring data REST 가 있고, JPA, JDBC, KeyValue, MongoDB, Redis 등이 있다. 스프링 데이터는 SQL, NoSQL 저장소를 지원하는 프로젝트의 묶음이다. 스프링 데이터 Common 은 여러 저장소를 지원하는 프로젝트의 공통 기능을 제공해준다. 스프링 데이터 REST 는 저장소의 데이터를 하이퍼미디어 기반 HTTP 리소스로(REST API로) 제공한다. 그리고, 스프링 데이터 JPA는 스프링 데이터 Common이 제공하는 기능에 JPA 관련 기능을 추가한 것이다. Spring Data Common (Spring data Common) Repository - 마커용 인터페.. 2021. 2. 8.
JPA 기본 - cascade, fetch, query JPA Cascade Cascade란 엔티티 상태를 전파시키는 옵션이다. 엔터티 상태란 다음 4가지를 말한다. Transient : 객체가 단지 선언되고 생성만 되었을 뿐 JPA 는 알지 못하는 상태다. Persistent : JPA가 관리중인 상태다. 예를 들어 Session.save() 할 때 이 상태가된다. Session 같은 PersistentContext 에 객체를 넣어준다. 그 외에 하이버네이트가 1차 캐시, Dirty Checking, Write Behind 등을 관리한다. 1차 캐시 : 객체 상태를 캐시에 저장한다. 예를 들어 이미 캐시에 어떤 데이터가 존재하면 load 명령을 해도 굳이 DB에서 가져오지 않고 있던 값을 사용하여 성능을 끌어올린다. Dirty Checking : 객체의 변.. 2021. 2. 7.
728x90