AtomicReference<T>를 이용한 Lock-Free Stack 구현
·
📘 Backend/Concurrency
📚 AtomicReference를 이용한 Lock-Free Stack 구현Lock-Free의 연장으로 멀티스레드 환경에서 Stack을 Lock-Free로 구현하는 방법을 작성합니다.구현 흐름은, 초기 데이터로 100,000개의 무작위 정수를 스택에 추가한 후, 여러 스레드가 동시에 push와 pop 작업을 수행합니다. 10초 후에 총 작업 수를 로그로 기록하여 스택의 동작 성능을 측정합니다. 이러한 과정을 통해 Lock을 사용하지 않고도 안전하게 멀티스레드 환경에서 동작하는 스택을 구현하는 방법을 배울 수 있습니다.StandardStack 클래스Lock을 사용하는 단일 스레드 환경에서 동작하는 스택으로, synchronized 키워드를 사용하여 push 메소드에 락을 걸어 안전한 접근을 보장합니다. 새..
Lock-Free Algorithm
·
📘 Backend/Concurrency
📚 Lock-Free AlgorithmLock-Free 알고리즘은 여러개의 Thread에서 동시 호출 시 정해진 단위 시간마다 적어도 1개의 호출이 완료되는 알고리즘이며, 동시성 제어에서 중요한 개념중 하나입니다.간단히 요약하면 Lock을 사용하지 않고 Atomic 연산을 통해 구현하며, 하드웨어 레벨에서 연산의 원자성을 보장합니다.유의할 점CAS(Compare And Set)를 사용하는 Atomic 클래스는 Thread 간 경합이 있을 때 성능이 다소 낮아질 수 있십니다.하지만 여전히 Lock을 사용하지 않기 때문에 Lock과 비교해 더 빠르고 데드락이 없는 Lock-Free 구현이 가능합니다.물론 Lock을 사용 하는게 더 좋다거나 사용 안한다고 더 좋다기 보다 상황에 맞게 선택할 수 있는 선택지를..
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입니다.저는 그냥 포트뒤에 ..
Hexagonal Architecture 구현 - 1 (Multi-Module, Kotlin)
·
📄 Document/Project 설계
📚 헥사고날 아키텍처란?기본 구조 & API 구현 Repository헥사고날 아키텍처(Hexagonal Architecture)는 포트와 어댑터 아키텍처(Ports and Adapters Architecture) 라고도 불리며,어플리케이션의 핵심 비즈니스 로직을 외부 시스템(데이터베이스, 웹, 메시징 시스템 등)으로부터 완전히 분리하여 독립성을 높이는 클린 아키텍처 패턴 중 하나입니다.어플리케이션의 도메인 로직이 외부 의존성과 분리됨으로써, 유연성과 테스트 용이성을 크게 향상시킬 수 있습니다.아키텍처 구조이 구조는 도메인이 항상 중심에 위치하고, 외부 시스템과의 상호작용이 포트와 어댑터로 분리되는 형태로 동작합니다.도메인 중심 설계(Domain-Centric Design):어플리케이션의 핵심 비즈니스 ..