단식 타이머만 있으면 될 줄 알았습니다

2026년 4월 · 간헐적 단식 앱을 만드는 개발자의 비하인드

header

아내가 출산 후에 간헐적 단식을 시작했습니다. 공복 시간 세는 게 귀찮다기에 타이머 앱을 하나 만들어줬습니다. 시작 버튼, 원형 타이머, 종료 알림. 깔끔하게 세 가지만 넣었고, 이게 전부라고 생각했습니다.

2주 만에 깨졌습니다.

“매일 체중계에 올라가긴 하는데”

아내가 2주쯤 지났을 때 그러더라고요. 매일 체중계에 올라가긴 하는데, 어디 적어두는 게 아니니까 일주일 전이랑 비교할 수가 없다고.

듣고 보니 당연한 건데 저는 생각을 못 했습니다. 타이머 로직 만드느라 바빴거든요. 실제로 매일 단식하는 사람한테 필요한 건 "지금 몇 시간째"가 아니라 "그래서 나한테 뭐가 달라졌는데?"였습니다. 시계는 잘 가는데 달력이 없는 셈이었어요.

그래서 제일 먼저 체중 기록을 넣었습니다.

ko_02_diary_top

체중 기록 자체는 별 거 아닙니다. 숫자 넣고 저장하면 끝이니까요. 근데 매일 쓰는 사람 입장에서 디테일이 의외로 중요했습니다.

어제 52.3kg을 기록했으면 오늘 열 때 52.3이 미리 채워져 있습니다. 변동 없으면 저장만 누르면 되고, 0.1~0.2 바뀌었으면 그것만 고치면 됩니다. 별것 아닌 것 같은데, 매일 아침 체중계에서 내려와서 처음부터 숫자를 입력하는 건 사소하지만 귀찮거든요. 이 기본값 하나 때문에 기록이 끊기지 않았다고 봅니다.

저장하면 어제 대비 변화량이 바로 뜹니다. “▼0.2” 이런 식으로요. BMI도 자동 계산돼서 컬러 게이지 바로 내가 어디쯤인지 한눈에 보입니다. 아내는 이 초록색 바가 유지되는 게 뿌듯하다고 하더라고요.

연속 기록 일수도 보여줍니다. "14일 연속"처럼요. 게임의 출석체크 같은 건데, 보상은 없지만 한번 쌓이면 깨기 싫어지는 묘한 효과가 있습니다.

근데 여기서 하나 에피소드가 있습니다. 아내가 어느 날 체중이 0.2kg 올라간 걸 보고 풀이 죽어 있었거든요. 0.2kg이요. 물 한 잔 차이인데. 그래서 고민을 꽤 했습니다. 체중 변화를 보여주는 게 동기부여가 되는 사람이 있고, 반대로 작은 증가에 좌절하는 사람도 있으니까요. 결국 0.2kg 정도의 흔들림은 수분이나 식사 시간에 따른 자연스러운 변동이라는 맥락을 함께 보여주는 방향으로 갔습니다. 숫자만 던져놓으면 독이 될 수 있지만, 맥락이 있으면 괜찮더라고요.

잠을 못 자면 공복이 유난히 힘듭니다

체중 기록을 넣고 나니 바로 다음 질문이 따라왔습니다. “어젯밤 잠을 못 잤더니 오늘 단식이 유난히 힘들어.”

저도 경험한 적 있습니다. 똑같은 16시간인데 어떤 날은 점심까지 거뜬하고, 어떤 날은 오전 11시에 이미 무너질 것 같거든요. 뭐가 다른 걸까 생각해보면 대부분 전날 수면이 안 좋았던 날이에요. 수면 부족이 그렐린(배고픔 호르몬)을 올리고 렙틴(포만감 호르몬)을 낮춘다는 연구도 있고요.

그래서 수면 카드를 넣었습니다. 취침 시간, 기상 시간, 수면 품질. 끝.

