cache는 거의 변경될 여지가 없는 DB 조회 결과값을 메모리 혹은 디스크에 보관하고 있다가 다시 호출되었을때는 DB 조회를 하지 않고 메모리에 있는 결과값을 그대로 쓰고 싶을때 사용한다. 많은 cache 관련 lib들이 있지만 가장 대표적으로 많이 사용되고 있는 ehcache를 springboot와 연동하고 사용하는 방법에 대해서 기술해보고자 한다. 필자는 springboot 2.3.x, java11, maven, ehcache 2.x 환경이다. 설정 pom.xml org.springframework.boot spring-boot-starter-cache net.sf.ehcache ehcache 2.10.6 가장 먼저 해야 할 일은 dependency를 추가하는 일이다. springboot에서 간편히..
masking은 민감 정보에 대해 보이지 않게 처리를 해주는것을 말한다. 개인정보와 관련된 시스템을 구축하다보면 masking은 필수로 사용이 되어야 한다. 화면단에 보이는 masking도 필요하고 출력되는 log에도 masking은 필요하다. 그중 이번에는 log에 masking을 적용하는 방법에 대해 알아보도록 하겠다. 필자는 springboot 환경에 logback을 사용하고 있다. springboot의 application.yml 에서 logback 설정을 하여 log를 관리하고 있었다. 하지만 log를 masking 하는것은 application.yml에서는 할수 없었다. application.yml에서는 default로만 설정을 할 수밖에 없어서 커스터마이징이 필요한 log masking은 사..
MyBatis를 사용해서 select를 날렸을때 결과에 null이 나오면, 이에 대해 null을 허용할지 안할지를 설정을 통해 할 수 있다. null이 나온다고 하는건 column이 될 수도 있고 row가 될 수도 있다. 잘 이해가 안갈수도 있어서 예시를 들어 설명하자면 사용자 table이 있다고 하고 이중 특정 컬럼만 조회를 했을때 다음과 같은 결과가 나왔다. 빨간 네모를 친 부분은 row 의 모든 항목이 null인 것이고 파란 네모를 친 부분은 column 만 null 인 경우이다. 결과가 null인 경우 MyBatis에서는 별도의 설정을 하지 않으면 생략을 해버리기 때문에 원하는 결과가 나오지 않을 수 있다. 그럴때는 MyBatis 설정을 통해 내가 원하는 상황에 맞게 조치를 해주자. select ..
하나의 application에서 여러개의 DB에 connection을 해야 하는 상황이다. springboot에서는 이를 어떻게 처리해야 할까? 약간의 설정을 추가해줌으로써 쉽게 가능하다. application.yml 변경 AS-IS spring: datasource: driver-class-name: oracle.jdbc.OracleDriver url: jdbc:oracle:thin:@xx.xx.xx.xx:1521:OINGDADDY username: oing password: daddy 기존에는 기본 datasource와 sqlSessionFactory를 사용을 했었다. 따라서 이렇게만 설정해주면 어디서든 DataSource와 SqlSessionFactory를 주입받아 사용할 수 있었다. 하지만 다중 ..
Springboot에서 datasource 설정을 Config class에서 할 때 보통 다음과 같이 한다. @Bean @ConfigurationProperties(prefix = "spring.datasource-mysql") public DataSource mysqlDataSource() { return DataSourceBuilder.create() .type(HikariDataSource.class) .build(); } 이때 @ConfigurationProperties 부분이 warning이 뜬다. @ConfigurationProperties은 *.properties , *.yml 파일에 있는 property를 자바 클래스에 값을 가져와서 사용할 수 있게 해주는 어노테이션이다. @Configur..
Springboot를 사용하면 기본적으로 사용할 수 있는 환경설정 파일은 application.properties이다. 작은 프로젝트에서는 이것만 사용해도 문제는 없지만 규모가 커지면 이 파일 하나에 설정을 관리하기 벅찰수도 있다. 이럴 때 용도에 맞게 이 파일을 분리해서 사용하면 여러모로 유용하다. 1. properties 파일 분리 일단은 application.properties 파일을 사용했을 때 다른 properties 파일을 추가로 생성하고 이것도 동일하게 외부 환경변수를 관리하고자 한다. 예를들면 db.properties 파일을 추가로 설정하는 경우이다. @PropertySource(value = { "classpath:project.properties" }) @SpringBootApplica..
remember-me.. 나를 기억해 라는 영화가 문득 떠올랐다. 뭔 내용인지는 거의 90프로 까먹는것 같다. 머리가 점점 휘발성이 되어가는것 같다. 무튼.. 우리가 일상에서 많이 사용하는 자동로그인, 로그인유지 등등의 표현으로 많이 사용하고 있는 remember-me 라는 Spring Security의 기능에 대해 살펴보도록 하겠다. remember-me가 무슨 기능이냐? 로그인시에 위와 같이 '로그인 유지'라고 되어 있는 체크박스에 체크를 하고 로그인을 하면 내가 브라우저를 닫거나 개발자도구에서 세션을 끊어버리는 등 직접 로그아웃 버튼을 눌러 로그아웃을 하지 않는 이상 remember-me라는 기능이 계속 로그인을 유지시켜준다. 잘 하시는 분들은 이런 기능들을 설명할때도 시퀀스 다이어그램이나 클래스 ..
Controller [com.sample.controller.SomeController] Method [public com.sample.SomeObject com.sample.controller.SomeController.page(public com.sample.SomeObject)] with argument values: [0] [type=org.springframework.validation.support.BindingAwareModelMap] [value={}] ] with root cause java.lang.IllegalArgumentException: argument type mismatch at java.base/jdk.internal.reflect.NativeMethodAccessorImp..