함수 심화(2): prop()과 empty()를 활용한 조건부 서식 만들기


노션 데이터베이스를 꾸미다 보면 가장 거슬리는 것이 바로 데이터가 입력되지 않았는데도 덩그러니 떠 있는 '0'이나 흉한 에러 메시지입니다. 

엑셀처럼 셀 색상을 자동으로 바꾸는 조건부 서식 기능이 노션에는 없다고 생각하시나요. 오늘은 prop()과 empty() 함수를 조합하여, 상황에 따라 스스로 상태를 표시하는 똑똑한 데이터베이스를 만드는 방법을 깊이 있게 다뤄보겠습니다.




1. 90%가 겪는 수식 오류와 지저분한 대시보드


처음 노션 함수를 다룰 때 저 역시 가장 많이 범했던 실수가 있습니다. 데이터가 들어있을 때만 생각하고 수식을 짰다가, 빈 칸이 생기자마자 전체 페이지가 에러 메시지로 도배되는 경험을 했습니다. 

특히 날짜나 숫자를 계산할 때 원본 데이터가 비어 있으면 다음과 같은 보기 싫은 현상이 발생합니다.


  • 날짜 계산 수식에서 날짜가 없으면 엉뚱한 숫자가 나오거나 에러가 뜹니다.
  • 진행률 바를 만들었는데, 할 일이 없는데도 '0%' 혹은 빈 게이지가 지저분하게 자리를 차지합니다.
  • 텍스트를 합치는 수식에서 'null' 혹은 빈 공간이 더해져 문장 구조가 어색해집니다.


많은 분들이 이를 해결하지 않고 방치하다가 결국 보기 싫어서 해당 속성을 숨겨버리곤 해요. 하지만 진정한 노션 활용은 데이터의 유무까지 컨트롤하는 데서 시작됩니다. 제가 컨설팅을 하며 강조하는 원칙은 빈 데이터는 철저히 숨기고, 필요한 정보만 보여주는 '조건부 노출'입니다.


화1



2. prop()과 empty(), 데이터 제어의 핵심 도구


이 두 함수는 단독으로 쓰이기보다 주로 if() 함수와 결합하여 강력한 위력을 발휘합니다. 각 함수의 정확한 역할과 메커니즘을 이해하는 것이 중요합니다.


  • prop("속성명"): Property의 약자로, 데이터베이스 내의 특정 열(속성)에 있는 값을 가져오는 함수입니다. 노션의 모든 수식은 이 함수를 통해 재료를 수집합니다.
  • empty(값): 괄호 안의 값이 비어있는지(Null) 확인하는 검사관 역할을 합니다. 만약 비어있다면 true를, 값이 있다면 false를 반환합니다.


이 두 가지를 결합하면 "만약(if) 이 속성(prop)이 비어있다면(empty), 아무것도 표시하지 말고, 값이 있다면 계산하라"는 논리를 만들 수 있습니다. 이 논리가 바로 노션판 조건부 서식의 기초가 됩니다.



3. 실전 활용 1: 값이 없을 때 깔끔하게 빈칸 만들기


가장 기본적이면서도 필수적인 테크닉입니다. 예를 들어 마감일이 정해지지 않은 작업에 대해 D-Day를 계산하면 이상한 숫자가 나옵니다. 이때는 다음과 같은 논리로 수식을 구성해야 합니다.


  • if(empty(prop("마감일")), "", dateBetween(prop("마감일"), now(), "days"))
  • 해석: 마감일 속성이 비어있다면 빈 문자열("")을 출력하고, 그렇지 않다면 디데이를 계산하라.


이렇게 설정해 두면 데이터가 없는 행은 아무런 표시도 뜨지 않아 시각적으로 매우 깔끔해집니다. 특히 클라이언트에게 공유하는 페이지라면 이런 디테일이 문서의 완성도를 결정짓습니다. 꼭 한번 적용해 보세요.


화2



4. 실전 활용 2: 텍스트 기반의 조건부 상태 표시기


노션은 엑셀처럼 셀 배경색을 자동으로 바꿀 수는 없지만, 수식을 이용해 텍스트로 상태를 명확하게 보여줄 수는 있습니다. 저는 프로젝트 관리 템플릿을 만들 때 이 방법을 사용하여 업무의 긴급도를 시각화합니다.


  • 우선순위 속성이 비어있으면: "설정필요"라는 텍스트 출력
  • 마감일이 지났으면: "연체" 혹은 "[경고]" 텍스트 출력
  • 완료 속성이 체크되어 있으면: "완료" 텍스트 출력


