모든 글

탭플소식

‘내일 3시’는 오후 3시예요: 자연어로 태스크를 추가하는 법

날짜 칸을 따로 열지 않아도 돼요. 오전 · 오후를 빼면 업무 시간으로 읽어요. 잘못 읽었다면 ‘무시’ 한 번으로 되돌려요.

할 일을 적을 때마다 날짜 칸을 열어 하나씩 고르기는 번거로워요. 탭플의 빠른 추가에서는 제목에 날짜를 같이 쓰면 돼요. ‘내일 3시 회의’라고 쓰면 마감은 내일 오후 3시, 제목은 ‘회의’로 들어가요. 영어(‘tomorrow at 3’)나 일본어(‘明日3時’)로 써도 같은 규칙으로 읽어요. 어디서 쓸 수 있는지, 어떤 표현을 어떻게 읽는지 정리했어요. 같은 문장을 웹 · 데스크톱 · 모바일 앱이 서로 다르게 읽던 문제를 어떻게 고쳤는지도 적었어요.

‘내일’까지 쓰면 바로 날짜 칩이 떠요. ‘3시’를 더하면 오후 3시가 돼요. 알림까지 읽은 뒤 Enter를 누르면 제목에는 ‘회의’만 남아요.

어디서 쓰나요

가장 빠른 길은 빠른 추가 창이에요. 웹에서는 어느 화면에서든 ⌘⇧Y(Windows는 Ctrl+Shift+Y), 데스크톱 앱에서는 ⌘⇧N(Windows는 Ctrl+Shift+N)을 누르면 열려요. 칸반 컬럼 아래의 ‘새 태스크’, 리스트 보기, 아이젠하워 매트릭스, 주간 캘린더에서 바로 입력할 때도 같은 규칙으로 읽어요. 데스크톱과 모바일 앱의 빠른 추가도 마찬가지예요. 날짜로 읽은 부분은 입력하는 동안 ‘자동 인식’ 칩으로 보이고 제목에서는 빠져요. 의도와 다르게 읽었다면 칩 옆의 ‘무시’를 누르세요. 그 입력에서는 자동 인식이 꺼지고 쓴 문장 그대로 제목이 돼요.

이렇게 쓰면 이렇게 읽어요

  • 날짜 오늘 · 내일 · 모레 · 글피, ‘금요일’, ‘이번주 금요일’, ‘다음주 월요일’, ‘다다음주 금요일’. ‘금요일까지 제출’은 10월 23일, 제목은 ‘제출’이에요.

  • 며칠 뒤 ‘3일 후’는 오늘부터 사흘 뒤인 10월 20일이에요. ‘2주 후’ · ‘3개월 후’ · ‘하루 뒤’도 읽고 ‘30분 후’ · ‘1시간 후’는 시각까지 정해요.

  • 날짜를 직접 ‘10월 20일’ · ‘10/20’ · ‘10.20’ · ‘20일’ · ‘다음달 5일’ · ‘2026-11-03’ · ‘27년 5월 23일’.

  • 시각 ‘오후 3시’ · ‘3시 반’ · ‘2시 30분’ · ‘15:00’ · ‘정오’ · ‘자정’ · ‘저녁 7시’ · ‘밤 11시’. 오전 · 오후를 빼고 쓰면 아래 규칙대로 읽어요.

  • 붙여 쓴 말 ‘금요일엔’ · ‘3시쯤’ · ‘20일경’ · ‘내일까지’ · ‘3시 정각에’처럼 조사나 ‘쯤’ · ‘경’을 붙여도 읽고 그 말까지 제목에서 빼요. ‘3일 후 마감’의 제목은 ‘마감’이에요.

  • 기간 데스크톱 · 모바일 앱에서는 ‘10월 20일~22일’ · ‘3시~5시’를 시작과 끝으로 넣어요. 웹은 기간을 마감 하나로 줄이지 않고 제목에 그대로 둬요.

빠른 추가 창에서는 시작 알림도 같이 적을 수 있어요. ‘30분 전 알림’ · ‘1시간 전 알림’ · ‘하루 전 알림’ · ‘정시 알림’을 읽어요. 그냥 ‘알림’만 쓴 것은 읽지 않아요. ‘알림 기능 구현’처럼 알림이 제목의 일부인 경우가 많아서예요. ‘하루 전 알림 기능 개발’처럼 알림 뒤에 할 일이 이어지면 알림으로 읽지 않고 제목에 그대로 둬요.

