# ACID

84개의 포스트

트랜잭션이란?

트랜잭션은 무엇인가? 데이터베이스는 초당 수백만개의 동시 요청을 수행할 수 있는 걸로 알려져 있습니다. 일반적으로, 이러한 요청들은 데이터 베이스에 있는 동일한 데이터를 조작할 수 있습니다. 예를들어 온라인 쇼핑 사이트에서 한정판 게임을 살려고 할 때, 여러 사용자들이 동시에 장바구니에 해당 게임을 담았고 그와 동시에 구매하기를 눌렀다고 가정해보겠습니다. 이 경우에 남아있는 수량은 초과도 과소도 아닌 정확하게 계산되어야합니다. 일반적으로 데이터베이스의 트랜잭션은 이런 상황에서 사용됩니다. 그래서 트랜젝션이 뭐지? 간단히 말하면, 데이터베이스 트랜잭션은 데이터베이스에서 수행되는 여러 작업의 연속이며(SQL문의 집합), 이러한 작업들은 모두 하나의 논리적인 작업 단위로 취급되어 전체가 완전히 수행되거나 전혀 수행되지 않습니다. 다시 말하면, 작업 중 일부만 수행되고 결과가 저장되는 경우는 절대 없습니다. 데이터베이스 트랜잭션이 진행 중일 때 데이터베이스

3일 전
·
0개의 댓글
·

[Database] Transaction

Transaction 은 데이터베이스의 상태를 변화시키기 위해 수행되는 작업 단위입니다. 1. ACID 원칙 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어입니다. atomicity(원자성) : 한 트랜잭션 내에서 실행한 작업은 하나로 간주합니다. (다 성공 아니면 실패) consistency(일관성) : 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야합니다. isolation(격리성) : 동시에 실행되는 트랜잭션이 영향을 미치지 않아야합니다. durability(지속성) : 트랜잭션을 성공적으로 마치면 저장이 되어야합니다. 2. 트랜잭션 격리수준 트랜잭션의 격리 수준(Isolation Level)이란 여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 여부를 결정하는 것입니다. 트랜잭션의 격리 수준은 격리수준이 높은 순서대로 SERIAL

2023년 8월 23일
·
0개의 댓글
·
post-thumbnail

PostgresSQL (2)

백엔드 개발을 하다보면 트랜잭션이야기를 안할 수 없게된다. 코딩을 해도 그 코드가 반드시 내가 원하는 값, 환경에서 돌 수 있다는 보장이 없고 만약 쿼리를 순서대로 보내서 내가 원하는 결과를 얻으려고 하는데 중간에 다른 코드, 시스템에서 내가 원하는 쿼리의 결과값을 바뀌게하는, 즉 수정, 삭제, 추가생성이 얼마든지 가능하다. ACID 위와 같은 이유로 백엔드 개발을 할시에는 트랜잭션의 사용이 거의 반드시 필요하다고 말할 수 있다. 트랜잭션은 ACID원칙을 준수하게 된다. ACID는 어떤 용어일까? 원자성 원자성(Atomicity) : 간단히 말하면 트랜잭션 블록 내의 모든 연산이 다 성공해서 DB에 반영(commit)되거나 중간에 실패할시 아무것도 안한 것 처럼 복구(rollback)되어야 한다는 점이다. 2가지 데이터가 존재한다고 하자 a = 10, b = 10 a의 값 10을 b에 넘겨주는 작업을 진행한다. 네크워크, 서버 다운 등의 문제가 발생해서

2023년 8월 14일
·
0개의 댓글
·
post-thumbnail

SQL의 실행과 로깅 과정

SQL 문장 실행 과정 user process로부터 SQL문을 받은 server process는 다음의 과정들을 거쳐 SQL문을 실행한다. parsing: 문법 검사, 의미 검사(올바른 속성, 테이블 이름인지, 등), 권한 검사를 수행한다. Data dictionary 등을 참고해 실행계획을 만든다. translation: SQL query를 관계대수식으로 번역한다. optimize: Data dictionary의 통계 정보 등을 이용해 관계대수식의 최적화를 시도한다. evaluation: 가장 수행 시간이 짧을 것으로 예상되는 실행계획을 선택한다. execution: 선택된 실행계획에 따라 쿼리를 실행한다. 이때, 필요한 데이터가 담긴 블록만을 데이터베이스 버퍼로 가져온다. 트랜잭션 트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위, 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다. A

2023년 8월 6일
·
0개의 댓글
·

트랜잭션의 특징(ACID)과 격리 레벨

