DINKI·惦记
한국어 ⌄
简体中文English日本語FrançaisDeutschEspañolPortuguês (Brasil)ไทย

DINKI 개발 기록 / 001

소중한 마음을, 조금씩 더 온전히.

하나의 제안은 어떻게 기능이 될까요? 작은 문제는 어떻게 제대로 고쳐질까요? DINKI가 1.0에서 1.1.1로 나아간 과정을 기록합니다.

이번 변화 살펴보기 ↗
Yaya
1.0 → 1.1.1BUILD 165
01 /

기록을 더 풍성하게 만드는 일곱 가지 방향

무엇이 달라졌는지 먼저 소개하고, 그 이유를 이어서 설명합니다. 구매와 충전 관련 변경은 개선 및 수정 항목에 따로 담았습니다.

01

이전 기록을 이어 가기

테스트에 참여했던 같은 계정으로 소중한 기록을 계속 간직하세요.

과정 펼쳐 보기 +

처음의 문제

같은 사용자가 테스트 버전에서 정식 버전으로 옮겼는데, 이전 데이터가 보이지 않는 일이 있었습니다.

해결 방법

동일 계정의 이전 데이터를 검증하고 클라우드 미리 보기, 차이 확인, 동의 후 병합을 제공합니다. 테스트 구매 혜택과 정식 구매 혜택은 분리합니다.

지금의 사용 경험

사용자가 이전 데이터를 동기화한 뒤 앱을 다시 열어도 남아 있음을 확인했습니다. 기기 간 복원은 공개 출시 전에 추가 검증이 필요합니다. 모든 테스트 환경의 데이터를 조건 없이 이전할 수 있는 것은 아닙니다.

02

사진을 보며 야야와 이야기하기

여러 사진을 함께 이해한 다음, 어떻게 기록할지 결정하세요.

과정 펼쳐 보기 +

처음의 문제

사진 속 정보를 일일이 입력하기는 번거롭습니다. 그렇다고 모호한 날짜를 임의로 확정해서도 안 됩니다.

해결 방법

여러 이미지 전송, 개별 삭제, 대화 맥락에 따른 추가 질문을 지원합니다. 기록할 만한 정보를 먼저 추출한 뒤 작은 일상인지 중요한 날인지 확인하며, ‘월말’ 같은 날짜 표현은 다시 물어 명확히 합니다.

지금의 사용 경험

정보가 명확해지면 중요한 날을 바로 저장할 수 있습니다. 글, 음성, 이미지가 같은 대화 흐름을 사용하며, 녹음 중에도 멈추고 전송할 수 있습니다.

03

작은 일상을 중요한 날로

가볍게 적은 한마디가 미리 준비하고 싶은 날이 될 수 있어요.

과정 펼쳐 보기 +

처음의 문제

기록한 뒤 알림이 필요하다는 생각이 들어도 내용을 다시 옮겨 적게 해서는 안 됩니다. 변환한 뒤 빈 화면이 남아서도 안 됩니다.

해결 방법

변환할 때 제목, 설명, 기존 날짜, 사진을 가져오고 날짜가 없으면 선택하게 합니다. 저장에 성공하면 변환 화면과 원래 기록 화면을 닫습니다.

지금의 사용 경험

작은 일상과 중요한 날 모두 삭제할 수 있으며, 삭제 전에 분명하게 확인합니다. 변환 저장과 화면 복귀는 사용자가 직접 확인했습니다.

04

사진으로 더 온전하게 기록하기

앨범에서 고르거나 바로 촬영하세요.

과정 펼쳐 보기 +

처음의 문제

어떤 기록은 한 문장만으로 부족합니다. 사진 한 장이 세부 내용을 더 잘 남겨 줍니다.

해결 방법

작은 일상과 중요한 날에 사진 첨부를 추가하고, 사진을 넣을 때 앨범과 카메라를 선택할 수 있게 했습니다. @小菠萝 님의 제안입니다.

지금의 사용 경험

