일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- IntelliJ
- Design Patterns
- db
- redis
- 요리
- Spring Batch
- php
- Git
- it
- springboot
- tool
- laravel
- jsp
- linux
- AWS
- elasticsearch
- Oracle
- MySQL
- JVM
- jenkins
- Gradle
- 맛집
- Spring
- javascript
- Web Server
- java
- devops
- ReactJS
- ubuntu
- Spring Boot
- Today
- Total
목록Spring (78)
아무거나
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..
@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 성능 개선 사례 정리개선 항목 점검 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 =..
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/785 [Spring Actuator] Example 5편 - Gauge 이전글: https://bkjeon1614.tistory.com/784 Gauge Counter 타입인 경우 increment 메서드만 제공되지 decrement 메서드가 존재하지 않는다. 그러므로 커졌다 작아졌다 하는 값으로는 Gauge 를 사용하면 된다. 또한 Co bkjeon1614.tistory.com Timer 시간을 측정하는 metric 샘플 Timer [TimerConfig.java] package com.example.bkjeon.base.config.actuator.timer; import io.micrometer.core.instrument.Meter..
이전글: 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...