---
title: "Denote Silo 동적 관리 시스템"
url: "https://notes.junghanacs.com/notes/20251114T190252"
author: "Junghan Kim"
date: "2025-11-14T19:02:00+09:00"
lastmod: "2025-11-14T19:02:00+09:00"
tags: ["denote","dynamic","management","silo"]
description: "리포지토리 중심으로 Denote Silo를 동적으로 관리하는 시스템 개요 노트이다."
---

> [!abstract] 이 노트에 대하여
> 
> 리포지토리별 docs 폴더를 자동 발견하고 통합 검색하는 Denote Silo 동적 관리 시스템을 설명한다. 지식 사일로를 고정된 수동 목록 대신 살아 있는 구조로 운영하는 노트다.

## 개요

리포지토리 중심의 Denote Silo 자동 관리 시스템입니다.

### 핵심 기능

1.  **자동 발견**: `~/repos/gh/*/docs` 디렉토리 자동 인식
2.  **심볼릭 링크 지원**: 실제 경로로 resolve
3.  **동적 업데이트**: 새 프로젝트 추가 시 자동 인식
4.  **통합 검색**: 모든 Silo에서 파일 검색

## 파일 구조

```nil
~/sync/emacs/doomemacs-config/
├── +denote-silo-dynamic.el    # 핵심 구현
├── config.el                   # 로드 설정
└── +keybindings.el            # 키바인딩
```

## 설정된 Silo 목록

### 기본 Silo (고정)

-   `~/claude-memory` : AI 메모리 시스템
-   `~/org` : 지식베이스
-   `~/org/llmlog` : LLM 대화 기록

### 동적 Silo (자동 발견)

-   `~/repos/gh/GLG-Mono/docs` : 폰트 프로젝트
-   `~/repos/gh/hawaii-trip-2025/docs` : 여행 계획

## 사용 방법

### 키바인딩 (`SPC n` 접두어)

| 키    | 함수                         | 설명            |
|------|----------------------------|---------------|
| `n`   | `consult-notes`              | 전체 노트 검색  |
| `G`   | `consult-notes-search`       | 전체 노트 grep 검색 |
| `s`   | `denote-silo-open-or-create` | Silo 선택 후 파일 열기 |
| `S`   | `denote-silo-select-command` | Silo 선택 후 명령 실행 |
| `M-l` | `denote-silo-list-all`       | 모든 Silo 목록 표시 |
| `M-r` | `denote-silo-refresh`        | Silo 목록 새로고침 |
| `M-F` | `denote-silo-find-file-all`  | 모든 Silo에서 파일 찾기 |
| `M-c` | `denote-silo-count-files`    | 전체 파일 개수 확인 |

### 워크플로우 예시

#### 1. 전체 Silo 확인

```emacs-lisp
M-x denote-silo-list-all
```

출력 예시:

```text
=== Registered Denote Silos ===

Total: 5 directories

• claude-memory
  Path: ~/claude-memory/
  Files: 25

• org
  Path: ~/org/
  Files: 120

• llmlog
  Path: ~/org/llmlog/
  Files: 15

• docs (GLG-Mono)
  Path: ~/repos/gh/GLG-Mono/docs/
  Files: 7

• docs (hawaii-trip-2025)
  Path: ~/repos/gh/hawaii-trip-2025/docs/
  Files: 0
```

#### 2. 특정 프로젝트 문서 찾기

```emacs-lisp
SPC n s  ; denote-silo-open-or-create
;; → "GLG-Mono/docs" 선택
;; → 파일 검색 또는 생성
```

#### 3. 전체 Silo에서 파일 검색

```emacs-lisp
SPC n F  ; denote-silo-find-file-all
;; → 모든 Silo의 파일 목록 표시
```

#### 4. 새 프로젝트 추가 후 갱신

```bash
# 새 프로젝트 생성
mkdir -p ~/repos/gh/new-project/docs

# Emacs에서 갱신
SPC n R  ; denote-silo-refresh
```

## 기술적 세부사항

### 자동 발견 알고리즘

```emacs-lisp
(defun denote-silo-discover-repo-docs ()
  "~/repos/gh/*/docs 자동 발견."
  (let ((valid-silos '()))
    (dolist (repos-root denote-silo-repos-roots)
      (dolist (repo-dir (directory-files repos-root t "^[^.]"))
        (let* ((real-repo-dir (file-truename repo-dir))  ; 심볼릭 링크 resolve
               (docs-path (expand-file-name "docs" real-repo-dir)))
          (when (file-directory-p docs-path)
            (push docs-path valid-silos)))))
    (nreverse valid-silos)))
```

### 커스터마이징

#### 다른 리포지토리 루트 추가

```emacs-lisp
;; config.el에 추가
(after! denote-silo
  (setq denote-silo-repos-roots
        '("~/repos/gh"
          "~/repos/work"    ; 회사 프로젝트
          "~/repos/3rd")))  ; 외부 오픈소스
```

#### 기본 Silo 수정

```emacs-lisp
(setq denote-silo-base-directories
      '("~/claude-memory"
        "~/org"
        "~/documents/notes"))
```

## 장점

1.  **자동화**: 수동 등록 불필요
2.  **확장성**: 새 프로젝트 자동 인식
3.  **통합성**: 기존 `denote-silo` + `consult-notes` 완벽 통합
4.  **유연성**: 심볼릭 링크 지원으로 실제 경로 위치 자유

## 문제 해결

### Silo가 인식되지 않을 때

1.  디렉토리 구조 확인:
    ```bash
    ls -la ~/repos/gh/*/docs
    ```

2.  Silo 목록 수동 갱신:
    ```emacs-lisp
    M-x denote-silo-refresh
    ```

3.  현재 등록된 Silo 확인:
    ```emacs-lisp
    M-x denote-silo-list-all
    ```

### 심볼릭 링크 문제

심볼릭 링크는 자동으로 실제 경로로 변환됩니다:

```bash
# 심볼릭 링크 생성
ln -s /path/to/real/project ~/repos/gh/project-link

# Emacs는 실제 경로를 사용
# /path/to/real/project/docs → 자동 인식
```

## 향후 계획

-   [ ] `denote-silo-grep-all` 함수 개선 (ripgrep 통합)
-   [ ] Silo 통계 대시보드 추가
-   [ ] 프로젝트별 태그 자동 추천
-   [ ] Git 연동 (최근 커밋 정보 표시)

## 참고 링크

-   [Denote 공식 문서](https://protesilaos.com/emacs/denote)
-   [denote-silo GitHub](https://github.com/protesilaos/denote-silo)
-   [consult-notes GitHub](https://github.com/mclear-tools/consult-notes)

## 관련 문서

-   `+denote-silo-dynamic.el:1` : 핵심 구현
-   `config.el:63` : 로드 설정
-   `+keybindings.el:88` : 키바인딩 정의