사진은 기록과 함께 저장되며 데이터 동기화와 백업 흐름에 포함됩니다. 여러 기기에서의 첨부 사진 복원은 추가 검증이 필요합니다. AI 정리 완료 화면에서 사진이 즉시 표시되지 않는 문제는 후속 수정으로 남겨 두었습니다.

05

고양이와 강아지도 DINKI 안에

누가 있는지 이해한 뒤 알맞은 움직임을 설계합니다.

과정 펼쳐 보기 +

처음의 문제

반려동물에 사람의 서 있는 자세를 적용해서는 안 됩니다. 단체 사진에서도 한 사람만 움직여서는 안 됩니다.

해결 방법

사람, 반려동물, 함께 있는 장면을 구분하고 자세에 따라 세 가지 동작 프롬프트를 만듭니다. 인식할 수 없을 때는 프리셋을 사용합니다. 내장 목록도 사람과 반려동물로 나눴습니다. @ddcat 님의 제안입니다.

지금의 사용 경험

고양이와 강아지에 어울리는 자세와 가벼운 움직임을 사용할 수 있습니다. 생성 결과는 여전히 확인이 필요하며, 매번 기대와 완전히 일치한다고 약속하지는 않습니다.

06

제안이 닿을 곳

개발자 야야가 의견을 듣고, 감사의 글에 채택된 기여를 남깁니다.

과정 펼쳐 보기 +

처음의 문제

의견이 여러 대화에 흩어져 있었고, 사용자는 나중에 채택되었는지 알기 어려웠습니다.

해결 방법

‘내 정보’ 하단에 피드백과 감사의 글을 별도 카드로 배치하고 나머지 화면 구성은 유지했습니다. 이미지와 음성으로 피드백을 보낼 수 있으며, 감사의 글은 버전별로 정리하고 최신 버전을 펼쳐 둡니다.

지금의 사용 경험

계정마다 제안 하나를 한 번 지지할 수 있고, 서버에서 중복을 방지합니다. 피드백은 개발자 관리 화면으로 전달됩니다. 멤버십과 햇살 보상은 아직 세부 규칙을 정해야 하는 계획이며, 자동 지급을 약속하지 않습니다.

07

익숙한 언어로 사용하기

DINKI의 10개 언어 지원에 웹사이트도 함께합니다.

과정 펼쳐 보기 +

처음의 문제

문구, 날짜, 버튼, 긴 문장은 언어가 달라지면 단어만 바꾸는 것으로 충분하지 않습니다.

해결 방법

앱은 중국어 간체, 영어, 일본어, 한국어, 프랑스어, 독일어, 스페인어, 브라질 포르투갈어, 러시아어, 태국어를 제공합니다. 웹사이트도 같은 10개 언어로 콘텐츠를 제공합니다.

지금의 사용 경험

브랜드와 조작의 의미를 유지하면서 누락된 글자, 대체 언어 표시, 긴 문장 배치를 확인합니다. 번역을 마쳤다는 것이 모든 언어를 원어민이 검토했다는 뜻은 아닙니다.

캐릭터 선택 화면 예시 · 빌드 156의 사람 및 반려동물 분류 ↗
캐릭터 선택 화면 예시 · 빌드 156의 사람 및 반려동물 분류
02 /

거듭 다듬은 작은 부분들

새 기능 외에도 ‘당연히 편해야 하는’ 부분에 많은 시간을 들였습니다. 아래는 문제별로 묶은 목록이며, 여러 커밋을 각각 새 기능으로 중복 계산하지 않습니다.

01구매와 잔액 반영+

시작할 때 상품 가격을 미리 가져오고, 화면에 들어갈 때 이미 받은 가격을 반복해서 지우지 않습니다. 한 상품의 로딩 실패가 다른 상품을 막지 않도록 했습니다. 구매 과정은 버튼에 ‘처리 중’으로 표시하고, 검증에 성공하면 멤버십과 햇살을 갱신해 이전 응답이 새 잔액을 덮어쓰지 않게 합니다.