트랜잭션 트랜잭션은 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말하며 데이터베이스에 접근하는 방법은 쿼리이므로, 즉 여러 개의 쿼리들을 하나로 묶는 단위를 말한다. 이에 대한 특징은 원자성, 일관성, 독립성, 지속성이 있으며 이를 한꺼번에 ACID 특징이라고 한다. 하나의 트랜잭션에선 하나의 쓰레드만 동작한다. 원자성(Atomicity) 원자성은 트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장하는 특징이다. 일관성(Consistency) 일관성은 트랜잭션이 일어나기 전의 상황과 동일하게 ‘허용된 방식’으로만 데이터를 변경해야 하는 것을 의미한다. 격리성(Isolation) 격리성은 각각의 트랜잭션이 독립적으로 수행되어야 함을 의미한다. 격리 레벨 SERIALIZABLE (Level 3) 특정 트랜잭션에서 읽고 있는 데이터는 다른 트랜잭션에서 수정/삭제/삽입 모두 불

2023년 8월 4일
·
0개의 댓글
·

DB - ACID

ACID? ACID는 DB내에서 일어나는 하나의 트랜잭션의 안전성을 보장하기 위해서 필요한 성질이라고 한다. 트랜잭션 트랜잭션은 여러개의 작업을 하나로 묶은 것을 말한다. 즉, 데이터베이스의 상태를 변환시키는 기능을 수행하기 위한 하나 이상의 쿼리를 여러개로 모아놓은 것이라고 할 수 있다. 그럼 이제 ACID가 어떤 것을 의미하는지 알아보자. Atomicity (원자성) 트랜잭션이 안전성 보장을 위해 가져야할 성질을 말한다. 한 트랜잭션의 연산이 하나라도 실패하면 모두 실패, 모든게 성공한다면 성공으로 처리한다. 말 그대로 All or Nothing 이다. Consistency (일관성) 트랜잭션 이전과 이후의 DB 상태는 이전과 같이 유효해야한다. 즉, DB의 제약 or 규칙을 만족해야한다. Isolation (격리성) 모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야한다는 성질이다. 즉, 트랜잭션 수행중에는 다른 트랜잭션에 영향

2023년 7월 3일
·
0개의 댓글
·
post-thumbnail

ACID와 Transaction

✔️트랜잭션 트랜잭션은 "논리적으로 봤을 때 하나의 작업 단위" 를 의미합니다. 트랜잭션의 예로 가장 많이 드는 이체 작업을 생각해봅시다. A가 B에게 20만원을 이체하려고 합니다. 간단하게 나누어서 살펴봅시다. A의 계좌에서 20만원을 빼야합니다.(SQL문) B의 계좌에 20만원을 더해주어야 합니다.(SQL문) 이 20만원을 이체하는 작업은 두 작업이 모두 성공해야 하는 작업입니다. 실제로는 두 가지의 작업을 하지만 논리적으로 봤을 때는 두 작업 모두를 성공해야만 의미가 있는 단일 작업으로 생각할 수 있습니다. 이러한 것을 트랜잭션이라고 합니다. 더 자세히 설명하면 이체처럼 어떤 작업을 위해서 수행되어야 하는 SQL문들이 모두 성공해야 하는 논리적 단일 작업이며, 이러한 SQL문들 중 일부만 성공해서는 DB에 반영되어서는 안되는 하나의 논리적 단일 작업을 트랜잭션이라 칭합니다. 📌commit, rollback, autocommit 트랜잭션을

2023년 6월 13일
·
0개의 댓글
·
post-thumbnail

3주차 - 1) 데이터베이스