처음에는 수면 품질을 5단계로 만들었습니다. 근데 아내한테 테스트시켰더니 "나쁨이랑 매우 나쁨 차이가 뭔데?"라고 하더라고요. 맞는 말이었습니다. 아침에 눈 뜨자마자 수면 품질을 5단계로 정밀하게 평가할 사람은 없습니다. 3단계로 줄였습니다. 좋음, 보통, 나쁨. 이모지 하나 탭하면 끝.

취침-기상 시간도 어제 기록이 미리 채워져 있습니다. 생활 패턴이 크게 안 바뀌면 그냥 저장만 누르면 돼요.

그리고 수면 기록을 어느 날짜에 귀속시킬지가 은근히 골치 아팠습니다. 밤 11시에 자서 아침 7시에 일어났으면, 이건 어제 꺼인가 오늘 꺼인가? 결론은 기상일 기준. 아침에 일어나서 기록할 때 “오늘” 날짜에 들어가는 게 자연스럽거든요. 별것 아닌 것 같지만, 이걸 잘못 정하면 매일 아침마다 “이거 어제 날짜 아니야?” 하고 헷갈립니다.

물 한 잔을 기록하는 데 3초

수분 기록은 사실 처음에 넣을 생각이 없었습니다.

간헐적 단식을 하면 먹는 게 없으니까, 식사와 함께 자연스럽게 마시던 물도 줄어듭니다. 저는 원래 물을 잘 안 마시는 편인데, 단식 중에는 더 심해져서 어느 날은 하루 종일 커피 한 잔이 전부였습니다. 그날 오후에 두통이 왔어요. 아내한테 "물을 좀 마셔야 하는 거 아니냐"고 했다가 "그러면 기록하게 해달라"는 답이 돌아와서 추가했습니다.

ko_03_diary_bottom

수분 기록에서 가장 신경 쓴 건 속도입니다. 물 한 잔 마시고 앱 열어서 기록하는 데 10초 넘게 걸리면 아무도 안 합니다. 음료 종류 5개 — 물, 커피, 차, 탄산수, 직접입력 — 아이콘 탭 한 번이면 바로 기록됩니다. 용량은 슬라이더로 조절할 수 있고 기본값은 250ml.

원형 프로그레스 링이 채워지는 게 은근히 효과가 있습니다. 목표 2,000ml 중 1,500ml를 마시면 75%가 차 있는 링이 보이는데, 나머지 25%를 채우고 싶어집니다. 기록 앱에서 시각적 피드백은 정보 전달보다 동기부여 역할이 더 크다는 걸 이걸 만들면서 알게 됐습니다.

컨디션은 기분이 아니라 몸 상태입니다

체중, 수면, 수분까지 넣었는데 아내가 또 한마디 했습니다. “오늘 유난히 짜증이 나는데, 단식 때문인지 잠 못 잔 건지 모르겠어.”

컨디션이라는 게 주관적이라서 기록해봤자 의미가 있나 고민했는데, 나중에 패턴을 볼 때 꽤 쓸모가 있더라고요. 단식 시간은 똑같은데 컨디션이 바닥인 날이 있으면, 그 원인을 수면이나 수분에서 찾을 수 있으니까요.

처음에 "기분"이라고 이름 붙였다가 바꿨습니다. 단식 앱에서 감정 일기를 쓸 이유는 없고, "오늘 몸이 어떤가"를 기록하는 게 맥락에 맞으니까요. 5단계 이모지로 만들었습니다. 수면은 5단계가 너무 많았지만, 컨디션은 하루 중에도 여러 번 바뀌는 거라 5단계가 적당했습니다. 실제로 스크린샷을 보면 오전 7:30에 "아주 좋음"이었다가 오후 3:20에 "좋음"으로 바뀐 타임라인이 보입니다.

기록이 쌓이면 패턴이 보입니다

이게 진짜 재미있어지는 건 일주일 정도 지나서부터입니다.

ko_04_insight_top

