반응형
💡 [DB] 관련 글 다시 보기
📍 DB가 백엔드 개발자에게 중요한 이유
- 백엔드 개발자는 WAS(Web Application Server)와 DB(Database)의 상호작용을 이해하고, 성능 이슈 및 오류를 처리할 수 있어야 한다.
- WAS에서 발생하는 오류뿐만 아니라 DB의 응답성 저하 또한 시스템 성능에 영향을 미칠 수 있으므로, DB의 구조와 동작 원리를 이해하는 것이 중요하다.
- 효율적인 데이터 처리와 관리, 최적화된 질의(Query) 작성 및 문제 상황의 원인 분석을 위해 DB 지식은 필수적이다.
📍 트랜잭션이란?
- 트랜잭션(Transaction)이란 데이터베이스에서 논리적 작업 단위를 의미하며, 일련의 작업들이 모두 성공하거나 모두 실패하여 일관된 상태를 유지하도록 보장하는 것을 목표로 한다.
- 예를 들어, 은행 계좌 이체 작업은 출금과 입금 작업이 모두 성공하거나 모두 취소되어야만 데이터의 무결성을 보장할 수 있다.
📍 트랜잭션의 ACID 특성
- 트랜잭션은 다음과 같은 4가지 특성을 통해 데이터의 신뢰성을 보장한다:
- 원자성(Atomicity)
- 트랜잭션 내 모든 작업이 성공하거나 실패하여 All or Nothing 원칙을 준수함.
- 중간에 실패 시 모든 작업은 롤백(Rollback) 처리된다.
- 일관성(Consistency)
- 트랜잭션 수행 전후의 데이터 상태가 일관성을 유지하도록 보장함.
- 제약 조건, 규칙 등이 트랜잭션 수행 후에도 충족되어야 한다.
- 격리성(Isolation)
- 여러 트랜잭션이 동시에 실행되더라도 서로의 작업에 영향을 미치지 않도록 보장함.
- 격리 수준(Isolation Level)에 따라 동시성 문제를 관리한다.
- 지속성(Durability)
- 트랜잭션이 커밋(Commit)되면 그 결과는 영구적으로 데이터베이스에 반영됨.
📍 트랜잭션 동시성 문제
트랜잭션이 동시에 실행될 때, 적절히 관리하지 않으면 다음과 같은 문제가 발생할 수 있다:
- 더티 리드(Dirty Read)
- 트랜잭션 A가 아직 커밋되지 않은 데이터를 트랜잭션 B가 읽는 경우.
(e.g., A에서 수정 후 커밋하지 않고 롤백하면 B는 잘못된 데이터를 참조함)
- 트랜잭션 A가 아직 커밋되지 않은 데이터를 트랜잭션 B가 읽는 경우.
- 오버라이트(Lost Update)
- 두 트랜잭션이 동일 데이터를 수정하면서 한 트랜잭션의 수정 내용이 덮어씌워지는 경우.
- Non-Repeatable Read
- 트랜잭션 중간에 다른 트랜잭션이 데이터를 수정하여 처음 읽었던 결과와 나중에 읽은 결과가 달라지는 경우.
- 팬텀 리드(Phantom Read)
- 트랜잭션 중간에 다른 트랜잭션이 데이터를 삽입하거나 삭제하여 쿼리 결과가 달라지는 경우.
- 로스트 업데이트(Lost Update)
- 동시에 같은 데이터를 수정했을 때 한 트랜잭션의 변경 사항이 유실되는 현상.
📍 격리 수준(Isolation Level)
동시성 문제를 해결하기 위해 격리 수준을 설정한다. 아래는 SQL에서 정의하는 4가지 수준이다:
- Read Uncommitted
- 커밋되지 않은 데이터를 읽을 수 있음(Dirty Read 허용).
- 가장 낮은 격리 수준으로 성능은 좋지만 데이터 무결성을 보장하기 어려움.
- Read Committed
- 커밋된 데이터만 읽을 수 있음(Dirty Read 방지).
- Repeatable Read
- 트랜잭션이 완료될 때까지 동일 데이터를 반복적으로 읽어도 항상 같은 결과를 반환함(Non-Repeatable Read 방지).
- Serializable
- 가장 엄격한 수준으로 트랜잭션이 완전히 직렬화되어 실행됨(Phantom Read 방지).
성능은 저하될 수 있으나 데이터 무결성은 완벽히 보장됨.
- 가장 엄격한 수준으로 트랜잭션이 완전히 직렬화되어 실행됨(Phantom Read 방지).
📍 트랜잭션 관리의 중요성
- 트랜잭션을 적절히 관리하지 않으면 데이터 무결성이 깨지거나 시스템 장애로 이어질 수 있다.
- 개발자는 트랜잭션의 동작 원리를 이해하고, 적절한 격리 수준을 설정하여 동시성 문제를 해결해야 한다.
- 트랜잭션 롤백과 커밋 처리, 로그 기록 등을 통해 시스템의 신뢰성과 안정성을 유지할 수 있다.
반응형
'CS' 카테고리의 다른 글
[HTTP - 1 ] HTTP란? : PUT과 PATCH의 역할과 차이점 (0) | 2025.02.20 |
---|---|
[ DB - 3 ] 인덱싱(Indexing)이란? : 인덱싱을 하는 이유 (0) | 2025.02.20 |
[ DB -1 ] 관계형 데이터베이스(RDB)와 NoSQL의 차이점 (0) | 2025.02.20 |
[Process와 Thread - 3] 멀티 프로세스와 멀티 스레드 비교 (0) | 2025.02.20 |
[Process와 Thread - 2] 프로세스와 스레드의 개념과 차이: 멀티스레드의 작동 원리 (0) | 2025.02.20 |