← 블로그로 돌아가기

Obsidian Dataview로 저장된 웹 콘텐츠 쿼리하기

· Save Team
obsidiandataviewpluginsmarkdownpkmpower-user

몇 주째 Obsidian에 웹 콘텐츠를 저장해왔습니다. 볼트에 50개, 어쩌면 100개의 클리핑된 기사가 있습니다. 하지만 원하는 것을 찾으려면 폴더를 스크롤하거나 전체 텍스트 검색에 의존해야 합니다.

Dataview가 이를 바꿉니다. 마크다운 파일을 데이터베이스처럼 다룹니다 — 메타데이터로 쿼리하고, 태그로 필터링하고, 날짜로 정렬하고, 자동으로 업데이트되는 대시보드를 구축합니다.

웹 클립에 맞게 설정하는 방법을 소개합니다.

Dataview가 하는 일

Dataview는 SQL과 유사한 구문을 사용해 노트를 쿼리할 수 있는 Obsidian 플러그인입니다. 모든 마크다운 파일이 하나의 행이 됩니다. 모든 프론트매터 필드가 열이 됩니다. 모든 쿼리는 실시간으로 자동 업데이트되는 표를 반환합니다.

기반: 프론트매터

Dataview의 힘은 클리핑된 파일의 일관된 프론트매터에 달려 있습니다. Save로 웹 콘텐츠를 저장할 때 이 메타데이터를 추가하세요:

---
title: "React Server Components: A Complete Guide"
source: "https://example.com/rsc-guide"
clipped: 2026-03-15
type: article
status: unread
tags: [react, server-components, performance]
rating:
---

웹 클립을 쿼리 가능하게 만드는 필드:

  • clipped — 저장한 날짜
  • type — article, tutorial, documentation, paper, thread
  • status — unread, reading, read, processed
  • rating — 읽은 후 1-5 (처음에는 비워두세요)
  • tags — 다루는 주제

필수 쿼리

읽기 대기열

모든 미읽음 클립을 최신순으로 보기:

```dataview
TABLE title, type, clipped
FROM "clips"
WHERE status = "unread"
SORT clipped DESC
```

최근 읽은 것

지난 30일 동안 처리한 내용:

```dataview
TABLE title, rating, tags
FROM "clips"
WHERE status = "read" AND clipped >= date(today) - dur(30 days)
SORT rating DESC
```

주제별 최고 콘텐츠

특정 주제에서 가장 높은 평점의 클립 찾기:

```dataview
TABLE title, rating, source
FROM "clips"
WHERE contains(tags, "react") AND rating >= 4
SORT rating DESC
```

콘텐츠 유형 분류

각 유형별로 얼마나 저장했는지:

```dataview
TABLE length(rows) AS Count
FROM "clips"
GROUP BY type
SORT length(rows) DESC
```

처리가 필요한 클립

아직 검토하지 않은 저장 콘텐츠 찾기:

```dataview
TABLE title, type, clipped
FROM "clips"
WHERE !rating
SORT clipped ASC
LIMIT 10
```

리서치 대시보드 구축

모든 쿼리를 집계하는 Dashboard.md 노트를 만드세요:

# Research Dashboard

## 읽기 대기열 ({{date}})

### 미읽음 기사
(여기에 dataview 쿼리)

### 진행 중
(여기에 dataview 쿼리)

## 이번 주 저장
(여기에 dataview 쿼리)

## 최고 평점 콘텐츠
(여기에 dataview 쿼리)

## 주제별
(여기에 dataview 쿼리)

이 대시보드는 열 때마다 자동으로 업데이트됩니다. 수동 관리가 필요 없습니다.

고급: 인라인 쿼리

Dataview는 노트 내에서 인라인 쿼리도 지원합니다. 어디서든 클립 수나 메타데이터를 참조할 수 있습니다:

이번 달에 `= length(filter(pages("clips"), (p) => p.status = "read"))` 개의 기사를
저장했으며, 평균 평점은
`= round(average(filter(pages("clips"), (p) => p.rating).rating), 1)`입니다.

일반 텍스트로 렌더링됩니다: “이번 달에 23개의 기사를 저장했으며, 평균 평점은 3.8입니다.”

복잡한 쿼리를 위한 DataviewJS

더 복잡한 분석을 위해 DataviewJS(JavaScript)를 사용하세요:

```dataviewjs
// 지난 8주 동안 주별 클립 표시
const clips = dv.pages('"clips"')
  .where(p => p.clipped)
  .sort(p => p.clipped, 'desc');

const weeks = {};
for (const clip of clips) {
  const week = clip.clipped.toFormat("yyyy-'W'WW");
  weeks[week] = (weeks[week] || 0) + 1;
}

dv.table(
  ["Week", "Clips Saved"],
  Object.entries(weeks).slice(0, 8).map(([week, count]) => [week, count])
);
```

깔끔한 데이터를 위한 팁

템플릿 사용

모든 저장이 일관되도록 미리 채워진 프론트매터로 클립 템플릿을 만드세요:

---
title: ""
source: ""
clipped: {{date}}
type: article
status: unread
tags: []
rating:
---

태그 표준화

표준 세트를 정하고 지키세요. Reactreactjs가 아닌 react. perfweb-performance가 아닌 performance. 일관성 없는 태그는 Dataview 쿼리를 망칩니다.

읽은 후 상태 업데이트

status 필드는 업데이트해야만 작동합니다. 클립 읽기를 마치면 10초만 내어 status: unreadstatus: read로 바꾸고 평점을 추가하세요.

소스 URL 유지

source 필드로 항상 원본으로 돌아갈 수 있습니다. Dataview가 클릭 가능한 링크로 렌더링할 수 있습니다:

```dataview
TABLE title, "[Link](" + source + ")" AS Source
FROM "clips"
WHERE status = "read"
SORT clipped DESC
LIMIT 20
```

깔끔한 마크다운이 중요한 이유

Dataview는 프론트매터를 쿼리하지만, 클립 콘텐츠도 정기적으로 검색합니다. 여기서 Save의 깔끔한 추출이 빛을 발합니다.

볼트에서 “server components streaming”을 검색할 때, 클립에서 관련 단락을 찾고 싶습니다 — 내비게이션 메뉴, 쿠키 배너, 사이드바 위젯이 아니라. 깔끔한 마크다운은 깔끔한 검색 결과를 의미합니다.

시작하기

  1. Obsidian에서 Dataview 플러그인 설치 (커뮤니티 플러그인 → “Dataview” 검색)
  2. 깔끔한 웹 클리핑을 위해 Save 설치
  3. 위의 템플릿을 사용해 다음 5개 클립에 프론트매터 추가
  4. 읽기 대기열 쿼리로 Dashboard 노트 만들기
  5. 볼트가 파일 더미에서 쿼리 가능한 지식 베이스로 변환되는 것을 지켜보세요