MSA 환경에서 Redis 분산 락으로 동시성 문제 해결하기
·
Backend/Database
들어가며MSA 환경에서 여러 서버 인스턴스가 동시에 같은 자원에 접근할 때 동시성 문제가 발생합니다. 단일 서버라면 synchronized나 ReentrantLock으로 해결할 수 있지만, 분산 환경에서는 이러한 JVM 레벨의 락이 무용지물입니다. 이때 필요한 것이 바로 분산 락입니다.왜 Redis인가?분산 락을 구현할 수 있는 방법은 여러 가지가 있습니다. MySQL의 네임드 락, Zookeeper, Redis 등이 있는데, Redis를 선택하는 이유는 명확합니다.첫째, 인메모리 기반으로 매우 빠릅니다. 락 획득/해제가 빈번하게 일어나는 상황에서 성능은 중요한 요소입니다.둘째, SETNX, EXPIRE 등 원자적 연산을 지원합니다. 락 구현에 필요한 기본 연산이 이미 준비되어 있습니다.셋째, 대부분의 ..
Redis란 무엇인가? 성능과 활용법 완벽 정리
·
Backend/Database
Redis란? (빠른 성능의 인메모리 데이터베이스)Redis(REmote DIctionary Server)는 초고속 성능을 자랑하는 오픈 소스 기반 인메모리 데이터베이스입니다. NoSQL 키-값 저장소로, 데이터를 메모리에 저장하여 기존 관계형 데이터베이스(RDBMS)보다 월등한 속도를 제공합니다. 이 때문에 웹 캐싱, 실시간 분석, 세션 관리 등 다양한 용도로 사용됩니다.Redis의 주요 특징1. 인메모리 데이터 저장 (고속 성능 보장)Redis는 디스크 대신 메모리에 데이터를 저장하여 빠른 속도를 제공합니다. 초당 수십만 건의 요청 처리가 가능하며, 높은 트래픽을 효과적으로 처리할 수 있습니다.2. 다양한 데이터 구조 지원Redis는 단순한 키-값 저장을 넘어 다음과 같은 다양한 데이터 타입을 지원합..
[DB] 데드락(Dead Lock)이란?
·
Backend/Database
1. 데드락이란?데이터베이스 관리 시스템(DBMS)에서 두 개 이상의 트랜잭션이 서로 자원을 기다리며 무한정 대기하는 상태 따라서 시스템의 일부나 전체가 교착 상태에 빠져 진행되지 않게 된다.분산 시스템이나 데이터베이스에서 자주 발생하는 문제 2. 데드락 발생 조건데드락이 발생하려면 하기 네 가지 조건이 동시에 충족되어야 한다.상호 배제(Mutual Exclusion): 자원은 한 번에 한 트랜잭션만 사용할 수 있다점유와 대기(Hold and Wait): 트랜잭션이 이미 점유한 자원을 유지한 채 다른 자원을 요청하며 대기한다.비선점(No Preemption): 점유한 자원을 다른 트랜잭션이 강제로 빼앗을 수 없다.순환 대기(Circular Wait): 두 개 이상의 트랜잭션이 서로 자원을 기다리며 순환 ..
[ORACLE] 오라클 포트 번호 확인 및 변경 쿼리문
·
Backend/Database
오라클 sqldeveloper를 설치하면 기본 포트 설정이 8080으로 잡혀있다. 따라서 다른 프로그램과 포트 번호가 겹칠 수 있는데 쿼리문으로 오라클 포트 번호를 확인하고 변경하는 것에 대해 포스팅해보겠다. 포트 번호 확인 쿼리문 select dbms_xdb.gethttpport() from dual; 포트 번호 변경 쿼리문 예시로 9090 포트로 바꿔 보겠다. exec dbms_xdb.sethttpport(9090);
[DB 이론] 데이터 모델링(Data Modeling)이란?
·
Backend/Database
데이터 모델링이란? 요구사항을 근거로 업무규칙과 데이터의 추상화를 단계적으로 수행하는 활동 단계에 따라 개념적, 논리적, 물리적 모델링 단계로 구분 데이터 모델링은 데이터베이스 관리시스템(RDBS)에 담겨 있는 데이터에 집중한다. 관계형 데이터베이스(RDB)는 키(KEY)와 값(VALUE)들의 간단한 관계를 테이블화 시킨 매우 간단한 원칙의 데이터베이스이다. GDB는 그래프 구조를 사용하여 데이터를 표현하고 저장하는 데이터베이스이다. 이 글에서는 관계형 DB(RDB)의 데이터 모델링을 설명할 것이다. 모델링의 종류 개념적 모델링 논리적 모델링 물리적 모델링 개념적 데이터 모델링 개체와 개체들 간의 관계에서 ER다이어그램을 만드는 과정 어떤 개념들이 존재하고, 개념 간의 상호작용을 판단한다. 이를 위해서 ..
[ORACLE] 오라클 SQL 만년 달력 만들기
·
Backend/Database
만년 달력 소스 코드 SELECT NVL(MIN( DECODE(TO_CHAR(dates,'D'),1, TO_CHAR(dates,'DD') ) ),' ') 일 ,NVL(MIN(DECODE(TO_CHAR(dates,'D'),2, TO_CHAR(dates,'DD') ) ),' ') 월 ,NVL(MIN(DECODE(TO_CHAR(dates,'D'),3, TO_CHAR(dates,'DD') ) ),' ') 화 ,NVL(MIN(DECODE(TO_CHAR(dates,'D'),4, TO_CHAR(dates,'DD') ) ),' ') 수 ,NVL(MIN(DECODE(TO_CHAR(dates,'D'),5, TO_CHAR(dates,'DD') ) ),' ') 목 ,NVL(MIN(DECODE(TO_CHAR(dates,'D')..