전체 글

Actions lead thoughts.
· Spring
동일성과 동등성 equals()와 hashcode()를 이해하기 전에 먼저 동일성과 동등성에 대한 개념을 짚고 넘어가야 한다. java의 모든 클래스는 Object클래스를 상속받는데 이 클래스의 멤버 메소드로 equals() 메소드가 있다. equals()메소드는 참조 값(객체 주소 값)이 같은지 확인하는 기능을 한다. 그렇다면 이 메소드는 ==과 무엇이 다를까? 동일성 동일성 비교는 객체 인스턴스의 주소 값을 비교하는 것을 말한다. 동일성 비교시에는 ==을 사용해 비교한다. primitive data type의 경우 동일성 비교를 통해 값 비교가 가능하다. 동등성 동등성 비교는 객체 내부의 값을 비교하는 것을 말한다. 동등성 비교시에는 equals()메소드를 사용해 비교한다. 주로 primitive d..
· Spring
스프링 데이터 JPA 분석 스프링 데이터 JPA가 제공하는 공통 인터페이스의 구현체 org.springframework.data.jpa.repository.support.SimpleRepository SimpleJpaRepository 구현 분석 @Repository 적용 JPA 예외를 스프링이 추상화 한 예외로 반환 JPA가 아닌 다른 시스템의 예외도 동일한 형태로 추상화를 함 시스템에 종속적이지 않은 코드 구성 가능 @Transactional트랜잭션 적용 JPA의 모든 변경은 트랜잭션 안에서 동작 서비스 계층에서 트랜잭션 시작 X: 리파지토리에서 트랜잭션 시작 서비스 계층에서 트랜잭션 시작 O: 해당 트랜잭션을 이어받아 사용 SimpleJpaRepository에 구현된 메소드들이 이미 트랜잭션 안에서..
· Spring
사용자 정의 리포지토리 리포지토리에 원하는 기능만 구현하여 사용하고 싶을 때, 직접 구현하면 인터페이스에 구현해야 하는 기능이 너무 많다.(인터페이스이기 때문에 모든 메서드 구현 필요), 이를 사용자 정의 리포지토리로 해결한다. 대부분 이 방법은 복잡한 쿼리를 Querydsl로 풀 때 사용된다. 사용자 정의 인터페이스 이름과 구현 클래스 이름이 비슷하므로 더 직관적 여러 인터페이스를 분리해서 구현하는 것도 가능하기 때문에 새롭게 변경된 이 방식을 권장 기존 리포지토리에 이 인터페이스를 상속받아 사용 public interface MemberRepository extends JpaRepository, MemberRepositoryCustom //사용자 정의 인터페이스 public interface Memb..
· Spring
메소드 이름으로 쿼리 생성 NameQuery @Query - 리포지토리 메소드에 쿼리 정의 Parameter binding Return type 페이징과 정렬 벌크성 수정 쿼리 @EntityGraph 쿼리 메소드에 대해서 3단계의 시리즈 중 3번째 시리즈입니다. 이번 글에서는 메소드 이름으로 페이징과 정렬, 벌크성 수정 쿼리, @EntityGraph에 대해 알아보겠습니다. 6. 페이징과 정렬 페이징과 정렬 파라미터 org.springframework.data.domain.Sort : 정렬 기능 org.springframework.data.domain.Slice : 페이징 기능 (내부에 Sort 포함) 특별한 반환 타입 org.springframework.data.domain.Page : 추가 count ..
· Spring
메소드 이름으로 쿼리 생성 NameQuery @Query - 리포지토리 메소드에 쿼리 정의 Parameter binding Return type 페이징과 정렬 벌크성 수정 쿼리 @EntityGraph 쿼리 메소드에 대해서 3단계 시리즈 중 2번째 입니다. 이번 글에서는 메소드 이름으로 Parameter binding, Return type에 대해 알아보겠습니다. 4. Parameter binding import org.springframework.data.repository.query.Param public interface MemberRepository extends JpaRepository { @Query("select m from Member m where m.username = :name") Me..
· Spring
메소드 이름으로 쿼리 생성 NameQuery @Query - 리포지토리 메소드에 쿼리 정의 Parameter binding Return type 페이징과 정렬 벌크성 수정 쿼리 @EntityGraph 쿼리 메소드에 대해서 3단계의 시리즈로 나누어 포스팅할 예정입니다. 이번 글에서는 메소드 이름으로 쿼리 생성, NameQuery, @Query - 리포지토리 메소드에 쿼리 정의에 대해 알아보겠습니다. 쿼리 메소드 기능 3가지 메소드 이름으로 쿼리 생성 메소드 이름으로 JPA NamedQuery 호출 @Query 어노테이션을 사용해서 리파지토리 인터페이스에 쿼리 직접 정의 1. 메소드 이름으로 쿼리 생성 장점: 조건이 2개 이하인 쿼리일 때 매우 편리 단점: 조건이 많아지면 메소드의 이름이 지나치게 길어지는 ..
· Spring
예제 도메인 모델 주의점 @Setter 실무에서 가급적 사용하지 않기 @NoArgsConstructor AccessLevel.PROTECTED: 기본 생성자 막고 싶지만, JPA 스펙상 PROTECTED로 열어두어야 함 @ToString: 가급적 내부 필드만(연관관계 없는 필드만) 공통 인터페이스 기능 스프링 데이터 JPA 공통 인터페이스 스프링 데이터 JPA가 구현 클래스 대신 생성 org.springframework.data.repository.Repository를 구현한 클래스는 스캔 대상 기능 인터페이스밖에 없는 리포지토리가 동작한 이유 ex) MemberRepository: memberRepository.getClass() -> class.com.sun.proxy.$ProxyXXX @Reposi..
dongb
Now or Never