본문 바로가기

jpa

(3)
테스트용 AuditorAware 별도로 만들기 이전 게시글(https://codestreet.tistory.com/93)에서 JpaConfig 클래스 안에 AuditorAware 빈을 생성 -> 랜덤 숫자를 리턴하게 하여 테스트 한 후 다시 운영 코드로 변경하였다.문제는 이후 테스트를 할 때 마다 테스트용 코드로 바꿨다가 다시 운영용 코드로 바꿔야 해서 번거로웠다는 점이다.AuditorAware에서는 리퀘스트 헤더에서 엑세스 토큰을 추출해 내고 그 안의 사용자ID값을 뽑아내어 CreatedBy 또는 LastModifiedBy의 값으로 지정한다. 단위 테스트 시에는 리퀘스트 헤더에 접근이 불가능하기 때문에 아래와 같이 HttpServletRequest를 정의할 수 없다고 뜬다.***************************APPLICATION FAI..
Auditing 사용해서 데이터 관리하기 JPA의 Auditing 기능을 사용하면 DB에 데이터 입력, 수정 시의 시간, 입력자 정보를 자동으로 관리할 수 있다.보통 테이블을 생성하면 데이터 입력일자, 수정일자는 기본으로 넣게되는데 jpa에서 이를 자동으로 관리해준다. @EnableJpaAuditing먼저 jpa의 auditing 기능을 사용하려면 @EnableJpaAuditing 어노테이션을 사용해야한다. Application.java에 클래스 범위의 어노테이션으로 사용하면 인식 가능하지만, junit 테스트 시 @WebMvcTest와 충돌되는 문제가 있기 때문에 따로 JpaConfig라는 클래스를 생성해서 인식되도록 한다.  JpaConfig.javaimport org.springframework.context.annotation.Confi..
saveAll()을 사용하기 위해 List<DTO>를 List<Entity>로 변환 스트림을 이용해서 변환해주면 된다 ------------------Dto 클래스 ------------------ @Getter @NoArgsConstructor public class GoalsSaveRequestDto { private String text; // 목표 내용 private String state; // 목표 상태 - 목표, 성공, 실패 private String userId; // 사용자 @Builder public GoalsSaveRequestDto(String text, String state, String userId) { this.text = text; this.state = state; this.userId = userId; } public Goals toEntity() { ..