3419 단어
17 분
강성울음에 지친 개발자 아빠가 조립한 아기 재우기 알고리즘: 수면의식 앱 '잠잠' 제작기 (feat. Claude Fable)

전쟁 같은 아이 재우기#

생후 6주 아기를 재우는 건 매일 밤 치르는 작은 전쟁입니다. 눕히면 등이 닿자마자 울고(기가 막힌 감도의 등센서), 안으면 자는 척하다가 눕히면 다시 격하게 웁니다. “적당히 울게 놔둬도 괜찮다”길래 10분 지켜봤더니 초강성울음으로 진화해서 결국 다시 안아 들고, 열심히 달래서 잠잠해졌기에 눕혔더니 또 자지러지게 울고. 혹시나 해서 기저귀를 열어보니 그새 대변을 시원하게 보셨더군요. 갈아주니 잠시 평온한 얼굴이다가 또 울음이 터집니다. 쪽쪽이를 물려도 잠시뿐, 배가 아픈가 싶어 배를 쓰다듬고 토닥이며 온 집을 스무 바퀴쯤 돌다가 문득 시계를 보니 달래기 시작한 지 한 시간. 마지막 수유로부터 두 시간이 지났길래 혹시나 젖병을 물려보니 쭉쭉 들어갑니다. 먹다가 눈이 감기길래 이때다 싶어 얼른 눕혔는데, 잠시 뒤 켁켁거리며 우는 소리에 가보니 분유를 게워낸 흔적이. 닦아주고 다시 안아 올려 트림을 시키고… 다시 처음부터.

이런 밤이 반복되니 부부의 다크서클은 깊어지고 아기는 점점 예민해졌습니다. 어느 날은 재우는 데만 두 시간이 넘게 걸렸습니다. 밤이 깊어질수록 이웃집에 소음으로 죄송한 마음에 불안하기도 했고요.

왜 이렇게 오래 걸리고, 아이도 부모도 힘들었을까. 회고해보니 두 가지로 요약됐습니다.

  1. 100dB로 우는 아이 앞에서 뇌정지가 와서, 당황한 나머지 울음의 진짜 원인을 놓쳤다.
  2. 잘못됐거나 기계적인 대응에 쓸데없는 노력을 쏟다가 지쳤다.

필요한 건 시끄럽게 우는 아기 앞에서 평정심을 유지한 채, 현재 맥락 안에서 빠르게 원인을 찾고 일관된 루틴과 진정 전략을 밀어붙이는 것이었습니다. 그런데 실제로는 “아이고, 일단 안아주고 토닥토닥부터 해보자”라며 습관대로 움직이거나, 원인을 잘못 짚고 삽질을 하고 있었던 겁니다.

유튜브·책 선생님의 조언과 실시간 강성울음 사이의 갭#

유튜브에서는 적당히만 달래고 놔둬도 괜찮다고 합니다. 그런데 왜 우리 아기는 놔두면 강성울음으로 진행되기만 할까요? 영상과 책의 조언은 일반론이라, 지금 눈앞에서 자지러지게 우는 아이에게 무엇부터 체크하고 어떻게 달래야 하는지, 맥락에 맞게 특정된 답을 주지는 못합니다.

고민 끝에 내린 결론은 이렇습니다. 핵심은 당장 해결이 필요한 울음(편의상 문제해결 울음이라고 부르겠습니다)의 원인을 빠르게 제거해서, 과각성과 피곤으로 인한 울음 — 즉 잠투정만 남기는 것. 그리고 잠투정에는 현명하게 기다리거나 최소한의 개입(진정계단)만 해서, 아이가 스스로 울음을 그치는 능력을 길러주는 것.

문제는 아직 울음 번역이 서툰 초보 부모는 이 둘을 자주 헷갈린다는 겁니다. 잠투정인데 열심히 달래면 아이는 더 피곤해져서 더 웁니다. 둘 다 얻는 것 없이 힘들기만 하죠. 반대로 문제해결 울음인데 잠투정인 줄 알고 방치하면, 아이는 불편을 계속 감내해야 하니 더 악을 쓰며 울고, 애착도 조금씩 깎여나갈 겁니다. 가장 모호한 건 배에 가스가 차는 등 속이 불편해서 우는 경우입니다. 잠투정은 아닌데 원인이 겉으로 드러나지 않으니까요. 그리고 마음 한켠엔 더 무거운 두려움도 있었습니다. 정말 아파서 우는 건데 잠투정으로 넘겨서, 병원에 늦게 가게 되면 어쩌지.

그래서 수면 루틴도 일정하게 잡을 겸, 상황별 체크 항목을 놓치지 않도록 알고리즘 순서도를 만들기로 했습니다. 육아서와 소아과 자료를 찾고 실전 시행착오를 녹여서, 클로드와 함께 우리 집 재우기 순서도를 완성했습니다. 목욕부터 마지막 수유, 눕히기, 울음 대응, 병원에 가야 하는 위험 신호까지 담은 꽤 정교한 순서도였고, 실제로 효과도 있었습니다. 울음 총량이 1시간에서 20분으로 줄었으니까요.

그런데 치명적인 문제가 하나 있었습니다. 순서도를 직접 그리면서 내용을 머릿속에 넣은 저는 기억을 더듬어가며 대응할 수 있었지만, 아내는 그 복잡한 순서도를 일일이 보면서 대응은 못 하겠다고 하더라고요. 생각해보면 당연했습니다. 우는 아기를 안은 채로 분기가 수십 개인 순서도를 읽을 수 있는 사람은 없습니다.

그렇다면 답은 하나였습니다. 이 순서도를 웹앱으로 만들어서, 현재 상태에서 넘어갈 수 있는 선택지만 화면에 노출하는 것. 여기에 실시간 맥락 정보(마지막 수유 시각, 트림 재시도 여부, 누적 강성울음 시간)에 따라 선택지를 더 적절하게 좁혀준다면 금상첨화고요.

나만의 문제가 아니잖아?#

곰곰이 생각해보니 이건 우리 집만의 문제가 아니었습니다. 이 시기의 부모라면 누구나 같은 스트레스를 겪습니다. 아기가 왜 우는지 모르겠고, 지금 개입해야 하는지 기다려야 하는지 모르겠고, 이 울음이 병원에 가야 하는 울음인지 확신이 없는 상태로 밤을 버팁니다.

기존 앱들도 찾아봤습니다. 수면 기록·낮잠 예측 앱, 몇 주짜리 수면교육 코스 앱, AI 울음 분석 앱, 백색소음 앱까지 시장은 이미 붐볐지만, 정작 “지금 우는 아기 앞에서 다음 한 걸음”을 알려주는 앱은 없더군요. 기록은 과거고 예측은 미래인데, 부모가 무너지는 건 언제나 현재였습니다.

그래서 우리 집 검증용으로 끝내지 않고, 같은 밤을 보내는 부모라면 누구나 쓸 수 있게 만들기로 했습니다. 원칙은 하나 — 순서도를 “읽는 문서”가 아니라 “따라가는 인터랙션”으로 바꾸자. 부모는 판단하지 않고, 화면에 뜬 큰 버튼 중 하나만 누르면 되게 하자.

자료 모으기: 근거 없는 육아 팁은 사절#

만들기 전에 원칙을 하나 세웠습니다. 앱이 하는 모든 안내에는 출처가 붙어야 한다는 것. 부모가 가장 취약한 시간에 쓰는 도구가 “카더라”여서는 안 되니까요.

베이스는 『똑게육아』였습니다. 여기에 눕힌 뒤 10~20분 정도의 칭얼거림은 정상 범위라는 대한소아청소년과학회 안내, 3개월 미만 아기의 병원 방문 기준(Seattle Children’s), 하비 카프 박사의 진정 기법, NHS·KidsHealth의 트림·역류 가이드까지 자료를 모아 세컨드 브레인에 노트로 쌓았습니다. 도중에 배운 것 하나 — 육아서가 “○○학회에 따르면”이라고 인용한 문장도 원문을 찾아보면 출처가 확인되지 않는 경우가 있어서, 앱에 넣는 숫자는 전부 기관 원문까지 거슬러 올라가 검증했습니다. 읽으면서 “칭얼거림은 어디까지 두고 보나”, “울음이 몇 분을 넘으면 개입하나” 같은 애매한 지점들을 전부 숫자로 확정해 나갔습니다.

구현: Claude Fable과 딸깍#

여기서부터가 재미있는 부분입니다. 구현 과정은 사실상 문서 3개를 만드는 일이었습니다.

1단계 — 순서도를 mermaid 다이어그램으로. 앞서 만든 우리 집 재우기 순서도가 이 단계의 산출물입니다. 노트에 글로 흩어져 있던 루틴을 mermaid 순서도로 변환했는데, 그리는 과정에서 “원인 체크에서 못 찾으면 어디로 가지?” 같은 빠진 분기가 그대로 드러나서 다이어그램 자체가 디버깅 도구 역할을 했습니다.