이런 식으로 데이터의 상태에 따라 텍스트 아이콘을 동적으로 보여주면, 굳이 필터를 걸지 않아도 어떤 업무가 위험한지 한눈에 파악할 수 있습니다. 

단순히 정보를 보여주는 것을 넘어, 사용자의 행동을 유도하는 내비게이션 역할을 하게 되는 셈입니다.



5. 실전 활용 3: 다중 조건을 활용한 복합 검증 시스템


이제 난이도를 조금 더 높여서 30% 더 깊이 있는 활용법을 알려드릴게요. 실무에서는 조건이 하나인 경우보다 여러 개인 경우가 훨씬 많습니다. 예를 들어 "담당자는 배정되었는데 마감일이 없는 경우"와 "마감일은 있는데 담당자가 없는 경우"를 구분해서 경고를 줘야 할 때가 있죠.


이때는 and와 or 연산자를 empty() 함수와 섞어서 사용해야 합니다. 제가 팀원 관리 페이지에서 실제로 사용하는 로직을 리스트로 정리했습니다.


  • 조건 1: 담당자와 마감일이 모두 비어있는 경우 -> "배정 대기" 출력
  • 조건 2: 담당자는 있는데( !empty(prop("담당자")) ) 마감일이 없는 경우 -> "일정 미정" 출력
  • 조건 3: 둘 다 채워져 있는데 진행률이 0인 경우 -> "착수 전" 출력


이렇게 세밀하게 조건을 나누면 관리자가 일일이 들여다보지 않아도, 시스템이 알아서 구멍 난 데이터를 찾아줍니다. and(조건1, 조건2) 형태로 괄호를 묶어주는 것만 주의하시면 누구나 복잡한 로직을 짤 수 있어요.


화3



6. 함수 사용 시 주의해야 할 데이터 타입의 함정


empty() 함수를 사용할 때 90%가 실수하는 부분이 바로 '체크박스'와 '숫자 0'의 처리입니다. 이 부분은 정말 중요하니 꼭 체크해 두셔야 해요.


  • 체크박스의 함정: 체크박스는 비어있는 상태가 empty가 아니라 false입니다. 따라서 empty(prop("체크박스"))라고 쓰면 작동하지 않습니다. 체크박스는 그냥 prop("체크박스") == false 로 검사해야 합니다.
  • 숫자 0의 함정: 노션에서 숫자 0은 '비어있는 값'이 아니라 '0이라는 값'이 존재하는 것입니다. 따라서 empty() 함수로 0을 걸러낼 수 없습니다. 만약 0일 때 빈칸으로 만들고 싶다면 if(prop("숫자") == 0, "", ...) 형태로 별도 조건을 걸어야 합니다.
  • 이 미세한 차이를 모르면 아무리 수식을 고쳐도 원하는 결과가 나오지 않아 밤을 새우게 됩니다.



7. 텍스트 형변환을 통한 에러 방지 (format 활용)


마지막으로 팁을 하나 더 드리자면, 결과값을 출력할 때 format() 함수를 습관적으로 사용하는 것이 좋습니다. if문을 쓸 때 참인 결과는 텍스트인데 거짓인 결과가 숫자라면 데이터 타입 불일치로 에러가 납니다.


  • 에러 발생 예시: if(empty(prop("값")), "미입력", 100) -> 텍스트와 숫자가 섞여서 에러.
  • 해결 방법: if(empty(prop("값")), "미입력", format(100)) -> 둘 다 텍스트로 통일되어 정상 작동.



조건부 서식의 핵심은 결국 '데이터가 있을 때와 없을 때를 구분하는 것'입니다. 오늘 소개한 prop()과 empty() 함수만 자유자재로 다룰 수 있어도, 여러분의 데이터베이스는 단순한 기록장을 넘어 살아있는 유기체처럼 동작하게 될 것입니다. 

지금 당장 흉하게 비어있는 칸들을 찾아 이 수식들을 적용해 보세요. 깔끔해진 페이지를 보면 업무 의욕이 절로 솟아날 것입니다.






댓글