02정식 구매와 테스트 구매+

정식 계정과 생활 기록은 계속 사용할 수 있고, Apple 모의 구매는 별도 테스트 혜택으로 기록됩니다. 이전 테스트 구독의 소유권 호환성을 수정해 구매 후에도 확인 대기가 계속되는 문제에 대응했습니다. 실제 App Store 멤버십과 햇살 구매는 반영과 앱 재실행 후 상태를 확인했으며, 전체 갱신·환불 과정은 추가 검증이 필요합니다.

03로그인과 시작+

로그인 세션을 복원해 나중에 다시 열었을 때 불필요한 재로그인을 요구하지 않도록 합니다. 로컬 데이터가 준비되기 전에 빈 홈 화면을 잘못 표시하지 않습니다. 마지막으로 보던 인물을 기억하고 시작할 때 해당 캐릭터로 돌아갑니다.

04사진과 캐릭터+

내장 캐릭터 썸네일이 비는 문제, 프로필 사진 자르기 후 반응이 없는 문제, 사진 생성 입구에서 상태 판정이 진행을 막는 문제를 수정했습니다. 목록의 움직이는 미리 보기는 가벼운 투명 프레임 아틀라스를 사용해 보이는 모든 카드가 재생에 참여합니다.

05동기화와 백업+

병합한 데이터를 실제로 로컬에 저장하고 화면을 갱신합니다. 첫 로그인에서는 클라우드 차이에 따라 안내하되 미리 보기를 반복해서 열지 않습니다. 데이터 변경이나 수동 요청처럼 필요한 시점에 동기화하며, 이전 백업 파일의 복원 경로도 보완했습니다.

06채팅과 피드백+

입력 내용이 세 줄을 넘으면 스크롤할 수 있고, 이미지는 오른쪽에 표시합니다. 개발자 야야에게 보내면 먼저 메시지 목록에 나타나며 실패 시 재시도할 수 있습니다. 굵게 표시할 문법의 별표가 그대로 보이는 문제, 피드백 읽기 오류, 음성 입력 기능의 누락을 수정했습니다.

07팝업과 화면 복귀+

제목, 설명, 버튼이 있는 중앙 팝업으로 통일하고 라임색 테마를 조정했습니다. 불필요하게 회고를 권하던 작은 카드를 제거했습니다. 작은 일상을 중요한 날로 변환한 후 빈 화면이나 ‘기록이 삭제되었습니다’ 화면이 남는 문제도 수정했습니다.

08충전과 일정+

충전 동반 모드는 설정과 이용 조건을 충족하고, 충전 중이며 가로 방향일 때만 시작합니다. 세로로 돌리면 쉽게 종료할 수 있습니다. 완료한 일정의 당일 표시, 삭제 버튼 위치, 삭제 확인도 개선했습니다.

09개인정보 안내+

165에서는 문구만 수정했습니다. 존재하지 않는 화면 입구에 대한 약속을 없애고, 최초 AI 동의, 거절해도 로컬 기록이 남는다는 설명, 연락 창구를 통한 동의 철회 요청 안내는 유지합니다.

03 /

구현을 이해하기 쉽게

이번 개발 과정에서 실제로 겪은 문제들입니다. 계정, 거래, 개인 키, 내부 인터페이스를 공개하지 않고 구현 아이디어를 중심으로 설명합니다.

FIELD NOTES / 01

배경을 지웠는데 왜 흰 사각형이 남을까요?

흰색 픽셀과 투명한 픽셀은 서로 다릅니다.

과정 펼쳐 보기 ↗

배경을 흰색으로 칠하거나 PNG로 저장한다고 자동으로 투명해지지는 않습니다. 투명도에는 각 픽셀이 얼마나 보여야 하는지 기록하는 별도의 알파 채널이 필요합니다.

