반응형
📝세마포어(semaphore)
세마포어(semaphore)는 멀티프로세스나 멀티스레드 환경에서 공유 자원에 접근하는 순서를 제어하는 동기화 도구로 여러 명이 동시에 들어가면 안 되는 방에 몇 명까지 들어갈 수 있는지 문 앞에서 카운트하는 관리인 역할을 한다
📝Nexsus Repository
Sonatype에서 만든 패키지 관리 시스템으로 따로 라이브러리를 회사에서 관리합니다 유료와 무료가 있습니다
📝라운드로빈
라운드로빈이란 순회하면서 차례로 일을 처리하는 방식으로 돌아가며 한번씩 기회를 주는 방식입니다
- CPU 스케줄링 (멀티프로세스/스레드)
- 1개 CPU가 여러 프로세스를 조금의 시간씩 할애하며 돌아가며 처리
- 큐 처리 (라운드로빈 큐)
- 여러 작업을 대기열에 넣고 한 작업 조금하고 넘어가고 조금하고 넘어가고를 반복하며 처리
📝레디스 (Redis)
메모리 기반의 NoSQL 데이터베이스로 Key-Value 구조로 데이터를 저장 합니다.
❤️장점
- 빠른 성능
- 모든 데이터를 메모리에 저장 → 밀리초(ms) 단위 응답 가능
- 분산/확장성
- 클러스터링, 샤딩(sharding) 지원 → 대규모 서비스 확장 가능
- Pub/Sub 기능 제공
- 메시지 브로커처럼 사용 가능 (Kafka까지는 아니어도 간단한 이벤트 처리 가능)
⚠️단점
- 메모리 기반
- 메모리에 데이터를 저장하기 때문에 용량이 제한적 (RAM 크기에 의존)
- 데이터 영속성 한계
- 휘발성이기 때문에 완벽한 영속성 보장은 어렵다
- 비용 문제
- 메모리를 많이 쓰면 서버 비용 ↑ (특히 클라우드 환경에서 비용이 큼)
🔎예시
- 세션 저장소
- 캐싱
- 실시간 랭킹 / 카운팅
- 메시지 큐 (Pub/Sub)
- kafka처럼 pub/sub기능을 제공해 메시징처리가 가능하지만 메세지 유실 등 kafka에 비해 낮은 메시지 정합성을 가집니다.
길게 저장하고 있지 않고 빠르게 처리해야하는 것들에 사용하기 적합합니다.
📝Jedis, Lettuce, Redisson
위 3개는 Java에서 쓸 수 있는 Redis 라이브러리입니다.
- Jedis
- 동기식 API처리로 심플하고 가볍다 (러닝커브 낮음)
- 블로킹방식으로 대규모 / 비동기 처리에는 한계가 있다.
- 소규모 간단한 캐시 조회
- Lettuce
- Netty 기반 비동기/논블로킹 클라이언트
- 동기 + 비동기 + Reactive API 모두 지원
- Jedis보다 러닝커브가 있음
- 대규모 트래픽, Reactive 필요
- Redisson
- 동기/비동기/Reactive 지원
- 분산 자료구조/락/동시성 툴킷까지 제공
- 기능이 풍부하지만 무겁고 순수한 Redis 명령어 제어에는 과한 경우도 존재
- 분산 락, 랭킹, 동시성 제어 필요
반응형