자바생
article thumbnail
Spring Data JPA Optimistic lock, Pessimistic lock
Spring Data 2023. 1. 3. 20:26

글을 쓰게 된 이유 최근에 동시성에 관심이 생겨 DB lock을 공부했습니다. 그래서 자주 사용하는 Spring Data JPA에서는 lock 메커니즘을 어떻게 구현하고 있는지, Java는 동시성 테스트를 어떻게 하는지 궁금했습니다. 이번 글에서는 Spring Data JPA에서의 비관적 락, 낙관적 락을 어떻게 구현하는지 알아보도록 하겠습니다. 먼저 비관적 락, 낙관적 락을 잘 모르신다면 전에 공부했던 글을 참고하면 좋을 것 같습니다. dependency spring 2.7.x java 11 dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' compileOnly 'org.projectlombok:lo..

article thumbnail
@NotNull vs @Column(nullable = false)
Spring Data 2022. 10. 22. 02:21

글을 쓰게 된 이유 프로젝트를 진행하면서 @Column(nullable = false)를 사용하다가 @NotNull은 왜 사용하지 않는걸까? 라는 생각을 했습니다. @NotNull과 @Column(nullable = false)는 언뜻 보기에는 같은 기능을 하는 것처럼 보였습니다. 다만 차이가 있다면 DB layer에서 검증, 애플리케이션 layer에서 검증하는 차이라고 생각했지만 정확하게 어떤 차이가 있는지 알아보고자 다양한 테스트를 통해 확인해봤습니다. dependency implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-star..

Find vs Get
Spring Data 2022. 9. 25. 10:28

글을 쓰게 된 이유 Spring Data JPA를 사용하면서 findById, getById 가 있는 것을 보고 둘은 어떤 차이가 있는지 궁금해서 찾아보았습니다. JpaRepository, CrudRepository 전의 글에서 JpaRepository와 CrudRepository를 비교해보았는데 findById, getById도 연관이 있을 줄은 몰랐습니다,, 아무튼 Spring Data 를 사용하면서 id를 통해 엔티티를 조회하는 메서드가 JpaRepository, CrudRepository에 존재합니다. 하지만 각 메서드의 이름은 다르고, 반환형도 다릅니다. 왜 굳이 메서드 이름과, 반환형을 다르게 했을까요?(아무 이유 없이 그냥 만든 것은 아니라고 생각,,) //CrudRepository Opti..

article thumbnail
JpaRepository vs CrudRepository
Spring Data 2022. 8. 23. 21:06

JpaRepository vs CrudRepository JpaRepository는 PagingAndSortingRepository, QueryByExampleExecutor를 상속합니다. PagingAndSortingRepository은 CrudRepository를 상속합니다. public interface JpaRepository extends PagingAndSortingRepository, QueryByExampleExecutor { public interface PagingAndSortingRepository extends CrudRepository 상속관계를 보면 JpaRepository는 결국 CrudRepository를 부모로 가지고 있습니다. 그렇다면 패키지 구조를 한번 봐보겠습니다. J..

article thumbnail
Spring Data JPA에서의 벌크 삭제 정리
Spring Data 2022. 7. 12. 23:28

글을 쓰게 된 이유 YAPP 프로젝트 중 Account 삭제 기능을 맡았습니다. ( 토이 프로젝트이기 때문에 hard delete 진행) Account는 Club, Comment, Pet 등 대부분의 Entity와 연관관계를 맺고 있기 때문에 벌크 삭제를 했어야했습니다 그래서 어떻게 하면 최적화 된 벌크 삭제를 할 수 있을까라는 생각을 하게 됐습니다 이를 계기로 제가 알고 있는 delete 방법에 대해 정리해보고자 이 글을 작성했습니다 예제 코드 @Getter @NoArgsConstructor @ToString(of = {"id", "username", "age"}) @Entity public class Member { @Id @GeneratedValue @Column(name = "member_id")..

article thumbnail
[YAPP] 검색 성능 최적화 일지(Feat. Elasticsearch)
Spring Data 2022. 7. 8. 13:43

글을 쓰게 된 이유 YAPP 프로젝트를 진행하면서 제목을 통해 ‘모임 모집 글’을 검색하는 기능을 맡았습니다. 처음엔 기능 구현이 우선이었기 때문에 like를 통해 기능을 구현했습니다. 기능 구현을 모두 마무리하고, 리팩토링하는 과정에서 “만약에 게시글이 많아지고, 제목도 길어지게 되면 해당 쿼리는 엄청 오래 걸리지 않을까?”라는 생각이 들었습니다. 그래서 검색 성능 최적화를 하는 과정을 블로그에 적어보려고 합니다. 요구 사항 일반적인 검색과 같았습니다. 게시글에 제목이 있고, 사용자가 제목을 통해 검색하면 해당 단어가 포함되어있는 게시글을 조회하는 기능이었습니다. 초기 쿼리는 like %keyword% 로 날렸습니다. 테스트 상황 DB : MySQL, Elasticsearch 게시글의 데이터를 4999..

article thumbnail
Querydsl의 like vs contains
Spring Data 2022. 5. 22. 17:39

yapp에서 주어진 단어가 게시글의 제목에 포함되있는지 판단하기 위해 like을 알게 됐다 하지만 like가 아닌 contains도 있었고, 이 둘의 차이가 무엇인지 궁금해서 테스트를 통해 확인해봤다 결론 like(str)은 쿼리가 나갈 때 str자체가 나간다 즉, 정확히 일치해야한다 like는 내가 % 연산을 선택할 수 있다 contains(str)은 쿼리가 나갈 때 %str%가 나간다 like 현재 Member 에는 member1, aamember1, aamember1aa, member1aa가 저장되어있다 @Test @DisplayName("like 확인") void like() throws Exception { List result1 = queryFactory .selectFrom(member) ...

728x90

검색 태그