DINKI의 정지 이미지는 피사체 분할과 마스크 처리를 사용합니다. 원래 색을 유지하면서 피사체의 투명 마스크를 예측하고, 처리 후 어두운색·라임색·종이색 배경에 올려 투명도와 가장자리를 확인합니다. 흰옷이나 눈의 하이라이트 같은 세부를 손상하지 않기 위해서입니다.

움직이는 소재는 별도의 영상 투명도 경로를 사용합니다. 일반 영상에 색상 화면과 투명 마스크를 함께 넣고, 플레이어가 정해진 방식으로 분리해 합성합니다. 일반 영상 컨트롤로 바로 재생하면 색상 블록이나 마스크가 보일 수 있으며, 배경색을 바꾸는 것만으로는 해결되지 않습니다.

아래 전환은 기존 투명 소재를 여러 바탕색 위에 보여 주기만 합니다. 브라우저에서 사용자의 사진을 업로드하거나 다시 처리하지 않습니다.

FIELD NOTES / 02

왜 앞의 두 카드만 움직였을까요?

목록 미리 보기와 원본 크기 영상은 역할이 다릅니다.

과정 펼쳐 보기 ↗

초기 방식은 메모리를 관리하기 위해 동시에 재생할 수 있는 영상 수를 제한했습니다. 부하는 줄었지만 뒤쪽의 보이는 카드가 계속 정지해 있었습니다.

목록은 동작 영상에서 만든 투명 프레임 아틀라스로 바꿨습니다. 미리 보기마다 18프레임, 캐시 예산은 32MiB입니다. 보이는 모든 카드가 재생하고 스크롤 중에는 일시정지하며, 화면 밖에서는 멈춥니다. GIF처럼 보이지만 실제로는 투명 채널을 가진 프레임 아틀라스입니다.

개별 캐릭터를 열거나 전체 동작을 재생할 때는 여전히 영상 자원을 사용합니다. 목록의 카드마다 영상 디코더를 상시 유지할 필요가 없으며, 제작한 원본 영상을 저해상도 미리 보기로 바꾸지도 않습니다.

시스템의 동작 줄이기 설정도 존중해야 합니다. 부드러움은 실제 기기에서 같은 부하로 측정해야 하며, 구현 방식만으로 성능 향상 수치를 주장할 수는 없습니다.

FIELD NOTES / 03

일상을 날짜로 바꾸자 왜 빈 화면이 생겼을까요?

데이터는 바뀌었는데 화면은 이전 기록을 기다리고 있었습니다.

과정 펼쳐 보기 ↗

변환하면 중요한 날을 만들고 원래의 작은 일상을 제거합니다. 상세 화면과 편집 시트가 모두 원래 기록에 연결되어 있다면, 기록이 삭제되는 순간 아래 화면은 표시할 내용을 잃습니다.

수정에서는 편집기가 안정적인 초안 스냅샷을 갖도록 했습니다. 먼저 저장을 마친 뒤 상위 화면이 완료 결과를 받아, 닫힘 콜백 순서에 따라 변환 화면과 상세 화면을 종료합니다. 취소하거나 저장에 실패하면 입력은 그대로 남습니다.

아무 곳에서나 닫기를 두 번 호출하는 것보다 안정적입니다. 각 화면은 자신의 표시 상태만 처리하고, 성공하면 유효한 화면으로 돌아갑니다.

중앙 확인 팝업은 앱의 공통 컴포넌트를 재사용해 제목, 설명, 명확한 조작을 유지합니다. 각 화면에서 서로 다른 안내를 따로 만들지 않습니다.

FIELD NOTES / 04

Apple은 구매 성공이라는데, 왜 잔액은 그대로일까요?

결제 콜백, 검증, 지급, 화면 갱신까지 하나의 흐름입니다.

과정 펼쳐 보기 ↗

Apple 콜백은 거래 결과가 나왔다는 뜻입니다. 서버는 여전히 주문과 소유권을 검증하고 같은 주문의 중복 지급을 막아야 합니다. 화면 숫자만 바꾸면 잔액과 실제 장부가 달라집니다.

