Skip to main content
지식 관리·옵시디언

옵시디언 Bases 필터: 다른 폴더 노트가 섞이거나 표가 비는 이유

`.base` 파일의 위치만으로는 노트 범위가 좁혀지지 않습니다. 테스트 노트와 실제 표 결과로 전역·뷰별 조건을 나눠 빈 표의 원인을 확인합니다.

GTGem.tipsPublished
읽는 시간 : 약 4분 소요
서로 다른 폴더의 노트 카드가 두 필터판을 지나며 좁혀지는 개념 이미지

Bases 표에 다른 폴더의 파일까지 나타난다면 .base 파일을 그 폴더에 저장했다는 사실만으로는 범위가 제한되지 않습니다. 공식 구문 문서에 따르면 기본 대상은 볼트의 모든 파일입니다. 모든 뷰에 적용되는 폴더 조건을 먼저 넣고, 특정 뷰에서만 필요한 상태 조건을 추가하세요. 반대로 표가 비었다면 파일을 지우기 전에 두 수준의 필터와 원본 노트 속성을 각각 확인해야 합니다. 아래 결과는 격리 테스트 볼트에서 Obsidian 1.13.7의 코어 Bases를 켜고 실제 표를 확인한 기록입니다. 다른 버전과 독자 볼트의 행 수는 같지 않을 수 있습니다.

표에 다른 폴더 노트가 왜 보이나요?

Bases는 .base에 뷰와 필터 설정을 보관하고, 노트의 속성은 원래 Markdown 파일에 남깁니다. .base를 Ideas 폴더에 만들더라도 그 위치가 데이터 범위를 자동으로 정하지는 않습니다. Bases 소개와 구문은 기본적으로 볼트 전체 파일을 후보로 보고, filters로 범위를 줄이는 구조를 설명합니다. SQL이나 Dataview의 FROM 문법을 붙이는 방식이 아닙니다.

격리 볼트에 아래 네 개의 Markdown 파일과 Scope-test.base를 두었습니다. 코어 Bases의 표 뷰 Test rows를 열었을 때, 클리핑 테스트 노트가 추가되기 전 무필터 표에는 A, B, C뿐 아니라 Other/control.md와 .base 자신까지 보였습니다. 이 단계의 행 수는 5개였습니다. 모든 볼트의 .base가 반드시 같은 방식으로 표시된다는 보장은 없으며, 이 조건의 앱 관측 결과입니다.

원본 파일 처음의 status 원하는 Ideas 표의 대상인가
Ideas/A.md idea 예
Ideas/B.md draft 예
Ideas/C.md hold 예
Other/control.md idea 아니요, 폴더 밖 대조군
Scope-test.base 없음 아니요, 설정 파일

폴더 범위와 상태 조건을 어디에 넣나요?

테스트 폴더와 파일을 따로 만들어 원래 볼트 데이터를 건드리지 마세요. 각 .md 파일 맨 위에 아래와 같이 속성 status를 하나씩 둡니다. A는 idea, B는 draft, C는 hold, 폴더 밖 control은 idea입니다. 속성 도움말은 파일 첫머리의 ---로 둘러싼 YAML 속성 형식을 설명합니다.

---
status: idea
---

코어 Bases가 켜진 테스트 볼트에서 표 뷰를 만들고 필터의 모든 뷰에 file.inFolder("Ideas")와 file.ext == "md"를 함께 넣습니다. Ideas는 테스트 볼트의 폴더 이름이므로 실제로는 본인의 폴더 이름으로 바꿔야 합니다. 격리 앱의 한국어 UI에서는 각각 파일 in folder Ideas, 확장자 is md로 표시됐습니다. 이 상태의 표에는 A(idea), B(draft), C(hold)만 남았습니다. Other/control.md와 .base는 빠졌습니다.