인사이트 탭에 요일별로 단식 시간, 컨디션, 수면, 수분이 나란히 보입니다. “5/7회, 평균 16.4시간” 같은 주간 요약 아래로 요일별 상세가 펼쳐지는데, “수요일에 컨디션이 유독 안 좋았네. 그날 수분이 60%밖에 안 됐고 수면도 5시간이었구나” — 이런 연결고리가 누가 알려주는 게 아니라 기록을 나란히 놓으면 스스로 보입니다.

매일 습관 스트릭도 여기 있습니다. 수분 7일, 체중 14일, 컨디션 10일 — 항목별로 따로 집계돼서 어떤 기록이 잘 유지되고 있는지, 어디가 빠지기 쉬운지도 한눈에 들어옵니다.

간헐적 단식 기록의 진짜 가치는 여기 있었습니다. 타이머가 알려주는 건 "오늘 16시간 했다"인데, 다이어리가 알려주는 건 "왜 어떤 날은 쉽고 어떤 날은 힘든지"거든요.

사실 인사이트를 만들면서 가장 고민했던 건 자동 분석을 넣을까였습니다. “수면이 6시간 미만인 날 컨디션이 평균 1.5점 낮습니다” 같은 자동 코멘트요. 결론적으로 아직 안 넣었습니다. 데이터가 충분히 쌓이지 않은 상태에서 섣부른 분석은 오히려 오해를 줄 수 있어서, 일단 데이터를 나란히 보여주고 패턴은 본인이 발견하는 방식으로 갔습니다. 이 부분은 솔직히 좀 아쉽습니다.

아쉬운 것들

다 좋은 이야기만 하면 이상하잖아요.

2주 이상의 장기 트렌드가 아직 약합니다. 주간 단위로는 잘 보이는데, 한 달간 체중과 수면의 상관관계 같은 건 아직 못 보여줍니다. 자기관리 루틴이 정말 효과가 있는지 확인하려면 최소 한 달은 봐야 하는데, 거기까지는 아직 못 갔어요.

그리고 안드로이드 전용입니다. 아내는 안드로이드를 쓰니까 문제없었는데, iOS 쓰시는 분들한테는 죄송합니다. 솔직히 혼자 만들다 보니 양쪽 동시에는 어렵고, 안드로이드부터 제대로 만든 다음에 넘어갈 생각입니다.

매일 쓰고 매일 고치고 있습니다

각각 따로 보면 대단한 기능이 아닙니다. 체중 기록 앱, 수분 추적 앱, 수면 기록 앱은 이미 따로 있으니까요.

다만 간헐적 단식을 하는 사람한테는 이것들이 따로 놀면 의미가 반감됩니다. “오늘 단식 16시간 했고, 체중은 0.2 빠졌고, 물은 75% 마셨고, 잠은 8시간 잤다” — 이게 같은 날 같은 화면에 있어야 내일 뭘 조절할지가 보이거든요.

아내와 매일 쓰고 있습니다. 불편한 게 생기면 그날 밤에 고칩니다. 이 앱 뒤에는 매일 직접 쓰면서 고치는 사람이 있습니다. 그게 유일한 차별점일지도 모르겠습니다.


간헐적 단식을 하면서 하루를 한 곳에 기록하고 싶으신 분이라면, 한번 써보셔도 좋을 것 같습니다.

👉 케톤 — Play Store에서 보기

소중한 시드에 안전벨트를 채워주자!

레버리지 거래를 하다 보면 어느 순간 스탑로스가 걸려있지 않다는 걸 뒤늦게 깨닫습니다. 손실이 커지면 커질수록 손절은 점점 어려워지고 어느 순간 그저 내 포지션을 살려주세요 하는 기도 매매가 됩니다. 운이 좋다면 살아남겠지만 운이 나쁘다면 결국 청산 또는 복구하기 힘든 큰 손실로 나오게 됩니다.

이전 글(인사이트 탭)에서 저는 인사이트 탭을 통해 내 매매를 객관화 하고 다양한 인사이트를 얻는 목표를 달성하였습니다.

하지만 이것만으로 제 안 좋은 매매 습관을 고치기에는 역부족이었습니다.

