분류 전체보기
-
[Spring] Redis의 Redisson을 활용한 분산락 처리Spring 2025. 5. 10. 19:40
개요동시성 제어를 위한 락 방식은 여러 가지가 있고, 접근 레벨에 따라서도 적용할 락 방식이 다릅니다. 예를 들어, 하나의 프로세스 안에서의 동기화, 여러 프로세스 간의 동기화, 또는 분산 시스템에서의 동기화 등 목적에 따라 요구사항과 복잡성이 달라집니다. 그 중에서도 다중 스레드 환경과 분산 시스템 환경 모두에서 동시성 제어를 보장하기 위해 Redis의 Redisson을 통한 분산락 처리에 대해 알아보겠습니다.1. 락의 종류와 차이점동시성 제어를 위해 사용되는 락은 크게 다음과 같이 분류할 수 있습니다.종류설명정리락 (Mutex)단일 프로세스, 단일 스레드 간 동시성 제어관적락 (Monitor Lock)JVM의 synchronized 키워드로 구현된 락비관적 락데이터 접근 시마다 락 걸어 충돌 방지낙관..
-
[Spring] Lock 종류 정리 (낙관적 락, 비관적 락, 분산락, 데드락, 등) 및 예시Spring 2025. 5. 8. 10:21
1. Lock이란?1.1 설명Lock은 동시에 여러 개의 트랜잭션이나 프로세스가 같은 리소스(데이터, 파일 등)에 접근하려고 할 때 발생할 수 있는 경쟁 조건(Race Condition)을 방지하기 위한 제어 장치입니다. 데이터 정합성을 보장하고 예기치 않은 충돌을 방지하기 위해 필수적인 메커니즘입니다.1.2 원리Lock은 주로 다음의 방식으로 작동합니다.하나의 트랜잭션이 리소스를 점유하면, 다른 트랜잭션은 해당 리소스가 해제될 때까지 대기하거나 실패 처리됩니다.Lock의 종류에 따라 점유 방식(낙관적, 비관적)이나 위치(DB, 분산 시스템 등)이 달라집니다.2. 낙관적 락 (Optimistic Lock)2.1 낙관적 락이란?낙관적 락은 충돌이 거의 발생하지 않을 것이라고 가정하고 처리하는 방식입니다. ..
-
[Search Engine] SphinxSearch Engine 2024. 8. 22. 20:02
해당 포스팅에서는 Sphinx 검색엔진을 설치하고, 쿼리를 실행 해보겠습니다. Sphinx란?고성능, 오픈 소스 검색 엔진으로, 대량의 데이터를 신속하고 정확하게 검색할 수 있도록 설계된 시스템입니다. 특히 MySQL, PostgreSQL 같은 관계형 데이터베이스와의 통합이 뛰어나며, 다양한 애플리케이션에서 쉽게 사용할 수 있습니다. Sphinx의 특징빠른 검색 속도: Sphinx는 대용량 데이터에서도 매우 빠른 검색 성능을 자랑합니다. 이는 Sphinx가 데이터의 색인(Index)을 생성하고, 검색할 때 이 색인을 활용하여 속도를 극대화하기 때문입니다.확장성: Sphinx는 수백만 개의 문서를 색인하고 검색할 수 있는 능력을 가지고 있어, 대규모 애플리케이션에서도 사용하기 적합합니다. 또한, 분산 검색..
-
[MySQL] like, fulltext index, sphinx engine cost 비교Search Engine 2024. 8. 21. 00:10
검색 엔진 모듈화를 위한 3가지 방안의 차이점을 비교합니다.✍️ 목차1. LIKE Search1-1. 선형 검색으로 인한 속도 저하1-2. 인덱스 사용의 제한1-3. 문자열 패턴 매칭 한계2. Full-Text Index Search2-1. 전문 검색 기능2-2. 인덱스 기반 검색2-3. 정확성 및 유사성 검색2-4. 확장성 제한3. Sphinx Search Engine3-1. 가중치 기반 검색3-2. 문서 유사성 검색3-3. 유연성 및 통합4. 비교 분석sphinx검색 속도용량소요시간Fulltext indexing 시 리스크5. 선택 기준5-1. 데이터베이스 내장 Full-Text 검색 기능5-2. 외부 검색 엔진(Sphinx, Elasticsearch 등)1. LIKE SearchLIKE 검색은 매우..
-
[MQ] RabbitMQMQ 2024. 8. 20. 23:36
이번 포스팅에서는 Message Queue 중 하나인 RabbitMQ의 특징을 설명합니다. RabbitMQ란 AMQP 프로토콜의 메시징 모델을 기반으로 구현한 메시지 브로커로 Publisher에서 Consumer로 메시지를 전달할 때 중간에서 메시지 브로커 역할을 합니다. AMQP란? 시스템 간 메시지를 교환하기 위해 공개 표준으로 정의한 표준 메시징 프로토콜이며 ‘메시지 브로커’라는 미들웨어를 활용해서 비동기식으로 메시지 전달이 가능합니다. RabbiMQ는 높은 처리량보다는 지정된 수신인에게 원하는 방식으로 메시징을 신뢰성 있게 전달하는데 초점이 맞춰져 있어 대용량 트래픽에는 불리하지만 익스체인지 타입이나 라우팅 정책에 따라서 동작 방식을 선택할 수 있습니다. Publisher : 메시지를 생성..
-
[Nginx] Elastic Beanstalk Nginx RateLimit 설정 (2)Nginx 2024. 4. 20. 17:49
✍️ 저번 포스팅에서는 limit_req module, limit_req_zone, 사용자 지정 에러 등을 설정 했습니다. 이번 포스팅에서는 RateLimit 설정 마무리와 각 서비스에서 필요한 예외 설정까지 진행하고 최종적으로 AWS ElasticBeanstalk를 배포할 때 적용하는 방법까지 알아보겠습니다. 1. Client Max Body Size 제한 📘 /project/platform/nginx/conf.d/rate_limit.conf # limit body_size client_max_body_size 5M; 클라이언트가 전송할 수 있는 요청 본문의 크기를 제한 할 수 있는 설정입니다. 위 예시는 클라이언트가 보낼 수 있는 요청의 본문 크기를 5MB로 제한합니다. 2. Nginx 설정에서 클라..
-
[Nginx] Elastic Beanstalk Nginx RateLimit 설정 (1)Nginx 2024. 4. 20. 17:36
서비스를 구축할 때 DDoS와 같은 공격을 방지하기 위한 효과적인 방법 중 하나는 동일한 IP로부터 들어오는 요청에 대한 속도(요청) 제한을 설정하는 것입니다. 이를 위해 Nginx의 Rate Limit 방식을 활용하여 공격으로부터의 보호를 강화할 수 있습니다. 이번 포스팅에서는 Elastic Beanstalk에 배포할 때 Nginx 설정 파일을 Override하여 Rate Limit을 적용하는 방법에 대해 소개 하겠습니다. Nginx Rate Limit 방식은 Leaky Bucket 알고리즘과 비슷한 방식으로 동작하여, 일정 속도로 흘러 들어오는 요청을 허용하고 초과하는 요청은 일정 기간 동안 기다리거나 거부하는 메커니즘을 제공합니다. Leaky Bucket Algorithm: Leaky Bucket ..
-
[Kafka] 프로듀서 애플리케이션 생성 및 실행Apache Kafka 2024. 4. 20. 15:40
아파치 카프카 애플리케이션 프로그래밍 With Java 책을 학습한 내용을 공유합니다. ✍️ Kafka Producer Application을 생성하고 실행까지 진행해보겠습니다. 실습환경 Inteliij Java 17 Gradle kafka-client Dependency 추가 프로듀서를 구현하기 위해 카프카 클라이언트 라이브러리를 추가합니다. dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' implementation 'org.apache.kafka:kafka-clients:2.5.0' // add im..