중고 신입이 개발해보기..

rails callback 순서 from chatgpt 본문

Back-End /Ruby On Rails

rails callback 순서 from chatgpt

rootkaien 2025. 3. 6. 16:20

### **🚀 Rails에서 콜백의 실행 순서 (`create` vs `update`)**  
Rails에서 **모델을 생성하거나 업데이트할 때 실행되는 콜백**의 순서는 다음과 같습니다.  

---

## **📌 1️⃣ `create` 시 실행 순서**
```plaintext
1. before_validation
2. after_validation
3. before_create   ✅
4. before_save     ✅
5. DB INSERT 실행 (`save` 진행)
6. after_create    ✅
7. after_save      ✅
```

**💡 정리**
- `before_create`가 `before_save`보다 먼저 실행됨  
- `after_create`가 `after_save`보다 먼저 실행됨  
- `before_save`, `after_save`는 **모든 저장(create & update)에서 실행됨**  

---

## **📌 2️⃣ `update` 시 실행 순서**
```plaintext
1. before_validation
2. after_validation
3. before_update   ✅
4. before_save     ✅
5. DB UPDATE 실행 (`save` 진행)
6. after_update    ✅
7. after_save      ✅
```

**💡 정리**
- `before_update`가 `before_save`보다 먼저 실행됨  
- `after_update`가 `after_save`보다 먼저 실행됨  
- `before_save`, `after_save`는 **모든 저장(create & update)에서 실행됨**  

---

## **🚀 `create` vs `update` 전체 실행 순서 비교**
| 순서 | `create` 시 실행되는 콜백 | `update` 시 실행되는 콜백 |
|------|-------------------|-------------------|
| 1️⃣  | `before_validation` | `before_validation` |
| 2️⃣  | `after_validation` | `after_validation` |
| 3️⃣  | `before_create` ✅ | `before_update` ✅ |
| 4️⃣  | `before_save` ✅ | `before_save` ✅ |
| 5️⃣  | **DB INSERT 실행** | **DB UPDATE 실행** |
| 6️⃣  | `after_create` ✅ | `after_update` ✅ |
| 7️⃣  | `after_save` ✅ | `after_save` ✅ |

---

## **🚀 `before_create`, `before_save`, `before_update`의 차이**
| 콜백 | `create` 시 실행 | `update` 시 실행 | 설명 |
|------|---------------|---------------|------|
| `before_create` | ✅ 실행됨 | ❌ 실행되지 않음 | 레코드가 처음 생성될 때만 실행 |
| `before_update` | ❌ 실행되지 않음 | ✅ 실행됨 | 레코드가 업데이트될 때만 실행 |
| `before_save` | ✅ 실행됨 | ✅ 실행됨 | 모든 저장(`create` & `update`) 시 실행 |

---

## **🚀 `after_create`, `after_save`, `after_update`의 차이**
| 콜백 | `create` 시 실행 | `update` 시 실행 | 설명 |
|------|---------------|---------------|------|
| `after_create` | ✅ 실행됨 | ❌ 실행되지 않음 | 레코드가 처음 생성될 때만 실행 |
| `after_update` | ❌ 실행되지 않음 | ✅ 실행됨 | 레코드가 업데이트될 때만 실행 |
| `after_save` | ✅ 실행됨 | ✅ 실행됨 | 모든 저장(`create` & `update`) 시 실행 |

---

## **✅ 결론**
- **`before_create` → `before_save` → DB 저장 → `after_create` → `after_save`** (Create)
- **`before_update` → `before_save` → DB 저장 → `after_update` → `after_save`** (Update)
- `before_save`, `after_save`는 **모든 저장에서 실행**됨  
- `before_create` / `after_create`는 **`create`에서만 실행**됨  
- `before_update` / `after_update`는 **`update`에서만 실행**됨  

이제 콜백 실행 순서를 완벽하게 이해하고 사용할 수 있습니다! 🚀🔥

Comments