그래서 이번에는 보다 직접적으로 나의 안 좋은 매매 습관을 고치기 위한 기능, 특히 스탑로스를 통한 리스크 관리를 유도하는 기능을 조종석 탭을 통해 추가해보았습니다.

이번 글에서는 이 과정에서 제가 했던 고민들과 해결 방법을 정리해보았습니다.

조종석 탭

나의 안 좋은 매매 습관

먼저 저의 안 좋은 매매 습관을 정리해 보았습니다.

  1. 스탑로스(SL - Stop loss)를 설정하지 않거나, 설정 하더라도 이를 수시로 미루고 감당할 수 없는 손실로 매매를 마무리
  2. 충분한 수익권에 있었음에도 더 큰 수익을 기대하다가 결국 손실로 매매를 마무리
  3. 고레버리지를 사용해서 리스크가 큰 상황임에도 스탑로스를 너무 길게 잡음

문제 1. 손실 회피 심리

우리가 포지션에 진입할때는 나름의 근거를 가지고 방향을 정해서 들어가게 됩니다. 그렇기 때문에 손절을 한다는 것은 나의 판단이 틀렸다는걸 인정하는 것이 됩니다. 동시에 손절을 하지 않으면 청산이 되기 전까지는 아직 손실이 확정이 되진 않습니다.

차트는 대부분 원웨이가 아닌 상승과 하락을 반복하며 움직이기 때문에 아직 포지션이 살아만 있다면 이것은 언젠가 살아 나갈 수 있다, 심지어 수익으로 돌아나올 수도 있다라는 희망과 연결이 됩니다. 그리고 대부분은 이런 경험이 한번씩 있기에 이는 우리에게 나가야 하는 순간에 손절을 망설이게 하는 강력한 걸림돌이 됩니다.

손실 회피 심리를 막아보자.

희망이란 이름으로 둔갑한 손실 회피 심리를 극복하기 위한 방법이 뭐가 있을까 하고 고민을 참 많이 해보았는데요. 아주 기본적인 것들을 떠올리고 적용해보았습니다.

먼저 스탑로스를 손실을 확정 짓는 장치라고 생각하지 말고 나의 시드를 안전하게 지켜주는 안정장치라고 인식 시키는 UI를 생각했습니다.

스탑로스 넛지

그래서 저는 이렇게 시도해보았습니다.

포지션에 스탑로스가 걸려있지 않으면 리스크 관리와 관련된 격언을 노출 시켜주고, 시드에 안전벨트를 채워주세요라는 문구를 통해 스탑로스를 손절이 아닌 안전장치로 긍정적인 리프레이밍을 시도해주었습니다.

일단 스탑로스가 설정이 되면 이후엔 차트에서 시선을 떼고 현재 가격을 스탑로스, 진입 지점, 목표가 세개의 기준을 가지고 게이지 형태로 노출하고, 차트 보단 워블리 로켓에서 가격의 이동을 볼 수 있도록 합니다.

차트를 계속 보게되면 가격이 손실 지점에 있을 때 자꾸 손절 지점 너머에 있는 반대 근거를 찾아가며 손절라인을 미루거나 스탑로스를 없애고 싶은 충동에 빠지게 됩니다. 따라서 포지션에 진입하면 손절 또는 익절이 되기 전까진 차트를 보는 횟수를 줄여야 합니다.

차트 대신 스탑로스, 진입가, 목표가 기준의 게이지로 가격 위치를 표시

물론 차트를 보고 실시간 대응을 하는것도 중요하다고 볼 수 있겠지만, 저의 경우엔 대부분의 경우 손절을 늦추는 결과로 이어지는 경우가 대부분이였고, 차트의 움직임을 보고 대응을 한다 하더라도 차라리 빠르게 손절을 하고 다시 포지션을 잡는게 더 좋은 결과로 이어지는 경우가 많았습니다.

문제 2. 욕심

