JaeWon's Devlog
article thumbnail
[Spring] Spring Batch JobParameter 활용 하기(With. Custom 하기, 공통 관리하기)
BackEnd/Spring 2023. 10. 27. 15:34

최근에 회사에서 스프링배치를 사용하는 배치업무를 담당하고 있습니다. 간략하게 JobParameter를 수정할 내용이 있었는데 이를 추가할 때마다 모든 배치 소스를 수정해야 하는 불편함을 알게 되었습니다.(아래 적용하려다가 괜히 일이 커지긴 했다...) 해당 글에서는 이 JobParameter 를 조금 더 활용하는 법과 별도의 클래스(Class)로 만들어 공통으로 관리하고 빈(Bean)으로 등록해서 사용하는 것을 포스팅해보려고 합니다. 해당 글에서 사용된 소스는 Git 에서 확인하실 수 있습니다. 1. 기존 방식 - 기존에서는 JobParameter 를 사용하기 위해 아래와 같은 형태로 작성하였습니다. 1-1. 샘플코드 @Slf4j @Configuration @RequiredArgsConstructor p..

article thumbnail
[Spring] @Transactional 사용 시 주의할 점(Feat. 오픈전 발견한 장애)
BackEnd/Spring 2023. 8. 13. 17:05

회사에서 신규 서비스 오픈을 앞에 두고 반영 이후 운영 CBT 를 진행하다가, 오류로그가 계속 올라오는 것을 확인하였습니다. 에러 로그를 확인해보니 하나의 로직에서 DB에 Insert(저장) 후에 해당 값을 Select(조회) 하는 과정에서 발생하였습니다. 발생한 이유를 확인해보니 테스트 환경에서는 발견이 안되었는데, 운영 환경은 모두 이중화가 되면서 발생하였다. 로직은 @Transactional 어노테이션으로 트랜잭션을 걸어두었으나 트랜잭션이 끝나기 전에 Insert(저장)은 1번 Session 으로, Select(조회)는 2번 Session 으로 동작 후 Insert하면서 NPE가 발생하고 있었습니다. 위와 같은 에러가 발생했다는 것은 @Transactional 어노테이션이 제대로 동작을 안했다는 것..

article thumbnail
[Spring] e.printStackTrace() 지양하기(Feat. getStackTrace 사용)
BackEnd/Spring 2023. 6. 28. 16:02

Spring 에서 개발을 하면서 예외가 발생되면 @ControllerAdvice 가 선언된 클래스가 동작하여 알맞은 예외타입(RuntimeException, NullPointerException 등)에 메소드가 호출된다. 대부분 프로젝트마다 로깅하는 방법이 정해져있기 때문에, 거의 사용되지는 않겠지만 빠르게 개발하면서 나중에 변경해야지 하고 e.printStackTrace() 로 작성하는 경우가 있다.(작성자 본인이 그렇다...) 전체 에러 메세지는 보기는 싫고, 실제 예외가 발생된 부분(소스 위치)만 로깅하고 싶었는데 구글링해보니 똑같이 생각하신 분이 계셔서 참고하게 되었다.) 이번 글에서는 e.printStackTrace를 말고 getStackTrace 로 간단한 코드를 통해서 확인해보려 한다. 1...

article thumbnail
[Spring] MyBatis 사용 시 resultType 에 InnerClass 사용하기
BackEnd/Spring 2022. 12. 10. 10:50

