[ DB & SQL(RDBMS, NoSQL) ] 데이터 베이스 기초 이해_04.:트랜잭션과 ACID

0
post-thumbnail

[ DB & SQL(RDBMS, NoSQL) ] 데이터 베이스 기초 이해_04.:트랜잭션과 ACID

▽ 데이터 베이스 기초 이해_04 :트랜잭션과 ACID

3. 트랜잭션과 ACID


💬 면접 예상 질문(기본 개념 위주).

1. 트랜잭션(Transaction)이란 무엇인가요?

💬 구두 면접형 답변.
  • 트랜잭션은 데이터베이스에서 하나의 논리적인 작업 단위로,
    여러 연산이 하나의 단위로 처리되어야 할 때 사용됩니다.

  • 모든 연산이 성공해야만 커밋되고, 하나라도 실패하면 전체가 롤백되어야 합니다.

📝 기술 블로그용 서술형 정리.

트랜잭션(Transaction)은 데이터베이스에서
하나의 논리적인 작업 단위(logical unit of work)로 간주되는 연산 집합입니다.

일반적으로 데이터베이스의 일관성 유지를 위해
전체 연산이 모두 성공하거나 모두 실패해야 하는 경우 사용됩니다.

예를 들어, 은행 계좌 이체의 경우 '출금'과 '입금'은 반드시 함께 성공하거나 함께 실패해야 합니다.

2. 트랜잭션의 주요 특징 4가지를 설명해주세요.

💬 구두 면접형 답변.

트랜잭션은 ACID 특성을 가집니다.
원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)입니다.
각각 트랜잭션의 신뢰성과 안정성을 보장합니다.

📝 기술 블로그용 서술형 정리.

트랜잭션은 다음의 ACID 속성을 만족해야 합니다:

  • Atomicity (원자성): 모든 작업이 전부 성공하거나 전부 실패해야 합니다.

  • Consistency (일관성): 트랜잭션 수행 전후에 DB는 항상 일관된 상태를 유지해야 합니다.

  • Isolation (격리성): 동시에 실행되는 트랜잭션 간 간섭이 없어야 합니다.

  • Durability (지속성): 커밋된 트랜잭션의 결과는 영구적으로 반영되어야 합니다.

이 네 가지 특성은 트랜잭션의 신뢰성을 보장하는 핵심 기준입니다.

3. ACID란 무엇인가요?

💬 구두 면접형 답변.

ACID는 트랜잭션이 지켜야 할 4가지 특성입니다:
원자성, 일관성, 격리성, 지속성.
이 특성들이 트랜잭션의 안정성과 데이터의 무결성을 보장합니다.

📝 기술 블로그용 서술형 정리.

ACID는 트랜잭션의 신뢰성과 안정성을 보장하기 위한 네 가지 핵심 특성을 의미합니다:

    1. Atomicity (원자성):
      • 트랜잭션 내 연산은 모두 성공하거나 전부 실패합니다.
    1. Consistency (일관성):
      • 트랜잭션이 실행된 후에도 데이터의 일관성은 보장되어야 합니다.
    1. Isolation (격리성):
      • 여러 트랜잭션이 동시에 수행되더라도 각각의 트랜잭션은 독립적으로 실행된 것처럼 보여야 합니다.
    1. Durability (지속성):
      • 트랜잭션이 커밋된 후에는 시스템 장애가 발생해도 그 결과는 영구적으로 반영되어야 합니다.

4. Atomicity(원자성)의 의미는 무엇인가요?

💬 구두 면접형 답변.

원자성은 트랜잭션 안의 연산이 모두 성공하거나, 하나라도 실패하면 전체가 롤백되는 성질입니다.

📝 기술 블로그용 서술형 정리.
  • Atomicity(원자성)은 트랜잭션 내의 모든 연산이 하나의 단위로 실행되어야 함을 의미합니다.

  • 이 말은, 어떤 연산이 실패하면 트랜잭션 전체가 취소되어야 하며,
    그에 따른 모든 변경 사항은 데이터베이스에서 완전히 무효화(Rollback) 되어야 한다는 뜻입니다.

  • 이는 시스템 장애나 예외 상황에서 데이터 일관성 유지에 필수적인 특성입니다.

