본문 바로가기

Java11

[Thread] 뮤텍스, 세마포어, 모니터의 스레드 동기화와 구현 예제 1. 스레드(Thread) 스레드는 프로그램 또는 프로세스 내에서 실제로 작업을 수행하는 주체를 말한다. 모든 프로세스에는 한 개 이상의 스레드가 존재한다. 둘 이상의 스레드를 동시에 실행시키는 방식을 멀티스레드 라고 한다. 1.1. Race Condition(경쟁 조건) 멀티 스레드 프로그래밍에서 자주 발생하는 문제로 두 개 이상의 프로세스 또는 스레드가 공유된 자원에 동시에 접근할 경우 접근 순서에 따라 실행 결과가 달라지는 상황이 자주 발생한다. 공유 자원의 데이터 변경 뿐만 아니라 변경된 공유 자원으로 인한 실행 실패까지도 발생하기도 한다. 이러한 상황을 경쟁 조건(Race Condition) 또는 동시성 문제(Concurrency Problem)라고 한다. 즉, 여러 프로세스 또는 스레드가 동시.. 2023. 6. 20.
[Spring Batch] 한 개의 Step에 여러 개의 Processor의 다중 적용이 필요할 경우(CompositeProcessor, 예제 포함) Chunk 방식을 적용할 경우 ItemReader, ItemProcessor, ItemWriter를 이용한 배치처리가 가능하다. 이때 ItemProcessor를 다중 적용할 수 있는 방법인 CompositeItemProcessor에 대해 소개하겠다. CompositeItemProcessor CompositeItemProcessor 코드를 보면 List delegates 객체를 확인 할 수 있다. Step 생성 시 CompositeItemProcessor에 작업을 실행하길 원하는 ItemProcessor들을 작업 순서에 따라 List로 구현한 후 delegates에 적용하면 list 순서대로 Processor 작업이 진행된다. 해당 내용을 기반으로 적용해 실행해보도록 하겠다. A의 값을 1부터 10까지 갖.. 2023. 1. 18.
[Spring Batch]#6 스프링 배치 Item Reader 청크지향처리 즉, ChunkOrientedTasklet를 이용한 스프링 배치에서 아이템 수집의 시작이자 스프링 배치를 다양하게 또는 간편하게 적용할 수 있게 해주는 ItemReader에 대해 알아보도록 하겠다. ItemReader는 청크 방식일때만 적용이 가능하다. 스프링 배치에서 기본적으로 제공하는 ItemReader의 구현체들은 굉장히 많은데 대표적으로 PaingItemReader, CursorItemReader, ItemReaderAdapter 등이 있다. ChunkOrientedTasklet의 ItemReader 동작 Chunk지향 처리의 배치가 실행하게 되면 chunkProvider에 의해 read, chunkProcessor 에 의해 process, write 작업이 순서대로 이루어지게 되는데.. 2023. 1. 17.
[Thymeleaf] 타임리프 유틸 함수 - #strings, #arrays 등등 타임리프에서는 효율적인 오브젝트 사용을 위해 기본적인 오브젝트 유틸리티를 제공하고 있다. 타임리프의 기본 제공 유틸리티 함수는 다음과 같다. #numbers #strings #arrays #lists #sets #maps #objects #bools #dates #calendars #uris #messages #conversions #aggregates #ids 다음 중 자주 사용하는 주요 함수만 정리하도록 하겠다. numbers 종류 설명 ${#numbers.formatInteger(num,3)} ${#numbers.arrayFormatInteger(numArray,3)} ${#numbers.listFormatInteger(numList,3)} ${#numbers.setFormatInteger(numS.. 2022. 10. 5.
[Spring Batch] #4 스프링 배치 Step 과 Tasklet 이번 포스팅에선 Step과 Tasklet의 관계에 대해서 자세히 알아보도록 하겠다. AbstractStep Step 인터페이스를 구현하는 구현체의 추상 클래스는 AbstractStep이다. Job이 갖고 있는 Step의 execute 메소드를 실행하게 되면 Step의 doExecute 메소드를 실행하게 되는데 doExecute 메소드는 추상 메소드로 어떤 구현체냐에 따라 동작방식이 달라지게 된다. 스프링 배치에서 기본 제공하는 AbstractStep의 구현체들이 몇 가지 있는데 오늘은 가장 일반적으로 사용되는 TaskletStep을 기준으로 알아보도록 하겠다. TaskletStep TaskletStep은 한 개의 Tasklet 객체를 갖고 있으며 doExecute 메소드 실행 시 tasklet의 exec.. 2022. 9. 27.
[Spring Batch] #3 스프링배치 동작 방식 - 기본 개요 프로젝트를 진행하며 스프링 배치에 대해 공부한 내용 중 스프링 배치의 전반적인 동작 방식에 대해 공유하도록 하겠습니다. 이번 게시물에선 스프링 배치가 동작하는 과정을 간략하게 설명하겠습니다. 스프링 배치의 동작방식에 대해 알아보기전에 최소한으로 알고 있어야 하는 객체가 있습니다. JobRepository 스프링 배치의 메타테이블 Repository 추상체이다. 스프링 배치의 실행기록 및 Job과 Step의 상태 등 스프링 배치의 실행 정보들을 저장하거나 가져오는 역할을 한다. Step의 실행 정보를 가져와 중단된 부분부터 실행할 수 있도록 한다. 그렇기 때문에 JobRepository를 사용하지 않는 InMemory 설정을 할 경우에 중단된 부분부터 실행하는 기능을 사용할 수 없다. 일반적으로 Si.. 2022. 9. 20.