
안녕하세요, 워크플로우 아키텍트, 수월한입니다.👋
노션을 사용하다 보면 처음에는 간단했던 수식이, 조건이 하나둘 추가될수록 걷잡을 수 없이 길어지는 경우가 있어요. 그러다 나중에는 괄호가 어디서 열리고 닫히는지조차 헷갈려서 도저히 손 쓸 엄두조차 못 내게 되죠.
"똑같은 계산식을 매번 반복해서 적어야 하나?" "복잡한 if 조건문을 좀 더 깔끔하게 정리할 순 없을까?"
이런 고민을 하고 계신다면, 오늘 소개해 드릴 `let()`과 `lets()` 함수가 완벽한 해결책이 될 거예요. 여러분의 10줄짜리 수식을 단 3줄로 줄여주는 마법 같은 최적화 방법을 지금 바로 공개합니다.✨
🧠 노션 let / lets 함수란 무엇인가요?
`let()`과 `lets()` 함수는 프로그래밍의 '변수' 개념을 노션 수식에 도입한 기능이에요. 쉽게 말해, 길고 복잡한 수식이나 특정 값에 '별명(이름)'을 붙여주는 것이랍니다. 한 번 별명을 지어두면, 그다음부터는 긴 수식을 다시 쓰는 대신 '별명'만 부르면 되기 때문에 수식이 획기적으로 짧아져요.
1. `let()` 함수
- 특징: 단 하나의 변수를 선언할 때 사용합니다.
- 구조: `let(변수명, 변수값, 계산식)` (하나의 변수를 선언하여 계산)
// 예시 (결과 = 5)
let(
x, 3,
x + 2
)
2. `lets()` 함수
- 특징: 여러 개의 변수를 동시에 선언할 때 사용합니다. (저는 실무에서 이걸 훨씬 많이 씁니다!)
- 구조: `lets(변수1, 값1, 변수2, 값2, ..., 계산식)`
// 예시 (결과: 6)
lets(
x, 3,
y, 2,
x * y
)
🌱기본 사용법: let 함수 (변수 1개)
가장 기본적인 `let()` 함수를 먼저 볼게요. `let()`을 이용하여 반복되는 계산식을 하나의 변수로 묶는 과정입니다.
😐Before: let 함수 사용 전
학생들의 점수를 계산하는 상황을 가정해 봅시다. 과제 점수(30%)와 참여도(70%)를 합산하고, 그 합계가 80점이 넘으면 가산점 10점을 주는 수식입니다.
/* 합계 점수 계산 */
round(prop("과제 점수") * 0.3 + prop("참여도") * 0.7)
+
/* 80점 넘으면 가산점 부여 */
if(round(prop("과제 점수") * 0.3 + prop("참여도") * 0.7) > 80, 10, 0)
문제점
`prop("과제 점수") * 0.3 + prop("참여도") * 0.7`이라는 긴 수식이 두 번이나 반복되고 있습니다. 만약 과제 점수 반영 비율을 30%에서 40%로 고쳐야 한다면? 두 군데를 모두 찾아 고쳐야 하는 비효율이 생기죠.
😄 After: let 함수 적용 후
let(
/* score라는 이름으로 합계 수식을 정의 */
score, round(prop("과제 점수") * 0.3 + prop("참여도") * 0.7),
/* 이제 score라는 단어만 쓰면 됩니다 */
score + if(score > 80, 10, 0)
)
개선된 점
반복되던 긴 계산식을 score라는 변수에 담았습니다. 이제 계산식이 한눈에 들어오고, 나중에 비율을 수정할 때도 score 부분만 고치면 전체가 자동으로 적용됩니다.
1. 변수명에는 띄어쓰기를 사용할 수 없어요. (예: my score (X) → myScore (O))
2. 변수명은 숫자로 시작할 수 없어요.
3. 변수명은 의미 있는 영단어 조합을 사용해야 나중에 알아보기 좋아요
🚀 실전 활용: lets 함수 (변수 2개 이상)
실제 노션 활용에서는 조건이 하나인 경우보다 여러 개인 경우가 더 많죠. 이때는 `lets()` 함수가 빛을 발합니다! 저는 수식이 정말 간단하지 않은 한, 항상 `lets()`를 사용하여 각 값/수식/조건을 변수로 선언해 두고 사용한답니다.
😐 Before: 복잡하게 얽힌 조건문
제목이 길거나(10자 이상), 태그에 'SEO'가 있거나, 완료된 항목에 대해 각각 다른 점수를 부여하는 수식입니다.
if(length(prop("제목")) > 10, 40, 0)
+ if(contains(prop("태그"), "SEO"), 30, 0)
+ if(prop("완료") == true, 30, 0)
이렇게 if 문이 덕지덕지 붙어 있으면, 나중에 "내가 이 점수를 왜 줬더라?" 하고 헷갈리게 됩니다. 이때 `lets()` 함수를 사용한다면 조금 더 수식을 편하게 이해하고 사용할 수 있게 됩니다. 😆
😄 After: lets로 의미 부여하기
lets(
isLongTitle, length(prop("제목")) > 10,
hasSEO, contains(prop("태그"), "SEO"),
isComplete, prop("완료") == true,
/* 논리가 명확한 최종 수식 */
if(isLongTitle, 40, 0) +
if(hasSEO, 30, 0) +
if(isComplete, 30, 0)
)
[해석]
- `isLongTitle: 제목이 긴가?
- `hasSEO`: SEO 태그가 있는가?
- `isComplete`: 완료되었는가?
각 조건에 이름을 붙여주니(변수 선언), 마지막 계산식이 마치 영어 문장을 읽는 것처럼 자연스러워졌죠? 이렇게 `lets()` 함수로 변수를 만들어두면 나중에 수식 또는 기준을 바꿔야 할 경우에도 특정 변수만 수정하면 되기 때문에 유지보수가 훨씬 편리해집니다.
lets를 이용해 수식을 작성할 땐 한 줄로 작성하기보다 변수 하나당 한 줄씩, Shift + Enter로 구분해 두세요.
나중에 수식을 수정할 때 훨씬 수월해져요.
🏆 고급 예제: D-Day 상태 표시기 만들기
오늘 배운 `lets()`를 이용하면 복잡할 것만 같았던 기능을 훨씬 수월하게 구현할 수 있어요. 오늘은 많은 분들이 궁금해하시는 '디데이 계산 및 이모지 표시' 예제를 준비했습니다. (날짜 계산은 수식이 길어지기 쉬운 대표적인 영역이죠.)
목표: 남은 기간에 따라 다른 이모지를 보여주기
- 기간 지남: 🔴
- 오늘: 📌
- 3일 이내: 🟡
- 그 외: 🟢
`daysLeft`라는 변수에 날짜 차이 값을 미리 저장해 두었기 때문에, 아래 if 조건문에서 `dateBetween(...)` 함수를 계속 반복해서 쓸 필요가 없어졌습니다. 훨씬 깔끔하죠?
lets(
/* 1. 디데이 계산 (오늘 날짜와 목표 날짜 차이) */
daysLeft, dateBetween(prop("날짜"), now(), "days"),
/* 2. 조건에 따른 결과 출력 */
if(daysLeft < 0, "🔴 기간 지남",
if(daysLeft == 0, "📌 오늘 마감",
if(daysLeft <= 3, "🟡 " + format(daysLeft) + "일 전",
"🟢 " + format(daysLeft) + "일 남음"
)
)
)
)
⚠️ 초보자가 자주 하는 실수
`let()` / `lets()` 함수를 처음 쓸 때 자주 겪는 오류 2가지, 꼭 주의하세요.
1. 변수 이름에 띄어쓰기 금지
변수명은 하나의 단어여야 합니다. 띄어쓰기가 필요하다면 대문자나 언더바(_)를 활용하세요.
- ❌ my score
- ⭕ myScore 또는 my_score
2. 괄호 위치 주의
`let()` 함수는 `let(변수, 값, 결과)` 형태로, 마지막 괄호 )가 모든 수식을 감싸고 있어야 해요. 그리고 변수를 선언한 범위 밖에서는 그 변수를 사용할 수 없는 점도 꼭 기억하세요.
✅ 마무리
노션 수식은 어렵게 짜는 것보다, '나중에 다시 봤을 때 이해할 수 있게' 짜는 것이 실력이에요. 오늘 배운 `let()과 `lets() 함수로 여러분의 복잡한 데이터베이스를 깔끔하게 재구성해보세요!
더 궁금한 수식이 있거나 해결되지 않는 오류가 있다면 댓글로 남겨주세요! 확인 후 답변드리겠습니다. 🙂
❓자주 묻는 질문 (FAQ)
Q1. let 함수와 lets 함수의 차이점은 무엇인가요?
A. 가장 큰 차이는 '선언할 수 있는 변수의 개수'예요. `let()`은 1개, `lets()`는 2개 이상의 변수를 만들 수 있습니다. 보통은 확장성을 위해 처음부터 `lets()`를 사용하는 것을 추천합니다.
Q2. 수식이 짧은데도 꼭 써야 하나요?
A. 아주 단순한 수식(예: A + B)이라면 굳이 쓸 필요가 없습니다. 하지만 같은 계산식이 2번 이상 반복되거나, if 조건문이 중첩되어 복잡할 때는 `let()`을 쓰는 것이 유지보수에 훨씬 유리합니다.
Q3. 변수 이름은 아무거나 지어도 되나요?
A. 네, 가능합니다. 하지만 나중에 코드를 다시 볼 때를 대비해서 `a`, `b` 같은 의미 없는 문자보다는 `totalPrice`, `isDone`처럼 의미가 담긴 영단어를 사용하는 것이 좋습니다.
'🛠️ 수월한 도구 사용 가이드 > 노션 가이드' 카테고리의 다른 글
| 노션 업무일 계산 수식: 주말 제외하고 평일 일수만 구하는 법 (복붙용) (0) | 2025.10.16 |
|---|---|
| 노션 콜아웃 블럭 완벽 가이드: 사용법부터 디자인 꿀팁까지 (아이콘, 색상 변경) (0) | 2025.10.15 |
| 노션 단축키 꿀팁 5가지: 탐색 & 인터페이스 완전 정복 (0) | 2025.04.07 |
| 노션 버튼 블록 사용법: 반복 업무 자동화, 변수 활용 꿀팁의 모든 것 (수월한 노션) (0) | 2025.04.06 |
| 노션 날짜 속성에서 시간만 추출하는 방법 (formatDate vs hour 함수) (0) | 2025.03.29 |