본문 바로가기

전체 글168

SpringBoot Security multiple PasswordEncoder 설정 SpringBoot Multiple PasswordEncoder 스프링 시큐리티 사용중 간혹 여러 유형의 패스워드 엔코더가 필요한 경우가 있다. 그럴때 필요한 설정이 무엇인지 확인해 보자. 결론만 보고 싶다면 PasswordEncoder 섹션으로 바로 이동. 프로젝트 설정 이번 테스트에 필요한 스프링부트 디펜던시는 다음과 같다. spring-boot-starter-web spring-boot-starter-security spring-boot-starter-data-jpa h2 database 이번 테스트는 빠른 속도로 작성하기 위해 kotlin 언어를 사용한다. 이를 위해 build.gradle.kts 파일에서 allopen 설정을 추가한다. plugins { kotlin("plugin.allopen".. 2023. 4. 4.
Spring batch with multiple db Spring batch with multiple db 스프링에서 두개 이상의 데이터베이스와 연결하여 사용하는 예제로 배치를 만들어 보기로 했다. 두개의 데이터베이스를 어떻게 구성하고 스프링에서 어떻게 활용하는지 체크해보자. 프로젝트의 목적은 외부 데이터베이스의 부서 테이블을 읽어 메인 데이터베이스의 부서 테이블로 옮기는 것이다. 순서 1부 멀티플 데이터베이스 설정 (현재) 2부 배치 스텝과 잡 설정 프로젝트 생성 우선 기본 스프링 이니셜라이저를 통해 프로젝트를 생성한다. 코틀린을 이용한 프로젝트를 생성한다. 생성시 선택한 디펜던시 및 도구는 다음과 같다. flowchart LR kotlin --- gradle batch --- data-jdbc --- data-jpa --- jdbc-driver 스프링 .. 2023. 3. 24.
java LocalDateTime OffsetDateTime 의 호환 자바로 구성된 애플리케이션에서 자주 발생하는 문제중 LocalDateTime 과 OffsetDateTime 간의 컨버팅이 필요할 때가 있다. OffsetDateTime ➡️ LocalDateTime @Test public void offsetToLocalTest() { DateTimeFormatter formatter1 = DateTimeFormatter.ISO_OFFSET_DATE_TIME; DateTimeFormatter formatter2 = DateTimeFormatter.ISO_DATE_TIME; TemporalAccessor input = formatter1.parse("2023-03-13T01:00:00+01:00"); OffsetDateTime offset = OffsetDateTime.f.. 2023. 3. 13.
spring @Conditional 사용하기 Spring @Conditional 활용하기 Spring 설정중 특정 조건에 따라 적용 하고 싶을 때 활용할 수 있는 애노테이션이 있다. @Configuration class, @Bean method 등에 활용할 조건에 따라 적용 할 수 있다. Condition class @Conditional 애노테이션을 적용하기 위해서는 Condition 클래스를 포함해야 한다. Condition 클래스는 애노테이션 선언시 적용 할 것인지 안 할 것인지 판단해 주는 클래스이다. matches(context: ConditionContext, metadata: AnnotatedTypeMetadata): Boolean 메서드를 오버라이드 하여 적용 여부를 판단해 반환해 주면 된다. class MyCondition : Co.. 2023. 3. 12.
spring6 3가지 rest-client 사용하기 spring6-rest-clients-sample spring6 (spring-boot 3) 에서 활용 가능한 3가지 Rest API 활용 방법을 확인해 보자. 환율을 공개하는 API https://open.er-api.com/v6/latest를 통해 한국 원화 환율을 확인해 보는 샘플을 작성해 본다. RestTemplate 이미 많은 사람들이 사용하고 있는 RestTemplate 이다. 가장 단순하고 사용 방법도 가장 심플하다. val mapClass = Map::class.java as Class val res = RestTemplate().getForObject("https://open.er-api.com/v6/latest", mapClass) val rates = res?.get("rates") .. 2023. 3. 11.
Note: Recompile with -Xlint:unchecked for details. Java Object를 Map 으로 컨버팅 하기 위해 사용하는 방법중 com.fasterxml.jackson.databind.ObjectMapper 클래스를 활용할 수 있다. ObjectMapper objectMapper = new ObjectMapper(); Map dataMap = objectMapper.convertValue(dataClass, Map.class); 다만 이런 경우 자바의 Lint에 의해 경고가 발생할 수 있다. 이는 Map 클래스가 제너릭이기 때문에 그에 대한 정의를 제대로 하지 않았기 때문에 문제가 발생할 가능성이 있기 때문에 경고하는 것이다. 이때는 정확한 Map 클래스에 대한 정의를 알려 주어야 한다. 이때는 TypeReference 클래스를 사용하면 된다. ObjectMap.. 2023. 3. 10.