시간정원
← Blog

sideproject · 2026-08-02 · 조회수 8

읽음과 완료를 한 체크박스에 섞지 않기 — 우리콕 개발기 2

우리콕 개발기 2편이다. 메모 앱의 첫 화면은 단순해 보이지만 가장 많은 판단이 필요한 곳이었다. 상대가 보낸 메모를 읽은 것과 할 일을 끝낸 것은 전혀 다른 상태인데, 둘을 같은 체크박스로 표현하면 사용자가 매번 의미를 다시 해석해야 했다.

새 메모와 남은 메모

처음에는 확인한 메모를 진행 중, 함께 보는 메모처럼 부르기도 했다. 하지만 정보 공유 메모에 “진행 중”은 할 일 앱처럼 느껴졌고, “함께 보는”은 실시간 공동 편집처럼 들렸다. 결국 화면에는 새 메모 / 남은 메모를 사용했다.

  • 새 메모: 상대가 작성했고 내가 아직 확인하지 않은 메모
  • 남은 메모: 확인했지만 아직 완료하지 않은 메모
  • 완료한 메모: 누군가 완료했고 필요하면 다시 열 수 있는 메모

새 메모와 남은 메모를 한 화면에 배치한 메모 인박스

읽음은 별도 버튼으로 요구하지 않는다. 앱이 실제 포그라운드이고 항목이 화면에 노출될 때 seen_at을 기록한다. 다만 그 순간 항목이 바로 다른 섹션으로 이동하면 방금 읽던 내용이 사라진 것처럼 보인다. 화면 진입 시 섹션 배치를 스냅샷으로 잡고, 읽음 기록은 백그라운드에서 처리하되 다음 진입부터 남은 메모에 배치했다. 완료와 다시 열기는 사용자의 명시적인 행동이므로 즉시 이동한다.

체크는 끝까지 완료만 뜻한다

새 메모 앞의 원을 누르면 읽음이 아니라 완료가 된다. 본문을 읽는 행위와 완료 처리를 같은 제스처에 섞지 않기 위해서다. 완료 화면에서도 본문 탭은 상태를 바꾸지 않고, 앞쪽 체크를 눌렀을 때만 다시 연다.

완료 처리되어 취소선이 표시된 메모

완료 직후에는 4초 동안 실행 취소 Snackbar를 보여준다. 실수로 눌렀을 때 바로 돌릴 수 있지만, 화면을 계속 가리는 영구 알림은 남기지 않는다.

긴 메모는 목록의 리듬을 깨지 않게

여행 준비물이나 전달받은 개발 메모는 한두 줄을 쉽게 넘는다. 모든 본문을 그대로 펼치면 아래 메모를 찾기 어려워져 기본 상태에서는 줄 수를 제한했다. 잘린 항목의 작성자·시간 줄 오른쪽에는 작은 아래 화살표를 표시하고, 누르면 전체 본문을 펼친다. 섹션 접기 화살표와 겹쳐 보이지 않도록 항목 화살표는 본문 바로 아래에 두었다.

수정과 삭제는 내가 작성한 메모의 세 점 메뉴에서 연다. 날짜는 별도 메뉴가 아니라 수정 시트 안에서 본문과 함께 바꾼다. Android 공유 메뉴로 들어온 글도 같은 편집 패턴을 사용한다.

목록에서 펼쳐 전체 내용을 확인한 긴 메모

삭제가 많아질 때만 선택 모드

평소 화면에 선택용 체크박스를 하나 더 추가하면 완료 체크와 충돌한다. 대신 내가 작성한 메모를 길게 눌렀을 때만 선택 모드로 전환했다. 선택 모드에서는 앱 바에 선택 개수와 휴지통을 표시하고, 하단 탐색은 잠시 숨긴다.

내가 작성한 메모를 길게 눌러 연 다중 선택 모드

상대가 작성한 메모는 권한상 선택하거나 삭제할 수 없다. 삭제는 서버에서 즉시 지우지 않고 deleted_at을 기록하는 soft delete와 outbox를 사용한다. 네트워크가 끊겨도 화면에서는 먼저 사라지고, 연결이 돌아오면 같은 명령을 중복 없이 서버에 반영한다.

이 화면을 만들며 얻은 결론은 단순했다. 자동으로 처리해도 되는 읽음은 자동으로, 결과가 달라지는 완료와 삭제는 명시적인 동작으로 남기는 편이 가장 덜 헷갈렸다.

댓글

목차