모르지 않다는 것은 아는것과 다르다.

전체 글 224

Job, Step

Job 전체 배치 프로세스를 캡슐화한 도메인이다. Step의 순서를 정의한다. JobParameters를 받는다. @Bean public Job helloJob() { return jobBuilderFactory.get("helloJob") .incrementer(new RunIdIncrementer()) .start(this.helloStep()) // job 실행 시 최초로 실행될 step 설정 .build(); } job을 하나 생성한다. -> job은 batch의 실행단위를 말한다. job의 실행단위를 구분할 수 있는 incrementer -> RunIdIncrementer는 job이 실행될 때마다 Id를 자동으로 생성해 준다. job의 name을 "helloJob"으로 지정했는데 name은 sp..

Spring Batch 2022.04.02

Spring Batch 메타 테이블

메타테이블이란? -> 배치 실행을 위한 메타 데이터가 저장되는 테이블이다. Spring Batch Framework가 실행 시 meta data 테이블들을 사용하므로 초기 설정이 필요하다. Spring Batch Framework에 속하는 부분이므로 수정하지 않고 조회만 한다. Job의 이력, 파라미터등 실행 결과를 조회할 수 있다. 배치 결과에 대해서 로그, 별도의 실행 이력을 남기는 경우가 대부분이므로 조회할 일이 많지 않다. BATCH_JOB_INSTANCE Job이 실행되며 생성되는 최상위 계층의 테이블이다. job_name과 job_key를 기준으로 하나의 row가 생성된다. -> 중복은 있을 수 없다. job_key는 BATCH_JOB_EXECUTION_PARAMS에 저장되는 Parameter..

Spring Batch 2022.04.02

JOOQ (Java Object Oriented Querying)

JOOQ 란? 테이블 스키마로부터 자바 코드를 만들어주는 라이브러리 이다. 시스템의 설계가 자바 코드(엔티티)가 아닌, DB 에서 시작될 때 유용하다. 당연히 ORM framework 가 아니다. ORM 은 오히려 반대로 Java class 를 DB 스키마로 매핑하기 때문이다. "jOOQ is not a replacement for JPA" SQL이 잘 어울리는 곳엔, Jooq가 잘 맞는다. 반면, Object Persistence 가 잘 어울리는 곳엔, JPA 가 잘 맞는다. JOOQ 의 장점 Jooq 방식으로 사용한다면, 엔티티를 작성할 필요가 없다. 대신 JPA 와 반대로 스키마는 정의 되어 있어야 된다. 로그가 보기 좋다. -> 결과 로그가 한눈에 보기 좋다. query 로그 안에 binding ..

Jdbc 2022.03.24

스프링시큐리티 테스트

스프링시큐리티 테스트 SpringSecurity를 사용하는 프로젝트의 테스트는 SpringSecurity가 없는 프로젝트의 테스트와 조금 다른 부분이 있다. SpringSecurity의 테스트에서는 User가 로그인한 상태를 가정하고 테스트해야 하는 경우가 많다. 인증을 받지 않은 상태로 테스트를 하면 SpringSecurity에서 요청 자체를 막기 때문에 테스트가 제대로 동작조차 하지 못한다. 이런 문제는 프로젝트에 spring-security-test를 사용해서 해결할 수 있다. 설정 의존성 추가 testImplementation 'org.springframework.security:spring-security-test' Test 실행 전 MockMvc에 springSecurity (static 메소..

Spring Security 2022.03.24

JPA 관련 애노테이션 정리

@Repository 관련 persistence layer 를 구현하는 클래스에 사용한다. @Component 와 마찬가지로 해당 클래스를 빈으로 등록한다. persistence layer 에서 발생하는 예외를 잡아서 DataAccessException 으로 처리해준다. - PersistenceExceptionTranslationPostProcessor 가 처리한다. @Repository 와 관련된 Spring Data JPA 인터페이스 Repository: 기본 repository 인터페이스다. -> 어떤 메소드도 제공하지 않는다. CrudRepository: Repository + CRUD 기능 제공한다. PagingAndSortingRepository: CrudRepository + 페이징, 정렬 ..

Spring Jpa 2022.03.24

JPA DB 수동설정

DB 를 수동으로 설정해야할 경우 DB를 하나만 사용하면 굳이 수동으로 설저할 필요가 없다. 하지만 아래와 같은 경우엔 DB를 수동으로 설정할 필요가 있다. 자바 코드로 DataSource, TransactionManager 를 수동 세팅해야 하는 경우 configuration properties 로 커버되지 않는 세밀한 옵션을 줄 때 다중 DataSource 를 사용할 때 DB 세팅 요소 먼저 DataSource 를 세팅한다. -> DB 설정 그 다음 DataSource 를 바탕으로 EntityManagerFactory 를 세팅한다. -> PA 엔티티 관리 그 다음 EntityManagerFactory를 바탕으로 LocalContainerEntityManagerFactoryBean를 세팅한다. -> 트..

Spring Jpa 2022.03.24

SpringBoot Properties

SpringBoot Properties 란 스프링 부트의 기본 기능 전체를 튜닝하는 부트 전용 설정 프로퍼티를 말한다. 부트의 기능 거의 대부분을 제어한다. 기본값이 세팅되어 있어서 아무 것도 쓰지 않는다고 해도 디폴트 값으로 작동한다. 만약 설정을 자바 코드 레벨에서 하고있다면, Properties 로 관리할 수 있는지 여부를 체크해볼 필요가 있다. 자바코드 vs Properties 예를들어 아래와 같은 DataSorce 에 관한 설정이 있다고 해보자. @Configuration public class DataSourceConfig { @Bean public DataSource getDataSource() { DataSourceBuilder builder = DataSourceBuilder.create..

Other 2022.03.24

PasswordEncoder

PasswordEncoder 란? spring security 를 사용할때 패스워드를 암호화하는 전략을 정할 수 있다. 아래와 같이 PasswordEncoder 를 빈으로 등록한다. @Bean public PasswordEncoder passwordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder(); } PasswordEncoder 전략 아래와 같이 5가지의 전략을 갖는다. NoOpPasswordEncoder 암호화하지 않고 평문으로 사용한다. password가 그대로 노출되기 때문에 현재는 deprecated 되었고 사용하지 않기를 권장한다. BcryptPasswordEncoder Bcrypt 해시 함수를 사용한 P..

Spring Security 2022.03.24

함수 기반 API 설계

함수형 엔드 포인트 Spring Web 의 엔드포인트를 함수형 스타일로 작성할 수 있다. 애노테이션 방식과 함께 사용 가능하다. 애노테이션 방식과 마찬가지로 DispatcherServlet 위에서 동작한다. 불변성을 고려해서 설계된다. 기존의 애노테이션 방식 @RequestMapping("/api") @RestController public class APIPlaceController { @GetMapping("/places") public List getPlaces() { return List.of("place1", "place2"); } @PostMapping("/places") public Boolean createPlace() { return true; } @GetMapping("/places/{..

Spring 2022.03.19

Spring Cache Abstraction

Spring Cache Abstraction 란? 애플리케이션에 "투명하게(transparently)" 캐시를 넣어주는 기능이다. 메소드, 클래스에 적용 가능하다. 캐시 인프라는 스프링 부트 자동 설정으로 세팅되고, 프로퍼티로 관리 가능하다. 캐시가 있건 없건, 시스템의 기대 동작은 동일해야 한다. -> 목표는 성능이다. 설정 아래와 같이 디펜던시를 추가해 준다. implementation 'org.springframwork.boot:spring-boot-starter-cache' 아래와 같이 @EnableCaching 을 붙여준다. @EnableCaching @SpringBootApplication public class ServiceDeskApplication { public static void m..

Spring 2022.03.19