본문 바로가기

{시리즈}18

1. Nginx란? 1. Nginx란? Nginx는 경량 웹(web server) 서버이다. 웹서버는 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램이다. 웹 서버의 주된 기능은 웹 페이지를 클라이언트로 전달하는 것이다. 주로 그림, CSS, 자바스크립트를 포함한 HTML 문서가 클라이언트로 전달된다. 출처: 위키백과 웹서버는 통상적으로 클라이언트에게 정적인 자원을 전달(서빙)하는 서버이다. 정적인 자원이란 HTTP, CSS, 이미지 같은 서버에 이미 존재하는 자원이다. Q) 그렇다면 웹서버가 아닌 서버는 어떤 것일까? A) 동적인 자원을 제공하거나, 통신과정에서 중계적인 역할을 하는 서버는 웹서버가 아니다. 요즘 기준으로 API 서버가 대표적으로 .. 2023. 11. 5.
4. 트랜잭션의 격리 레벨과 존재 이유 트랜잭션과 동시성 하나의 앱에서 하나의 트랜잭션만 사용한다면 동시성에 대한 이슈는 없을 것이다. 아니면 여러 트랜잭션이 서로 다른 데이터만 사용한다면 동시성에 대한 이슈는 없을 것이다. 하지만 한명의 사용자를 위한 앱이 아닌 이상 현실적으로 그럴 수 없다. 때문에 트랜잭션 다룰 때는 동시성 이슈는 필연적으로 발생한다. 트랜잭션을 지원하는 데이터베이스들은 동시성 문제를 트랜잭션 격리 레벨로 해결해 왔다. 격리 레벨이라고 불리는 이유는 트랜잭션시 발생할 수 있는 다양한 동시성 문제를 단계별로 해결하기 때문이다. 트랜잭션 격리 레벨 SQL 표준은 Transaction Isolation에 대해 4가지 레벨로 정의하고 있다. (위에서 아래로 격리레벨이 높아진다.) Read uncommitted(커밋 되지 않은 읽.. 2023. 8. 29.
3. 트랜잭션 사용 방법과 어보트 처리 RDB에서 트랜잭션 사용 방법 트랜잭션 여러 작업을 마치 하나 처럼 처리하도록 하는 기술이며, 여러 작업의 논리적인 묶음이다. 여기서 말하는 여러 작업은 SQL들을 말한다. 그렇다면 서버는 여러 SQL이 하나의 트랜잭션에 속하는지 어떻게 알수 있을까? 데이터베이서 서버와 클라이언트는 TCP 연결을 기반으로 한다. 연결된 TCP 내에서 BEGIN TRANSACTION 문과 COMMIT 문 사이의 모든 SQL은 같은 트랜잭션에 속하게 된다. 즉, 클라이언트는 트랜잭션 시작시 BEGIN TRANSACTION 을 보내고 트랜잭션 완료시 COMMIT 을 보내기만 하면 된다. BEGIN TRANSACTION; INSERT INTO ...; -- 1번 SQL INSERT INTO ...; -- 2번 SQL UPDAT.. 2023. 8. 29.
0. 트랜잭션 시리즈 작성 목적 시리즈 목적 트랜잭션은 여러 작업을 논리적인 하나의 작업처럼 동작하게 한다. 그 덕분에 데이터의 정합성은 높아지고 안정성과 신뢰성을 확보 할 수 있다. 하지만 트랜잭션은 강결합을 유발한다. 개발에서 항상 논해지는 트레이드 오프가 여기서도 발생하는 것이다. 현대의 시스템은 추상화를 통한 약한 결합이 중요하다. 그래야 서로 의존성이 적어 분리하기 쉽고 유지보수에도 용의하기 때문이다. 트랜잭션 또한 분산환경에서 약결합하기 위한 다양한 방법이 존재한다. 2중 커밋 (Two-Phase Commit, 2PC) Saga 패턴 로컬 트랜잭션 (Local Transactions) 이벤트 소싱 (Event Sourcing) 최종 일관성 (Eventual Consistency) 이 외에도 다양한 방식으로 존재하며, 이러한 .. 2023. 8. 22.
2. 트랜잭션에서 안정성을 의미하는 ACID ACID이란? ACID는 트랜잭션이 제공해야 하는 4가지 윈칙을 의미한다. 트랜잭션에서 제공하는 안정성을 말할 때 흔히 ACID를 설명한다. ACID는 1983년 데이터베이스의 내결함성 메커니즘을 나타내는 정확한 용어를 확립하기 위해 만들었다. A - 원자성(Atomicity) C - 일관성(Consistency) I - 격리성(Isolation) D - 지속성(Durability) 하지만 데이터베이스마다 ACID 구현은 제각각이다. 때문에 데이터베이스에서 말하는 "ACID를 준수"한다는 말은 정확하게 어떤 것을 준수하고 있는지 명확하지 않은 경우가 많다고 한다. 원자성(Atomicity) 일반적인 의미로 원자성이란 더 작은 부분으로 쪼갤 수 없는 뭔가를 말한다. 그리고 이 단어는 컴퓨터에서 비슷하지만 .. 2023. 8. 21.
1. 트랜잭션이란? 트랜잭션이란? 트랜잭션은 데이터베이스 관리 시스템(DBMS)에서 사용되는 개념으로, 데이터베이스에 수행되는 작업의 기본 단위이다. 여기서 말하는 작업의 기본 단위란 데이터의 일관성을 보장하기 위한 최소한의 단위이다. 많이 사용되는 예제인 은행 송금 작업으로 예시를 들어보자 은행 송금이라는 작업은 간단하게 2가지 단계로 이루어진다. 1. A계좌에서 돈을 출금한다. 2. B계좌에 출금한 금액을 입금한다. 만약 어떠한 이유로 1번 작업이 실행되고, 2번 작업은 실패하면 어떻게 될까? A계좌만 돈이 출금된 상태로 남는 데이터 불일치 상황이 발생한다. 위 같은 상황을 방지하기 위해 여러 작업을 묶어서 최소한의 작업 단위로 관리히며 이를 트랜잭션이라 한다. 또한 대부분의 DBMS는 트랜잭션 기능을 지원한다. 예제에.. 2023. 8. 21.