노션 포뮬러(Formula) 2.0 기본 문법 및 실무 활용 예시 5가지

노션 포뮬러 2.0은 2023년 도입된 이후 2026년 6월 현재까지 노션 데이터베이스 연산의 표준 문법으로 유지되고 있는 함수형 수식 언어다. 본 문서는 포뮬러 2.0의 핵심 문법 구조, 점 표기법(dot notation), 변수 선언, 리스트(배열) 처리 함수를 체계적으로 정리하고 실무에 즉시 적용 가능한 다섯 가지 예시를 제시한다. 결론적으로 포뮬러 2.0은 롤업(Rollup) 속성을 별도로 생성하지 않고도 관계형 데이터를 직접 가공하도록 지원함으로써 데이터베이스 설계의 복잡도를 근본적으로 낮춘다.

1. 기본 개념 및 정의

노션 포뮬러는 데이터베이스의 속성(Property) 값을 입력으로 받아 계산·가공·서식화한 결과를 반환하는 수식 속성이다. 2026년 6월 기준 노션의 모든 데이터베이스에서 사용되는 문법은 '포뮬러 2.0'이며, 2023년 이전에 사용되던 1.0 문법은 신규 작성이 불가능하고 기존 수식은 노션이 자동으로 2.0 문법으로 변환한 상태로 운영된다. 양 버전은 하위 호환되지 않으므로 과거 1.0 기준의 함수 명칭이나 구조를 그대로 입력하면 오류가 발생한다는 점에 유의해야 한다.

포뮬러 2.0의 가장 본질적인 변화는 데이터 타입의 확장이다. 1.0 시절 수식의 출력값은 텍스트(string), 숫자(number), 체크박스(boolean) 세 가지로 제한적이었으나, 2.0에서는 날짜(date), 사람(person), 페이지(page), 리스트(list) 타입까지 직접 반환할 수 있다. 이로 인해 수식 하나가 관련 데이터베이스의 페이지 객체 자체를 결과로 내보내거나, 여러 값을 묶은 배열을 출력하는 고급 연산이 가능해졌다.

두 번째 핵심 개념은 점 표기법이다. 포뮬러 1.0이 함수를 중첩하여 안쪽에서 바깥쪽으로 읽어야 했던 것과 달리, 2.0은 값 뒤에 점을 붙여 함수를 연쇄 호출하는 방식을 지원한다. 예를 들어 length(prop("이름"))은 prop("이름").length()로 표현할 수 있으며, 후자가 왼쪽에서 오른쪽으로 읽히는 자연스러운 흐름을 가진다. 또한 편집기 화면에서는 속성을 prop("이름") 형태가 아닌 속성명 그대로 참조하도록 표시되지만, 수식을 복사하여 외부로 붙여넣을 경우 내부적으로는 여전히 prop("이름") 구조가 유지된다는 점이 특징적이다.

2. 핵심 활용 방법 및 단계별 가이드

2-1. 수식 작성과 점 표기법 적용 방법

포뮬러 작성은 데이터베이스에 '수식(Formula)' 타입 속성을 추가한 뒤 편집기를 여는 것으로 시작한다. 2.0 편집기는 여러 줄 입력을 지원하므로 긴 수식을 줄바꿈하여 가독성 있게 구성할 수 있고, /* 주석 내용 */ 형태의 주석을 삽입하여 각 줄의 역할을 문서화할 수 있다. 작성 도중 편집기가 실시간으로 타입을 검사(type-check)하여 오류 위치를 강조 표시하므로, 문법 오류를 즉시 교정하는 것이 가능하다.

리스트를 다루는 핵심 함수는 map(), filter(), length()이다. map() 함수는 리스트의 각 항목을 순회하며 지정한 표현식을 적용한 새 리스트를 반환한다. 이때 순회 중인 개별 항목은 current 키워드로, 항목의 순번은 0부터 시작하는 index 키워드로 참조한다. filter() 함수는 조건을 만족하는 항목만 추려낸 리스트를 반환하며, length()는 리스트의 항목 개수를 정수로 반환한다. 관계형(Relation) 속성에 map(current.prop("상태"))를 적용하면 연결된 모든 페이지의 상태 값을 추출할 수 있고, 여기에 filter(current == "완료").length()를 연쇄하면 별도의 롤업 속성 없이 완료된 항목의 수를 직접 계산할 수 있다.

2-2. 변수 선언과 작성 시 주의사항

복잡한 수식을 반복 사용할 때는 let()과 lets() 함수로 변수를 선언하는 것이 권장된다. let()은 변수 하나를 정의하여 수식 내에서 재사용하며, lets()는 여러 변수를 한 번에 정의한다. 변수를 활용하면 동일한 계산이 여러 위치에 중복되는 것을 방지하고, 연산 로직과 최종 출력 서식을 분리하여 유지보수성을 높일 수 있다.

