SpringBoot 14

코리아노 BeanPay 고민

빈페이로 결제하게 된 이유서비스내의 결제 로직과 외부 API를 통한 충전로직을 분리함으로 써 외부 API에서 발생했을때 문제와 결제 기능과 분리할 수 있기 때문입니다! 또한 결제를 진행하는 중에는 외부API를 연동하지 않기 때문에 사용자의 경험을 향상시키고 결제 프로세스를 간소화할 수 있습니다.서비스 자체 포인트인 빈페이를 관리하는 방법유저 MSA에 beanpay 컬럼을 두어 결제 MSA API 요청을 통해 관리한다.결제 MSA에 BeanPay 테이블과 BeanPay 상세 테이블을 두어 관리한다.1. 유저 MSA에 beanpay 컬럼을 두어 결제 MSA API 요청을 통해 관리한다.결제 MSA에서 출금, 결제, 환불, 사용 과 같은 행위를 할 때 유저 MSA에게 요청을 하고 로직을 수행합니다. 하지만 이..

SpringBoot 2024.04.17

[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