이제 Test rows의 해당 뷰에 status == "idea"를 더하면 처음에는 A만 보였습니다. 공식 Bases 구문은 전역과 뷰 수준 조건을 AND로 결합한다고 설명하며, Views 설명은 뷰마다 필터가 다를 수 있음을 안내합니다. 해당 뷰의 상태 조건이 폴더 밖 control을 다시 포함시키는 OR 조건은 아닙니다. 격리 앱의 UI와 저장된 파일을 대조한 최소 설정은 다음과 같습니다. 원하는 뷰에서 원본 속성 키와 값의 철자·형식에 맞춰 바꾸세요.

filters:
  and:
    - file.inFolder("Ideas")
    - file.ext == "md"
views:
  - type: table
    name: Test rows
    filters:
      and:
        - 'status == "idea"'
    order:
      - file.name
      - status

이 코드는 실행된 Scope-test.base의 최종 내용을 옮긴 것입니다. 일반 사용자에게 YAML 직접 편집이 필수라는 뜻은 아닙니다. 앱 UI에서 만든 조건이 기대와 다르면 .base 설정과 원본 노트의 속성을 함께 비교하는 대조용입니다.

원본 노트를 고치면 표도 바뀌나요?

격리 실습에서는 Ideas/B.md의 status: draft를 원본 파일에서 status: idea로 고친 뒤 표를 다시 확인했습니다. 기존의 A만 있던 Test rows 뷰에 A와 B가 함께 보였습니다. C의 hold는 제외되고, 같은 idea여도 Other/control.md는 폴더 조건 때문에 제외됐습니다. 원본 노트의 저장값, 화면의 행, .base 필터를 같은 순서로 확인해야 '표에서만 값이 바뀐 것'과 '원본 속성이 바뀐 것'을 혼동하지 않습니다.

네 노트 중 폴더 범위를 통과한 세 노트에서 상태 조건에 맞는 두 노트만 남는 개념도
폴더 밖 카드 하나를 먼저 제외하고, 남은 세 카드 중 색점 조건에 맞는 두 카드만 남기는 교집합 개념도입니다. B의 status를 idea로 바꾼 후 A·B가 남는 본문의 사례를 단순화했으며, 실제 테스트 화면이나 행 수 증거는 아닙니다.

표가 비면 어느 조건부터 풀어보나요?

격리 앱에서 해당 뷰의 조건을 잠시 status == "missing"으로 바꾸자 원본 파일을 삭제하지 않았는데도 표가 비었습니다. 조건을 다시 idea로 돌려놓았습니다. 빈 표를 파일 유실로 단정하지 말고 다음 순서로 좁혀 보세요.

  1. 파일 탐색기에서 대상 .md가 실제로 존재하고 생각한 폴더에 있는지 확인합니다. 없다면 필터를 풀어도 나타나지 않습니다.
  2. 모든 뷰의 폴더·확장자 조건을 대조합니다. 폴더 이름을 바꾸거나 파일 형식이 다르면 후보에서 빠질 수 있습니다.
  3. 원본 노트의 status 키와 값, 속성 타입을 확인합니다. 이 예시의 문자열 idea와 실제 노트의 값이 일치해야 합니다. 다른 타입이 원인이라는 실험까지 수행한 것은 아닙니다.
  4. 해당 뷰의 추가 조건을 확인합니다. 전역 범위에 파일이 있어도 뷰 조건에서 제외될 수 있습니다. 테스트용 조건을 바꿨다면 원래 값으로 되돌리고 표를 다시 봅니다.

필터를 고치기 위해 원본 노트를 삭제하지 마세요. 세부 상태 표가 필요 없는 작은 목록이라면 노트에 수동 링크 몇 개를 적는 편이 관리하기 쉽습니다. 이 예제의 행 수는 정해진 테스트 볼트와 앱 버전에서 관측한 수치이지 다른 볼트의 기대 행 수가 아닙니다.

Bases 필터 문제와 별개로 Dataview 도입을 고민한다면 Dataview를 도입하기 전 속성 정리 기준도 확인해 보세요.

In this article

Stay in the loop
Ready to think more clearly about the tools that matter?
New practical notes, no noise. Keep the useful ideas close.
Subscribe