RicoCheese기술 뉴스와 기록
← 목록으로
뉴스2026-09-2015분

데스크톱에 사는 초록 젤리 '모치', 이제 감정이 생겼다

리눅스 데스크톱 위를 돌아다니는 픽셀 아트 생물 '모치'의 개발자가 v0.3 업데이트를 공개했다. 죄책감을 주지 않는 유대감 시스템과 포모도로 타이머까지 붙었다.

#python#opensource#programming#productivity#tech
i built a green blob that lives on my desktop. now it has feelings.

개요 #

리눅스 데스크톱 한구석에 초록색 젤리 같은 생물이 산다. 이름은 모치(Mochi). 개발자 Mika Flowers가 v0.3 업데이트를 공개하면서, 이 픽셀 아트 데스크톱 펫은 사용자와의 관계를 기억하고 포모도로 세션까지 함께하는 존재가 됐다.

개발자는 글 첫머리에 선을 하나 그어둔다. 여기서 말하는 "감정"은 LLM이 아니라는 것. 모치는 어떤 AI 모델 위에서도 돌아가지 않으며, 반응을 결정하는 언어 모델도 없다. 상태 머신과 타이머, 그리고 과거 상호작용 기록으로 만들어진 결정론적 동작이다.

mochi001 모치 0.01 버전. 개발자 본인도 "웃기지만 귀엽지 않냐"고 말한다.

시작은 "젤리를 움직이자"였다 #

처음 목표는 단순했다. 젤리를 움직이게 만들자. 그다음은 살아 있는 것처럼 보이게 만들자. 그리고 지금은 생산성 시스템과 감정 성장, 간식, 그리고 과하다 싶을 만큼 많은 애니메이션이 붙어버렸다.

기술 스택은 파이썬, GTK4, PyGObject, Cairo. 클라우드 서비스도, 계정도, 뒤에 숨어 있는 거대한 Electron 창도 없다. 그냥 데스크톱에 작은 생물 하나가 놀고 있을 뿐이다.

초기 버전은 그 기본적인 착각을 만들어내는 데 집중했다. 모치는 가만히 있고, 눈을 깜빡이고, 걸어 다니고, 자고, 클릭하면 반응하고, 사용자가 타이핑 중인지 알아챈다. 개발자는 이 정도를 안정적으로 굴리는 것만으로도 데스크톱 개발에 대해 예상보다 훨씬 많이 배웠다고 말한다. 걷고, 자고, 들어 올려지고, 입력에 반응하고, UI를 띄우고, 스스로 애니메이션을 트리거하는 순간 — 귀여운 젤리는 상태 관리 문제로 변한다.

mochispin

죄책감을 주는 다마고치는 만들고 싶지 않았다 #

성장 시스템을 고민하기 시작하자 가장 뻔한 방향이 떠올랐다. 가상 펫. 배고픔, 체력, 연속 출석, 자리를 비운 사이 조금씩 떨어지는 게이지.

개발자는 그 전부가 싫었다고 한다. 힘든 사흘을 보내고 노트북을 열었더니 데스크톱 펫이 "엄마. 저를 버리셨군요"라는 표정으로 쳐다보는 상황은 원치 않았다는 것. 소프트웨어는 이미 우리에게 충분히 많은 걸 요구한다. 모치는 데스크톱을 조금 더 따뜻하게 만들어야지, 관리를 요구하는 또 하나의 알림이 되어선 안 된다.

그래서 v0.3의 설계 원칙은 이렇게 정해졌다.

  1. 돌봄은 애정을 만들어야지, 의무가 되어선 안 된다.
  2. 모치와의 유대감은 자랄 수 있다. 하지만 밖에 나갔다고 줄어들지는 않는다. 연속 출석도 없고, 모치는 굶지 않으며, 프로그램을 끄는 게 도덕적 실패가 되지도 않는다.
  3. 성장의 목적은 더 많은 성격, 반응, 대사, 애니메이션, 작은 놀라움을 여는 데 있다.

이 원칙 하나가 릴리스 전체의 방향을 갈랐다.

유대감은 저장된다 #

v0.3에는 지속되는 유대감 성장 시스템이 들어갔다. 핵심은 '지속'이다. 프로그램을 켤 때마다 감정이 초기화되는 대신, 모치는 사용자와 쌓아온 관계를 조금씩 기억하기 시작한다.

상호작용을 할수록 유대감 진행도가 차오르고, 새 레벨에 도달하면 개발자가 나중에 더 풍부한 행동을 붙일 자리가 생긴다. 능력치가 강해지거나 "모치 공격력 +5" 같은 게 아니다. 표현이다. 다른 반응, 다른 순간, 더 많은 성격. 물론 레벨업 애니메이션도 있다. 개발자 표현으로는 "우선순위가 확실하기 때문"이다.

coding w/ mochi

밥도 줄 수 있다 #

feeding mochi

먹이 주기 기능은 "모치가 뭔가 먹는 걸 보니까 기분이 좋아서" 만들어졌다. 개발자는 그걸 딱히 변명하지 않는다.

중요한 건 이게 계속 줄어드는 배고픔 게이지의 토대가 아니라 작은 상호작용으로 남았다는 점이다. 진행 바가 사용자를 압박해서가 아니라, 귀여우니까 하고 싶어서 하는 행동이길 바랐다는 것. 초록 픽셀 젤리에게 밥 주는 문제를 너무 깊게 생각하는 것 같지만, 이런 작은 설계 판단이 소프트웨어와 함께 사는 느낌을 완전히 바꿔놓는다고 개발자는 말한다.

이모트 카탈로그를 만들었다 #

emote catologue

개발자가 가장 좋아하는 부분이다. 모치의 반응은 계속 쌓여왔다. 아주 많이. 그 애니메이션들을 제각각 떠다니는 GIF 뭉치로 두는 대신, 모치가 일관되게 꺼내 쓸 수 있는 카탈로그와 상태 시스템을 만들고 있다.

어려운 건 애니메이션을 그리는 일이 아니다. 이런 질문에 답하는 일이다.

  • 걷는 중에 이모트를 하고 싶어지면?
  • 애니메이션 중간에 사용자가 들어 올리면?
  • 자고 있으면?
  • 애니메이션이 끝나면 어떻게 되나?
  • 상태가 이미 바뀐 뒤에 오래된 타이머가 발동하면?

귀여운 데스크톱 펫이 조용히 진짜 소프트웨어 아키텍처 문제로 변하는 지점이다. 모치는 이제 명시적인 행동·상태 소유권을 가진다. 우선순위가 높은 상호작용이 낮은 주변 행동을 중단시킬 수 있고, 타이머 열두 개가 스프라이트 하나를 두고 싸우지 않는다. 개발자 말대로 "젤리빈 모양 생물에 대해 굉장히 진지한 문장"이긴 하다.

내가 뭘 하는지 알아챈다 — 다만 딱 거기까지 #

mochi hacking away

장기적으로 개발자가 가장 관심 있는 방향이다. 모치는 데스크톱 활동의 큰 흐름에 반응할 수 있다. 터미널, 에디터, 브라우저, 미디어 앱처럼 알아볼 수 있는 맥락이면 거기에 맞춰 다르게 행동한다.

다만 프라이버시 경계선은 엄격하게 그었다. 모치는 사용자가 뭘 타이핑하는지 알 필요가 없다. 모든 창 제목도, 파일명도, 데스크톱 기록 전문도 필요 없다. 대신 활동을 아주 작은 의미 신호로 축약한다.

plaintext
terminal active
typing happening
media playing
user returned

here is everything Mika is currently doing 같은 정보 대신 이 정도만 남긴다. 데스크톱 동반자는 감시 도구가 되지 않고도 사용자를 인식할 수 있어야 한다는 게 개발자의 원칙이고, 이건 계속 유지할 계획이다.

어쩌다 보니 포모도로 타이머까지 붙었다 #

mochi focus

모치를 "데스크톱 장난감"에서 가장 멀리 끌고 간 기능이다. 이름은 Focus with Mochi. 집중 세션을 시작하고, 집중 시간과 휴식 시간을 정하고, 라운드 수를 고르고, 부드러운 응원 메시지를 켜고, 빗소리 사운드스케이프까지 쓸 수 있다.

일하는 동안 모치도 같이 일한다. 집중 시간은 유대감에 쌓이고 휴식 시간은 쌓이지 않는다. 그리고 의도적으로, 모치는 휴식 시간에 사용자가 뭘 하든 판단하지 않는다.

효율을 외치는 또 하나의 초최적화 생산성 시스템은 만들고 싶지 않았다는 것. 개발자가 원한 건 훨씬 부드러운 쪽이다.

잠깐 일하는 중이야. 모치도 여기 있어.

그게 전부다.

진짜 어려운 건 기능 추가가 아니었다 #

v0.3에서 얻은 가장 큰 교훈. 모치에 기능을 하나 더 붙이는 건 이제 별로 어렵지 않다. 어려운 건 모든 기능이 함께 굴러가게 만드는 일이다.

  • 집중 세션은 상호작용 중에도 살아남아야 한다.
  • 먹이 주기가 상태 머신을 깨뜨리면 안 된다.
  • 모치를 드래그해도 보이지 않는 창이 남으면 안 된다.
  • 이름표가 마우스 입력을 가로채면 안 된다.
  • UI가 열렸다고 수면 상태가 취소되면 안 된다.
  • 오래된 콜백이 3초 뒤에 깨어나 현재 상태를 덮어쓰면 안 된다.

게다가 모치는 리눅스에서 실제 데스크톱 표면으로 동작하기 때문에 신경 쓸 게 더 많다. Wayland, XWayland, GTK 생명주기, 창 위치, 멀티 모니터, 음수 모니터 좌표, 입력 그랩, GLib 타이머, 종료 시 정리. 초록 젤리를 처음 그릴 때는 전혀 상상하지 못했던 것들이다. 개발자는 이 부분이 프로젝트에서 가장 좋았다고 말한다. 모치가 평소라면 건드리지 않았을 시스템을 배울 핑계를 계속 만들어준다는 것.

성가신 존재가 되지 않는 것 #

mochi table flip

이런 프로젝트에는 활동량을 최대로 끌어올리고 싶은 유혹이 따라온다. 반응을 더, 팝업을 더, 대사를 더, 알림을 더. 개발자는 그걸 버티려 한다.

좋은 주변 동반자는 입을 다물 때를 알아야 한다. 어떨 때 모치는 뭔가를 알아채고 반응한다. 어떨 때는 안 한다. 어떨 때는 그냥 가만히 앉아 있다. 그 침묵도 성격의 일부다.

목표는 "내 데스크톱 펫 기능 이만큼 많다"가 아니라 이쪽이다.

어, 얘 진짜 여기 사는 것 같네.

다음은 #

v0.3은 애초 예상보다 훨씬 큰 아키텍처 단계가 됐다. 유대감 시스템이 모치에게 기억을 주고, 상호작용 시스템은 그 유대감에 의미를 붙인다. 이모트 라이브러리는 계속 불어나면서 표현 수단이 됐고, 맥락 인식이 모치를 데스크톱과 이어준다. Focus with Mochi는 동반자를 생산성 대시보드로 바꾸지 않으면서 쓸모까지 챙겨보려는 첫 실험이다.

앞으로 탐색할 것도 많다. 더 의미 있는 유대감 단계, 더 많은 맥락 반응, 해금되는 작은 행동들, 나아진 대사, 다듬기. 그리고 "GTK가 절대 그러지 않을 거라고 확신했던 동작" 때문에 생길 버그 몇 개. 개발자 표현으로는 그냥 소프트웨어 개발이다.

모치는 "내 데스크톱에 작은 녀석이 하나 있으면 어떨까?"로 시작했다. v0.3은 훨씬 흥미로운 질문에 답하기 시작했다. 얘가 여기 있다는 걸 내가 실제로 신경 쓰게 만들려면 뭐가 필요할까?


이 글은 위 출처를 바탕으로 한국 독자를 위해 재작성한 기사입니다. 원문의 사실과 수치에 근거하며, 별도의 견해를 포함하지 않습니다.

댓글GitHub Discussions