트랜잭션 이해하기, DB를 사용한다면 꼭 알아야하는 트랜잭션에 대해 이해해보자
트랜잭션이란?
● Atomic하게 실행되어야 하는 SQL들을 묶어서 하나의 작업처럼 처리하는 방법
○ https://postgresql.kr/docs/9.2/tutorial-transactions.html
○ BEGIN과 END 혹은 BEGIN과 COMMIT 사이에 해당 SQL들을 사용
○ ROLLBACK
● Transaction Isolation Level: “Read Committed”가 디폴트 세팅
트랜잭션 구현방법 (1)
● 두 가지 종류의 트랜잭션이 존재
○ 레코드 변경을 바로 반영하는지 여부. autocommit이라는 파라미터로 조절가능
● autocommit=True
○ 기본적으로 모든 SQL statement가 바로 커밋됨
○ 이를 바꾸고 싶다면 BEGIN;END; 혹은 BEGIN;COMMIT을 사용 (혹은 ROLLBACK)
○ 실행시마다 변경사항이 데이터베이스에 즉각 반영
● autocommit=False
○ 기본적으로 모든 SQL statement가 커밋되지 않음
○ 커넥션 객체의 .commit()과 .rollback()함수로 커밋할지 말지 결정
○ 일반적으로 중요한 작업은 False 사용. 작업은 트랜잭션 내에서 묶이며, 모든 작업이 완료된 후에 명시적으로 커밋해야 데이터베이스에 반영
트랜잭션 구현방법 (2)
● 무엇을 사용할지는 개인 취향
○ Python의 경우 try/catch와 같이 사용하는 것이 일반적
■ try/catch로 에러가 나면 rollback을 명시적으로 실행. 에러가 안 나면 commit을 실행
트랜잭션 구현방법 (3)
● 아래와 같은 코드가 있었다면 exception이 발생한 경우 어떻게 될까?
try:
cur.execute(create_sql)
cur.execute("COMMIT;")
except Exception as e:
cur.execute("ROLLBACK;")
raise
● except에서 raise를 호출하면 발생한 원래 exception이 위로 전파됨
○ ETL을 관리하는 입장에서 어떤 에러가 감춰지는 것보다는 명확하게 드러나는 것이 더 좋음
○ 위의 경우 cur.execute 뒤에 raise를 호출하는 것이 좋음
○ 데이터베이스 작업 중에 오류가 발생하면 이전 상태로 롤백하여 데이터의 일관성을 유지하고 데이터 손실을 방지
'Data Engineering > 실리콘밸리에서 날아온 데이터 엔지니어링 스타터 키트' 카테고리의 다른 글
[4주차] Airflow Deepdive - Airflow로 데이터 파이프라인 만들기 (2) (2) | 2023.09.05 |
---|---|
[4주차] Airflow Deepdive - Airflow로 데이터 파이프라인 만들기 (1) (0) | 2023.09.05 |
[3주차] Assignment (0) | 2023.08.31 |
[3주차] Airflow (0) | 2023.08.30 |
[3주차] ETL (0) | 2023.08.30 |