Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

post_commit 과 transaction.on_commit() 의 차이 #138

Open
dayeonkimm opened this issue Sep 8, 2024 · 0 comments
Open

post_commit 과 transaction.on_commit() 의 차이 #138

dayeonkimm opened this issue Sep 8, 2024 · 0 comments
Labels
enhancement New feature or request

Comments

@dayeonkimm
Copy link
Collaborator

dayeonkimm commented Sep 8, 2024

어떤 기능인가요?

추가하려는 기능에 대해 간결하게 설명해주세요



작업 상세 내용

post_commit과 **transaction.on_commit()**는 모두 트랜잭션이 완료된 후에 특정 작업을 실행하기 위한 방법이지만, 그 사이에는 몇 가지 중요한 차이점 존재

  1. post_commit
정의: post_commit은 Django 기본 기능이 아니며, 일반적으로 외부 라이브러리나 커스텀 구현을 통해 트랜잭션이 커밋된 후에 실행되는 신호입니다.
사용 방법: 트랜잭션이 완료된 후에 신호가 발생하고, 신호 리스너에서 후속 작업을 수행할 수 있습니다.
장점: 신호 기반이기 때문에 별도로 작성된 리스너 함수를 통해 다양한 작업을 실행할 수 있고, 트랜잭션 성공 여부에 따라 후속 작업이 자동으로 처리됩니다.
단점: Django에 기본적으로 내장된 기능이 아니기 때문에 별도의 패키지나 커스텀 코드가 필요합니다.
  1. transaction.on_commit()
정의: transaction.on_commit()은 Django에 기본으로 내장된 기능으로, 트랜잭션이 커밋된 후에 특정 함수를 실행하도록 하는 방법입니다.
사용 방법: transaction.atomic() 블록 안에서 transaction.on_commit()을 호출하여 트랜잭션이 성공적으로 커밋된 후에 실행할 작업을 등록합니다. 이 함수는 트랜잭션이 완료되기 전에 큐에 추가되며, 트랜잭션이 성공적으로 완료되면 함수가 실행됩니다.
장점: 별도의 라이브러리나 커스텀 신호가 필요 없으며, Django의 트랜잭션 관리 흐름 내에서 작업이 자동으로 처리됩니다.
단점: 신호 기반이 아니기 때문에 다른 모델이나 클래스에서 자동으로 후속 작업이 일어나도록 하려면 코드에 명시적으로 추가해야 합니다.
  post_commit transaction.on_commit()
내장 여부 Django 기본 기능이 아님 (별도의 라이브러리 또는 커스텀 구현 필요) Django 내장 기능
사용 방식 커밋 후에 신호로 특정 작업 실행 트랜잭션이 커밋된 후에 등록된 함수를 실행
신호 기반 신호를 통해 다양한 후속 작업을 처리 신호가 아니라 함수 호출로 작업 등록
유연성 신호를 사용하는 구조로 여러 리스너를 설정 가능 명시적으로 트랜잭션 내에서 호출해야 함
복잡성 신호 리스너 작성 필요 간단한 함수 호출로 처리 가능

참고할만한 자료(선택)



@dayeonkimm dayeonkimm added the enhancement New feature or request label Sep 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant