본문 바로가기

전체 글867

개발일지 393편을 쓰면서 옛 기록은 정리하지 않았습니다 지난 3월에 이 프로젝트를 시작하면서, 작업이 하나 끝날 때마다 개발일지를 한 편씩 남기기로 정했습니다. 지금까지 393편이 쌓였습니다. 이 글에서 편수 자랑을 하려는 건 아닙니다. 시작하고 두 달쯤 지났을 때 이 기록들을 앞으로 어떻게 둘지 한 번 정해야 했는데, 그때 하고 싶었지만 하지 않은 일을 적어보겠습니다. 번호만 붙여서 087번까지 쌓았습니다 개발일지라고 하면 거창해 보이는데, 오늘 무엇을 했고 왜 그렇게 했는지 적어둔 파일 하나입니다. 처음 규칙은 단순했습니다. 작업이 끝나면 파일을 하나 만들어 세 자리 번호를 붙이고, 그다음 작업은 다음 번호로 이어 붙였죠. 본문 형식도 같이 정해뒀습니다. 왜 이 작업을 했는지, 무슨 문제가 있었는지, 어떻게 고쳤는지, 결과가 어땠는지를 순서대로 적고, 중.. 2026. 8. 27.
12를 120으로 믿어버린 넉 달 지난 3월 22일, Abilit 프로젝트 루트 폴더를 열어보니 기획 문서와 구현 문서 14개가 정리도 안 된 채 뒤섞여 있었습니다. 언젠가 정리해야지, 하고 미뤄뒀던 일을 그날 마음먹고 손댔습니다. 문서를 하나씩 옮기다가 이상한 걸 발견했습니다. 문서에는 12, 코드에는 120 습관 하나를 완료하면 하루에 최대 몇 포인트를 받는지, 문서엔 12로 적혀 있었습니다. 그런데 실제로 포인트 상한을 정하는 AppLimits.swift 파일을 열어보니 120이 박혀 있더군요. 혼자 만들다 보니 이런 어긋남이 한둘이 아니었습니다. 능력을 몇 개까지 만들 수 있는지도 문서엔 15, 코드엔 3이었고, 레벨 30에 필요한 포인트도 문서엔 555, 코드엔 552였습니다. iOS 통계 기능은 문서에 "미구현"이라고 적어뒀는.. 2026. 8. 25.
서버 없이 먼저 만들었어요 지난 3월, 메모를 저장할 곳이 필요했습니다. 보통은 서버를 하나 두고 그 뒤에 데이터베이스를 놓습니다. 저는 그렇게 하지 않았습니다. 서버를 만드는 대신, 메모를 브라우저 안에 저장하기로 했습니다. 브라우저 안에도 저장 공간이 있습니다 브라우저에는 IndexedDB라는 저장 공간이 내장돼 있습니다. 사이트를 방문하면 그 브라우저 안에 데이터를 저장할 자리가 생깁니다. 사이트를 다시 열어도 그 자리에 있던 데이터는 그대로 남아 있습니다. 메모 내용, 임베딩으로 만든 숫자 목록, 화면에 표시할 좌표까지 전부 이 안에 저장했습니다. 서버로 보낼 필요가 없었습니다. 보통은 서버와 데이터베이스를 거치지만, 이번엔 브라우저 안에서 끝났습니다 서버가 없으니 로그인도 없었습니다 서버가 있어야 "이 사람이 누구인지".. 2026. 8. 25.
내 능력과 성장을, 내 눈으로 보고 싶었습니다 지난겨울, 휴대폰으로 할 일 하나를 끝내고 완료율이 1퍼센트 오르는 걸 봤습니다. 숫자가 바뀌는 순간을 가만히 쳐다봤는데, 이상하게 아무 느낌이 없더라고요. 분명 그 일을 해낸 사람은 저였는데(그 이유는 한참 뒤에야 알았습니다), 화면에 남은 건 오른 숫자 하나뿐이었습니다. 그 간극이 계속 마음에 걸렸죠. 그래서 Abilit이라는 앱을 혼자 만들기 시작했습니다. 이 글에서는 이 앱을 왜, 어떻게 만들고 있는지부터 적어보겠습니다. 혼자 만드는 앱 팀은 없습니다. 저 혼자, 본업이 끝난 시간에 조금씩 만들고 있는데요. 앱을 출시한 현재까지도 혼자임에는 변함이 없습니다. 이 앱을 만든 이유는 한 문장으로 요약됩니다. 내 능력과 성장의 과정을, 내 눈으로 직접 보고 싶었습니다. 대부분의 생산성 앱은 체크리스트나.. 2026. 8. 24.
테스트를 먼저 쓴다는 게 무슨 말이냐면 지난 3월, 메모 제목을 자동으로 뽑아내는 기능을 만들 때였습니다. 메모를 저장하면 화면에 점과 함께 제목이 뜨는데, 사용자가 제목을 따로 입력하지 않으니 본문에서 알아서 뽑아내야 했습니다. 이때 처음으로 테스트를 먼저 썼습니다. 무슨 뜻인지 그대로 적어보겠습니다. 함수를 만들기 전에, 함수가 어떻게 답해야 하는지부터 적습니다 보통은 함수를 다 만들고 나서 잘 되는지 확인합니다. 테스트를 먼저 쓴다는 건 순서를 반대로 하는 겁니다. 함수 안이 텅 비어 있는 상태에서, "이런 입력을 넣으면 이런 결과가 나와야 한다"는 문장을 코드로 먼저 적어둡니다. 제목 뽑는 함수라면 이런 문장들입니다. 첫 줄이 "오늘의 할 일"이면, 제목은 "오늘의 할 일"이어야 한다아무것도 안 적었으면, 제목은 "제목 없음"이어야 한.. 2026. 8. 24.
메모가 놓일 자리는 밀고 당기는 힘으로 정합니다 지난 3월, 메모의 좌표 계산 방식을 바꿨다고 앞서 적었습니다. 이번엔 그 새 방식이 실제로 어떻게 자리를 정하는지 적어보겠습니다. 정해진 공식으로 좌표를 한 번에 계산하지 않습니다. 대신 힘 두 가지를 계속 주고받으면서, 조금씩 움직이다 멈추는 자리를 찾습니다. 메모 두 개는 서로를 밉니다 화면에 있는 모든 메모 쌍은 서로를 밀어냅니다. 가까이 있을수록 더 세게 밉니다. 이 힘만 있으면 메모들은 서로 안 겹칠 때까지 계속 멀어집니다. 비슷한 메모끼리는 동시에 당깁니다 내용이 비슷한 메모 쌍에는 반대 방향 힘도 하나 더 붙습니다. 서로를 당기는 힘입니다. 안 비슷한 쌍에는 이 힘이 붙지 않습니다. 한 쌍에 미는 힘과 당기는 힘이 동시에 걸리면, 둘이 균형을 이루는 지점에서 멈춥니다. 비슷한 메모는 가깝게.. 2026. 8. 23.