오전 · 오후를 빼면 업무 시간으로 읽어요

‘3시 회의’의 3시가 새벽 3시일 리는 거의 없어요. 그래서 오전 · 오후 없이 쓴 시각은 업무 시간으로 읽어요. 1시부터 6시까지는 오후(13~18시), 7시부터 11시까지는 오전, 12시는 정오예요. ‘3:30’처럼 콜론으로 써도 같아서 오후 3시 30분이 돼요. 24시간제로 쓴 ‘14시’, 앞에 0을 붙인 ‘03시’ · ‘03:30’은 쓴 그대로 읽어요.

12시간 시계판. 1시부터 6시까지는 강조색, 7시부터 11시까지는 밝은 회색, 12시는 어두운 회색으로 칠해져 있고 바깥에 13~18, 07~11, 12가 적혀 있다. 가운데에 ‘3시’, 그 아래 15:00. 오른쪽에 ‘1~6시 → 오후(13:00~18:00 · ‘3:30’도 15:30)’, ‘7~11시 → 오전’, ‘12시 → 정오’, 그 아래 ‘쓴 그대로: 14시 · 03시 · 03:30 · 오후 3시’, ‘밤: 밤 1~5시는 다음 날 새벽 · 밤 12시는 자정’, ‘지난 시각: 오전 10시에 ‘7시’ → 내일 07:00’.
세 앱이 함께 쓰는 정본 파서의 규칙이에요. 바깥 숫자가 실제로 들어가는 24시간제 시각이에요.

‘밤’을 붙이면 조금 달라요. ‘밤 1시’부터 ‘밤 5시’까지는 자정을 넘긴 새벽이고 ‘밤 12시’는 자정이에요. 그래서 ‘오늘 밤 1시 배포’는 내일 01:00, ‘오늘 밤 12시 마감’은 내일 00:00이에요. ‘24:00 마감’도 그날이 끝나는 자정이라 내일 00:00이에요. 날짜 없이 시각만 썼는데 그 시각이 이미 지났으면 내일로 잡아요. 오전 10시에 ‘7시 조깅’을 쓰면 내일 07:00이에요.

날짜로 읽지 않는 말

숫자가 들어 있다고 다 날짜는 아니에요. ‘2.5 버전’ · ‘3일간 워크샵’ · ‘1일차 회고’ · ‘3시간 회의’ · ‘주 3일 운동’ · ‘16:9 화면’ · ‘다음 주제 발표’는 마감을 만들지 않아요. ‘20일 경기 관람’은 20일만 날짜로 읽고 ‘경기 관람’은 제목에 남겨요. 달력에 없는 날짜도 걸러요. ‘2월 30일 마감’ · ‘13월 5일 회의’는 마감을 만들지 않아요. 비슷한 다른 날짜로 슬쩍 바꿔 읽지도 않아요.

같은 문장, 세 가지 답

이 기능은 웹 · 데스크톱 · 모바일에 따로 있었어요. 앱마다 필요할 때 조금씩 고쳐 오다 보니 같은 문장을 다르게 읽게 됐어요. ‘내일 3시’를 웹은 시각 없이 날짜로만, 데스크톱은 새벽 3시로, 모바일은 오후 3시로 읽었어요. ‘3일 후’는 웹이 11월 3일, 데스크톱이 10월 3일, 모바일이 10월 20일이었어요. ‘다음주 월요일’은 웹과 데스크톱이 10월 26일, 모바일이 10월 19일이었고요. 기대값 표가 아직 104건이던 때 세 앱의 예전 파서를 돌려 보니 웹은 46건, 데스크톱은 63건, 모바일은 73건을 맞혔어요.

같은 표의 지금. 세 앱 모두 ‘내일 3시’는 15:00, ‘3일 후’는 10월 20일, ‘다음주 월요일’은 10월 19일. 맞힌 수: 기대값 표 324건 중 세 앱 모두 324.
표. 세 줄 × 웹 · 데스크톱 · 모바일. ‘내일 3시’: 날짜만 · 03:00 · 15:00, ‘3일 후’: 11월 3일 · 10월 3일 · 10월 20일, ‘다음주 월요일’: 10월 26일 · 10월 26일 · 10월 19일. 지금의 답과 다른 칸에는 X 표시. 아래 맞힌 수: 기대값 표 104건 중 46 · 63 · 73.
경계를 왼쪽으로 끌면 지금의 답으로 바뀌어요. 지금은 10월 17일(토) 오전 10시예요.

