노션 수식 2.0(Formula 2.0) 완전 정복: 날짜 계산, 텍스트 파싱, 다중 조건문 작성법

변수 선언 let(), switch문 대체 ifs(), 리스트 처리와 맵 함수, 진행률 바(Progress Bar) 제작까지 완전히 새로워진 노션 포뮬러 2.0의 실무 문법을 해부합니다.

1. 노션 수식 2.0이 가져온 혁명적 변화

과거 노션(Notion)의 수식은 단순한 문자열 연결이나 기본적인 사칙연산 수준에 머물렀습니다. 조건문 하나를 쓰려고 해도 괄호가 끝없이 닫히는 지옥의 중첩 if() 문을 작성해야 했고, 날짜 차이를 계산하거나 관계형 데이터베이스의 속성값을 가공하는 것은 거의 불가능에 가까웠습니다.

하지만 새롭게 업데이트된 **수식 2.0(Formula 2.0)**은 자바스크립트나 파이썬에 버금가는 강력한 프로그래밍 문법을 노션 데이터베이스에 직접 부여했습니다:

  1. 변수 선언 함수 let() 지원: 동일한 계산식을 반복하지 않고 변수에 담아 재사용 가능.
  2. 다중 분기 함수 ifs() 도입: 지저분한 중첩 IF문 없이 여러 조건을 순차적으로 깔끔하게 판별.
  3. 배열(List)과 고차 함수 지원: map(), filter(), join()을 통해 관계형으로 연결된 여러 페이지의 데이터를 자유자재로 추출.
  4. 리치 텍스트 서식화 style() 지원: 수식 결과값에 직접 볼드, 이탤릭, 배경색, 폰트 색상을 입혀 시각화 강화.

2. 핵심 함수 ① let(): 변수로 가독성과 속도 잡기

수식 2.0에서 가장 혁신적인 함수는 let()입니다. 중간 계산 결과를 변수로 정의해 두고 마지막 식에서 조립할 수 있습니다.

let(
  변수명, 계산식,
  변수명2, 계산식2,
  최종결과식
)

실무 예제: 프로젝트 D-Day 및 남은 일수 판별기

마감일(prop("마감일"))과 상태(prop("상태"))를 기준으로 진행 상황 뱃지를 동적으로 출력하는 수식입니다.

let(
  today, now(),
  dueDate, prop("마감일"),
  daysLeft, dateBetween(dueDate, today, "days"),
  isDone, prop("상태") == "완료",
  
  if(
    isDone,
    "✅ 프로젝트 완료".style("green", "b"),
    if(
      empty(dueDate),
      "⚪ 일정 미정".style("gray"),
      if(
        daysLeft < 0,
        ("🚨 " + abs(daysLeft) + "일 지연됨").style("red", "b"),
        if(
          daysLeft == 0,
          "🔥 오늘 마감".style("orange", "b"),
          ("⏳ D-" + daysLeft).style("blue")
        )
      )
    )
  )
)

변수 daysLeft를 한 번 정의해 둔 덕분에 dateBetween()을 네 번이나 반복 호출할 필요가 없어 수식의 가독성과 연산 효율이 획기적으로 개선됩니다.


3. 핵심 함수 ② ifs(): 중첩 IF 지옥 탈출하기

여러 단계의 등급이나 우선순위를 매길 때 과거에는 if(조건1, 값1, if(조건2, 값2, if(조건3, 값3, ...)))처럼 닫는 괄호를 수십 개 맞춰야 했습니다.

ifs() 함수를 사용하면 조건과 반환값을 짝지어 나열하기만 하면 됩니다.

ifs(
  prop("진행률") == 1, "🏆 완벽 달성",
  prop("진행률") >= 0.8, "🟢 목표 근접",
  prop("진행률") >= 0.5, "🟡 절반 완료",
  prop("진행률") > 0, "🟠 착수 진행",
  "⚪ 미착수"
)

4. 관계형 데이터 롤업을 대체하는 map()과 filter()

수식 2.0의 진가는 관계형(Relation) 속성과 만났을 때 폭발합니다.

예를 들어 ‘프로젝트’ 데이터베이스에 여러 개의 ’하위 태스크’가 관계형(prop("하위 태스크"))으로 묶여 있다고 합시다. 과거에는 롤업(Rollup) 속성을 거쳐야만 개수를 셀 수 있었지만, 이제는 수식 한 줄로 필터링과 집계가 끝납니다.

완료된 하위 태스크 개수 세기:

prop("하위 태스크")
  .filter(current.prop("상태") == "완료")
  .length()

진행 중인 태스크들의 담당자 이름만 쉼표로 나열하기:

prop("하위 태스크")
  .filter(current.prop("상태") == "진행중")
  .map(current.prop("담당자").name())
  .unique()
  .join(", ")

이처럼 별도의 롤업 속성을 지저분하게 추가할 필요 없이, 단 하나의 수식 셀에서 관계형 객체의 속성을 직접 탐색하고 계산할 수 있습니다.


5. 실전 제작: 시각적 10칸 프로그레스 바(Progress Bar)

수식 2.0을 사용하면 외부 위젯 없이도 텍스트 기호와 스타일을 조합해 아름다운 진행률 바를 1초 만에 렌더링할 수 있습니다.

let(
  val, round(prop("진행률") * 10),
  filled, repeat("■", val),
  empty, repeat("□", 10 - val),
  pct, round(prop("진행률") * 100) + "%",
  
  (filled + empty).style("green") + " " + pct.style("gray", "b")
)

출력 예시: ■■■■■■□□□□ 60%


6. 결론: 수식 2.0 마스터 로드맵

수식 2.0은 노션을 단순한 메모 앱에서 완벽한 노코드(No-code) 비즈니스 애플리케이션 플랫폼으로 격상시켰습니다.

  • 1단계: 기존의 복잡한 조건문을 ifs()로 리팩토링하세요.
  • 2단계: 반복 계산되는 속성을 let() 변수로 묶어 가독성을 높이세요.
  • 3단계: 불필요한 롤업 열들을 삭제하고 relation.map().filter() 조합으로 워크스페이스를 슬림화하세요.

이 세 가지만 실무 템플릿에 적용해도 데이터베이스 로딩 속도가 빨라지고 유지보수 스트레스가 사라집니다.

클락가든 실무 가이드 품질 원칙

본 저널의 모든 가이드는 Microsoft 365, Google Workspace, Notion 최신 빌드에서 직접 테스트를 거쳐 집필됩니다. 수식 오류나 버전 호환성 제보가 있으실 경우 연구팀 문의를 통해 의견을 남겨주시면 정정 정책에 따라 24시간 이내에 반영합니다.