입출력 관련 데이터를 관리할 때 가장 신경쓰이는 요소중에 하나가 생성(생성자, 생성일시)과 최종수정(최종수정자, 최종수정일)이다.
JPA에는 Auditing 이라고 하여, 인터페이스로 선언된 기능을 구현해두면 자동으로 엔티티에 필요한 데이터를 입력하여 등록하는 작업을 JPA에서 처리해주는 것이 가능하다.

현재 프로젝트에서 SpringBoot를 사용중인데 설정과 관련된 부분들을 JavaConfig로 처리하다보니 이와 관련된 정보가 없다.
생각보다 설정이 간단하다.

● AuditableEntity

@MappedSuperclass
@EntityListeners(value = { AuditingEntityListener.class })
public class AuditableEntity extends AbstractAuditable<Member, Long> {
    private static final long serialVersionUID = 359326673134570560L;
}

● Auditing target Entity

@Entity
public class AuditingTargetEntity extends AuditableEntity {

}

● SpringSecurityAuditorAware

현재 프로젝트는 스프링시큐리티를 이용하여 접근제어를 하고 있다.

JPA에서 사용할 Auditor(현재 작업중인 대상)에 관한 정보를 가져오는 과정을 정의한 AuditorAware<T> 인터페이스를 이용하여 스프링시큐리티의 SecurityContextHolder에서 관련 사용자 정보를 가져오도록 구현한다.

public class SpringSecurityAuditorAware implements AuditorAware<Member> {
    @Override
    public Member getCurrentAuditor() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (null == authentication || !authentication.isAuthenticated()) {
            return null;
        }
        return (Member) authentication.getPrincipal();
    }
}

● AuditingConfig 선언

@Configuration
@EnableJpaAuditing
public class AuditingConfig {
    @Bean
    SpringSecurityAuditorAware auditorAware() {
        return new SpringSecurityAuditorAware();
    }
}

● 정리

참 쉽죠?

● 참고


곧 있을 발표에 사용할 목적으로, 그레들Gradle과 JavaConfig를 적용한 프로젝트를 만들었다.

발표를 빙자해서 나도 JavaConfig 사용법을 익혀볼 요량으로 만들었다. 이번에 토.스.3.1을 읽으면서 JavaConfig를 통해서 XML설정을 대체했을 때의 강점들에 대해 전해 들은 바가 있어 시도해본다. 더욱 강점을 가지려면 @Profile을 통해서 사용환경별로 지정해서 사용하는 것이 좋을 것으로 보인다. 과연?

자바의 웹 애플리케이션에는 관례적으로 web.xml이 포함되어 있어야 했다. 그런데 서블릿3.0 스펙이 나오면서 web.xml 대신ServletContext를 스프링에서 확장한 WebApplicationInitializer를 구현하여 초기화 작업이 가능하다. 자세한 내용은 'web.xml 없는 스프링 개발'을 참조하기 바란다.

이번 예제 프로젝트에는 애플리케이션 설정과 관련된 XML들을 모두 @Configuration 애노테이션을 선언한 클래스들로 대체했다.

Github repository: https://github.com/ihoneymon/rocking-the-rest-api

▣ 선행작업

$ git clone git@github.com:ihoneymon/rocking-the-rest-api.git
$ cd rocking-the-rest-api
$ ./gradlew generateQueryDsl

▣ Import project

▣ Spring tools - Add Spring project nature

Spring Project Nature를 추가하고 프로젝트의 아이콘이 변경되면, 프로젝트의 속성창을 띄워서 [Spring-Beans Support]를 가면 아직 설정파일이 추가되어 있지 않다. [Scan...] 버튼을 누른다.

 @Configuration 이 붙은 JavaConfig 용 클래스들이 검색된다. 모두 선택하고 [OK]를 누른다.

Config 파일들 목록이 모두 추가되어 있다.

▣ Spring Beans 확인

'Spring Explorer' 창을 보면 아래 그림과 같이 스프링 빈과 관련된 클래스와 목록을 확인할 수 있다.

밑에 'Config Detection'에 설정을 변경하지는 않았지만, 혹시나 검색되지 않는다면 아래 그림에서 보는 것처럼 'Auto detection for annotated Java Spring configuration files'를 체크하자.



이후에는 간단하게 Controller들을 구현해주면 발표하려는 수순까지 발표에 사용가능하다.

오늘은 열심히 발표자료들 수집하고, 대략적으로 내용을 정리해야지.


+ Recent posts