키워드 초성 검색 기능 개선 과정
·
Spring/프로젝트 리팩토링 회고록
[요구 사항]매칭 시 유저의 닉네임을 검색하는 기능 요구. 단, 유저의 닉네임 단어 일부를 검색하면 자동으로 키워드를 완성반려견 프로필 등록 시 견종을 검색하는 기능 요구. 단, 반려견의 견종 일부를 검색하면 자동으로 키워드를 완성반려견 견종이 없는 경우에는 유저가 직접 입력하여 등록직접 입력한 데이터는 견종 데이터 자동 완성 키워드에 출력되지 않음  [기능 구현방식 선정]구현 방식에 대해서는 세 가지 방법이 있었습니다.1. MySQL에 데이터를 저장하고 LIKE %keyword%를 사용한 검색2. Elastic Search를 사용한 형태소 단위 검색3. Redis의 ZSet [각 방식의 장/단점]1. MySQL 과 LIKE 함수 활용 1번의 과정은 견종 데이터를 정적 테이블에 삽입하고, 조회 시에는 L..
[Spring Batch 5.x] 배치를 사용하기 위한 환경 설정
·
Spring/Batch
배치란?배치는 일정 시간 동안 대량의 데이터를 한 번에 처리하는 방식이다. 대량 데이터를 복잡한 쿼리를 통해 이동시키는 도중 프로그램이 멈추면 처음부터 다시 시작해야 하는 문제가 생길 수 있다. 이를 방지하기 위해 작업 중간 지점을 기록하는 메커니즘을 활용한다. 이렇게 함으로써 중단된 지점에서 다시 작업을 이어갈 수 있다.배치는 일반적으로 반복적이고 스케줄 기반으로 실행된다. 예를 들어, 매일 새벽 특정 데이터를 처리하거나 정기적으로 보고서를 생성하는 작업이 이에 해당한다.현재 Batch는 5.x 버전이 나오면서 이전에 사용했던 방식과 많은 변화가 있어 문서를 학습하고 실제로 사용해보지 않으면 쓰기 힘들다고 느꼈다. 계속 박치기?를 하면서 성공한 나의 환경 설정을 공유해보려 한다.Spring Batch의..
[개념 정리]Spring Boot에서 JPA의 Soft Delete와 Cascade 연관관계
·
Spring/JPA
JPA를 사용하다 보면 데이터 삭제 시 완전 삭제(Hard Delete)가 아닌 Soft Delete를 고려해야 하는 경우가 있습니다. Soft Delete는 데이터를 물리적으로 삭제하지 않고 특정 컬럼 값을 변경하여 삭제 상태를 표시하는 방식으로, 데이터를 보존하면서 삭제 여부를 관리할 수 있습니다. 이 글에서는 Soft Delete를 구현하는 방법과 Soft Delete 적용 시 Cascade 연관관계에서 발생할 수 있는 문제 및 해결 방법을 살펴보겠습니다.Soft Delete란?Soft Delete는 데이터베이스에서 데이터를 물리적으로 삭제하지 않고, "삭제됨" 상태를 표시하기 위해 추가적인 컬럼(e.g., deleted 또는 deletedAt)을 활용하는 방법입니다. 이를 통해 다음과 같은 장점을..
[회고록] Spring Boot에서 JPA의 Soft Delete와 Cascade 연관관계
·
Spring/프로젝트 리팩토링 회고록
내가 사용한 SQL Delete방식에서 Cascade속성을 함께 사용하려 했을 때 발생했던 아래의 문제에 대해 다시는 발생하지 않도록 개념을 다잡기 위해 정리한다! 이전에는 Cascade를 왜 사용하는지 잘 몰랐으나 SoftDelete와 함께 무턱대고 사용하려고 하니 충돌이 나서 각각의 방식과 전략을 확실히하고 어떤 방법으로 SoftDelete를 사용하며 Cascade는 왜 피해야 하는지 알아보자.[발생한 예외]org.hibernate.ObjectDeletedException: deleted instance passed to merge[Soft Delete의 적합성]Soft Delete는 데이터베이스에서 데이터를 물리적으로 삭제하지 않고, "삭제됨" 상태를 표시하기 위해 추가적인 컬럼(e.g., dele..
레이어 아키텍처 구조 개선하기
·
Spring/프로젝트 리팩토링 회고록
[문제점 성찰]현재 나의 프로젝트 구조는 신규 개발자가 대중적으로 사용하는 레이어 아키텍처를 사용 중이었다. 레이어 아키텍처는 가장 가시적이고 무언가 만들때 쉬운 방법이었다.하지만 단점이 존재한다. 첫 째, 모든 것이 영속성 계층을 기준으로 만들어진다. 우리가 개발을 시작하기 전에 가장 먼저 작성하는 것은 테이블 명세, ER 다이어그램이다. 각 엔티티의 관계를 고민하고 어떻게 연결하며, 어느정도 정규화를 통해 만들어낼지 고민하는 과정을 거치게 된다. 도메인을 먼저 고민하기보다 유스케이스를 통해 어떤 행위가 먼저 이뤄질지 고민하는게 맞는 것 같다는 어느 한 강의를 듣게 되었다. 다음 단점을 보며 내용을 이어나가겠다.둘 째, 계층형 아키텍처는 업무 도메인에 대해 어떠한 정보도 제공해주지 않는다.  실제로 모..
save the transient instance before flushing
·
Spring/JPA
트랜잭션 문제중 맞닥뜨렸던 내용을 다시 찾아보지 않기 위해 기록한다...아래는 내가 겪은 예외내용이다. TransientPropertyValueException 예외에 대한 내용이며 영속성 컨텍스트에 퐇마되지 않은 상태의 데이터를 사용하려 하니 발생하는 문제였다.org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.mentit.mento.global.authToken.entity.SocialA..