그래서 파서를 한 파일로 합쳤어요. 웹에 정본을 두고 데스크톱과 모바일에는 한 글자도 다르지 않은 사본을 둬요. 이 파일은 다른 코드를 하나도 불러오지 않아요. 예전 웹과 데스크톱이 기대던 날짜 라이브러리(chrono-node)도 쓰지 않아요. 모바일의 자바스크립트 엔진에서도 그대로 돌아야 하고 세 앱의 빌드 설정이 저마다 달라서예요. 그리고 입력과 정답을 한 줄씩 적은 기대값 표를 만들어 세 저장소가 같은 표로 테스트해요. 어느 한 곳만 고치면 다른 두 앱의 테스트가 실패해요.

parseDueDate.fixtures.jsonjson
{"input": "내일 3시 회의",
 "expect": {"date": "2026-10-18", "time": "15:00", "title": "회의"}},
{"input": "明日3時に会議",
 "expect": {"date": "2026-10-18", "time": "15:00", "title": "会議"}},
{"input": "3일 후 마감",
 "expect": {"date": "2026-10-20", "time": null, "title": "마감"}},
{"input": "2.5 버전", "expect": null},

표를 만들면서 애매하던 규칙도 정했어요. ‘다음주 월요일’은 다음 주의 월요일이고 주가 언제 시작하는지는 설정을 따라요. 주를 일요일부터 시작하도록 두었다면 일요일인 10월 18일에 쓴 ‘다음주 월요일’은 10월 26일이에요. 기본값인 월요일 시작이라면 바로 다음 날인 10월 19일이에요. ‘이번주 금요일’과 요일만 쓴 ‘금요일’은 오늘 다음에 오는 그 요일이고 오늘이 그 요일이면 일주일 뒤예요. 연도 없이 쓴 날짜는 쓴 그대로 올해의 그 날짜예요. 10월 17일에 ‘10월 5일 결산’을 쓰면 이미 지난 10월 5일로 들어가요. 일본어 · 영어 사례를 더한 지금 표는 324건이고 세 앱 모두 324건을 다 맞혀요.

영어 · 일본어도 같은 규칙으로 읽어요

영어로 쓴 제목도 읽어요. ‘call mom friday 3pm’은 마감이 10월 23일 15:00, 제목이 ‘call mom’이 돼요. ‘tmr 9am gym’은 내일 09:00, ‘in 3 days’는 10월 20일이에요. 오전 · 오후 없이 쓴 ‘at 3’도 오후 3시로 읽어요. ‘tomorrow evening at 7’처럼 ‘evening’ · ‘morning’을 붙이면 그 말을 따르고 ‘tonight at 9’는 오늘 21:00이에요. 시작 알림은 ‘remind me 30 min before’처럼 써요.

일본어도 읽어요. ‘明日3時に会議’는 마감이 내일 15:00, 제목이 ‘会議’가 돼요. ‘金曜までに提出’은 10월 23일이고 제목은 ‘提出’, ‘来週月曜’는 10월 19일이에요. 일본어의 ‘3時’도 오전 · 오후가 없으면 오후 3시이고 ‘今夜1時’는 그 밤이 지난 새벽 1시예요. 일본어는 띄어 쓰지 않아서 ‘3時間’ · ‘3日間’ · ‘明日香’처럼 뒤에 붙은 글자로 뜻이 바뀌면 날짜로 읽지 않아요. ‘説明日程’(설명 일정)처럼 긴 낱말 안에 든 ‘明日’도 날짜가 아니에요. 날짜를 뺀 자리는 띄우지 않고 앞뒤를 그대로 붙여요. ‘企画書を明日までに提出’의 제목은 ‘企画書を提出’이에요. 시작 알림은 ‘30分前に通知’처럼 써요.

다음에 할 일을 적을 때 빠른 추가 창을 열고(웹 ⌘⇧Y · 데스크톱 앱 ⌘⇧N) ‘내일 3시 회의’라고 써 보세요. 자세한 사용법은 탭플 가이드의 빠른 태스크 추가에 있어요. 생각과 다르게 읽는 표현을 알려 주시면 기대값 표에 한 줄을 더해서 세 앱을 함께 고칠게요.

탭플 시작하기