종종 Spring + MyBatis 개발을 하던 도중에 ResultMap 또는 ResultType 에 InnerClass 로 선언하고자 하는 경우가 있다. 1. 파일 구성 - 간단하게 예제를 통해서 진행해보겠습니다. - ResultType 에서 사용하고자 하는 파일은 아래와 같습니다.(Response 를 사용) 실제 개발에서는 DB의 값을 그대로 전달하는 것은 좋은 방법이 아니지만, 간단한 테스트를 위해서 바로 사용하였습니다. public class TodoDto { @Builder @AllArgsConstructor @NoArgsConstructor public static class Request { private String item; private boolean completed; } @Data ..

article thumbnail
[SpringBoot] CouchBase 연동하기
BackEnd/Spring 2022. 11. 27. 16:05

이전 글에서 NoSQL 을 로컬환경에 설치하는 것을 알아보았고, 해당 글에서는 SpringBoot 에서 CouchBase 를 연동해서 간단하게 테스트를 진행해보고자 합니다. 1. 환경 세팅 1-1. build.gradle - CouchBase dependency 를 추가해줍니다. implementation 'org.springframework.boot:spring-boot-starter-data-couchbase' 1-2. CouchBase 실행(Mac) - 이전 글에서 Docker 를 통해 설치한 CouchBase 를 실행합니다. docker run -d --name db -p 8091-8094:8091-8094 -p 11210:11210 couchbase:community-7.1.1 - 만약 위 명령..

article thumbnail
[SpringBoot] @Valid 를 이용한 유효성(Validation) 검사(Feat. @RequestBody, @Validated)
BackEnd/Spring 2022. 10. 29. 12:43

SpringBoot 로 개발을 하다 보면 클라이언트와 통신 중 데이터에 대해서 Validation(검증)이 필요한 경우가 있습니다. 검증 클래스를 별도로 생성하여 검증을 진행할 수 있지만 간단하게 어노테이션을 통해서 JSR 표준을 이용하여 검증도 가능합니다. 이번 글에서는 이 JSR 표준을 이용한 @Valid 어노테이션에 대해서 정리해보고자 합니다. 0. Dependency 추가 Gradle(build.gradle) implementation 'org.springframework.boot:spring-boot-starter-validation' Maven(pom.xml) // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-..

article thumbnail
[Spring] Spring Batch 사용해보기(3) - step(tasklet, chunk)
BackEnd/Spring 2022. 9. 18. 15:43

1. Tasklet - Tasklet 은 하나의 메소드로 구성되어 있는 인터페이스. - Step 안에서 수행될 기능들을 명시. - 실패를 알리기위해 예외를 반환하거나 Throw 할 때까지 execute 를 반복적으로 호출. - Tasklet 은 Step 안에서 단일로 수행도리 커스텀한 기능들을 선언할 때 사용 - Tasklet 은 하나와 Reader & Processor & Writer 한 묶음이 같은 레벨로서, Reader & Processor 와 함께 Tasklet 을 사용할 수 없다. 1-1. Sample(With. Lambda) @Slf4j @EnableBatchProcessing @Configuration @RequiredArgsConstructor public class TaskletJobCo..

article thumbnail
[Spring] Spring Batch 사용해보기(2) - step(skip, retry)
BackEnd/Spring 2022. 9. 14. 15:41

이전 글에서는 간단하게 Spirng Batch 환경을 구성하고 동작하는 것을 확인해보았습니다. 이번 글에서는 Spring Batch 의 기능 중 Step 에 대해 활용하여 사용해보려고 합니다. 0. 다양한 Step 설정 - 해당 테스트를 위해 간단하게 controller 를 선언하여 배치를 수행하도록 추가하겠습니다. @Controller @Slf4j @RequiredArgsConstructor public class TestController { private final Job StepTestJob; private final JobLauncher jobLauncher; @SneakyThrows @GetMapping("/test/{number}") public void test(@PathVariable L..

article thumbnail
[Spring] Spring Batch 사용해보기(1) - 환경구성, 기본구현
BackEnd/Spring 2022. 9. 8. 14:45

최근에 Spring Batch 에 대해 정리를 하였는데, 이를 간단하게 사용하는 것도 정리하고자 합니다. [Spring] Spring Batch 정리 회사에서 업무를 하나씩 배우고 맡게 되면서, Spring Batch 를 사용하고 있는 배치서버를 맡게 되었습니다. 이전 스케줄링 관련 개발을 할 때는 Crontab, Quartz 등을 사용하였는데, 여기서는 Spring Batch dev-jwblog.tistory.com 1. Spring Batch 프로젝트 구성 - 개발 환경은 아래와 같습니다. IDE : Intelli J 2022.02 SpringBoot : 2.7.3 java : JDK 11 DB : MySQL 1-1. 프로젝트 생성 - 인텔리제이를 통해서 프로젝트를 생성합니다. - 프로젝트에서 필요한..

article thumbnail
[Spring] Spring Batch 정리
BackEnd/Spring 2022. 8. 26. 13:26

회사에서 업무를 하나씩 배우고 맡게 되면서, Spring Batch 를 사용하고 있는 배치서버를 맡게 되었습니다. 이전 스케줄링 관련 개발을 할 때는 Crontab, Quartz 등을 사용하였는데, 여기서는 Spring Batch 를 사용하고 있었고, 해당 내용을 이해하는데 러닝커브도 있어 정리하고자 합니다. 추후에는 Spring Batch 사용 예제에 대해서도 포스팅할 예정입니다. 1. Spring Batch - Spring Batch 는 일괄 처리를 위한 오픈 소스 프레임워크이다. Batch Processing(일괄 처리) 사용자의 개입 없이 실행을 스케줄링할 수 있는 작업(job)을 의미하며. 컴퓨터 프로그램 흐름에 따라 순차적으로 자료를 처리하는 방식이다. 배치는 예약된 시간에 자동으로 실행될 수..