5. Consistency(일관성)의 의미는 무엇인가요?

💬 구두 면접형 답변.

일관성은 트랜잭션 실행 전후의 데이터 상태가 항상 유효하고,
제약조건을 만족하는 상태를 유지해야 한다는 의미입니다.

📝 기술 블로그용 서술형 정리.
  • Consistency(일관성)은 트랜잭션 수행 전후에 데이터가
    항상 정합성 있는(valid) 상태를 유지해야 함을 의미합니다.

  • 이는 데이터베이스가 정의한 무결성 제약조건(예: 외래키, 유일성 제약, 체크 제약 등) 을
    위반하지 않도록 보장하며, 트랜잭션이 잘못된 상태를 저장하지 않도록 합니다.

    • 예를 들어, 통장 잔액이 음수가 되어서는 안 되는 은행 시스템에서 일관성은 매우 중요한 속성입니다.

6. Isolation(격리성)의 의미는 무엇인가요?

💬 구두 면접형 답변.

격리성은 여러 트랜잭션이 동시에 실행될 때 서로의 작업이 간섭하지 않도록 보장하는 성질입니다.

📝 기술 블로그용 서술형 정리.
  • Isolation(격리성)은 다중 트랜잭션이 동시에 실행될 경우,
    각 트랜잭션이 서로 영향을 미치지 않고 독립적으로 실행되는 것처럼 보이도록 하는 속성입니다.

이 속성이 부족하면 다음과 같은 문제들이 발생할 수 있습니다.

  • Dirty Read: 다른 트랜잭션이 아직 커밋하지 않은 데이터를 읽음

  • Non-repeatable Read: 같은 쿼리를 여러 번 실행했을 때 결과가 달라짐

  • Phantom Read: 쿼리 결과 집합이 실행마다 달라짐 (삽입/삭제로 인한)

격리성은 트랜잭션 격리 수준을 통해 조절할 수 있습니다.

7. Durability(지속성)의 의미는 무엇인가요?

💬 구두 면접형 답변.

지속성은 트랜잭션이 성공적으로 커밋된 후에는
시스템 오류가 나더라도 그 결과가 보존되어야 한다는 의미입니다.

📝 기술 블로그용 서술형 정리.
  • Durability(지속성)은 트랜잭션이 성공적으로 커밋(commit) 된 후,
    해당 결과가 시스템 장애(예: 전원 장애, 시스템 크래시 등) 발생 시에도
    영구적으로 데이터베이스에 반영되어 있어야 한다는 성질입니다.

  • 지속성을 보장하기 위해 DBMS는 일반적으로
    Write-Ahead Logging(WAL), Redo Log, Checkpoint 등의 메커니즘을 사용합니다.

8. 트랜잭션의 시작과 종료는 어떻게 정의되나요?

💬 구두 면접형 답변.

트랜잭션은 명시적으로 시작되거나, SQL 명령어 실행 시 자동으로 시작됩니다.
종료는 COMMIT으로 성공 시 확정되거나, ROLLBACK으로 실패 시 복구됩니다.

📝 기술 블로그용 서술형 정리.

트랜잭션의 시작과 종료는 DBMS나 개발 언어의 설정에 따라 자동 혹은 수동으로 관리될 수 있습니다:

  • 시작(START):

    • 일반적으로 BEGIN TRANSACTION 또는 START TRANSACTION으로 명시하거나,
    • DML 명령어(예: INSERT, UPDATE) 수행 시 암묵적으로 시작될 수 있다.
  • 종료(END):

    • COMMIT: 트랜잭션이 성공적으로 수행된 경우 변경 사항을 영구 반영

    • ROLLBACK: 오류나 예외 발생 시 변경 사항을 전부 취소하여 이전 상태로 복구

9. COMMIT과 ROLLBACK의 차이는 무엇인가요?

💬 구두 면접형 답변.

COMMIT은 트랜잭션 내의 변경을 확정하는 명령이고, ROLLBACK은 그 변경을 취소하고 이전 상태로 되돌리는 명령입니다.

📝 기술 블로그용 서술형 정리.

- COMMIT:
- 현재까지 트랜잭션에서 수행한 모든 변경 사항을 영구적으로 데이터베이스에 저장하고
트랜잭션을 종료합니다.

