일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- JVM
- MySQL
- 맛집
- linux
- IntelliJ
- javascript
- redis
- Spring Boot
- laravel
- Oracle
- Web Server
- jsp
- Git
- php
- Spring
- tool
- java
- 요리
- devops
- ubuntu
- db
- jenkins
- Design Patterns
- elasticsearch
- AWS
- Spring Batch
- springboot
- Gradle
- it
- ReactJS
- Today
- Total
목록Java & Kotlin (248)
아무거나
Java ThreadLocal참고코드 Java ThreadLocal 이란Spring Bean 은 싱글톤으로 등록이 된다. 이러한 상황에서 하나의 인스턴스에 여러개의 스레드가 동시에 접근하면 동시성 문제가 발생하게 된다.이러한 경우 스레드 세이프하게 하려면 ThreadLocal 을 사용하면 된다. ThreadLocal 은 해당 Thread 만 접근할 수 있는 특별한 저장소를 말한다. 즉, 각 Thread 마다 별도의 내부 저장소를 제공 동시성 문제 예제하기 코드를 실행해보면 동시성 문제가 발생한다.[ThreadLocalServiceTest.java]package com.example.bkjeon.base.services.api.v1.thread.service;import lombok.extern.slf4j..
참고소스: https://github.com/bkjeon1614/kotlin-example-code/tree/main/kotlin-jpa-codebase Application.kt 에 설정...import org.springframework.scheduling.annotation.EnableScheduling@EnableScheduling // 추가class TestApplication { ... fun main(...)}AppHealthCheckScheduler.kt 스케쥴러 테스트용 코드 작성 package com.bkjeon.base.v1.schedule import org.apache.http.client.methods.HttpGet import org.apache.http.impl.cl..
Java Fork Join Pool 과 비동기 프로그래밍예제코드예제코드 Fork Join Pool 이란ForkJoinPool 은 Java7부터 사용가능하며 동일한 작업을 여러개의 Sub Task로 분리(Fork)하여 각각 처리하고, 이를 최종적으로 합쳐서(Join) 결과를 만들어내는 방식이다. 즉, 대규모 작업을 빠르게 처리하는데 용이하다. 비동기 프로그래밍 (CompletableFuture, ForkJoinPool)CompletableFuture (Java8 부터 도입)CompletableFuture 는 기존의 Future 인터페이스를 개선한 인터페이스다. 즉, 해당 인터페이스를 사용하면 동기적은 수행 방식을 비동기적인 수행 방식으로 변환하여 성능을 개선하고, 더 유연한 비동기 처리 로직을 구현할 수 ..
@Async 를 활용한 비동기 호출 구현 예제코드예제코드 java-example-code/java11/bkjeon-mybatis-codebase at main · bkjeon1614/java-example-codejava-example-code. Contribute to bkjeon1614/java-example-code development by creating an account on GitHub.github.com @Async 를 사용해야 하는 이유Spring @Async 를 사용하지 않으면 Thread 를 관리할 수 없어서 매우 위험하다. 예를 들어 동시에 1000 개의 호출이 요청된다면 짧은 시간 안에 Thread 를 1000 개를 생성해야 되므로 Thread 를 생성하는 비용은 적지 않기 때문..
Spring Batch Partitioning 구현예제코드예제코드Spring Batch Partitioning 이란파티셔닝은 매니저 Step 이 대량의 데이터 처리를 위해 지정된 수의 작업자 (Worker) Step 으로 병렬처리 하는 방식이다.Multi Thread Step 과 비교멀티스레드 Step 은 단일 Step 을 Chunk 단위로 스레드를 생성해 분할처리 한다.어떤 쓰레드에서 어떤 데이터들을 처리하게 할지 세밀한 조정이 불가능해당 Step의 ItemReader/ItemWriter 등이 멀티스레드 환경을 지원하는지 유무가 굉장히 중요파티셔닝은 독립적인 Step (Worker Step)을 구성하고, 그에 따른 각각 별도의 StepExecution 파라미터 환경을 가지게 하여 처리멀티스레드 Step..
Spring Batch + Redis Pipeline 으로 구현한 성능 개선코드 참고는 https://github.com/bkjeon1614/java-example-code/tree/develop/spring-batch-mybatis-codebase 에서 참고 부탁드립니다.Redis Pipeline 이란Redis의 pipeline은 여러 개의 명령어를 한 번에 보내고, 그 결과를 한 번에 받아올 수 있는 메커니즘입니다. 이를 통해 네트워크 오버헤드를 줄이고 Redis 서버의 처리 성능을 최적화할 수 있다. 또한 주의해야할 점은, Redis 서버의 처리량(capacity)을 고려하여 pipeline의 chunk size를 결정해야 한다.주의사항Request Chunk Size: 먼저 요청하는 chunk s..
Spring Batch 성능 개선 사례 정리개선 항목 점검 Flow유지보수가 좋고 코드가 직관적인 범주 내에서 최적화를 진행이후에도 성능 이슈가 발생하면 멀티 스레드 / 파티셔닝과 같은 다양한 방식으로 진행즉, 직관적인 방식과 단계적으로 진행하는 편이 좋다.개선 항목단일 UPDATE -> WHERE IN (Nos..) UPDATE 로 변경하기 코드에서 단일로 UPDATE 를 실행하면 건별로 DB의 I/O 발생이 일어난다. 만약 WHERE IN 으로 변경시 예를 들어 1000개의 단 건일 경우 WHERE IN 으로 500개씩 나누어 처리하면 최대 2건의 I/O 발생// 단일UPDATE userSET grade = 'A'WHERE id = 1;UPDATE userSET grade = 'A'WHERE id =..
Spring Batch 5 + Mybatis (JdbcItem Reader/Writer) 구현코드는 https://github.com/bkjeon1614/java-example-code/tree/develop/spring-batch-mybatis-codebase 참고 부탁드립니다.Spring Batch 4.x -> 5.x 대표적 변경 내용What’s New in Spring Batch 5.0Java 17 RequirementMajor dependencies upgradeBatch infrastructure configuration updatesBatch testing configuration updatesJob parameters handling updatesExecution context seriali..
MapStruct 적용[설명]컴파일 시 매핑 코드를 생성하며 Java Bean 간의 매핑을 단순화하는 Java 기반 코드 생성도구입니다. MapStruct를 사용하면 객체 간 데이터 매핑을 위해 boilerplate code를 작성할 필요가 없어진다.MapStruct 에 사용될 Data Class 의 Property 는 var 로 생성해야 한다. 왜냐하면 MapStruct 가 Getter / Setter로 내부 구현체를 생성해서, val 로 선언할 경우 불변이기 때문에 Set 을 할 수 없다.[특징]컴파일 시점에 코드를 생성하여 런타임에서 안정성을 보장다른 매핑 라이브러리보다 속도가 빠름반복되는 객체 매핑에서 발생할 수 있는 오류를 줄일 수 있으며, 구현 코드를 자동으로 만들어주기 때문에 사용이 쉬움An..
DynamoDB 적용의존성 추가(build.gradle.kts)...dependencies { ... // AWS SDK implementation("software.amazon.awssdk:dynamodb-enhanced") implementation(platform("software.amazon.awssdk:bom:2.20.56"))...Entity Class 생성[SampleTable.kt]import com.bkjeon.base.feature.constants.DdbIndexConstimport org.springframework.format.annotation.DateTimeFormatimport software.amazon.awssdk.enhanced.dynamodb.mapper.annota..