Ⅰ. 핵심 키워드 1. 데이터베이스 1) 개념 데이터베이스란, 여러 사람들이 공유하고 사용할 목적으로 통합 관리되는 데이터들의 모임으로, 파일로 데이터를 저장하는 파일시스템의 단점을 보완하기 위해 생겨난 개념이다. 쉽게 말하자면 데이터의 저장소인 것이다. 2) 종류 데이터베이스는 계층형(Hierarchical), 망형(Network), 관계형(Relational), 객체지향형 (Object-Oriented), 객체관계형(Object-Relational) 등으로 분류된다. 그 중에서 계층형, 망형, 관계형에 대해서 알아보자. ① 계층형 DB 처음으로 등장한 DB의 개념으로 tree의 형태를 띄고 있다. 처음 구성을 완료한 이후 변경하기가 어렵고, 아래 예시처럼 재무2팀에서 회계팀으로 연결되는 루트가 매우 비효율적이다. 이러한 이유로 지금은 잘 사용되지 않는 구조이다. ![](https://velog.velcdn.com/images/gmlstj

2023년 6월 8일
·
0개의 댓글
·

왜 도메인 주도 설계를 할까?

김영한 강사님의 강의를 보다가 도메인 주도 설계라는 것을 배웠다. 개념이 이해가 되지 않아서 이해가될 때까지 공부해보았다. 도메인 주도 설계(DDD)란? > 도메인 주도 설계(Domain-Driven Design, DDD)는 복잡한 도메인을 기반으로 소프트웨어를 설계하는 방법론이다. 소프트웨어 개발에 있어서 도메인은 비즈니스에서 중심이 되는 영역으로, DDD는 이 도메인 중심의 설계 방법론으로, 비즈니스 도메인을 중심으로 시스템을 설계하는 방법이다. 도메인 주도 설계 예시 재고 수량과 중복 회원 검증 이 두가지 비즈니스 로직을 기준으로 예를 들어보자. 재고 수량의 경우 상품 엔티티 내부에 비즈니스 로직을 작성한다. 반면에, 중복 회원 검증 비즈니스 로직의 경우 서비스 클래스에 작성한다. 둘 간의 차이는 뭘까? 왜 중복 회원 비즈니스 로직은 서비스 클래스에서

2023년 5월 10일
·
0개의 댓글
·

ACID

오늘의 공부 👍 > 오늘은 트랜잭션의 속성인 ACID에 대해서 알아보겠습니다. > 📝 트랜잭션의 속성(ACID) ACID는 트랜잭션을 정의하는 4가지 중대한 속성을 가리키는 약어입니다. 원자성(Atomicity), 일관성(Consistency), 신뢰성(Reliability), 격리(Isolation) 그리고 영속성(Durability)을 의미한다. 한 테이블의 읽기, 쓰기 또는 수정 작업이 각각 다음과 같은 속성을 가지고 있다고 보장해준다. ▷ A(Atomicity)원자성 모두 성공할 것 아니면 모두 실패하게 만드는 것이다.(DB의 오염을 막기 위함) 이 속성이 있으면 스트리밍 데이터 소스가 스트리밍 중에 갑자기 오류를 일으키더라도 데이터 손실과 손상이 방지된다. ▷ C(Consistency) : 일관성 똑같은 쿼리를 조회할 때마다 동일한 결과값이 나타나야하는 것이다. 트랜잭션이 테이블에 변경 사항을 적용할 때

2023년 4월 25일
·
0개의 댓글
·

230418_TIL

앞으로의 목표 👍 javascript 능력 및 고난도 알고리즘 풀이 능력 Nest, Graphql등 최신 기술 스택 활용 능력 기초 미니프로젝트 포트폴리오 로그인, 결제기반 심화프로젝트 포트폴리오 배포를 위한 네트워크 및 CI/CD 배포자동화 능력 120% 백엔드 개발 지식 오늘부터 꾸준히 해야할 일 👍 영타실력 늘리기 단축키 사용 익숙해지기 코드리딩 실력 키우기 데일리 퀴즈 포트폴리오 작성 독스에 친숙해지기 MDN 보는 연습하기 오늘의 수업 👍 📝 결제시 발생할 수 있는 트랜잭션 문제점 결제정보는 저장했는데 중간에 에러가 생겨 로직이 끝났다면 결제정보만 저장되고 사용자의 구매 누적금액은 최신화가 되지 않는다. 데이터가 꼬여서 데이터 오염이 발생한 것입니다. 이런 결제 상황에서 발생할 수 있는 문제를 해결하기 위해 ACID 트랜잭션을 사용한다. 서

2023년 4월 18일
·
0개의 댓글
·

[포스코x코딩온] 스마트 팩토리 과정 4주차 회고 | 데이터베이스

데이터베이스 데이터, 정보, 지식 DIKW : 데이터(Data)→정보(Information)→지식(Knowledge)→지혜(Wisdom) 데이터 : 개별 데이터 자체로는 의미가 중요하지 않은 객관적인 사실 정보 : 데이터의 가공, 처리와 데이터의 연관 관계 속에서 의미가 도출된 것 지식 : 데이터를 통해 도출된 다양한 정보를 구조화하여 유의미한 정보를 분류하고 개인적인 경험을 결합시켜 고유의 지식으로 내재화한 것 지혜 : 지식의 축적과 아이디어가 결합된 창의적인 산물, 근본 원리에 대한 깊은 이해를 바탕으로 도출되는 창의적 아이디어 예) 데이터 : A마트의 물은 700원이다. B마트의 물은 500원이다. 정보 :B마트의 물이 더 싸다. 지식 : B마트에서 물을 사는것이 더 경제적이다. 지혜: B마트의 다른 상품들도 A마트보다 쌀 것이다. 데이터베이스란? 데이터를 저장하는 구조

