[Spring Batch] 메타 데이터 테이블 정리
·
Spring Framework/Spring
Spring Batch가 배치 작업의 실행 상태와 이력을 추적하기 위해 자동으로 생성하고 관리하는 테이블사용자가 직접 조작하지 않고, Spring Batch가 내부적으로 모든 배치 실행 정보를 기록해당 테이블을 사용해서 배치 작업 모니터링도 구현해볼 수 있다.실행 이력, 성공/실패 결과 등 다양한 정보를 제공필요한 테이블의 DDL은 Spring Batch Github에서 확인할 수 있다. 여러 종류의 데이터 베이스에 대한 SQL 파일이 있어서 자신이 사용중인 데이터베이스에 맞는 쿼리를 가져와 사용하면 된다.메타 테이블 목록BATCH_JOB_INSTANCE : Job의 기본 정보(이름, hash key)BATCH_JOB_EXECUTION : Job의 실행 이력 : job id, 실행시간, 상태, 실행결과B..
[Spring Batch] skip / retry
·
Spring Framework/Spring
Spring Batch에서 일부 오류 데이터 때문에 전체 배치가 실패하는 문제를 해결하는 방법가령 10만 건 데이터 처리 중 1건의 오류로 전체 작업이 중단되거나, 일시적인 네트워크 오류로 배치가 실패하는 상황을 방지할 수 있다.알아볼 것Spring Batch skip/retry 기능을 실제 프로젝트에 적용Reader/Processor/Writer 각 단계별 오류 처리 동작 방식 이해상황별 적절한 오류 처리 전략 수립skip잘못된 데이터를 제외하고 나머지 처리를 계속해야 할 경우retry네트워크 오류, DB 연결 실패 등 재시도로 해결 가능한 문제일 경우skip / retryskip예외 발생 시 해당 아이템만 제외하고 나머지 정상 데이터는 계속 처리한다.오류 발생 → 해당 아이템 제외 → 다음 아이템 계..
[Spring Boot] 자동 설정(Auto Configuration)
·
Spring Framework/Spring
Spring Boot AutoConfiguration스프링 부트가 클래스패스, 환경, 설정 등을 분석해 필요한 Bean을 자동으로 구성개발자는 복잡한 환경설정 없이 바로 애플리케이션 개발에 집중할 수 있다.보편적으로 많이 사용하는 설정을 미리 제공spring-boot-starter-data-jpa 의존성을 추가하면 최소한의 DB 접속 정보만 입력하면 자동으로 DataSource, EntityManager, 트랜잭션 매니저 등이 설정된다.설정 실수를 줄이고 빠른 개발이 가능자동 설정의 동작 원리Spring Boot 프로젝트를 생성할 때 만들어진 클래스에서 볼 수 있는 @SpringBootApplication 애너테이션이 애너테이션에 포함된 @EnableAutoConfiguration@Target(Eleme..
[JPA] 연관 관계
·
Spring Framework/Spring
JPA를 사용하면서 두 엔티티간 일다대 관계를 설정하는 경우가 많았다. 어쩔때는 중간 테이블이 생기고 어쩔때는 데이터베이스에 데이터가 저장이 안되고, 그럴때마다 그냥 mappedBy 추가하고 joinColumn 추가하고 넘어갔다. 특히 두 엔티티 관계를 설정할 때 연관관계의 주인이라는 개념을 잘 이해하지 못했다. 아직 제대로 개념을 익히지는 못했지만 두 엔티티 관계 설정을 해보며 어떤 변화가 생기는지 테스트해봤다.기본 코드아래의 Parent, Child 두 엔티티에 일대다 관계를 설정할 것이다. 각 엔티티에 @ManyToOne이나 @OneToMany를 추가해보며 테스트 코드를 실행했다.@Entitypublic class Parent { @Id @GeneratedValue(strategy = G..
Interceptor
·
Spring Framework/Spring
Interceptorinterceptor를 통해 뷰의 공통적인 부분을 묶을 수 있다. 이를 통해 사용자 세션, 쿠키를 확인하거나 로그를 남기는 등 여러 작업을 할 수 있다.interface CookieValidator { void checkUser(email);}컨트롤러에서 이 인터페이스를 상속받아 사용하면 된다.인터셉터 작성​xpublic class AuthorizationInterceptor extends HandlerInterceptorAdapter {​ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {​ String em..