작성 시 반드시 유의할 사항은 다음과 같다. 첫째, 텍스트 비교 시 등호는 = 하나가 아니라 ==를 사용하며, '같지 않음'은 != 로 표현한다. 둘째, 조건 분기에서 if()를 여러 번 중첩하는 대신 ifs() 함수를 사용하면 다중 조건을 평탄하게 나열할 수 있어 가독성이 향상된다. 셋째, 빈 값 판별에는 empty() 함수를 사용하되 0, false, 빈 리스트도 빈 값으로 처리된다는 점을 고려해야 한다. 넷째, Created by와 Last edited time 같은 기본 속성은 페이지 생성 직후 일시적으로 비어 있을 수 있어 필터 적용 시 예상과 다른 결과가 나올 수 있다. 또한 2026년 현재 노션은 자연어로 의도를 입력하면 수식을 자동 생성하는 AI 포뮬러 기능을 제공하므로, 문법에 익숙하지 않은 사용자는 이를 초안 작성 도구로 병행 활용하는 것이 효율적이다.

3. 실무 적용 예시 5가지

  • 프로젝트 진행률 계산: 관계형으로 연결된 하위 작업의 완료 비율을 산출하는 수식이다. prop("작업").map(current.prop("상태")).filter(current == "완료").length()로 완료 수를 구하고, 전체 작업 수로 나눈 뒤 100을 곱하여 백분율을 계산한다. let() 함수로 이 값을 percentComplete 변수에 담은 후 ifs()로 100이면 "완료", 0보다 크면 "진행 중", 그 외에는 "미시작"을 반환하도록 구성하면 롤업 없이 진행 상태가 자동 표시된다.
  • 마감일 D-Day 표시: dateBetween(prop("마감일"), now(), "days") 수식으로 현재 시점과 마감일 사이의 일수 차이를 계산한다. 결과가 음수이면 기한 초과를, 0이면 당일을, 양수이면 남은 일수를 의미하므로 ifs() 함수로 각 상황에 맞는 문구를 출력하도록 분기하면 일정 관리 효율이 높아진다.
  • 조건부 색상 강조: style() 함수는 텍스트에 색상과 굵기 등 서식을 적용한다. 예컨대 마감일이 지난 항목에 대해 "기한 초과".style("red", "b")를 반환하도록 설정하면 해당 셀이 굵은 빨간색으로 시각화된다. 반대로 적용된 서식을 제거할 때는 unstyle() 함수를 사용한다.
  • 변수 기반 복합 라벨 생성: lets() 함수로 두 날짜 속성의 차이를 시간 단위로 계산한 변수와 보정 변수를 동시에 선언한 뒤, 이를 조합하여 'HH:MM:SS' 형태의 소요 시간 라벨을 만든다. 동일한 계산을 반복 호출하지 않으므로 수식 길이가 단축되고 연산 부담이 줄어든다.
  • 관계형 데이터의 특정 정보 추출: 롤업을 생성하지 않고도 prop("관계속성").map(current.prop("담당자"))처럼 점 표기법으로 연결 페이지의 임의 속성을 직접 읽어올 수 있다. 추출된 리스트에 min(), max(), sum() 등을 연쇄하면 최솟값·최댓값·합계를 즉시 산출할 수 있어 데이터 분석 워크플로가 간결해진다.

[결론]

노션 포뮬러 2.0은 데이터 타입 확장, 점 표기법, 리스트 처리 함수, 변수 선언이라는 네 축으로 구성된 함수형 언어다. 핵심 요지는 다음과 같이 정리된다. 첫째, 출력값이 페이지·날짜·사람·리스트까지 확장되어 표현력이 강화되었다. 둘째, map·filter·length와 current·index 키워드를 통해 롤업 없이 관계형 데이터를 직접 가공할 수 있다. 셋째, let·lets 변수와 ifs·style 함수로 복잡한 로직을 단순화하고 결과를 시각화할 수 있다. 2026년 6월 현재 후속 버전인 포뮬러 3.0은 출시되지 않았으며, 2.0이 여전히 표준 문법이므로 본 문서에서 정리한 구조와 예시는 그대로 실무에 적용 가능하다.

댓글

이 블로그의 인기 게시물

직장인이 반드시 알아야 할 필수 엑셀 통계 함수 5가지 (SUMIF, AVERAGEIF)

구글 스프레드시트 IMPORTRANGE 함수로 다른 문서 데이터 불러오기

엑셀 조건부 서식 활용하여 가독성 높은 보고서 시각화하는 법