빠르게 MSSQL 환경을 구성해야 할 일이 생겼다. Docker가 있어서 이제 이런건 정말 간단하게 해결할 수 있다. Docker를 설치하는것은 이 글을 참조하도록 하자. Docker Windows 에 설치하기 지난번에는 linux 환경에 docker를 설치해서 이런저런 container 들을 등록하고 실행도 시켜봤었다. 이제 Windows10 환경에서 docker를 설치하고 사용해야 하는 상황이 되었다. Windows에 설치하려고 보니 제 oingdaddy.tistory.com 설치가 완료되었다면 powershell이나 cmd를 열고(windows 환경) 다음 명령어를 순서대로 입력하자. Docker MSSQL 설치 - pull > docker pull mcr.microsoft.com/mssql/ser..
MyBatis 진영에서 MyBatis-Spring-Boot-Starter 라는것을 내놓았다. 아니.. 나만 몰랐던것 같다. 누군가가 작성한 샘플을보니 mybatis-config.xml (MyBatis 설정파일) 파일에 보통 있어야 할 내용들이 없는데도 있는것처럼 동작을 하는것이 의아하게 느껴져서 찾아보니 application.yml 파일에 기술이 되어 있었다. application.yml을 통해 기존에 mybatis-config.xml에서 사용하던 기능을 전부 다 사용할 수 있는것은 아니고 더 적은 xml 구성정도 지원을 해준다고 보면 된다. 이를 어떻게 설정하고 사용하는지 알아보자. pom.xml org.mybatis.spring.boot mybatis-spring-boot-starter 2.1.4 가..
일전에 springboot base에서 File to DB Spring Batch 에 대한 예제를 포스팅했었다. 이번에는 DB to File Spring Batch에 대한 예제를 살펴보도록 하겠다. 대략적인 시나리오는 DB로부터 내용을 읽어서(JdbcCursorItemReader) 이 내용을 가공하고(Processor) File을 만들어(FlatFileItemWriter) 주는 시나리오이다. 간단한 테스트를 위해 H2 DB를 사용했으며 springboot의 version은 2.4.x이다. 그 외에 Spring Batch에 대한 기본 설정(datasource 등)은 되어 있어야 한다. H2 DB 삽입내용 INSERT INTO `BATCH_SAMPLE_EMPLOYEE` (`USER_ID`, `USER_NAM..
지난번에는 Custom ArgumentResolver를 만드는 예제를 해봤다. 이전에 다뤘던 ArgumentResolver가 Controller에 들어오는 파라미터를 가공 및 추가를 하는데 사용되었다면, RetunValueHandler는 리턴 타입으로 판단하여 처리하는 역할을 한다. 기본적인 동작방식은 ArgumentResolver와 매우 흡사하다. 어떻게 처리하는지 살펴보자. Custom ReturnValueHandler @Component public class ResultReturnValueHandler implements HandlerMethodReturnValueHandler { @Override public boolean supportsReturnType(MethodParameter retur..
Spring을 사용하면서 ArgumentResolver라는것을 한번은 들어봤을 것이다. 이것은 Servlet 과 Controller 사이에서 전달되어진 값을 가공하거나 추가할 필요가 있을때 사용한다. AOP와 같이 중복 코드를 제거하는데 큰 의미를 가지고 있는것 같다. 일반 개발자라면 많이 다룰일이 없을듯하고 공통을 잡는 사람들이 주로 다루는 내용들이다. 그럼 간단히 Custom ArgumentResolver를 만드는 방법에 대해서 알아보자. 샘플을 구현할때 대략적인 시나리오는 여기저기 많이 사용되는 사용자에 대한 정보를 ArgumentResolver를 통해서 생성하는 것이다. 물론 이런 정보는 HttpServletRequest를 통해서 가지고 올 수 있지만 위에서 언급한대로 중복된 소스를 줄인다는것에 ..
그동안 잘 사용하고 있던 RestTemplate이 곧 Deprecated가 된다고 한다. 그렇다고 못쓰는건 아니다. NOTE: As of 5.0 this class is in maintenance mode, with only minor requests for changes and bugs to be accepted going forward. Please, consider using the org.springframework.web.reactive.client.WebClient which has a more modern API and supports sync, async, and streaming scenarios. 그러면서 spring docs에서는 WebClient로 바꾸라고 권장을 하고 있다. 하지만..
MinioClient를 통해 putObject를 하는 과정에서 다음과 같은 오류가 발생하였다. io.minio.errors.ErrorResponseException: Object name contains unsupported characters. at io.minio.MinioClient.executeReq(MinioClient.java:1204) ~[minio-6.0.11.jar:6.0.11] at io.minio.MinioClient.execute(MinioClient.java:1066) ~[minio-6.0.11.jar:6.0.11] at io.minio.MinioClient.executePut(MinioClient.java:1430) ~[minio-6.0.11.jar:6.0.11] at io.mi..
File과 관련된 백엔드단 테스트가 필요한 경우가 종종 있다. File을 MultipartFile 형식으로 바꾸어서 처리를 해줘야 하는 경우가 있는데 어떻게 해야 하는지 난감하다. 그럴때는 아래와 같은 로직을 추가함으로써 MultipartFile을 얻을 수 있다. File file = new File("C:\\temp\\test.xlsx"); DiskFileItem fileItem = new DiskFileItem("file", Files.probeContentType(file.toPath()), false, file.getName(), (int) file.length() , file.getParentFile()); InputStream input = new FileInputStream(file); Ou..