모르지 않다는 것은 아는것과 다르다.

전체 글 224

JobExecutionListener

JobExecutionListener 스프링 배치에서 전 처리, 후 처리를 하기 위해 사용된다. 2가지의 구현 방식이 있다. interface 구현 @Annotation 정의 JobExecutionListener를 interface 형식으로 구현하면 아래와 같다. public static class SavePersonJobExecutionListener implements JobExecutionListener{ // job 실행전에 호출 @Override public void beforeJob(JobExecution jobExecution) { log.info("beforeJob"); } // Job 실행 후에 호 @Override public void afterJob(JobExecution jobExe..

Spring Batch 2022.02.27

ItemWriter

ItemWriter interface ItemWriter는 마지막으로 배치 처리 대상 데이터를 어떻게 처리할 지 결정한다. DB에 데이터를 저장하거나, API로 서버에 요청하거나, 파일에 데이터를 write하거나 최종적으로 할 작업을 진행한다. Step에서 ItemWriter는 필수이다. csvItemWriter private ItemWriter csvItemWriter() throws Exception { BeanWrapperFieldExtractor fieldExtractor = new BeanWrapperFieldExtractor(); fieldExtractor.setNames(new String[] {"id", "name", "age", "address"}); DelimitedLineAggrega..

Spring Batch 2022.02.27

ItemProcessor

ItemProcessor ItemWriter에 데이터를 보낼지 말지를 결정함 ItemReader에서 null을 리턴하면 chunk처리가 끝났다는 의미 ItemProcessor에서 null을 리턴하면 ItemWriter에서 해당 item을 처리하지 않겠다는 의미 ItemProcessor는 필수는 아니지만, 책임 분리를 위해 사용하는 것이 좋다. 구현은 아래와 같이 할 수 있다. @Service public class PlayerSalaryService { public PlayerSalaryDto calcSalary(PlayerDto player) { int salary = (Year.now().getValue() - player.getBirthYear()) * 1000000; return PlayerSal..

Spring Batch 2022.02.27

Tasklet, Chunk 비교

Tasklet, Chunk 비교 Tasklet을 사용한 Task 기반 처리 Chunk보다 코딩하기 쉽다. 배치 처리 과정이 비교적 쉬운 경우 사용한다. 대량 처리를 하는 경우에는 더 복잡하다. 하나의 큰 덩어리를 여러 덩어리로 나누어 처리하기에는 부적합하다. Chunk를 사용한 chunk(덩어리) 기반 처리 ItemReader, ItemProcessor, ItemWriter의 관계를 이해할 필요가 있다. 대량 처리를 하는 경우 Tasklet 보다 비교적 쉽게 구현할 수 있다. Ex> 10000개의 데이터를 1000개씩 10개의 덩어리로 나누어 실행 @JobScope, @StepScope @Scope는 어떤 시점에 bean을 생성/소멸 시킬지 bean의 lifecycle을 설정할 수 있다. @JobScop..

Spring Batch 2022.02.27

Spring Batch

batch란? 큰 단위의 작업을 일괄 처리 대용량 처리량이 많고 비 실시간성 처리에 사용 대용량 데이터 계산, 정산, 통계, 데이터베이스, 변환 등 컴퓨터 자원을 최대로 활용 컴퓨터 자원 사용이 낮은 시간대에 배치를 처리하거나 배치만 처리하기 위해 사용자가 사용하지 않는 또다른 컴퓨터 자원을 사용 사용자 상호작용으로 실행되기 보단, 스케줄러와 같은 시스템에 의해 실행되는 대상 crontab, jenkins 등을 이용해서 주기적으로 실행할 수 있다. 배치 프로그램은 보이진 않지만 늘 존재한다. 서비스를 운영하는 관점에서 주기적으로 작업을 처리하려면 배치 프로그램을 사용해야 한다. batch 가 필요한 상황 필요한 데이터를 모아서 처리해야 할 때 ex. 월별 거래 명세서 생성 일부러 지연시켜 처리할 때 ex..

Spring Batch 2022.02.27

쿠키와 캐시

쿠키 쿠키는 요청시 항상 포함되어서 요청된다. 쿠키에 저장된 정보를 sessionId로 검색해서 전달해 준다. Set-Cookie: 서버에서 클라이언트로 쿠키 전달(응답) Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달 ex> set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure 사용자 로그인 세션 관리에 사용된다. 네트워크에 추가적인 트레픽이 발생하기 때문에 최소한의 정보(세션 id, 인증 토큰)만 사용하는 것을 권장한다. 서버에 전송하지 않고, 웹 브라우저 내부에 데이터를 저장하고 싶으면 웹 스토리지(localStorage, ..

Network 2022.02.27

네트워크

IP(인터넷 프로토콜) 란? IP 의 역할 지정한 IP 주소(IP Address)에 데이터 전달 패킷(Packet) 이라는 통신 단위로 데이터 전달 IP 패킷 정보 출발지, 목적지, 메시지등을 포함한 패킷을 인터넷에 전달하면 노드들끼리 패킷을 전달하며 목적지로 전달할 수 있는 노드까지 전달된다. IP 프로토콜의 한계 비연결성 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송 -> 패킷을 받을 상황이 아니어도 일단 보내는 문제 비신뢰성 중간에 패킷이 사라진다면? 패킷이 순서대로 안오면? 프로그램 구분 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면? 인터넷 프로토콜 스택의 4계층 위와 같이 인터넷 프로토콜은 4계층으로 구성되어있다. 위와 같이 계층을 통과할때마다 정보를 한겹한겹 ..

Network 2022.02.27

URI 설계 원칙(RFC-3986)

URL 케이스 CamelCase Java 언어로 대중화되었다. 대소 문자로 구분하지 않는 컨텍스트에서 비효율적이다. snake_case C 프로그래머가 수년 동안 널리 사용했다. 언더바(_)는 컴파일러나 인터프리터가 기호로 이해할 수 있다. 사용할 수 없는 컨텍스트는 거의 없다. spinal-case 일부 언어에서 (변수,클래스,함수) 이름에 하이픈을 허용하지 않는다. lisp-case라고도 한다. UNIX, Linux 시스템에서 폴더 및 파일 이름을 지정하는 전통적인 방법이다. 슬래시 구분자(/)는 계층관계를 나타내는데 사용한다. https://hyunwook-chae/SpringStart/tree/main/web URI 마지막 문자로 (/)는 포함하지 않는다. https://hyunwook-chae/..

Network 2022.02.27

REST API란

API 란? Application Programming Interface API는 프로그램들이 서로 상호작용하는 것을 도와주는 매개체로 볼 수 있다. API의 역할 API는 서버와 데이터베이스에 대한 출입구 역할을 한다. API는 애플리케이션과 기기가 원활하게 통신할 수 있도록 한다. API는 모든 접속을 표준화한다. REST 란? REpresentational State Transfer 컴퓨터 시스템와 인터넷 사이에 상호 운용성을 제공하는 방법중 하나이다. 시스템 제각각의 독립적인 진화를 보장하기 위한 방법이다. REST API: REST 아키텍처 스타일을 따르는 API 를 뜻한다. REST를 구성하는 스타일 Client-Server : 클라이언트 - 서버 구조를 이루어야 한다. Stateless : ..

Network 2022.02.27