전체 글

다양한 경험을 기록해요
· Tool/Spring
결론부터 말하자면 Spring Data Jpa의 JpaRepository를 사용할 때 발생하는 문제다. 처음 만난 문제는 PK 값을 가지고 있는 객체가 데이터베이스에는 존재하지 않을 때, 이 객체와 연관관계를 맺고 save 메서드로 영속화를 시도하면 연관관계를 맺고 있는 객체가 데이터베이스에 존재하지 않기 때문에 EntityNotFoundException이 발생한다. 두 번째 문제는 PK 값을 가지고 있는 객체를 JpaRepository.save 메서드로 영속화 했을 때, 이 객체는 영속화가 되지 않기 때문에 발생하는 문제다. 문제 코드 테스트 코드용 더미 데이터를 생성하는 클래스를 아래와 같이 만들었다. public class TestDataFactory { public static Long userI..
· TIL
최종 프로젝트 전에 진행하는 마지막 프로젝트의 주제는 트렐로와 비슷한 프로젝트 관리 프로그램이다. 트렐로를 오랜만에 쓰면서 기능을 분석하고, API 명세를 만들고 ERD를 설계했다. 이것도 여러 번 하니까 속도가 붙었다 ㅋㅋㅋ.. 트렐로에서 workspace의 보드와 관련된 API를 담당하기로 했다. 이제 CRUD는 익숙해서 그냥 만드는 편인데 조회 성능 최적화를 신경써서 만들어보려고 한다. 테스트 코드 만든 후에는 CI/CD도 좀 건드려봐야지.
· TIL
JPA를 사용할 때 N+1 문제가 발생하는 상황과 해결 방법에 대해서 공부했다. 여러 케이스와 해결 방법을 정리한 글을 쓰고 있다. QueryDsl 사용법을 공부하고 있다.
· Tool/Java
JPA에서 복합 키를 사용하려면 @Embeddable 이나 @IdClass 애너테이션을 사용해서 구현할 수 있다. 1. 공통점 Serializable 인터페이스 구현: 복합 키 클래스는 Serializable 인터페이스를 구현해야 한다. 기본 생성자: 복합 키 클래스에는 기본 생성자가 필요하다. hashCode와 equals 구현: 복합 키의 동등성을 정확히 비교하기 위해 hashCode와 equals 메소드를 오버라이드 해야 한다. 2. Embedded ID 사용하기 @Embedded를 적용한 복합 키 클래스를 정의한다. 이때, Serializable 인터페이스를 구현해야 한다. @Embeddable public class MyCompositeKey implements Serializable { pri..
· Tool/Spring
조회 API에 여러 개의 동적 정렬 조건과 페이지네이션 기능이 필요할 때 Spring Data JPA로 쉽게 구현할 수 있다. 이건 단순히 게시글 목록을 조회하는 상황인데, 만약 더 복잡한 연관관계의 조회라면 이 방법은 좋지 않을 수 있으니 성능을 고려하자. Controller 페이지네이션과 동적 정렬 조건을 쿼리 스트링으로 입력받는다. 정렬 조건은 sort=key,option 형식으로 입력 받는다고 설정했다. 예를 들면 /posts&sorts=createdAt,desc 같은 형식이다. @GetMapping public ResponseEntity findAll( @RequestParam(defaultValue = "0", required = false) int page, @RequestParam(defa..
· Tool/Spring
회원가입 기능을 만들 때, 시간 제한이 있는 이메일 인증을 통과하도록 만들어보자. Redis를 사용하면 TTL(Time To Live)을 써서 시간 제한을 쉽게 구현할 수 있다. 로컬에 Redis 설치하기 homebrew로 간단하게 설치했다. 설치가 끝났다면 redis 서버를 실행시키자. 서버가 실행중이라면 redis-cli ping 명령어를 입력하면 PONG이라고 응답한다. brew install redis brew services start redis redis-cli ping # PONG Spring boot 의존성 및 설정 추가하기 build.gradle의 dependencies에 redis를 추가하고, application.yml에 호스트와 포트 설정을 추가하자. // Redis 의존성 추가 i..
도_유
대도유서관