DB 9

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

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

DB 2025.10.17

분산 락(distributed lock) 이란?

동시성 문제를 해결하기 위해 뮤텍스(Mutex), 세마포어(Semaphore)나 데이터베이스의 비관적/낙관적 락을 떠올리게 된다.하지만 이 기법들은 모두 모놀리식(Monolithic) 아키텍처와 같이 하나의 시스템 경계(Boundary) 안에서만 동작한다. 뮤텍스와 세마포어는 단일 서버, 즉 하나의 프로세스 내부에서 스레드 간의 충돌을 막는 OS 수준의 기법이다.비관적/낙관적 락 역시 단일 데이터베이스 인스턴스 내에서 트랜잭션 간의 데이터 정합성을 보장하는 방식이다.하지만 MSA 환경에서는 각 서비스가 독립된 서버와 데이터베이스를 사용하는 것이 일반적이다.프로세스 간에는 메모리를 공유하지 않기 때문에 서로의 락 상태를 확인하거나 제어할 수 없다.즉, 한 서버에서 설정한 락을 다른 서버가 인식할 방법이 없..

DB 2025.10.16

[Redis] 레디스 자료형

요즘 Redis를 공부하면서, 단순한 Key-Value 저장소가 아니라는 걸 새삼 깨달았다.처음에는 단순히 문자열만 저장하는 줄 알았는데, 실제로는 다양한 자료형을 지원하고 있었다.📚 기본 자료형 5가지1. String> SET mykey "안녕하세요!"OK> GET mykey"안녕하세요!"> SET counter 100OK> INCR counter(integer) 101 가장 기본적이고 많이 사용되는 자료형텍스트, 숫자, 이진 데이터 모두 저장 가능최대 512MB까지 저장 가능숫자라면 INCR, DECR 같은 연산 가능사용하기 유용한 상황간단한 캐싱할 때세션 정보 저장할 때카운터 (조회수, 좋아요 수 등)API 토큰 저장할 때2. List - 순서가 중요한 데이터들> LPUSH mylist "첫번째"..

DB 2025.06.24

[DB] Connection Pool, HikariCP

JDBC API를 사용하여 DB와 연결하기 위해 Connection 객체를 생성하는 작업은 비용이 많이 드는 작업 중 하나이다.이러한 문제를 해결하기 위해 애플리케이션 로딩 시점에 Connection 객체를 미리 생성하고,애플리케이션에서 데이터베이스에 연결이 필요할 경우 미리 준비된 Connection 객체를 사용하여 애플리케이션의 성능을 향상하는 커넥션 풀 (Connection Pool)이 등장하였다. Connection PoolJava에서 JDBC의 Connection Pooling을 관리하는 라이브러리빠르고 안정적인 성능으로 많은 Spring Boot 및 Java 기반 애플리케이션에서 사용된다 커넥션 풀이란 (Connection Pool)1) 커넥션 풀 (Connection Pool) (1) ..

DB 2025.03.27

FETCH JOIN

FETCH JOINORM(Object-Relational Mapping) 프레임워크나 SQL에서 JOIN 된 엔티티를 한 번의 쿼리로 가져오는 기법일반적으로 SQL의 JOIN은 기본적으로 지연 로딩(Lazy Loading) 방식으로 동작한다FETCH JOIN을 사용하면 즉시 로딩(Eager Loading) 방식으로 가져와 여러 번의 쿼리를 실행(N+1) 하는 것을 방지할 수 있다2. FETCH JOIN in SQL (JPA / Hibernate)📌 일반 JOIN (Lazy Loading)SELECT e FROM Employee e JOIN e.department d;이 경우, 지연 로딩(Lazy Loading)으로 처리되며, department 데이터는 필요할 때 추가 쿼리가 발생한다📌 FETCH J..

DB 2025.03.18

[CS] DBMS

DBMS는 DB를 효율적이고 직관적이며 안전하게 사용할 수 있게 해주는 DB ManagerSystem이다효율성: 중복 제어 및 무결성 제약조건을 정의/검사하는 기능을 가짐 직관성: 서로 다른 데이터 간의 관계를 표현해주는 관계 표현 및 편리한 인터페이스를 제공 안전성: 접근하는 사용자마다 다른 권한을 주어 접근통제 및 데이터 수정/삭제 시 백업 기능 제공 트랜잭션: DB의 상태를 변화시키는 작업 단위나 병행제어 및 회복 작업 시 처리되는 작업의 논리적 단위로 사용된다.트랜잭션의 특성: ACID - Atomicity(원자성) : 모두 반영(Commit)되거나 전혀 반영되지 않아야 함(Rollback) - Consistency(일관성) : 시스템의 고정요소는 트랜잭션 수행 전, 후의 상태가 같아..

DB 2023.07.08

Java - DB 연결2: ORM

ORM이란 객체와 관계형DB(RDBMS)의 데이터를 자동 매핑(연결)해주는 도구이다. Java에서는 JPA, Hibernate이 있다. RDBMS는 테이블 형태로 데이터를 저장하고 java는 객체라는 개념으로 데이터를 표현한다. - JPA(Java Persistence API) JPA는 인터페이스와 어노테이션을 정의하고, 이를 사용하여 객체와 테이블 간의 매핑 규칙을 정의한다. 이를 구현한 프레임워크(예: Hibernate)와 연결하여 사용한다 - Hibernate: 자바 프로그래밍 언어를 기반으로 한 오픈 소스 ORM(Object-Relational Mapping) 프레임워크 - JPA에서 구현한 인터페이스와 어노테이션을 사용하여 ORM을 구현 - 객체 지향적인 방식으로 DB(데이터)를 다룰 수 있다...

DB 2023.06.26

Java - DB 연결1: JDBC

DB 데이터 접속이란 코드와 DB의 데이터를 연결하는 것을 의미한다. SQL Mapping과 ORM 방법 두가지가 존재하며, 이 글에서는 SQL Mapping 방식인 JDBC에 대해 알아볼 것이다. 우선 SQL Mapping이란, 코드 내에 SQL을 직접 입력하여 DBMS에 접속하는 방법이다. ORM에 비해 사용하기 복잡하며, Java에선 JDBC이 SQL Mapping 방식을 통하여 연결시킨다. JDBC란? JDBC는 "Java Database Connectivity"의 약자로, 자바의 표준 API이다. 자바 프로그램에서 데이터베이스와 연결하고 상호 작용하기 위한 API(응용 프로그램 인터페이스)이다. JDBC를 사용하면 자바 환경으로 관계형 데이터베이스에 액세스하여 데이터를 검색, 삽입, 업데이트, ..

DB 2023.06.26

Python mongoDB Join 사용 코드

mongoDB는 NoSql DB로, Join문을 사용할 수 없다. 하지만 $lookup을 사용하여 MongoDB에서 여러 개의 컬렉션 간 조인을 수행할 수 있다. $lookup은 RDBMS의 조인 기능과 유사한 기능을 제공하는 파이프라인 연산자이다. 코드 작성 예시 import pymongo my_client = pymongo.MongoClient('mongodb://localhost:27017/') my_db = my_client['Orders'] my_collection = my_db['buy_orders'] result = my_collection.aggregate([{ '$lookup' : { 'from': 'sell_orders', 'localField': 'id_transaction', 'fo..

DB 2023.06.09