프로젝트를 진행하다 보면 엔티티에 생성 시간 또는 마지막 수정 시간에 대한 필드를 넣는 경우가 한번쯤 있을 것이다.이때 가장 단순한 방법으로는 setter 를 사용해서 직접 시간을 설정해 줄수도 있겠지만, 매번 직접 시간을 설정하자니 영 번거롭다.JPA에서는 이러한 상황을 위해, 시간을 자동으로 기록해주는 기능을 제공한다.한번 살펴보자.01.JPA Auditing 이란?Auditing은 '감시', '감사' (thank 말고 다른 감사..)의 의미를 가지고 있다.Auditing은 말 그대로 Entity의 생성, 변경 등을 감시하는 기능이다.JPA에서는 Auditing을 통하여 Entity가 생성되거나 변경되는 시간을 추적하고 기록한다.그럼 해당 기능을 어떻게 사용하는지 알아보자02.JPA Auditing ..
프로젝트를 진행하다 보니, Entity 클래스 내부에 존재는 해야하는데, DB에는 저장할 필요 없는 변수를 사용할 일이 생겼다.properties 파일의 값을 받아오기 위해 @Value를 사용할 변수를 정의했는데, 해당 변수를 DB에는 반영시키고 싶지 않았다.이를 위해 방법이 없나 살펴봤는데 @Transient 아노테이션을 사용하면 DB에 반영되지 않는다고 한다.ex@Entity@Getter@Setterpublic class Diary { @Transient @Value("${path.res.img.default-img}") String defaultImgPath; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) priv..
프로젝트를 진행하던 중 API Key 값을 프로젝트 내부에서 사용해야 할 일이 생겼다.그런데 이런 키값을 그대로 자바 코드에 넣자니, 보안 문제가 우려되었다.이를 위해 .gitignore에 등록해둔 application.properties 파일에 키값을 저장해두고, 자바에서 이를 불러와 사용하기로 결정했다.밑에서 해당 방법을 서술하겠다.application.properties의 변수값 불러오기application.properties먼저 application.properties 파일에 값을 저장해 두겠다.Test.javapackage com.hayden.limg\_diary.test; import org.springframework.beans.factory.annotation.Value; import ..
✨ 문제 상황스프링 부트에서 사용자에 대한 권한 처리도 잘 해주었고, 경로별 인가 설정도 잘 해주었는데 계속해서 403 error 발생Data BaseSecurityConfig.java경로 접근시 에러 발생✨ 문제 원인찾아보니, 스프링 시큐리티에서의 role 값은 항상 'ROLE_' 이라는 접두사가 붙어있어야 한다고 한다.예를들어 기존에 USER 라고 저장되어있었다면, ROLE_USER로 값을 저장해야 스프링 부트가 권한을 인식한다.AuthorityAuthorizationManager.class in Spring Security실제로 인가 권한을 체크하는 hasAnyRole() 메소드에서 권한을 체크할 때 ROLE_ prifix를 붙힌 후 검사하는 코드를 확인할 수 있다.✨ 수정DB의 role 값에 RO..
DB에 데이터를 저장할 때 PK값이 꼭 존재해야한다.물론 이때 PK 값을 직접 넣어 줄 수도 있지만, 대부분의 경우에서는 DB에서 자동으로 생성되게 설정한다.Spring Data JPA에서 PK값을 자동으로 처리하기 위한 방법을 살펴보자.GeneratedValue 아노테이션 사용하기스프링부트에서 PK값을 자동 증가로 설정하기 위해서는, Entity를 정의할 때 PK 필드에 @GeneratedValue를 붙여주면 된다.이때 설정할수 있는 전략은 아래와 같은 4가지가 존재한다.GenerationType.IDENTITYGenerationType.SEQUENCEGenerationType.TABLEGenerationType.Auto하나씩 살펴보자.GenerationType.IDENTITYGenerationType..
Spring Data JPA는 Repository 인터페이스 안에 Entity 관련 메소드를 정의하여 사용한다.이때 Repository 인터페이스의 메소드 작성 규칙이 존재한다.하나씩 살펴보자식별자로 Entity 조회: findByIdT findById(Id id):엔티티 객체 반환만약 존재하지 않는 id면 null 반환Optional findById(Id id)옵셔널 객체 만환만약 존재하지 않는 id면 Option 반환Entity 삭제: deletevoid delete(T entity)엔티티 객체로 삭제void delete(Id id)아이디로 엔티티 조회 후 삭제내부적으로 findById()로 객체 탐색 후 delete() 메소드 호출만약 삭제할 엔티티가 존재하지 않으면 Exception 발생Entit..