/////
Search
Duplicate

24년 3월 18일 월요일

날짜
2024/03/18

배치 작업을 위해 Spring Cloud Function 사용여부 (완료 시  )

문제

배치 작업을 위해 Spring Cloud Function 사용해도 괜찮을까??
배치보다 좋은 점
요구사항
: 정해진 마감기한이 지난 입찰데이터에 대해 JPA 를 사용하여
{ 해당 입찰데이터의 주인인 고객들에게 포인트 반환하는 update query 를 작성 & delete query 를 호출 }
데드라인데이터가 금일 24시 이전의 고객들을 select
select 한 고객들에 대해서 포인트를 update
하는 배치 함수를 작성, 이 배치함수는 매일 24:00에 호출되어야만 함.
단점
애초에 Spring Cloud Function 는 batch process 를 위한 기술이 아님.
msa 이벤트 트리거용 → Kafka, MQ 작업 트리거용도
아래와 같은 지원이 불가능함
retry logic, chunk-oriented processing, and job scheduling.
retry 도 안 되고, 배치 실패했는지 체킹하기가 어렵다
aws lambda 의 cold start로 인해 latency 가 일어날 수 있음
장점
태스크가 간단하고 event driven 이라면 적합
서버 관리를 할 필요가 없음
spring batch 와 마찬가지로 스케줄러 적용이 가능함
허들이 높지 않음
GPT 의견

제안사항 1 : 혼합해서 쓰면 안 됨??

Spring Cloud Function + Spring Batch 하면 안되나??
나는 24시간 내내 EC2로 스프링 띄우기 보다, 콜드스타트를 고려하더라도 스프링을 띄워서 배치 라이브러리까지 활용할 수 있겠다 싶었는데
라고 생각한 순간, Spring Batch 의 트리거가 cron으로 동작한다면, 람다가 외부에서 호출될 때 그에 맞춰 배치 돌리는 타이밍 잡기가 힘드려나??
배치 공부도 해야겠구만..

해결방안

Spring Cloud Function 가 배치보다 좋은 점
서버 관리를 안 해도 됨
Spring Cloud Function 자체가 Spring Boot 위에서 돌아감
결국 서버 노드 하나가 응답
서버를 쓰는 거 아닌가,,,,?
분산성이 떨어진다 :
ALB + Spring Batch → Auto Scale
일정시간에 한 번 배치작업을 스케줄링
AWS Lambda 로 작성가능할 듯,,,?? (JPA 안 쓰고도 가능할 듯,,?)
-- 데드라인 데이터가 금일 24시 이전인 고객들을 선택하고, 해당 고객들에 대해 포인트를 반환하는 UPDATE 쿼리를 작성합니다. UPDATE gream.tb_user AS u INNER JOIN gream.tb_buy AS b ON u.id = b.user_id SET u.point = u.point + <추가할_포인트_양> WHERE DATE(b.deadline_at) = CURDATE() AND HOUR(b.deadline_at) < 24; -- DELETE 쿼리를 호출하여 선택된 입찰 데이터를 삭제합니다. DELETE b FROM gream.tb_buy AS b WHERE DATE(b.deadline_at) = CURDATE() AND HOUR(b.deadline_at) < 24;
SQL
복사