2025/10 4

[OS] 세마포어(Semaphore)와 뮤텍스(Mutex)

세마포어(Semaphore)와 뮤텍스(Mutex)다중 스레드 환경에서 웹 애플리케이션을 개발할 때, 공유 자원(Shared Resource) 에 대한 접근 제어는 피할 수 없는 문제다여러 스레드가 동시에 동일한 데이터를 수정하려 하면, 데이터 무결성이 깨지거나 경쟁 상태(Race Condition) 가 발생할 수 있다.이러한 문제를 해결하기 위한 대표적인 동기화 기법이 세마포어(Semaphore) 와 뮤텍스(Mutex) 이다.이들은 모두 운영체제(OS) 수준에서 공유 자원에 대한 접근을 제어하기 위해 사용되는 동기화 메커니즘으로,자원 접근을 제어하는 ‘락(lock)’을 관리하는 기술이라 할 수 있다. 즉, 낙관적 락(Optimistic Lock), 비관적 락(Pessimistic Lock), 분산 락(D..

OS 2025.10.17

낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock)

동시에 여러 트랜잭션이 같은 데이터를 수정하려고 할 때, 데이터의 정합성(Consistency)이 깨질 수 있다.이를 방지하기 위해, 트랜잭션 간의 충돌을 제어하는 동시성 제어(Concurrency Control) 기법이 필요하다.세마포어(Semaphore)와 뮤텍스(Mutex)는 운영체제(OS) 수준에서 스레드 간 자원 접근을 제어하기 위해시스템 락을 거는 방법이다.반면, 낙관적 락과 비관적 락은 서버 애플리케이션 혹은 데이터베이스(DB) 레벨에서 적용되는 동시성 제어방식이다.즉, 단일 프로세스 내의 스레드 동기화가 아니라,여러 트랜잭션이 같은 데이터를 수정하려 할 때 데이터의 정합성(Consistency)을 유지하기 위한 방법이라 할 수 있다. 비관적 락 (Pessimistic Lock)비관적 ..

DB 2025.10.17

분산 락(distributed lock) 이란?

동시성 문제를 해결하기 위해 뮤텍스(Mutex), 세마포어(Semaphore)나데이터베이스의 비관적/낙관적 락을 떠올리게 된다.하지만 이 기법들은 모두 모놀리식(Monolithic) 아키텍처 안에서만 동작한다.하지만 MSA 환경에서는 각 서비스가 독립된 서버와 데이터베이스를 사용하는 것이 일반적이다.프로세스 간에는 메모리를 공유하지 않기 때문에 서로의 락 상태를 확인하거나 제어할 수 없다.즉, 한 서버에서 설정한 락을 다른 서버가 인식할 방법이 없다.따라서 여러 대의 서버가 네트워크를 통해 동일한 공유 자원(예: 재고, 쿠폰, 포인트 등) 에 접근할 수 있는 상황에서는분산 락(Distributed Lock) 이 필요하다. 분산 락(distributed lock) 이란?공통 저장소에 락의 상태를 저..

DB 2025.10.16

Spring Batch를 활용한 쿠폰발급 및 메일전송

중고물품 거래 플랫폼을 개발하면서, 마케팅 측면에서 유저가 이메일 수신을 허용하도록 유도하기 위해 생일인 유저에게 생일 쿠폰을 자동으로 발송하는 기능을 구현했다. 이 기능을 어떤 방식으로 구현할지 고민하던 중, 확장성과 유지보수성을 고려하여 Spring Batch를 도입하기로 결정했다. Spring Batch란? Spring Batch는 대용량 데이터를 효율적으로 처리하기 위한 Java 기반 배치 프레임워크다. 주로 청크(Chunk) 단위로 데이터를 나누어 처리함으로써, 상황에 따라 메모리를 유연하게 사용할 수 있다는 장점이 있다. Spring Batch의 청크 처리 구조는 다음과 같은 구성요소로 이루어진다. 1. Scheduler → 배치 실행을 트리거(JobLauncher 실행) 한다.2..

Java 2025.10.15