본문 바로가기

분류 전체보기46

Spring Data Elasticsearch 를 활용한 Search After 구현 Spring Data Elasticsearch (버전 4.1) 를 이용한 Pagination 구현 시 from, size 를 활용하여 원하는 Page 를 Size 개수만큼 얻을 수 있다. Spring Data Elasticsearch 사용할 경우 PageRequest 를 사용하여 Pagination 을 구현할 수 있다. @RequiredArgsConstructor @Service public class AccountSearchService { private final AccountRepository accountRepository; ... public Flux searchAllWithPagination(int offset, int size) { NativeSearchQuery query = new Nat.. 2021. 3. 1.
강릉 2021.02.14~15 엄지네 포차 강릉 엄지네 포차 과거에도 간적 있었는데 참 맛있었던 기억이 났었다. 이번에도 줄을 서지 않고 빨리 먹을 수 있었다. 처음 갔을 땐 본점 말곤 본 기억이 없었는데, 지금은 그 쪽 골목이 모두 엄지네 포차인 것 같다. 툇마루 커피 툇마루 커피는 정말 긴 시간을 인내하실 수 있는 분들께만 추천드리고 싶다. 상당히 긴 시간 대기하였고, 마침내 먹은 커피는 은은하게 달고 맛있었다. 메인 커피를 드시길 권장 드립니다. (툇마루 커피) 경포호 경포호는 활동적인 것을 좋아하시는 분께 추천드립니다. 생각보다 넓고 길어서 걸음으로 코스를 다 돌긴 힘들고, 꼭 자전거를 대여하여 경포호를 한바퀴 도는 것을 추천 드립니다. 생각보다 상쾌하고 시원한 경험을 느끼게 해주었습니다. 날씨가 생각보다 흐려 아쉬웠지만, 나.. 2021. 2. 24.
쿼리 메소드 기능 쿼리 메소드 기능 3가지 메소드 이름으로 쿼리 생성 메소드 이름으로 JPA NamedQuery 호출 @Query 어노테이션을 사용해서 레포지토리 인터페이스에 쿼리 직접 정의 메소드 이름으로 쿼리 생성 메소드 이름을 분석해서 JPQL 쿼리 실행 예) 이름과 나이를 기준으로 회원 조회 로직 작성 // 순수 JPA public List findByUsernameAndAgeGreaterThan(String username, int age) { return em.createQuery("select m from Member m where m.username = :username and m.age > :age") .setParameter("username", username) .setParameter("age", a.. 2021. 1. 26.
객체지향 쿼리 언어 JPA 가 지원하는 다양한 쿼리 방법 JPQL JPA Criteria QueryDSL 네이티브 SQL - 범주에서 벗어난 종속적인 방언 사용 시 간혹 JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 JPQL JPA 는 SQL 을 추상화한 JPQL 이라는 객체 지향 쿼리 언어 제공 SQL 과 문법 유사, SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원 JPQL 은 엔티티 객체를 대상으로 쿼리 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 쿼리 SQL 은 데이터베이스 테이블을 대상으로 쿼리 SQL 을 추상화하여 특정 데이터베이스 SQL 에 의존 X 정리하면 객체 지향 SQL ※ 참고 JDBC 직접 사용, SpringJdbcTem.. 2021. 1. 25.
프록시와 연관관계 관리 프록시 기초 em.find() 와 em.getReference() em.find 의 경우 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference 의 경우 데이터베이스 조회를 미루는 가짜 프록시 엔티티 객체 조회 사용하는 시점에 실제 쿼리를 요청함 프록시 특징 (1) 실제 클래스를 상속 받아서 만들어짐 실제 클래스와 겉 모양이 같다. 사용하는 입장에서는 이론상 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 된다. 프록시 객체는 실제 객체의 참조(Target) 를 보관 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드 호출 프록시 객체의 초기화 실제 엔티티 정보 조회 요청 초기화 요청 → 영속성 컨텍스트 영속성 컨텍스트를 통하여 DB 조회 실제 Entity 생성 해당 Enti.. 2021. 1. 20.
값 타입 JPA 의 데이터 타입 분류 엔티티 타입 @Entity 로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으로 변경 시 추적 불가 값 타입 분류 기본값 타입 자바 Primitive 타입 래퍼 클래스 String 기본값 타입의 경우 생명주기를 엔티티에 의존한다. (회원 삭제하면 이름, 나이 필드도 함께 삭제) 값 타입의 경우 서로 다른 엔티티와 공유하면 안된다. (회원 이름이 바뀌었다고 다른 회원의 이름도 함께 변경되면 안된다.) ※ 참고 - 자바의 기본 타입은 절대 공유 되지 않는다. int, double 과 같은 primiti.. 2021. 1. 19.
상속 관계 매핑 객체엔 상속 관계가 있지만 관계형 데이터베이스는 상속 관계는 따로 없다. 다만, 슈터타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 여기서 상속관계 매핑이란, 객체의 상속의 구조와 DB 의 슈퍼타입 서브타입 관계를 매핑 주요 전략 - 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 조인 전략 단일 테이블 전략 구현 클래스마다 테이블 전략 위와 같은 3가지 전략 모두 JPA 와 매핑 가능하다. 조인 전략 가장 정규화된 방식 운영 시 어떤 데이터인지 확인하기 위하여 DTYPE 을 넣어주는게 좋다. - @DiscriminatorColumn(부모), @DiscriminatorValue(자식) 단일 테이블 전략에선 DTYPE 반드시 넣어줘야 한다. 장점 테이블 정규화 외래키 참조 무결성.. 2021. 1. 14.
다양한 연관관계 매핑 연관관계 매핑시 고려사항 3가지 다중성 단방향, 양방향 연관관계의 주인 다중성 다대일 - @ManyToOne 일대다 - @OneToMany 일대일 - @OneToOne 다대다 - @ManyToMany 대칭성을 지니고 있기에, 매핑 시 반대편으로도 생각해볼 수 있도록 하자 단방향 과 양방향 테이블 외래키 하나로 양쪽 조인 가능 사실상 방향이란 개념이 없다. 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 객체의 경우 참조가 있어야만 조회가 가능하다 연관관계의 주인 테이블의 경우 외래키 하나로 두 테이블이 연관관계를 맺지만, 객체의 경우 각각 단방향으로 참조를 하기 때문에 양방향 (단방향 2개)을 가지게 된다. 이러한 이유로 둘 중 테이블의 외래키를 관리할 곳.. 2021. 1. 12.
연관관계 매핑 기초 핵심은 객체와 관계형 데이터베이스의 패러다임 불일치 양방향 연관관계와 연관관계의 주인 테이블은 방향이란 개념이 없다. 외래키 자체로 양방향 관계를 가질 수 있다. 하지만, 객체는 참조의 개념이기에 해당 객체를 서로 참조시켜야만 양방향 관계를 가질 수 있다. 연관관계의 주인과 mappedBy 객체와 테이블 간에 연관관계를 맺는 차이를 이해해야 한다. 객체와 테이블이 관계를 맺는 차이 객체 연관관계 = 2개 회원 → 팀 연관관계 1개 (단방향) 팀 → 회원 연관관계 1개 (단방향) 객체의 양방향 관계는 사실 양방향 관계가 아니라 서로 다른 단 뱡향 관계 2개 이다. 사실 양방향이 의미하는 바는 단방향으로 두개 모두 연결하는 것이다. 테이블 연관관계 = 1개 회원 ↔ 팀 연관관계 1개 (양방향) 테이블은 외래.. 2021. 1. 12.
엔티티 매핑 객체와 관계형 데이터베이스를 어떻게 매핑하여 사용할지에 대한 고민 객체와 테이블 매핑: @Entity, @Table 필드와 컬럼 매핑: @Column 기본 키 매핑: @Id 연관관계 매핑: @ManyToOne, @JoinColumn @Entity @Entity 가 붙은 클래스는 JPA 가 관리하는 엔티티라 한다. JPA 를 사용해서 테이블과 매핑할 클래스는 @Entity 를 필수적으로 작성해주어야 한다. 주의 사항 기본 생성자 필수 (파라미터가 없는 public 또는 protected 생성자) - JPA 내부 메커니즘 활용하기 위한 리플렉션 등에서 사용 final 클래스, enum, interface, inner 클래스 사용하면 안된다. 저장할 필드에 final 사용하면 안된다. @Table 엔티티와 매.. 2021. 1. 10.