충분한 수익권에 도달 했음에도 한번에 아주 큰 수익을 기대하며 익절을 미루다 결국 손실로 매매를 마무리하게되는 경우가 종종 있습니다. 이건 결국 욕심으로 인해 생기는 문제입니다. 사실 진입은 기술이지만 익절은 예술이다 라는 말이 있을정도로 좋은 익절 타이밍을 잡기란 정말 어려운 일입니다.

저는 정확한 익절 타이밍을 잡자거나 하는 문제가 아니라, 적어도 어느정도 수익권에 도달했다면, 적어도 손실로 매매를 마무리 하지 않도록 해주자 하는 생각을 해보았습니다.

물론 관점이 틀릴때까지 기다렸다가 처음의 손실 구간에서 손절을 하는게 원칙이라고 생각할 수도 있겠지만, 가격이 예상한 방향으로 크게 움직였거나, 시간이 오래 끌렸다면, 나의 진입 근거가 틀렸거나 진입이 성급했을 가능성이 높습니다.

적어도 본전에서 포지션을 정리한다면 더 좋은 자리에서 포지션을 잡을 수 있는 기회를 가질 수 있고, 동시에 수익권에서 손절로 마무리 했을때 오는 좌절감으로 인한 틸트에 빠지지 않을 수 있습니다.

틸트(tilt)는 원래 포커 용어로, 연속된 손실로 감정이 격해져 냉정한 판단을 잃고 무리한 배팅을 하는 상태를 말합니다. 트레이딩에서도 똑같이 씁니다. 손절이 연달아 나오면 “이번엔 반드시 만회해야지” 하는 심리가 생기고, 그 순간부터 이미 매매가 아니라 도박에 가까워집니다.

해당 기능은 제로 리스크 기능으로 정의해 보았습니다. 이 기능은 현재 가격이 수수료를 포함해서 본전 가격(break-even)보다 위에 있을때 가능하며, 적용 시 스탑로스를 본전 가격으로 이동시킴으로써 손절이 나가더라도 리스크가 없도록 간편하게 스탑로스를 설정해줍니다.

제로 리스크 off 제로 리스크 안내 제로 리스크
제로리스크 off 제로 리스크 안내 제로 리스크

문제 3. 너무 크거나 작은 시드의 크기

시드가 작거나, 큰 손실 이후 복구 중인 경우, 그리고 틸트 상태에 빠진 경우에는 한번의 매매로 손실을 만회하려는 무리한 매매를 하기 쉽습니다. 퍼센트로 보면 상당한 수익이 되더라도 절대값으로 보면 작기 때문에 결국 고레버리지에 손을 대게 됩니다. 동시에 추가 손실을 심적으로 감당할 수 없기에 스탑로스를 걸지 않거나, 미루게 됩니다.

반대로 평소 하던 크기보다 너무 큰 크기로 포지션을 들어간 경우 절대값으로 손실을 보면 심리적 압박이 커져서 무리한 매매로 이어질 수 있습니다.

10,000 USDT의 5%는 500 USDT 이지만, 1 USDT의 5%는 0.05 USDT 입니다. 같은 5% 이지만 P&L을 바로 보는것과 P&L Percent로 보는것은 큰 차이가 있습니다. P&L로 손실을 보면 큰 시드를 굴리는 경우 너무 크게 느껴져서 큰 압박을 갖게 됩니다. 반대로 작은 시드로 하는 경우 P&L로 이익을 보면 큰 비율로 이익을 보더라도 수익이 하찮게 느껴지기 때문에 고레버리지에 손을 대게 됩니다.

이 문제에 대한 해결책은 단순하게 접근해보았습니다. 바로 P&L을 절대값으로 보여주지 않는 것입니다. 그래서 저는 안전 모드라는 스위치를 하나 두고 해당 스위치의 on/off 여부에 따라 P&L을 숨겨주는 기능을 추가하였습니다.

안전 모드 on 안전 모드 off
안전 모드 on 안전 모드 off

조종석 탭을 통해 배운것

이번에는 저의 스탑로스를 걸지 않는 습관을 고치는 것이 가장 큰 목표였습니다. 이를 위해 스탑로스를 긍정적인 형태의 이미지로 리프레이밍 하고, UI를 통해 리스크 관리의 중요성을 반복적으로 상기시켰습니다.

하나씩 문제를 정의하고, 원인과 해결 방법을 고민하면서 이렇게 단순한 방법들이 잘 동작할까? 하는 의문이 있었습니다.

하지만 결과는 놀랍게도 아주 좋았습니다. 처음 며칠은 안전벨트 문구가 떠도 귀찮다는 생각이 들었습니다. 그런데 계속 문구를 보다보니 스탑로스 없는 포지션이 굉장히 불안하게 느껴지기 시작했습니다.

스탑로스를 걸고 난 후에는 재미있게 표현되는 게이지 UI가 시선을 사로 잡았습니다. 현재 상태에 따라 다르게 표현되는 마커의 형태나 색, 그리고 로켓이 비행하는 모습에 빗댄 포지션의 상태가 재미있었습니다.

어느 순간 부턴 이 게이지 UI를 보고 싶어서 스탑로스와 익절 설정을 미리 하고 있는 저를 발견할 수 있었습니다. 특히나 포지션 상태가 좋았는데 잠을 자는 사이 청산을 당하거나 손실로 이어지는 경우가 많았는데 자기전에 포지션을 종료하지 않는 경우엔 간편하게 제로 리스크 버튼 하나로 안심하고 편안한 잠에 들 수 있었습니다.

아주 어려운 해결책은 아니였지만 단순한 방법들이 실제로 동작하는걸 보고 항상 문제에 대한 해결책을 생각할때 너무 복잡하게 접근하지 말고, 단순한 접근을 직접 해보는것도 좋겠다는 생각이 들었습니다.

앞으로의 방향

유저가 워블리 로켓을 통해 수익이 나는 매매시스템을 만들어 나갔으면 좋겠다는 목표를 두고, 매매의 객관화 -> 행동 교정 -> 회고를 통한 하나의 루프를 만들어보면 어떨까 하는 그림을 그려보았습니다.

일단은 미약하지만 매매의 객관화 -> 행동 교정의 첫 단추가 끼워진것 같습니다. 하지만 당연히 아주 초보적인 접근과 결과일 뿐이고, 이것들을 계속 개선하고 다양한 기능에 꾸준히 녹여감으로써 그 효과를 극대화 할 수 있다고 생각합니다.

아쉬운 점

스탑로스를 걸어두는 버릇이 생긴것은 확실합니다. 하지만 여전히 반복적인 손절로 인해 틸트 상태에 빠진 경우에는 손절을 걸지 않고 매매를 하는 경우가 여전히 있었습니다. 사실 매매에 있어서 틸트 상태를 다루는 것은 매우 중요한 부분이기 때문에 추후에 따로 이 부분을 공략해볼 생각입니다.

지금 이 프로젝트는 서비스의 특성 상 API 키가 필요한 관계로 대중적인 테스트 보다는 저 개인의 문제를 풀어보는 것에 집중하고 있습니다. 사실 디자인 능력이 부족한 관계로 스탑로스의 이미지를 긍정적인 이미지로 풀어내는 시도는 좋았으나, 실제 디자인과 UI는 목표에 부합할 정도로 완성도가 있지는 않습니다.

개인적인 결과는 좋게 나왔으나 이 결과가 단순히 워블리 로켓의 새 기능을 통해 만들어진 것인지, 문제를 해결하기 위한 고민을 하는 과정에서 자연스럽게 제게 스며든건지는 확실히 알 수 없기에 이 부분에 대해서는 추후 테스트를 해볼 수 있는 기회가 있다면 좋을것 같습니다.

마무리

이제는 포지션을 들어갈 때 기도하는 대신 안전벨트를 채웁니다. 완벽한 시스템은 아직 멀었지만, 적어도 시드를 날려버리는 최악의 시나리오에서는 조금 멀어진 것 같습니다. 다음에는 포지션에 진입하는 그 순간부터 리스크 관리가 시작될 수 있는 방법을 고민해보려 합니다.