API 를 개발하고 PostMan 으로 확인하는 도중 아래와 같은 에러로 테스트가 되지 못 하였다. { "timestamp": "2022-09-28T09:23:35.655+00:00", "status": 400, "error": "Bad Request", "trace": "org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to ... "message": "Failed to convert value of type 'java.lang.String' to required type 'java.lang.Boolean'; nested ..
최근 회사에서 운영서버에 반영하던 도중 큰 장애가 발생할 뻔한 일이 있었습니다. 해당 프로젝트에서는 MyBatis 를 사용하고, Dynamic Query 를 같이 사용하면서 WHERE 절에 모두 if 태그를 사용하여 파라미터를 확인하고 있었습니다.(물론 Java 단에서도 파라미터 Validation Check 를 하고는 있었습니다) 발생한 원인은 반영 소스 중에 분기를 타면서 알맞게 Parameter 를 세팅하여 DB 를 조회하여 해당 데이터들을 삭제하는 로직이었는데, 실수로 if 문 바깥에 DB 를 조회하는 메소드가 선언되었고, Parameter 도 하나도 세팅 안되게 되었습니다. 그로 인해, WHERE 절에서 모두 null 로 세팅이 되면서 전체 조회가 되었고, 해당 데이터들을 삭제하는 로직을 타는 ..
1. Tasklet- Tasklet 은 하나의 메소드로 구성되어 있는 인터페이스.- Step 안에서 수행될 기능들을 명시.- 실패를 알리기위해 예외를 반환하거나 Throw 할 때까지 execute 를 반복적으로 호출.- Tasklet 은 Step 안에서 단일로 수행도리 커스텀한 기능들을 선언할 때 사용- Tasklet 은 하나와 Reader & Processor & Writer 한 묶음이 같은 레벨로서, Reader & Processor 와 함께 Tasklet 을 사용할 수 없다.1-1. Sample(With. Lambda)@Slf4j@EnableBatchProcessing@Configuration@RequiredArgsConstructorpublic class TaskletJobConfig{ pr..
이전 글에서는 간단하게 Spirng Batch 환경을 구성하고 동작하는 것을 확인해보았습니다.이번 글에서는 Spring Batch 의 기능 중 Step 에 대해 활용하여 사용해보려고 합니다.0. 다양한 Step 설정- 해당 테스트를 위해 간단하게 controller 를 선언하여 배치를 수행하도록 추가하겠습니다.@Controller@Slf4j@RequiredArgsConstructorpublic class TestController { private final Job StepTestJob; private final JobLauncher jobLauncher; @SneakyThrows @GetMapping("/test/{number}") public void test(@PathVa..
최근에 Spring Batch 에 대해 정리를 하였는데, 이를 간단하게 사용하는 것도 정리하고자 합니다. [Spring] Spring Batch 정리회사에서 업무를 하나씩 배우고 맡게 되면서, Spring Batch 를 사용하고 있는 배치서버를 맡게 되었습니다. 이전 스케줄링 관련 개발을 할 때는 Crontab, Quartz 등을 사용하였는데, 여기서는 Spring Batchdev-jwblog.tistory.com1. Spring Batch 프로젝트 구성- 개발 환경은 아래와 같습니다.IDE : Intelli J 2022.02SpringBoot : 2.7.3java : JDK 11DB : MySQL1-1. 프로젝트 생성- 인텔리제이를 통해서 프로젝트를 생성합니다.- 프로젝트에서 필요한 Dependency..
스프링으로 개발을 하다 보면 @GetMapping, @RequiredArgsConstructor 등의 다양한 어노테이션을 볼 수 있고, 사용을 하게 된다. 간단하게는 어노테이션을 쓰면 그 어노테이션의 로직(내용)을 컴파일/ 빌드 시 자동으로 추가해주는 것으로 알고 있다. 이렇게 자주 사용하는 어노테이션이지만 동작방식이나 정의되는 방법 등에 대해 정확하게 알고 있다고 생각하지 않아, 좀 더 알아보고 정리해보고자 한다. 1. 어노테이션(Annotation)이란? - 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종. - 보통 @ 기호를 앞에 붙여서 사용.(컴파일러는 컴파일 시 @문자로 시작이 되면 어노테이션으로 판단하여 진행) - JDK 1.5 버전 이상부터 사용 가능. //Example @Req..
1. 서론 - MySQL 에서 날짜 차이를 구하기 위해 DATEDIFF, TIMESTAMPDIFF 함수를 사용합니다. - 간단하게 일(day) 차이를 구할 때는 DATEDIFF 함수를 사용. - 이외에 연(year), 월(month), 시간(hour), 초(second) 등을 지정하여 구할 때는 TIMESTAMPDIFF 함수를 사용. 2. 사용법 2-1. DATEDIFF - 기본적으로 날짜1 - 날짜2 로 계산됩니다. DATEDIFF(날짜1, 날짜2); 2-2. TIMESTAMPDIFF - 기본적으로 날짜2 - 날짜1 로 계산됩니다. TIMESTAMPDIFF(단위, 날짜1, 날짜2); - 단위의 종류로는 아래와 같습니다. SECOND : 초 MINUTE : 분 HOUR : 시간 DAY : 일 WEEK :..
1. EXISTS 절 - 결과로 TRUE, FALSE 를 반환하는 연산자. - 한 테이블이 다른 테이블과 외래키(FK)와 같은 관계인 경우 유용합니다. - 조건에 해당하는 ROW의 존재 유무 이후 더 수행하지 않는다. - 즉, 테이블 간의 결과를 어떤 값이 존재하는 지만 조회 할때 사용합니다. - 쿼리의 의도롤 고려했을 대 EXISTS 가 IN 에 비해 성능이 좋습니다.(그렇지 않을 경우, JOIN 활용) EXIST - 메인 쿼리 -> EXISTS 쿼리 순서로 진행 -- 기본 구문 SELECT * FROM table WHERE [NOT] EXISTS(subquery); 1-1. 예제 - 아래와 같이 간단하게 데이터를 만들고 확인해보겠습니다. SELECT * FROM STUDENT_TABLE; SELECT..
MySQL 에서 어떠한 계산 또는 음수에 대해서 절대값으로 구하기 위해 abs 함수를 사용합니다. 1. 사용법 ABS(절대값을 얻어낼 수) 2. 예제 select abs(10); // 10 select abs(-10); // 10 select abs(10 - 100); // 90
회사에서 업무를 하나씩 배우고 맡게 되면서, Spring Batch 를 사용하고 있는 배치서버를 맡게 되었습니다.이전 스케줄링 관련 개발을 할 때는 Crontab, Quartz 등을 사용하였는데, 여기서는 Spring Batch 를 사용하고 있었고, 해당 내용을 이해하는데 러닝커브도 있어 정리하고자 합니다.추후에는 Spring Batch 사용 예제에 대해서도 포스팅할 예정입니다.1. Spring Batch- Spring Batch 는 일괄 처리를 위한 오픈 소스 프레임워크이다.Batch Processing(일괄 처리)사용자의 개입 없이 실행을 스케줄링할 수 있는 작업(job)을 의미하며. 컴퓨터 프로그램 흐름에 따라 순차적으로 자료를 처리하는 방식이다. 배치는 예약된 시간에 자동으로 실행될 수 있으며 컴..