티스토리 뷰
잠든 맥북, 잠든 AI — 밤새 코딩을 맡겼더니 생긴 일
들어가며
요즘 AI가 코드를 짜준다는 말을 많이 들어보셨을 텐데요. 저는 한 발 더 나아가서 AI에게 밤새 혼자 개발을 시켜봤습니다. 자러 가기 전에 시작해두고, 일어나서 결과를 확인하는 방식으로요.
근데 문제가 생겼습니다. AI도 저처럼 잠들어 버린 거예요. 정확히는, 맥북이 슬립 모드에 들어가면서 AI 작업이 멈춰버렸습니다.
이 글은 그 문제를 발견하고 해결한 과정을 담은 이야기입니다.
프로젝트 소개: office2pdf
제가 만들고 있는 프로젝트는 office2pdf입니다.
Word(.docx), PowerPoint(.pptx), Excel(.xlsx) 파일을 PDF로 변환하는 도구인데, 핵심은 순수 Rust로만 구현한다는 점이에요.
기존에 이런 변환을 하려면:
- LibreOffice를 몰래 띄워서 변환 (무겁고 느림)
- Microsoft 클라우드 API 사용 (인터넷 필요, 비용 발생)
- Aspose 같은 상용 라이브러리 (비쌈)
이런 방법밖에 없었어요. Pure Rust 기반의 오픈소스 솔루션은 존재하지 않았습니다. 그래서 직접 만들기로 했습니다.
Ralph: AI 자동 개발 시스템
혼자 다 구현하기엔 양이 많아서, Ralph라는 자동화 스크립트를 만들었습니다.
Ralph가 하는 일은 간단해요:
- 구현할 기능 목록(User Story)을 PRD 파일에 정의
- Claude AI에게 하나씩 구현 요청
- 테스트 통과 확인
- 커밋 후 다음 기능으로 넘어감
- 100번 반복
사람이 없어도 AI가 알아서 기능을 하나씩 구현하고 커밋하는 구조입니다.
자러 가기 전 실행
밤 12시 55분, Ralph를 백그라운드로 실행했습니다.
nohup ./scripts/ralph/run-all.sh phase2 100 > ralph.log 2>&1 &
로그를 보니 착착 진행되더군요.
- 01:06 — US-017 (에러 처리) 구현 완료
- 01:15 — US-018 (폰트 폴백) 구현 완료
- 01:27 — US-019 (리스트 파싱) 구현 완료
빠릿빠릿하게 잘 되고 있길래 안심하고 잠들었습니다.
아침에 일어나서 확인해보니
로그를 봤더니 이렇게 끝나 있었어요.
===============================================================
Ralph Iteration 5 of 100 (claude)
===============================================================Iteration 5에서 멈춰있는 것처럼 보였습니다. 처음엔 "어려운 작업을 만난 건가?" 싶었는데, 프로세스는 살아있었어요.
git 커밋 로그를 보니 이상한 점이 보였습니다:
| 커밋 시각 | 내용 |
|---|---|
| 01:27 | US-019 완료 |
| 06:58 | US-020 완료 |
| 07:12 | US-021 완료 |
US-019에서 US-020으로 넘어가는 데 5시간 30분이 걸린 거예요. US-020 이후로는 다시 빠릿빠릿한데요.
범인은 맥북 슬립
macOS의 전원 로그를 확인해봤습니다.
pmset -g log | grep -E "Sleep|Wake"
2026-02-27 01:33:52 Sleep Entering Sleep state due to 'Idle Sleep'
2026-02-27 01:47:56 DarkWake (유지보수용 잠깐 깨어남)
2026-02-27 01:48:41 Sleep 다시 슬립
...
(이후 15~20분 간격으로 DarkWake 반복)01:33에 맥북이 슬립에 들어갔습니다. 제가 잠들고 6분 뒤였어요.
슬립 중에는 DarkWake라는 상태로 15~20분마다 잠깐 깨어나서 유지보수 작업(백업, 네트워크 갱신 등)은 하지만, Claude API 호출 같은 작업은 제대로 진행되지 않았던 거예요.
결국 AI도 저랑 같이 잠든 셈이었습니다.
해결법: caffeinate
macOS에는 caffeinate라는 내장 명령어가 있습니다. Apple이 공식으로 제공하는 툴로, macOS 10.8부터 /usr/bin/caffeinate에 기본 포함되어 있어요.
이름 그대로 맥북에게 커피를 먹여서 잠 못 자게 하는 명령어입니다.
nohup caffeinate -w 80026 &
-w 80026— PID 80026번 프로세스(Ralph)가 살아있는 동안만 슬립 방지nohup ... &— 백그라운드에서 실행
실제로 적용됐는지 확인:
pmset -g assertions | grep caffeinate
pid 94575(caffeinate): PreventUserIdleSystemSleep
Details: caffeinate asserting on behalf of Process ID 80026Process ID 80026을 대신해서 슬립을 막고 있다는 메시지가 뜨면 성공입니다.
교훈
백그라운드 작업을 장시간 돌릴 때는 꼭 caffeinate를 함께 실행하세요.
처음부터 이렇게 실행했으면 됐습니다:
nohup caffeinate -i ./scripts/ralph/run-all.sh phase2 100 > ralph.log 2>&1 &
-i 옵션은 프로세스가 끝날 때까지 CPU 슬립을 방지합니다.
마무리
AI에게 밤새 개발을 맡기는 건 충분히 가능합니다. 다만 맥북이 잠들지 않도록 설정하는 걸 잊지 마세요.
저도, AI도, 맥북도 같이 잠드는 사태는 이제 없을 것 같습니다.
'기타' 카테고리의 다른 글
| SRP (Single Responsibility Principle) 원칙 (0) | 2026.02.23 |
|---|---|
| linux 서버 계정 생성 및 Claude Code 설치 스크립트 (0) | 2026.02.19 |
| Claude Code 로 개발한 내 개인 사이트 0hye.com (0) | 2026.02.15 |
| 실제로 활발히 사용되는 프로그램 개발에 Claude Code를 사용한 사례, 오랜만에 Yolo_Label 프로젝트 업데이트 (0) | 2026.02.14 |
| Claude Code Permission이 작동하지 않는 이유: `:*` vs ` *` 패턴 문제 (1) | 2026.02.14 |
- Total
- Today
- Yesterday
- 백준 11437
- 이분탐색
- FairMOT
- PyCharm
- 단축키
- 백준 11053
- 파이참
- 인공지능을 위한 선형대수
- 위상 정렬 알고리즘
- cosine
- 자료구조
- 조합
- 순열
- 문제집
- 가장 긴 증가하는 부분 수열
- C++ Deploy
- Lowest Common Ancestor
- MOT
- 백준 1766
- LCA
- 백트래킹
- ㅂ
- 백준
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |

