Object를 이용한 Thread 간 통신 / 동기화
·
📘 Backend/Java
📚 Object를 이용한 Thread 간 통신 / 동기화지난 글에서 멀티스레딩 환경에서 여러 스레드 간 통신 및 동기화가 필요할 때 Semaphore / Binary Semaphore를 사용 했었습니다.Semaphore - Multi Threading 작업 순서 제어 & 동기화이번 글은 로직의 복잡성이 낮고 간단하며 직관적인 락 제어가 필요한 경우 Object 객체의 wait(), notify(), notifyAll() 을 이용한 동기화/통신 방법에 대한 글을 작성합니다.wait(), notify(), notifyAll() 함수를 사용하면 효율적으로 스레드를 제어할 수 있습니다.📚 wait(), notify(), notifyAll()wait(), notify(), notifyAll()은 Object ..
Open API 3.0 Swagger + Export Rest API Docs
·
📘 Backend/Spring
📚 Swagger API 적용사내에서 대부분 시스템쪽 개발을 맡다가 이번 프로젝트에서 맡은 서버들 중에 API쪽 서버가 있어 기억 속에서 잊혀져 가던 Swagger를 다시 복습할 겸 정리글을 작성합니다.Spring Doc 공식 페이지Spring을 사용한다면 아래 2개의 라이브러리를 사용할 수 있습니다.Spring FoxSpring DocSpring Fox의 경우 마지막 업데이트일인 2020년 이후 업데이트가 없으므로, Spring Doc을 이용하겠습니다.Spring Doc은 WebFlux를 통한 비동기 방식의 개발도 지원합니다.application.yml 설정해서 Path 설정을 안한다면 기본 Path는 {Server I{}:{Port}/swagger-ui/index.html입니다.저는 그냥 포트뒤에 ..
Semaphore - Multi Threading 작업 순서 제어 & 동기화
·
📘 Backend/Java
📚 Semaphore - Multi Threading 작업 순서 제어 & 동기화멀티쓰레드 환경에서 여러 쓰레드가 협력하여 순차적으로 작업을 처리해야 할 때, 동기화(Synchronization)는 매우 중요합니다. 이번 글에서는 Semaphore와 Custom Barrier 클래스를 활용하여 모든 쓰레드들이 첫 번째 작업을 전부 완료할 떄 까지 Semaphore를 이용해 Blocking 시키고 이후 두 번째 작업을 수행하도록 동기화하는 방법을 작성 하겠습니다.예시로 구현할 로직은 아래와 같습니다.20개의 Thread로 진행작업 1과 2가 있고 20개의 Thread가 작업 1을 모두 완료한 상태가 아니면 작업 2로 넘어가지 않음각 작업 당 Thread들의 실행 순서는 중요하지 않고 20개의 Thread ..
Binary Semaphore와 Mutex의 차이점
·
📘 Backend/Concurrency
Binary Semaphore와 Mutex의 차이점평소에 개발 시 특정 공유 Resource에 대한 접근은 단일 스레드만 허용해야 하는 기능이 있어서,ReentrantLock으로 단일 Thread에게 중첩된 Lock을 허용해주는 Mutex 방식으로 개발 했었습니다.그런데 개발 도중 여러개의 Thread에 권한을 줘야하고 허용 가능한 개수 조절이 필요한 기능이 생겨 Semaphore를 공부 하다가, Binary Semaphore라는 Mutex와 아주 유사한 동기화 메커니즘을 발견했고 둘 다 단일 스레드만 허용하는 공통점이 있어서또 어떤 다른 차이가 있는지 궁금해 알아보게 되었습니다.Binary Semaphore와 Mutex의 공통점Mutex와 Binary Semaphore는 모두 동시성 제어를 위해 사용되..
HikariCP - Thread Starvation & Clock Leap Detection
·
📘 Backend/Spring
📚 HikariCP - Thread Starvation & Clock LeapSpring Boot 서버에서 가끔 보이던 특정 문구가 있었는데, 일이 바빠서 무시하다가 이번에 여유가 좀 생겨서 알아보았습니다.이 경고 문구는 스레드가 기아상태가 되거나 시스템 시간이 실제 시간과 비동기화 되는 현상인 Clock Leap가 일어났을떄 발생합니다.어쩌다 1번씩 가끔 뜨고 가끔 API 호출도 안되는 현상이 있어 바로 알아보았습니다.master - Thread starvation or clock leap detected (housekeeper delta=20m34s90ms530µs700ns).정확한 원인은 아직도 잘 모르지만 검색 결과 유추할 수 있는 원인은 아래와 같습니다.House Keeping Thread 중..