2단계 — 순서도를 상태 머신으로. 순서도는 사람이 읽는 그림이고, 앱이 실행하려면 상태 머신이 필요합니다. 각 화면을 상태로, 부모의 버튼 입력을 이벤트로, 시간 조건을 타이머로 정의했습니다. 핵심 골격만 보면 이렇습니다.

stateDiagram-v2
[*] --> 준비: 목욕→기저귀→이동→수유→트림
준비 --> 눕히기
눕히기 --> 관찰
관찰 --> 잠듦: 잠들었음 확인
관찰 --> 원인체크: 칭얼거림 10분 경과
관찰 --> 위험신호확인: 강성울음
위험신호확인 --> 응급: 위험신호 발견
위험신호확인 --> 원인체크: 이상 없음
원인체크 --> 눕히기: 원인 해결
원인체크 --> 진정계단: 원인 미발견
진정계단 --> 눕히기: 진정됨
진정계단 --> 교대: 누적 강성울음 30분

이 단계에서 “칭얼거림 관찰은 10분”, “부모 교대는 누적 강성울음 30분”, “연속 울음 2시간이면 병원” 같은 파라미터를 근거 출처와 함께 표로 못 박았습니다. 출처를 찾지 못한 값은 “우리 집에서 해보니 괜찮더라”로 두지 않고, 공신력 있는 자료의 범위 안으로 조정했습니다.

3단계 — 구현 프롬프트 작성. 상태 머신 스펙과 컨셉 문서를 AI 코딩 에이전트에게 그대로 투입할 수 있는 프롬프트 하나로 압축했습니다. 기술 스택은 과감하게 제한했습니다. 단일 index.html, 바닐라 JS, 프레임워크·빌드·서버·외부 요청 전부 금지. 대신 타협 불가 제약을 명시했습니다 — 타이머는 timestamp 차이로 계산해서 화면 잠금 중에도 정확할 것, 상태 전이마다 localStorage에 저장해서 새로고침해도 세션이 복구될 것, 어두운 침실에서 아기가 깨지 않게 저휘도 다크 테마일 것.

4단계 — “구현해줘” (딸깍). 이 프롬프트를 Claude Fable에게 넘겼습니다. 설계 문서가 촘촘하니 구현은 정말로 딸깍에 가까웠습니다. 상태 머신 로직 테스트 60건과 실제 화면 클릭 워크스루 36건을 통과한 단일 HTML 파일이 나왔고, Cloudflare Workers에 올렸습니다.

돌아보면 시간의 대부분은 코딩이 아니라, 책과 인터넷에서 자료를 수집하고 문제를 상태 머신으로 잘 정의하는 데 들어갔습니다. AI 코딩 시대의 MVP 개발이란 결국 “무엇을 만들지 정확히 아는 것”이 대부분이구나 싶었습니다.

잠잠, 써보세요#

그렇게 나온 앱이 잠잠(JamJam) 입니다. “잠”과 “잠잠해지다”의 이중 의미입니다.

👉 jamjam.johnnykim-guitar.com

  • 화면에는 항상 “지금 할 일 하나”만 보여줍니다. 부모는 아기 상태 버튼(조용함/딸꾹질/칭얼거림/강성울음)만 누르면 됩니다.
  • 타이머 3종을 자동 집계합니다: 마지막 수유 후 경과, 누적 강성울음(교대 기준 30분), 연속 울음(병원 기준 2시간). 시계를 볼 필요가 없습니다.
  • 모든 가이드 화면 하단에 출처가 붙어 있습니다. 의심되면 눌러서 원문을 확인하세요.
  • 로그인도 서버도 없습니다. 새벽에 실수로 새로고침해도 세션이 이어집니다.

물론 의료 조언이 아니며, 위험 신호가 보이면 앱이 아니라 병원입니다. 앱에도 같은 고지가 들어 있습니다.

마치며#

이 앱을 쓴다고 당장 아기가 곯아떨어져 자는 건 아닙니다. 아기는 여전히 웁니다. 다만 새벽 세 시에 “내가 지금 뭘 해야 하지”라는 판단의 무게를 앱에 내려놓을 수 있다면, 그만큼 부모의 멘탈은 덜 털립니다.

같은 시기를 지나고 있는 부모님들, 오늘 밤도 무사히. 조금이라도 덜 털리시기를 기원합니다. 🌙

강성울음에 지친 개발자 아빠가 조립한 아기 재우기 알고리즘: 수면의식 앱 '잠잠' 제작기 (feat. Claude Fable)
https://johnnykim-guitar.com/posts/jamjam-sleep-app/
저자
좌니킴 Johnny Kim
게시일
2026-07-17
라이선스
CC BY-NC-SA 4.0