가끔 데이터를 저장함과 동시에 어떠한 확인 절차 혹은 그에 따른 어떠한 행위가 실행이 되어야 하는 경우가 있습니다. Rails 에서는 해당 기능들을 어떻게 구현하는지 간단하게 설명하겠습니다
해당 기능은 "데이터"가 저장이 되었을때 이므로, 일반적은 controller마다 전부 작성해서 관리하는 방식이 아닌, model 에서 해당 테이블에 대한 기능을 짜두는 방식으로 개발해야 합니다
Rails 공식 active record callback 가이드 문서
https://guides.rubyonrails.org/active_record_callbacks.html
하나씩 살펴보겠습니다.
after_destroy => 데이터가 "삭제" 되자마자 실행될 함수를 선언
after_create => 데이터가 "생성" 되자마자 실행될 함수를 선언
각각 함수의 세부 내용은 사용하시는 용도에 맞게 작성하시면 됩니다.
그러나 주의할 사항이 있습니다!
만일 이 해당 프로젝트 내부에서만 일어나는 것이 아닌, API 를 통해 백엔드 프로젝트를 불러야 하거나 하는 경우에는 조금 다르게 접근할 필요가 있습니다.
트랜잭션 타이밍 문제
after_create는 레코드가 데이터베이스에 저장된 직후에 호출되지만, 트랜잭션이 아직 완료되지 않았을 수 있습니다. MySQL 트랜잭션이 완전히 완료되기 전에 API 요청을 보내면 데이터베이스에 아직 모든 정보가 반영되지 않을 수 있습니다.
해결 방법:
after_commit을 사용해 트랜잭션이 완료된 후에 API 요청을 보낼 수 있습니다.
after_commit은 트랜잭션이 성공적으로 완료된 후에만 실행되기 때문에, 트랜잭션 타이밍 문제를 해결할 수 있습니다.
그러므로 만일 데이터 통신과 같은 기능을 따로 백엔드 프로젝트를 만들어 수행하고 계시다면 after_commit 을 사용하시는 것을 추천드립니다.
'Back-End > Ruby' 카테고리의 다른 글
rails, ruby 역순 정렬, 변수 역순 each문 (0) | 2024.01.02 |
---|---|
관련 데이터 필터링: Ruby on Rails에서 두 번의 조인을 활용한 방법 (0) | 2023.09.15 |
Rails 오류 "You have already activated... " 해결하기 (0) | 2023.09.06 |
rails i18n 하는 방법, rails 언어처리 (5분 내외) (2) | 2022.12.08 |
Rails CRUD - 데이터 저장이 잘 되었는지 확인하는 방법 (0) | 2022.10.03 |