이 글은 오픈데이 Openday 시리즈의 4번째 기록입니다. (총 9개)

오늘 한 일

  • 반복 일정을 넣었다

    • 이유: 매년 8월 첫 금요일, 3개월마다, 2년에 한 번 같은 일이 있는데 상시·요일별로는 표현이 안 됐다
    • 매년 n번째 무슨 요일 / N주마다 / N개월마다 / N년마다 네 가지를 만들고, 자주 쓰는 것(격주·격월·분기·반기)은 눌러서 고르게 했다
    • 언제까지 반복할지 종료일도 정할 수 있게 했다
  • 「마을」을 만들었다. 가게를 여러 채 두고 회사와 개인을 나눈다

    • 이유: 회사 셔터를 내리면 개인 일이 안 보여야 하는데, 가게가 한 채면 그게 안 된다
    • 왼쪽에 마을 길을 세워 가게를 오가게 하고, 마을 화면에서 가게를 더하고 이름·아이콘을 고치고 지울 수 있게 했다
    • 불이 켜진 가게가 길에서 바로 보이게 표시했다
    • 기록실에서는 어느 가게를 겹쳐 볼지 고를 수 있게 했다
  • 기록을 파일로 내보내고 되살리는 기능을 넣었다

    • 이유: 기록이 브라우저에만 있어서 브라우저 정리 한 번이면 되돌릴 수 없다
    • 확장자를 .openday로 따로 뒀다. 아무 파일이나 받으면 남의 파일을 넣고 기록이 사라질 수 있다
  • 구글 계정 연결과 드라이브 저장을 붙였다

    • 기록은 이용자 본인 드라이브의 「앱 데이터」 폴더에 들어간다. 우리 서버로는 아무것도 오지 않고, 그래서 서버도 비밀키도 없다
    • 권한은 앱이 만든 파일만 보는 것 하나뿐이라 이용자의 다른 드라이브 파일은 목록조차 못 본다
    • 고치고 손이 멈추면 3초 뒤에 알아서 맞춘다. 셔터를 내리는 건 하루의 매듭이라 그것만 미루지 않고 바로 올린다
  • 두 기기가 같은 기록을 건드려도 서로 지우지 않게 합치는 규칙을 정했다

    • 파일을 통째로 「나중 것이 이긴다」로 하면 회사에서 찍은 도장이 집에서 올리는 순간 사라진다
    • 그래서 가게와 날짜를 열쇠로 삼아 그 단위로 비교한다. 열쇠가 다르면 둘 다 살아남고, 같은 날 같은 가게를 양쪽에서 고쳤을 때만 나중 것이 이긴다
    • 실제로는 회사에서 회사 가게를, 집에서 개인 가게를 만지므로 부딪히는 일 자체가 드물다
  • 로그인 흐름을 다시 짰다

    • 원본은 드라이브에 둔다. 로그인 전에는 이 브라우저 것을 보여주고, 로그인하면 드라이브 것을 가져온다
    • 첫 연결에서 이 브라우저에 쌓인 게 있으면 올릴지 한 번 묻는다. 올리면 합치고, 올리지 않으면 드라이브 것으로 간다
    • 브라우저를 닫으면 로그아웃된다. 로그아웃할 때는 한 번 맞춘 뒤 이 브라우저 기록을 비운다 — 남의 PC에 흔적이 남지 않게
    • 관리 화면에 「이 브라우저 기록 지우기」를 넣었다
  • 처음 여는 사람에게 보이는 기본 업무를 사용법 안내로 바꿨다

    • 이유: 지금 기본 업무는 한 사람 상황에 맞춘 예시라, 남이 열면 첫인상이 “정리부터 하세요”가 된다
    • 도장 눌러보기 / 하위 업무로 세어 보기 / 창고에서 만들어 보기 / 계정 연결하기 네 가지로 바꿨다. 업무 자체가 사용법이 되는 셈이다
  • 라이브용 브랜치를 따로 뒀다

    • 이유: 실제로 쓰는 사람이 생겼으니 밀어 넣을 때마다 화면이 바뀌면 안 된다. 개발은 main, 라이브는 release
  • 개인정보처리방침에 드라이브 저장 내용을 넣어 달라고 로그스톤 샵에 요청했다

    • 이유: 저장하는 곳이 브라우저에서 이용자 드라이브로 늘었다. 기능보다 방침이 먼저 올라가 있어야 한다
  • 기록실이 그날 배치가 아닌 업무를 미완료로 세던 것을 고쳤다

    • 매월 5일에 하는 일이 24일에 미완료로 떴다. 그날 기록에 남은 자리를 그대로 세고 있었다
    • 그날 배치를 기준으로 세게 바꿨고, 도장도 메모도 없는 빈 자리는 애초에 안 남기게 했다
  • 기록실을 「한 일」과 「못 한 일」로 나눴다

    • 셔터를 안 내린 날은 「남은 일」, 내린 날은 「못 한 일」로 이름이 갈린다
  • 못 한 일을 다른 날로 넘기는 기능을 넣었다

    • 업무마다 넘기기, 셔터를 내릴 때 목록에서 고르기 두 갈래를 뒀다. 셔터 쪽을 물어볼지는 관리에서 끈다
    • 넘길 날은 기본이 다음 근무일이고 달력에서 바꾼다
    • 다음 근무일에 어차피 뜨는 업무는 대상에서 뺐다. 상시 업무를 넘긴다는 말은 성립하지 않는다
  • 넘긴 일이 받는 날을 건너뛰어도 안 사라지게 했다

    • 이유: 수요일에 목요일로 넘겼는데 목요일이 공휴일이면 금요일에 안 떴다
    • 지나간 날을 훑어 “하지도, 다시 넘기지도 않은 것”을 다음에 여는 날로 데려온다. 공휴일을 몰라도 되고 갑자기 쉰 날에도 맞는다
  • 근무 요일을 창고 맨 위에서 정하게 했다

    • 이유: 근무일은 가게마다 다른 값이라 앱 전체 설정에 두면 가게별로 못 정한다
    • 창고는 이미 그 가게의 업무 배치를 정하는 방이라, 요일별 업무를 만들 때 근무일이 바로 위에 있어야 앞뒤가 맞는다
  • 업무 줄의 부가 조작을 연필 하나로 접었다

    • 메모·넘기기·지우기가 줄에 늘어서니 도장이 묻혔다. 연필을 누르면 메모칸이 펼쳐지고 그 아래 오른쪽에 넘기기·지우기가 선다
    • 넘기기는 숨겨 둔 날짜 칸의 달력을 연다. 날짜를 고르는 순간 넘어가고 확정 버튼은 두지 않았다
    • 지우기는 「지울까요?」를 한 번 묻는다. 일회성 업무에만 뒀다 — 상시를 여기서 지우면 창고에서 지우는 것과 같아진다
  • 관리 화면의 「기록 지키기」에 구글 연결과 파일 내보내기를 한 절로 모았다

    • 둘 다 “기록을 잃지 않으려면”에 대한 답인데 떨어져 있으면 하나만 보고 만다. 가로로 나란히 세워 둘 다 눈에 들어오게 했다
    • 「기록 지우기」가 글자처럼 보여 버튼으로 바꿨다
  • 처음 여는 사람에게 보이는 소개 업무에 되돌리기 안내를 넣었다

    • 오른쪽 클릭으로 완료·건수를 되돌릴 수 있다는 걸 아무 데도 안 알려주고 있었다
    • 두 도장 방식을 다 본 뒤에 나오도록 세 번째에 뒀다