2023년 4월 13일
·
0개의 댓글
·
post-thumbnail

DB ACID & Transaction

데이터베이스를 공부하다 보면 흔히 ACID 라는 말을 자주 듣곤 합니다. 아시드..? 애시드?? 이 아이들은 뭐길래 항상 꼭 나올까요?? > ACID(원자성, 일관성, 고립성, 지속성)는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다 [위키백과 ACID] (https://ko.wikipedia.org/wiki/ACID) 위키에 따르면 ACID는 각각 트랜잭션의 수행은 보장해주는 성질들의 약어 입니다. 흐음...ACID를 알기 전에 우선 트랜잭션이 무엇인지 부터 알아야 겠군요 Transaction 간단히 말해서 트랜잭션은 DB에서 여러 작업의 묶음입니다! 보통 어플리케이션이 DB에 정보를 변경하거나 조회할 때, 보통 여러 개의 쿼리를 날립니다. 계좌에서 인출을 하려고 시도하면 계좌 잔액을 조회한다 (조회) a. 잔액이 출금 요청 금액보다 적으면 실패 출금을 하고 잔액을 변경한다. (변경) 간단한 출금에도

2023년 3월 29일
·
0개의 댓글
·

ACID

ACID ACID 는 concurrent 프로그래밍 혹은 그러한 프로그램에서 데이터에 대한 트랜젝션이 안전하도록 보장하기 위해서 만족해야 하는 특성모음을 의미하는데, 데이터베이스에서의 트랜잭션이 대표적인 예 입니다. Atomicity(원자성) 트랜잭션과 관련된 일은 모두 실행되던지 모두 실행되지 않도록 하던지를 보장하는 특성입니다. Consistency(일관성) 트랜잭션이 성공했다면, 데이터베이스는 그 일관성을 유지해야 합니다. 일관성은 특정한 조건을 두고, 그 조건을 만족하는지를 확인하는 방식으로 검사할 수 있습니다. Isolation(독립성) 트랜잭션을 수행하는 도중에 다른 연산작업이 끼어들지 못하도록 합니다. 임계영역을 두는 것으로 달성할 수 있습니다. Durability(지속성) 성공적으로 트랜잭션이 수행되었다면, 그 결과는 완전히 반영이 되어야 합니다. 완전히 반영되면 로그를 남기게 되는데, 후에 이 로그를 이용해서 트랜잭션

2023년 3월 10일
·
0개의 댓글
·

트랜잭션의 개념

ACID Atomic (원자성) All or Nothing 모든 작업이 실행되거나 혹은 모두 실행되지 않아야 한다. 예시) A계좌에서 B계좌로 잔액을 송금할 때, 'A계좌 잔액 줄이기' 작업과 'B계좌 잔액 늘리기' 작업은 함께 성공하거나 함께 실패해야 한다. Consistency (일관성) 모든 트랜잭션이 종료된 후에는 DB의 제약 조건을 모두 지키고 있는 상태가 되어야 한다. 예시) 잔액은 0원 이상이다. 이를 위반하는 트랜잭션은 모두 중단된다. Isolation (격리성) 트랜잭션은 다른 트랜잭션과 독립적으로 동작해야한다. A 트랜잭션이 하는 일을 B 트랜잭션은 모르게 해야한다. 하지만 현실적으로 완전한 격리성을 지켜주기란 쉽지 않다. 성능과 안전성의 트레이드 오프 관계에 있는 부분이다. READUNCOMMITTED > READCOMMITTED > REPEATABLE_READ > SERIALIZABLE 순서로 성능은 떨어

2023년 3월 9일
·
0개의 댓글
·
post-thumbnail

트랜잭션의 격리수준(Transcation isolation level) 4단계, ACID 성질

시작에 앞서 : 왜 트랜잭션? 지난 [Redis] 분산락(Distribution Lock) 을 구현해 다중화 서버에서 발생하는 동시성 문제 해결하기 에서 Redis Client 의 Redisson 와 Lettuce 를 활용해 분산락을 구현하고, 여러 인스턴스에서 발생하는 경쟁 상태(Race Condition) 로 인한 동시성 이슈를 해결했었습니다. 학습을 진행하며 분산락외에도 JPA의 데이터베이스 락, 그리고 트랜잭션의 격리수준,전파 등 아직 잘 이해하지 못한 부분들을 학습해야겠다고 느꼈습니다. 이번 기회에 트랜잭션의 기본

