반응형

분류 전체보기 193

[데이터베이스 응용] SQL 표준에 없는 이상 현상들

이전 포스팅에서 SQL 표준이 정의한 세 가지 이상 현상(Dirty Read, Non-Repeatable Read, Phantom Read)과 네 단계의 격리 수준을 정리했다. 하지만 1995년에 발표된 논문 "A Critique of ANSI SQL Isolation Levels"은 SQL 표준의 한계를 지적하며, 이상 현상이 세 가지만 있는 것이 아니라고 비판했다. 또한 상업적 DBMS에서 실제로 사용하는 방법을 반영하지 않고 격리 수준을 구분한 문제도 제기했다. 이번 포스팅에서는 표준에 포함되지 않은 이상 현상들에 대해 알아본다.1. Dirty Writex = 0인 상태에서 트랜잭션 1은 x를 10으로, 트랜잭션 2는 x를 100으로 바꾸는 상황이다.초기 상태: x = 0T1: write(x = 1..

[데이터베이스 응용] 트랜잭션 격리성(Isolation Level)과 이상 현상

동시성 제어는 직렬화 가능성(Serializability)과 회복 가능성(Recoverability)을 보장한다. 이를 통해 트랜잭션의 격리성(Isolation)을 구현하는데, DB 엔진마다 제공되는 격리 수준이 다르다는 점에 주의해야 한다. 다만 SQL 표준에서 정의한 격리 수준이 존재하며, 이번 포스팅에서는 이 표준 격리 수준과 각 수준에서 발생할 수 있는 이상 현상들을 정리해 본다.1. Dirty Readx = 10, y = 20인 상태에서 트랜잭션 1은 x에 y를 더하고, 트랜잭션 2는 y를 70으로 바꾸는 상황을 살펴보자.초기 상태: x = 10, y = 20T1: read(x) => 10T2: write(y = 70)T1: read(y) => 70 ← comm..

[데이터베이스 응용] Conflict Serializable과 Recoverability

지난 포스팅에서는 트랜잭션의 직렬화와 스케줄의 개념을 다뤘다. 이번에는 한 단계 더 깊이 들어가서, 두 연산 사이의 충돌이 무엇인지, 스케줄이 충돌 직렬화 가능(Conflict Serializable)한지 판별하는 방법, 그리고 회복 가능성에 대해 정리해 본다.1. 두 연산의 충돌(Conflict of Two Operations)두 연산이 충돌한다는 것은 다음 세 가지 조건을 모두 만족하는 경우를 말한다.서로 다른 트랜잭션에 소속되어 있고같은 데이터에 접근하며최소 하나는 write 연산이다예를 들어 sched.3에서 트랜잭션 1과 트랜잭션 2가 모두 데이터 H에 접근하고, 그 중 write 연산이 포함되어 있다면 이 연산 쌍은 충돌 관계에 있다. 충돌 연산의 핵심 성질충돌 연산은 순서가 바뀌면 결과..

[데이터베이스 응용] 트랜잭션과 직렬화

데이터베이스에서 여러 트랜잭션이 동시에 실행될 때, 결과가 올바르게 나온다는 보장이 있을까? 이 질문에 대한 답이 바로 직렬화(Serializability)다. 이번 포스팅에서는 Undo/Redo 복습부터 트랜잭션의 ACID 속성, 그리고 Schedule과 직렬화 개념까지 한 번에 정리해 본다.1. Undo와 Redo 복습Undo (취소)Undo는 잘못된 트랜잭션을 취소하고 원래 상태로 되돌리는 것이다. 트랜잭션이 완전히 완료되지 않았거나 실패한 경우, 변경하기 전에 저장된 상태로 되돌린다. 사용 시점은 트랜잭션이 완료되지 않았거나 commit되지 않은 상태에서 장애가 발생했을 때다. 트랜잭션이 변경한 데이터를 이전 값(로그에 기록된 값)으로 되돌려 데이터베이스의 일관성을 유지한다.START TRANS..

[데이터베이스 응용] 트랜잭션 회복 기법

데이터베이스 시스템에서 트랜잭션의 안전한 실행은 핵심 중의 핵심이다. 아무리 잘 설계된 시스템이라도 장애는 언제든 발생할 수 있고, 이때 데이터의 일관성을 어떻게 지킬 것인지가 바로 회복(Recovery) 기법의 영역이다.이번 포스팅에서는 트랜잭션의 기본 구조부터 로그 기반 회복 기법, 검사 시점 회복, 미디어 회복까지 한 번에 정리해 본다.1. 트랜잭션 기본 구조실제 애플리케이션에서 트랜잭션을 어떻게 처리하는지 파이썬 코드로 먼저 살펴보자. try / except 구조를 사용하여 성공 시 commit, 실패 시 rollback을 수행한다.import pymysqlconn = pymysql.connect( host="localhost", user="root", password="1234..

[클라우드] 쿠버네티스 (Kubernetes) 핵심 개념 및 아키텍처 이해

1. 쿠버네티스(Kubernetes, k8s)란쿠버네티스는 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 오픈소스 시스템이다. 쿠버네티스의 주요 기능컨테이너 자동 배포 및 관리컨테이너 확장(스케일링) 지원로드밸런싱 및 서비스 디스커버리장애 발생 시 자동 복구다양한 스토리지 지원2. 쿠버네티스 클러스터 아키텍처쿠버네티스는 클러스터라는 아키텍처를 가진다.클러스터는 전체를 컨트롤하는 하나의 Master Node와 실제 컨테이너가 생성되어 일을 하는 Worker Node로 구성된다. Master Nodekube-api-server: 쿠버네티스 내의 모든 통신이 거쳐가는 중앙 통제 센터etcd: 클러스터 내의 모든 세부적인 데이터를 저장하는 key-value 저장소kube-scheduler: ..

클라우드 2026.03.21

[클라우드] 컨테이너 기술 및 도구 이해 (Container, Docker, Podman)

1. 컨테이너와 가상화 기술 (Container vs VM)컨테이너는 가상화된 운영체제 위에서 애플리케이션의 독립적인 실행에 필요한 소스코드, 라이브러리 등 종속성을 모아 놓은 소프트웨어 패키지다.기존의 가상머신(VM) 방식은 하드웨어 위에 하이퍼바이저를 올리고, 그 위에 각각 무거운 Guest OS를 구동해야 했다. 반면 컨테이너는 Host OS의 커널을 공유하면서 컨테이너 엔진을 통해 애플리케이션 실행에 필요한 논리적 리소스만 격리한다. 이로 인해 훨씬 가볍고 빠르며, 로컬 노트북이든 클라우드 환경이든 동일하게 동작하는 뛰어난 이식성을 자랑한다.2. 도커(Docker)도커는 애플리케이션과 실행 환경을 포함한 컨테이너를 관리하는 대표적인 오픈소스 플랫폼이다.도커를 사용하면 인프라에서 애플리케이션을 분..

클라우드 2026.03.20

[클라우드] 클라우드 컴퓨팅과 클라우드 네이티브의 이해

1. 클라우드 컴퓨팅(Cloud Computing) 개요클라우드 컴퓨팅은 컴퓨팅 리소스를 데이터센터에 대량으로 집적시킨 후, 정보통신망을 통해 개별 이용자가 요구하는 만큼 가상으로 분리하여 제공하는 네트워크 기반 기술이다. 쉽게 말해, 물리적인 서버 장비를 직접 구매하고 설정할 필요 없이 필요한 자원(서버, 스토리지, DB 등)을 인터넷을 통해 빌려 쓰고 사용량에 비례하여 비용을 지불하는 방식이다. 클라우드의 주요 특징주문형 셀프 서비스 (On-demand self-service): 사업자를 거치지 않고 개별 관리 화면에서 필요한 자원을 직접 설정함.광범위한 네트워크 접속 (Broad networking access): 네트워크 사용이 가능한 다양한 디바이스를 통해 서비스에 접속 가능함.리소스 공유 (R..

클라우드 2026.03.19

[BOJ] 1629 곱셈

https://www.acmicpc.net/problem/1629 이 문제는 얼핏 보면 단순해보이지만 각 수의 최댓값이 21억이라는 점 때문에 그냥 for문으로 풀게 되면 오버플로우가 발생한다.이는 모듈러 연산의 성질을 이용해야하는 대표적인 문제로 중간에 계속 나머지를 구하면서 계산해야한다.문제에 들어가기 전 모듈러 연산에 대해서 정리하고 가자.모듈러 연산이란?모듈러(Modulo) 연산은 나머지를 구하는 연산이다. 프로그래밍에서는 % 기호를 사용하며, A (mod N)은 A를 N으로 나눈 나머지를 의미한다.이는 숫자의 범위를 제한하거나, 매우 큰 수의 계산 결과를 특정 범위 내로 유지해야 할 때 주로 사용한다. 모듈러 연산의 성질1. 덧셈 성질(A + B) (mod N) = ((A mod N) + (B..

알고리즘/BOJ 2026.01.28

[BOJ] 1940 주몽

https://www.acmicpc.net/problem/1940 1. 카운팅 배열(나의 풀이)처음에는 N이 10만개 이하이므로 카운팅 배열이 떠올랐다. 어떠한 정수 X에 대해 M-X의 값이 존재하는 지 확인하면 O(N)의 시간복잡도로 문제를 풀 수 있다고 판단했다. 결론적으로는 꽤 효율적인 방법이지만 배열의 범위에 대해 엄격히 확인해야된다는 단점이 있는 코드인 것 같다.#include using namespace std;int n, m, result;int cnt[100004];int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n; cin >> m; for (int i = 1; i > x; cn..

알고리즘/BOJ 2026.01.28
반응형