- ROLLBACK:
- 트랜잭션 도중 문제가 발생했을 때, 모든 변경 사항을 취소하고 원래 상태로 되돌립니다.

이 두 명령은 트랜잭션 제어의 핵심이며, 원자성과 일관성을 보장하는 데 필수적이다.

10. 트랜잭션 격리 수준(Isolation Level)이란 무엇인가요?

💬 구두 면접형 답변.

트랜잭션 격리 수준은 동시에 실행되는 트랜잭션 간의 간섭 정도를 조절하는 설정입니다.
READ UNCOMMITTED부터 SERIALIZABLE까지 4단계가 있습니다.

📝 기술 블로그용 서술형 정리.
  • 트랜잭션 격리 수준(Isolation Level)은 동시에 실행되는 트랜잭션 간의 간섭 허용 범위를 결정합니다.

  • ANSI SQL 표준에서 정의한 네 가지 수준은 다음과 같습니다.

격리 수준허용되는 문제특징
READ UNCOMMITTEDDirty Read 허용가장 낮은 수준, 빠르지만 무결성 위험
READ COMMITTEDNon-repeatable Read 허용대부분의 DBMS 기본 설정
REPEATABLE READPhantom Read 허용동일 쿼리 결과가 항상 동일
SERIALIZABLE없음가장 엄격, 성능 저하 가능성 있음

격리 수준이 높을수록 데이터 무결성은 보장되지만, 성능은 낮아질 수 있습니다.

11. READ UNCOMMITTED란 무엇인가요?

12. READ COMMITTED란 무엇인가요?

13. REPEATABLE READ란 무엇인가요?

14. SERIALIZABLE이란 무엇인가요?

15. Dirty Read, Non-Repeatable Read, Phantom Read는 각각 무엇인가요?

16. 각 트랜잭션 격리 수준에서 발생 가능한 이상 현상은?

17. 데이터베이스의 자동 커밋(Auto Commit)이란 무엇인가요?

18. 트랜잭션과 Savepoint의 관계는?

19. DBMS가 ACID를 보장하는 방식은 어떤 것이 있나요?

20. 단일 명령도 트랜잭션이 될 수 있나요?

💬 면접 예상 질문(실무적인 요소 위주).

1. 개발과정에서 트랜잭션이 필요한 대표적인 시나리오는 어떤 게 있나요?

2. 다중 테이블 조작 시 트랜잭션을 어떻게 구성해야 할까요?

3. 트랜잭션으로 인해 발생한 Deadlock 문제를 해결하려면?

4. 트랜잭션 중단으로 인한 데이터 정합성 문제를 어떻게 해결해야 할까요?

5. 트랜잭션 격리 수준을 실제 개발에서 조정해야 한다면?

6. READ COMMITTED와 REPEATABLE READ의 사용시기 구분은??

7. 트랜잭션 성능과 격리 수준 간의 Trade-off를 어떻게 조정해야 할까요?

8. 대량의 INSERT/UPDATE 작업 시 트랜잭션을 어떻게 최적화해야 할까요?

9. 트랜잭션 로그 크기 폭증 문제를 해결해야 한다면?

10. 트랜잭션 처리 중 장애가 발생했을 때 복구 전략은 무엇인가요?

11. 웹 애플리케이션에서 트랜잭션을 어떻게 관리하나요? (Spring, FastAPI 등)

12. 비즈니스 로직에서 트랜잭션 분리 전략은??

13. 장시간 트랜잭션이 성능에 미치는 영향은?

14. 트랜잭션 중간에 사용자 예외 상황이 발생할 경우 어떻게 처리하나요?

15. 배치 처리에서 트랜잭션을 어떻게 관리해야 할까요?

16. 분산 트랜잭션이 필요한 상황은??

17. ORM 사용 시 트랜잭션 컨트롤의 어려움을 겪은 사례는?

18. 데이터 정합성을 위해 트랜잭션 외에 어떤 보완책을 사용해야 할까?

19. 대규모 트래픽 환경에서 트랜잭션의 병목을 어떻게 관리하나요?

20. 트랜잭션 테스트(rollback test 등)의 진행방법은??

0개의 댓글