막힌 부분

「직접 정하기」를 골라도 자꾸 격주·격월로 튀었다

3주마다를 만들려고 「직접 정하기」를 고르고 3을 넣으면 화면이 「격주」로 되돌아갔다.

원인은 어떤 것이 켜져 있는지를 규칙에서 거꾸로 계산하고 있었다는 것이다. 2주마다면 격주, 2개월마다면 격월 — 이렇게 값에서 되짚는 구조라, 3을 넣는 순간 계산이 다시 돌면서 화면이 자기가 아는 쪽으로 값을 되돌렸다.

  • 해결: 지금 무엇이 켜져 있는지를 따로 기억하게 하고, 직접 고를 때만 바꾸게 했다
  • 화면이 기억해야 하는 건 “규칙이 무엇인가”만이 아니라 “지금 무엇을 고르는 중인가”이기도 하다
  • 숫자 칸에서 지우면 1이 저절로 들어오던 것도 같이 고쳤다. 빈 칸을 잠깐 허용하고 칸을 떠날 때 정리한다

광고 바가 사이드바 옆으로 밀렸다

마을을 넣으며 화면이 가로 두 칸이 되자 아래에 있던 광고가 사이드바 오른쪽으로 붙어 올라갔다.

  • 원인: 광고를 화면 맨 바깥에 두고 있었는데, 그 바깥이 가로 배치로 바뀌면서 광고도 한 칸을 차지했다
  • 해결: 광고를 오른쪽 본문 안으로 옮겼다

구글 로그인이 400 오류로 막혔다

연결을 누르면 origin_mismatch가 떴다. 로그인 창을 띄우는 주소를 구글 콘솔에 미리 등록해야 하는데, 등록하지 않은 미리보기 주소에서 열고 있었다.

