Hibernation이란
Laravel Cloud의 **Hibernation (자동 휴면)**은 일정 시간 HTTP 요청이 없는 경우에 환경을 휴면 상태로 이행시키는 예전 기능입니다.현재의 새로운 Flex 컴퓨트에서는 보다 고속인 Scale to Zero가 후속으로 사용됩니다. Legacy Flex의 Hibernation은 휴면 중의 컴퓨트 과금을 멈출 수 있는 한편, HTTP 요청을 받은 후 복귀에 통상 5~20초가 걸립니다. 새로운 Scale to Zero에서는 기동이 500ms 미만까지 단축되었고, 게다가 슬립 중에도 스케줄 태스크나 큐 처리를 위해 환경이 자동으로 기동합니다.
Scale to Zero로 바뀐 점
새로운 Flex 컴퓨트의 Scale to Zero에서는 이전의 Hibernation에서 과제였던 점이 상당히 해소되어 있습니다.| 항목 | 예전 Hibernation | 새로운 Scale to Zero |
|---|---|---|
| HTTP 요청에서의 복귀 | 5~20초 | 500ms 미만 |
| Scheduled Tasks | 휴면 중에는 동작하지 않음 | 슬립 중에도 자동 기동하여 실행 |
| 큐 처리 | 휴면 중에는 동작하지 않음 | 슬립 중에도 자동 기동. Managed Queues 병용 권장 |
| 권장 용도 | 구 Flex 환경의 절약 운용 | 현재의 표준 구성 |
이전의 Hibernation에서는 휴면 중에 태스크 스케줄이나 큐가 동작하지 않는 문제가 있었습니다. Scale to Zero에서는 이 문제가 해소되어, 특히 큐 처리는 Managed Queues를 사용하면 App cluster가 자고 있어도 안전하게 계속할 수 있습니다.
구 Hibernation의 활성화 절차
구 Hibernation 휴면 중의 제한 사항
Hibernation이 유효하고 환경이 휴면 중인 동안에는 이하의 기능이 동작하지 않습니다.| 기능 | 휴면 중의 동작 |
|---|---|
| HTTP 요청 처리 | 정지 (복귀 후에 처리) |
| Task Scheduler | 실행되지 않음 |
| Queue Worker | 실행되지 않음 |
| 커스텀 백그라운드 프로세스 | 실행되지 않음 |
휴면에서 복귀하면 이 처리들은 자동으로 재개됩니다. 다만 휴면 중에 “왔어야 할” 스케줄의 잡이 소급되어 실행되는 일은 없습니다.
- Flex 컴퓨트만 휴면이 가능합니다. Pro 컴퓨트에서는 Hibernation을 활성화할 수 없습니다.
- 휴면은 환경 단위로 수행됩니다. App cluster가 휴면하면, 같은 환경 내의 모든 Worker cluster도 휴면합니다.
불필요한 복귀의 원인
HTTP 요청이 있으면 환경은 자동으로 복귀하지만, 의도치 않은 요청에 의해서도 복귀가 발생합니다.- 봇 · 크롤러 — 검색 엔진이나 보안 스캐너 등이 자동으로 페이지를 크롤링
- Slack이나 Teams의 링크 프리뷰 — 메시징 앱이 링크의 썸네일 취득을 위해 액세스
- WordPress 스캔 — WordPress 환경을 찾는 자동 스캔이
/wp-admin등에 액세스 .php파일을 찾는 공격 — PHP 파일을 직접 노리는 자동 스캔
*.laravel.cloud 도메인은 검색 엔진에 인덱스되지 않도록 X-Robots-Tag: noindex, nofollow 헤더가 부여되지만, 도메인이 발견되어 버리면 다 막을 수는 없습니다. 커스텀 도메인에서는 noindex 헤더가 부여되지 않습니다.
Path Blocking으로 불필요한 복귀 방지
Path Blocking은 특정 확장자나 경로로의 요청을 휴면 상태 그대로 처리하지 않고 차단하는 기능입니다. WordPress 스캔이나 PHP 파일을 노린 공격 요청에 의한 불필요한 복귀를 방지합니다. 기본으로 차단되는 확장자와 경로는 다음과 같습니다. 차단되는 확장자:Laravel의 일반적인 라우팅에서는
.php 확장자가 붙은 요청은 사용하지 않으므로, 이것들을 차단해도 앱의 동작에 영향은 없습니다.구 Hibernation이 적합한 용도 · 부적합한 용도
적합한 용도
- 스테이징 · 개발 환경 — 상시 가동이 불필요하므로 비용을 대폭 절감 가능
- 개인 블로그 · 포트폴리오 — 트래픽이 적어도 되는 용도
- 데모 · 시험용 앱 — 필요할 때만 복귀하면 충분
- 저빈도 사내 도구 — 사용 시간이 제한되어 있음
부적합한 용도
- 태스크 스케줄을 사용하는 용도 — 휴면 중에는
schedule:run이 실행되지 않음 - 정기적인 큐 잡이 필요한 용도 — 휴면 중에는 큐도 정지함
- 기동 레이턴시가 허용되지 않는 프로덕션 환경 — 복귀에 5~20초 걸림
- WebSocket을 사용하는 앱 — 접속이 유지되지 않고 휴면도 지연될 수 있음
새로운 Scale to Zero에서는 이 제약이 완화되어 있습니다. Scheduled Tasks는 슬립 중에도 자동 실행되며, 큐 처리도 Managed Queues를 사용하면 App cluster의 휴면에 영향받지 않습니다.
정리
Hibernation은 Legacy Flex에서는 지금도 비용 절감에 사용할 수 있지만, 현재는 Scale to Zero 쪽이 실용적입니다.- Legacy Flex에서는 가동 시간에만 과금. 타임아웃 후에 자동 휴면.
- 구 Hibernation의 복귀 시간은 5~20초.
- 새로운 Scale to Zero는 500ms 미만에 기동함.
- Scale to Zero에서는 Scheduled Tasks와 Managed Queues가 슬립 중에도 동작함.
- Path Blocking으로 봇에 의한 불필요한 복귀 방지.
- Flex 컴퓨트만 대응.
관련 페이지
스케줄링
Task Scheduler의 설정과 Laravel Cloud에서의 동작을 확인합니다.
큐
Queue Worker의 설정과 Laravel Cloud에서의 운용 방법을 확인합니다.
Laravel Cloud 전체 상
Managed Queues, Scale to Zero, 새 요금 플랜을 함께 확인합니다.