2023년 3월 5일
·
0개의 댓글
·
post-thumbnail

트랜잭션과 ACID

트랜잭션 트랜잭션이란, DB쿼리의 최소한의 단위를 이야기한다. 하나의 트랜잭션에 여러개의 쿼리문이 존재할 수 있으며, 모두 성공하면 모든 쿼리문이 성공적으로 영구히 적용되며, 중간에 어떠한 이유로든 실패하게 된다면 모든 쿼리문이 취소되어 트랜잭션이 시작되기 전으로 되돌아간다. 영구히 적용되는 것을 Commit, 처음으로 되돌아가는 것을 Rollback이라고 말한다. DB 서버에 여러개의 클라이언트가 동시에 액세스하게 될 경우, 데이터의 부정합이 발생할 가능성이 커지는데 이를 막고자 트랜잭션이라는 단위를 설정하여 부정합을 방지하고 일관적이고 지속적인 데이터 보관 및 수정이 용이하게 되었다. 위의 코드를 예로 들면, J의 계좌에서 H의 계좌로 2000원을 보낼때, J의 계좌에서 2000원을 차감한

2023년 2월 25일
·
0개의 댓글
·

ACID와 Transaction

ACID는 Atomicity, Consistency, Isolation 및 Durability의 약자입니다. 이 네 가지 속성은 신뢰할 수 있고 고품질의 데이터베이스 트랜잭션의 핵심 특성으로 간주됩니다. 다음은 각 속성의 의미에 대한 간략한 개요입니다: 원자성(Atomicity): 이 속성은 트랜잭션이 분할할 수 없는 단일 작업 단위로 처리되도록 보장합니다. 트랜잭션 중에 변경된 모든 내용이 데이터베이스에 커밋되거나 변경된 내용이 없습니다. 트랜잭션이 실패하거나 어떤 이유로든 중단되면 해당 시점까지 수행된 모든 변경 사항이 롤백되거나 실행 취소됩니다. 일관성(Consistency): 이 속성은 데이터베이스가 트랜잭션 전후에 일관된 상태를 유지하도록 합니다. 즉, 데이터베이스의 데이터는 데이터베이스 스키마에서 지정한 모든 규칙과 제약 조건을 준수해야 합니다. 트랜잭션이 이러한 규칙을 위반할 경우 트랜잭션은 롤백되고 데이터베이스는 변경되지 않은 상태로 유지됩니다. 격리(Isola

2023년 2월 25일
·
0개의 댓글
·
post-thumbnail

[Database] DB Transaction

트랜잭션 트랜잭션은 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말한다. 데이터베이스에 접근하는 방법은 쿼리이므로, 즉 여러 개의 쿼리들을 하나로 묶는 단위를 말한다. 이에 대한 특징은 원자성,일관성,독립성,지속성이 있으며 이를 한꺼번에 ACID 특징이라고 한다. 원자성(atomicity) 일관성(consistency) 독립성(isolation) 지속성(durability) 원자성(Atomicity) 원자성은 트랙젝션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장하는 특징입니다. 예를 들어 트랜젝션을 커밋했는데, 문제가 발생하여 롤백 하는 경우 그 이후에 모두 수행되지 않음을 보장하는 것을 말합니다. "all or nothing" 예를 들어 1000만 원을 가진 홍철이가 0원을 가진 규영이에게 500만원을 이체한다고 가정해봅시다. 그렇다면 결과적으로 홍철이 50

2023년 2월 14일
·
0개의 댓글
·
post-thumbnail

[DataBase] Transaction

데이터베이스를 다루게 되면 빠질 수 없는 개념 중 하나인 Transaction(이하 '트랜잭션')에 대해서 이번 게시글에서 다뤄 보려고 한다. ✍ Transanction의 정의 > 트랜잭션이란 쉽게 말해 "쪼갤 수 없는 업무 처리의 최소 단위"이라고 할 수 있으며 다른 표현으로는 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위이다. 데이터베이스에 접근하는 방법은 쿼리이기에 여러 개의 쿼리들을 하나로 묵는 단위로도 볼 수 있다. 이 때, 1초당 처리 할 수 있는 트랜잭션의 개수를 TPS라고 한다. 트랜잭션은 데이터의 부정합을 방지하기 위해 꼭 필요한 개념이기에 어느정도의 기초 개념을 알고 넘어가야 한다. ✍ Transaction의 특징 트랜잭션에는 중요한 4가지의 특징

2023년 2월 2일
·
0개의 댓글
·