일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Spring Boot
- jenkins
- php
- devops
- laravel
- Git
- linux
- db
- 맛집
- Oracle
- Design Patterns
- AWS
- MySQL
- jsp
- java
- ubuntu
- it
- redis
- Web Server
- elasticsearch
- Spring Batch
- 요리
- IntelliJ
- Gradle
- tool
- springboot
- ReactJS
- JVM
- Spring
- javascript
- Today
- Total
목록it (695)
아무거나
Java Mutex(뮤텍스) 와 Semaphore(세마포어) 그리고 Spinlock(스핀락)참고코드 Mutex(뮤텍스)Mutex 는 Mutual Exclusion(상호 배제)의 약자이며 Lock(락) 이라고도 한다. Mutex 는 한 번에 하나의 스레드만이 특정 리소스나 코드 섹션에 접근할 수 있도록 한다. 즉, 한 시점에 단 하나의 스레드만이 리소스를 사용할 수 있게 된다. (Lock/UnLock)또한 Java 에서는 ReentrantLock 라는 Lock 인터페이스가 존재하는데 이걸 활용해서 Lock 의 획득과 해제에 대한 부분을 제어할 수 있다. [LockController.java]// 예제코드@RestController@RequestMapping("v1/lock")@RequiredArgsCons..
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..
indexedDB: WebStorage 로 커버가 불가능한 복잡한 데이터 구조 또는 많은 데이터를 저장하고 관리해야 하는 경우에 사용하며 메일 클라이언트, 할 일 목록 등 작업에 유용특징javascript 기반의 객체지향 데이터 베이스 즉, javascript 가 인식할 수 있는 자료형과 객체를 저장할 수 있다. (localStorage 는 String 형태만 저장 가능)트랜잭션을 사용하며 Key-Value 데이터 베이스이다.비동기 API 이다.색인을 사용하여 복잡한 쿼리를 가능하게 하여 검색 성능을 향상장기 데이터 저장, 브라우저 재 시작 및 시스템 충돌 방지 기능을 제공그 외localStorage 에 비해 속도가 느림(Trade-Off)사용자가 수동으로 삭제하지 않는 이상 데이터가 계속 남아있음사용법..
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 를 생성하는 비용은 적지 않기 때문..
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 Partitioning 구현예제코드예제코드Spring Batch Partitioning 이란파티셔닝은 매니저 Step 이 대량의 데이터 처리를 위해 지정된 수의 작업자 (Worker) Step 으로 병렬처리 하는 방식이다.Multi Thread Step 과 비교멀티스레드 Step 은 단일 Step 을 Chunk 단위로 스레드를 생성해 분할처리 한다.어떤 쓰레드에서 어떤 데이터들을 처리하게 할지 세밀한 조정이 불가능해당 Step의 ItemReader/ItemWriter 등이 멀티스레드 환경을 지원하는지 유무가 굉장히 중요파티셔닝은 독립적인 Step (Worker Step)을 구성하고, 그에 따른 각각 별도의 StepExecution 파라미터 환경을 가지게 하여 처리멀티스레드 Step..
Redis 관련 내용 정리대표적인 구조Look Aside Cache (보편적으로 사용)Client -> Application -> Cache 에 데이터가 있으면 Cache 에서 가져옴 만약 없으면 DB 에서 데이터를 읽어오고 해당 데이터를 Cache 에 저장Write BackClient -> Application -> Cache 에 먼저 데이터를 저장하고 특정 시점마다 DB 에 저장이렇게 하면 DB 에 저장될 때 건별로 Insert 쿼리를 날리는 것 보다 한 번에 쿼리를 날리다보니 성능에 용이사용사례여러 서버들이 데이터를 공유할 때인증 토큰 등을 저장Ranking(Sorted Set)APIQueueRedis CollectionsStrings단일 KeyGET SET 멀티 KeyMSET ....MG..
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..