이번에는 확인된 지갑과 멤버십 갱신을 클라이언트에 다시 연결하고, 먼저 보낸 조회가 나중의 지급 결과를 덮어쓰지 않도록 했습니다. 진행 상태를 구매 버튼 안에 모아, 일반적인 상황에서는 사용자가 ‘구매 동기화’를 이해할 필요가 없게 했습니다.

모의 주문과 실제 주문은 따로 기록합니다. 백업 파일 복원으로 구매 잔액을 바꿀 수도 없습니다. 네트워크 오류 시 처리 중인 거래를 보관하고 재시도하며, 지급받기 위해 반복 구매하도록 안내하지 않습니다.

실제 App Store의 월간 멤버십과 햇살 구매는 지급, 회원 상태, 재실행 후 확인을 마쳤습니다. 실제 환불과 구독 갱신의 전체 흐름은 출시 전 검증 항목으로 남겨 두었습니다.

투명은 흰색이 아닙니다: 바탕색을 바꿔 보세요

흰색 픽셀과 투명한 픽셀은 서로 다릅니다.

투명은 흰색이 아닙니다: 바탕색을 바꿔 보세요
DINKI의 기존 투명 캐릭터 소재
04 /

이 버전이 만들어진 과정

  1. 144–147

    10개 언어, 이전 데이터, 시작 시 로딩

    1.0 이후 데이터 이어받기, 가격 미리 읽기, 기본 조작을 보완했습니다.

  2. 148–152

    더 편해진 기록과 대화

    잔액 갱신, 사진과 촬영, 여러 이미지 이해, 중요한 날 바로 저장, 목록 동적 미리 보기를 개선했습니다.

  3. 153–156

    사용자 제안을 제품 안으로

    감사의 글과 지지, 반려동물과 여러 인물의 동작, 개발자 야야를 추가하고 업데이트 미리 보기를 정리했습니다.

  4. 157–160

    정식 서비스에서 검증하기

    출시 목록을 확인하고 변환 후 복귀, 피드백 대화, 로그인, 햇살 조회를 수정했으며 이전 데이터 이어받기를 검증했습니다.

  5. 161–164

    구매 흐름을 끝까지 잇기

    정식 데이터에 연결하되 모의 혜택은 분리하고, 이전 구독 소유권·잔액 갱신·가로 충전을 수정했습니다.

  6. 165

    문구와 실제 동작 맞추기

    개인정보 안내 문구만 수정했습니다. 검증된 기능을 유지하고 TestFlight 확인 후 Apple 심사에 제출했습니다.

영상으로 남긴 DINKI ↗

05 /

제품을 만들고, 그 모습도 기록합니다

홍보 이미지, 브랜드 영상, 스토리보드의 출처와 단계를 남깁니다. 초기 화면을 최종 버전의 실제 사용 영상으로 소개하지 않습니다.

빌드 156 당시의 미리보기 이미지입니다. 수치와 상태는 당시 기록이며, 최종 상태는 이 페이지의 165 기록을 참고하세요.

30초 브랜드 이야기 · 초기 콘셉트와 화면 예시, 기존 공식 사이트 영상 사용
캐릭터 동작 예시 · 기존 내장 소재이며 매번의 생성 결과를 뜻하지 않습니다

일부 기존 영상에는 중국어가 포함되어 있습니다. 원본을 유지하며, 10개 언어의 영상이 모두 제작되었다는 뜻은 아닙니다.

1.1.1의 90초 홍보 영상은 현재 스토리보드만 있고 최종 영상은 없습니다. 가짜 재생 버튼을 두지 않았습니다.

과정과 미완성도 함께 남기기

일반 공개 전 실제 갱신·환불과 기기 간 동기화 검증을 보완해야 합니다. 시스템 알림 도착 테스트는 사용자의 결정에 따라 다음 버전으로 미뤘습니다. AI 정리 완료 화면에서 사진이 즉시 보이지 않는 문제도 후속 작업으로 기록했습니다.

맨 위로 ↑