일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- javascript
- laravel
- elasticsearch
- Spring Boot
- Design Patterns
- tool
- devops
- db
- redis
- Spring
- ubuntu
- AWS
- Spring Batch
- jenkins
- Oracle
- linux
- JVM
- it
- Git
- 맛집
- Web Server
- MySQL
- java
- jsp
- springboot
- Gradle
- ReactJS
- php
- IntelliJ
- 요리
- Today
- Total
목록Spring Boot (35)
아무거나
Java 21 Virtual Thread해당 글은 kakao tech meet 발표 을 참고하여 필요한 부분만 요약하여 정리하였다. Virtual ThreadJDK 21(LTS) 에 추가된 경량 스레드 OS 스레드를 그대로 사용하지 않고 JVM 내부 스케줄링을 통하여 수십 ~ 수백만개의 스레드를 동시에 사용할 수 있게 한다. 해결하고자 하는 문제애플리케이션의 높은 처리량(throughput) 확보Blocking 발생시 내부 스케줄링을 통해 다른 작업을 처리자바 플랫폼 디자인과 조화를 이루는 코드 생성기존 스레드 구조 그대로 사용sealed abstract class BaseVirtualThread extends Thread permits VirtualThread, ThreadBuilders.Bound..
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..
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..
@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 를 생성하는 비용은 적지 않기 때문..
Jenkins Pipeline + Nginx + Spring Boot(Maven) 무중단 배포 요새는 CI/CD 가 잘되어 있어서 jetbrains, aws, atlassian, jenkins 등.. 선택지가 많으나 비용이 적게드는 최소한의 방법으로 구성을 했던 내용을 복습하기 위해 해당 포스팅을 작성하게 된다. bitbucket webhook 을 통하여 소스 pr 후 merge 시에 trigger 가 발생하게 되는 구성으로 되어있으며 (해당 과정은 생략) 이후 jenkins pipeline 을 통하여 빌드하고 각 배포할 서버에 전송 후 구동 및 스위칭 스크립트를 작성하는 프로세스로 진행할 것이다. 배포할 서버에 빌드파일을 전송할 JenkinsFile 작성 (Maven)[Jenkinsfile]pipeli..
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..
Aspect 를 활용한 특정 metric 의 tag 의 여러 value 값 별로 시간단위로 실시간 카운트 저장 예시로 호출시 특정 타입번호기준으로 페이지를 이동하는 기능에 타입번호_시간단위로 카운트를 저장하는 기능을 생성 (참고: https://github.com/bkjeon1614/java-example-code/tree/develop/bkjeon-mybatis-codebase) Custom Annotation 생성 [CustomCounter.java] package com.example.bkjeon.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annot..
이전글: https://bkjeon1614.tistory.com/784 Gauge Counter 타입인 경우 increment 메서드만 제공되지 decrement 메서드가 존재하지 않는다. 그러므로 커졌다 작아졌다 하는 값으로는 Gauge 를 사용하면 된다. 또한 Counter 는 counter 값을 조회시도 하는지 여부와 무관하게 값이 증가될 때마다 내부값 갱신을 해줘야한다. 그러나 Gauge 는 조회시도 할 때만 해당 값을 계산하면 된다. 샘플코드 기본등록 [QueueManager.java] package com.example.bkjeon.base.services.api.v1.actuator.service.gauge; import org.springframework.stereotype.Service;..
이전글: https://bkjeon1614.tistory.com/783 Metrics Tags /actuator/metrics/{메트릭명} 에 접속할 경우 availableTags 에 존재하는 tag 의 values 값에 대한 상세 정보를 보고 싶다면 만약 tag: test, value: bong 이라고 가정해볼경우 /actuator/metrics/{메트릭명}?tag=test:bong (즉, tag={key}:{value} Querystring 형태이다) metrics 에 tag 를 직접 넣어보자. 샘플코드 [TagController.java] package com.example.bkjeon.base.services.api.v1.actuator.controller; import com.example.bk..
이전글: https://bkjeon1614.tistory.com/782 Counter (https://micrometer.io/docs/concepts#_counters) 횟수를 세어 metric 으로 제공 단, 자연수만 가능하며 소수나 음수는 불가능하며 일반적으로는 cache hit 에 대한 누적 counter 및 http request 누적 횟수 등과 같이 지금까지 특정 이벤트가 몇 번 발생했는지 누적값을 제공할 때 Counter 를 사용한다. () 사용법 Counter.builder() [ApplicationRequestManager.java] package com.example.bkjeon.base.actuator.counter; import io.micrometer.core.instrument...