SpringBoot 13

[SpringBoot] Spring Batch 이용권 만료

스프링 Batch 구조 스프링의 구조는 Job, Step, Reader, Processor, Writer구조로 이루어져 있습니다. Step 처리 방식 Step은 아이템 리더를 사용해 각 아이템을 개별적으로 읽은 다음 아이템 프로세서에게 전달해 필요한 처리를 수행합니다. 이 작업을 청크 사이즈가 될 때까지 반복하고 청크가 하나 완성이 되면 목록을 아이템 Writer를 통해 전달합니다. ItemReader ItemReader를 통해 스프링 배치가 아이템 리더에 리드 메소드를 호출하여 해당 메소드는 스텝 내에서 처리할 아이템 한 개를 반환하는 것입니다. Batch를 사용할 때 한번에 너무 많은 데이터를 가져오면 메모리 부족과 같은 문제가 발생할 수도 있습니다. 그래서 자원을 효율적으로 사용하기 위해 batch..

SpringBoot 2023.12.17

[SpringBoot] 스프링 배치란?

Spring Batch란 일괄처리를 위한 오픈 소스 프레임워크입니다. SpringBatch는 로깅/추적, 트랜잭션 관리, 작업 처리 통계를 포함하여 대용량 레코드 처리에 필수적인 재사용 가능한 기능을 제공합니다. job 다시 시작, 건너뛰기, 리소스 관리 등이 가능합니다. 또한 최적화 및 분할 기술을 통해 대용량 및 고성능 배치 작업을 가능하게 하는 고급 기술 서비스 및 기능을 제공합니다. 단순할 수도 있고 복잡할 수도 잇습니다. 대용량 배치 작업은 확장성이 뛰어난 방식으로 프레임워크를 활용하여 상당한 양의 정보를 처리할 수 있습니다. Spring Batch 용어 Job Job은 배치처리 과정을 하나의 단위로 만들어 놓은 객체입니다. 또한 배치처리 과정에 있어 전체 계층 최상단에 위치하고 있습니다. Jo..

SpringBoot 2023.12.16

주문내역을 내려줄 때 가격 멱등성에 대한 고민

🤔 Problem 기존 제육 1000원 제육 가격 2000원으로 인상 결제했을 때와 주문내역 불일치 메뉴 내역을 내려줄 때 현재 연결되어 있는 메뉴와 옵션을 참조하고 있습니다. 그렇다면 기존의 메뉴의 정보를 변경했다면 어떤 결과가 발생될까 생각이 들었습니다. 주문한 메뉴의 가격을 내려줄 때 메뉴의 가격을 변경하지 않았다면 1000원을 반환했을 겁니다. 하지만 나중에 물가가 오르고 사장님이 메뉴의 가격을 인상했을 때 2000원으로 올리고 손님이 주문내역을 확인하면 2000원으로 나온다는 문제점이 있었습니다. 😃 Solution 저는 이 문제를 해결하기 위해서 2가지 방법을 고안했습니다. 1. 주문내역을 저장하는 메뉴, 옵션 히스토리 테이블을 하나 더 만들어 관리 주문했을 당시의 메뉴와 옵션들의 정보를 저장..

SpringBoot 2023.10.29

프레임워크, 라이브러리의 차이

라이브러리란? 재사용이 가능한 코드의 집합 실행 함수 public static void main(String[] args) { double library_time = System.nanoTime(); double library = round(20.555d, 2); double library_endTime = System.nanoTime(); double custom_time = System.nanoTime(); double custom = notUseLibrary(20.555d, 2); double custom_endtime = System.nanoTime(); System.out.println("라이브러리: " + library + " 걸린시간: " + (library_endTime-library_ti..

SpringBoot 2023.07.19

[Spring Boot] @WithMockUser 테스트 시 getPrincipal Null

오늘의 문제점 테스트 코드를 작성할 때 Security에서 제공하는 @WithMockUser 어노테이션을 사용해서 인증 테스트를 수행했습니다. 하지만 Authentication의 getPrincipal() 메소드를 사용할 때 null이 반환되는 현상이 발생해서 테스트를 통과 하지 못했습니다. 기존의 방식 @GetMapping("/mycomments") public Response getMyComments(Authentication authentication, Pageable pageable) { String username = authentication.getName() Page response = postService.getMyComments(username, pageable).map(CommentRe..

SpringBoot 2023.05.02