등록하려니 이번엔 「최상위 비공개 도메인이어야 합니다」가 떴다. 등록하는 칸이 두 군데인데 성격이 달랐다.

  • 승인된 JavaScript 원본 — 로그인을 띄우는 주소. pages.dev 주소가 그대로 들어간다

  • 동의 화면의 승인된 도메인 — 소유한 도메인만 들어간다. pages.dev는 우리 것이 아니라서 거절된다

  • 해결: 개발 중 확인은 로컬 주소에서 한다. 와일드카드가 안 돼서 브랜치 미리보기 주소는 열 때마다 등록해야 한다

  • 남은 것: 사람들에게 열려면 확인 절차를 밟아야 하고, 그때는 소유한 도메인이 필요하다

「드라이브에 올리기」 버튼이 위험했다

연결한 뒤 쓸 버튼으로 「드라이브에 올리기」와 「드라이브에서 가져오기」를 나란히 뒀다. 그런데 올리기가 합치지 않고 덮어쓰는 동작이었다. 다른 기기에서 올려 둔 것이 누르는 순간 사라진다.

  • 해결: 두 버튼을 걷어내고 「지금 맞추기」 하나로 합쳤다. 맞추기는 내려받아 합친 뒤에 올린다
  • 되돌릴 수 없는 조작을 버튼 하나로 두면 언젠가는 눌린다

새로고침하면 로그아웃돼 있었다

연결하고 새로고침하면 다시 「구글 계정 연결」이 떴다.

  • 원인: 접근 권한은 한 시간쯤 살아 있지만 새로고침하면 사라진다. 계속 들고 있으려면 다시 받을 때 쓰는 토큰을 보관할 서버가 있어야 하는데, 서버를 두지 않기로 했다
  • 해결: 연결했다는 표시만 남기고, 새로고침 뒤에는 창을 띄우지 않고 조용히 토큰만 다시 받게 했다. 한 번 허락한 계정이면 눈에 띄지 않는다
  • 표시를 세션 저장소에 뒀다. 새로고침은 살아남고 창을 닫으면 사라진다 — “브라우저를 닫으면 로그아웃”이 이 한 줄로 정해진다

배치가 아닌데 미완료로 뜨는 유령이 있었다

매월 5일에 하는 일이 24일 기록실에 미완료로 떠 있었다.

원인이 두 겹이었다. 기록실이 「그날 기록에 남은 자리」를 그대로 미완료로 세고 있었고, 그 빈 자리는 업무를 만들거나 일정을 바꾼 시점에 생겨서 계속 따라다니고 있었다. 배치에서 빠진 자리를 버리지 않고 남겨두는 규칙을 도장 하나 없는 자리에까지 적용한 탓이다.

  • 해결: 세는 기준을 「그날 배치」로 바꾸고, 도장도 메모도 없는 빈 자리는 남기지 않게 했다
  • 도장이나 메모가 있는 자리는 배치에서 빠져도 남긴다. 그건 그날의 진짜 기록이다
  • 관용은 공짜가 아니다. “혹시 모르니 남겨두자”가 유령을 만든다

이월이 하루짜리라 받는 날을 놓치면 끊겼다

넘기기를 만들고 나서 “목요일이 공휴일이면 어떻게 되나”를 따져 보니, 수요일에 넘긴 일이 금요일에 안 떴다. 넘기기를 누른 그 순간에 받는 날 기록에 한 번 적고 끝이라, 그날 아무도 안 열면 거기서 멈춘다.

  • 해결: 지나간 날을 훑어 “넘어왔는데 하지도, 다시 넘기지도 않은 것”을 다음에 여는 날로 데려온다
  • 공휴일 달력을 넣는 것으로도 목요일은 피할 수 있지만, 갑자기 쉬는 날은 여전히 못 잡는다. 바깥을 아는 대신 안에서 버티는 쪽이 근본이다
  • 데려온 뒤에는 멈춰 있던 그 날에 자국을 남긴다. 안 남기면 다음에 열 때 또 끌려와서 이미 처리한 일이 되살아난다

다음에 할 일

  • 쉬는 날 화면 — CLOSED 팻말과 잠옷 캐릭터. 근무 요일은 정할 수 있게 됐지만 아직 이월 날짜 계산에만 쓰인다
  • 이월 사슬을 실제로 날짜를 넘겨서 확인하기 — 만든 날에는 확인이 안 된다
  • 모바일 화면 재설계 — 지금은 데스크톱 화면을 좁힌 것뿐이다
  • 한국 공휴일 처리 방식 정하기 — 넣을지 말지부터 보류 상태다
  • 캐릭터·팻말 그림을 어떻게 마련할지 정하기
  • 셔터를 내릴 때 넣을 그림
  • 사람들에게 열기 전 구글 확인 절차 — 소유한 도메인이 필요하다
  • 이모지를 정해진 것 중에 고르는 대신 자유롭게 넣거나 아예 빼게 하기
  • 언어와 날짜 표기 방식 통일

Series: 오픈데이 Openday


Suggested Posts