ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 옵시디언 API와 자동화
    디지털 생산성/옵시디언 2025. 2. 9. 13:36
    반응형

    옵시디언 API와 자동화 완벽 가이드: 워크플로우 최적화

    옵시디언의 강력한 기능 중 하나는 바로 API를 통한 확장성과 자동화 가능성입니다. 이 가이드에서는 옵시디언 API를 활용한 다양한 자동화 방법과 실제 적용 사례를 상세히 알아보겠습니다.

    api 자동화

    1. API 기본 설정

    API 플러그인 설치

    설치 단계:
    1. 설정 → 커뮤니티 플러그인
    2. "Obsidian API" 검색
    3. 설치 및 활성화
    4. 권한 설정 확인

    기본 API 구조

    // 기본 API 호출 구조
    const ObsidianAPI = {
        app: app,
        workspace: app.workspace,
        vault: app.vault,
        metadataCache: app.metadataCache
    };
    
    // 파일 작업 예시
    async function createNote(title, content) {
        try {
            await app.vault.create(title + '.md', content);
        } catch (error) {
            console.error('노트 생성 실패:', error);
        }
    }

    2. 자동화 스크립트 작성

    QuickAdd 자동화

    // 새로운 프로젝트 노트 생성
    module.exports = async (params) => {
        const {quickAdd} = params;
    
        // 사용자 입력 받기
        const projectName = await quickAdd.inputPrompt(
            "프로젝트 이름을 입력하세요:"
        );
    
        // 템플릿 내용
        const template = `---
    title: ${projectName}
    created: {{date}}
    status: 진행중
    ---
    
    # ${projectName}
    
    ## 목표
    
    ## 주요 작업
    
    ## 일정
    
    ## 참고자료
    `;
    
        // 새 노트 생성
        await quickAdd.createNote({
            folder: "Projects",
            name: projectName,
            content: template
        });
    }

    Templater 스크립트

    // 동적 템플릿 생성
    <%*
    // 날짜 정보 가져오기
    let today = moment().format('YYYY-MM-DD');
    let tomorrow = moment().add(1, 'days').format('YYYY-MM-DD');
    
    // 제목 생성
    let title = await tp.system.prompt('노트 제목 입력:');
    
    // 프론트매터 생성
    tR += `---
    title: ${title}
    created: ${today}
    due: ${tomorrow}
    tags: 
    status: 진행중
    ---
    
    # ${title}
    
    ## 개요
    
    ## 세부 내용
    
    ## 다음 단계
    `;
    _%>

    3. API를 활용한 데이터 처리

    메타데이터 처리

    // 메타데이터 추출 및 처리
    async function processMetadata() {
        const files = app.vault.getMarkdownFiles();
        const metadata = [];
    
        for (const file of files) {
            const cache = app.metadataCache.getFileCache(file);
            if (cache?.frontmatter) {
                metadata.push({
                    title: file.basename,
                    ...cache.frontmatter
                });
            }
        }
    
        return metadata;
    }
    
    // 태그 분석
    async function analyzeTags() {
        const files = app.vault.getMarkdownFiles();
        const tagCount = {};
    
        for (const file of files) {
            const cache = app.metadataCache.getFileCache(file);
            if (cache?.tags) {
                cache.tags.forEach(tag => {
                    tagCount[tag.tag] = (tagCount[tag.tag] || 0) + 1;
                });
            }
        }
    
        return tagCount;
    }

    링크 분석

    // 내부 링크 분석
    async function analyzeLinks() {
        const files = app.vault.getMarkdownFiles();
        const linkGraph = {};
    
        for (const file of files) {
            const cache = app.metadataCache.getFileCache(file);
            if (cache?.links) {
                linkGraph[file.basename] = cache.links.map(link => link.link);
            }
        }
    
        return linkGraph;
    }

    4. 커스텀 명령어 생성

    명령어 등록

    // 커스텀 명령어 추가
    module.exports = {
        onload() {
            this.addCommand({
                id: 'create-daily-note',
                name: '데일리 노트 생성',
                callback: () => this.createDailyNote(),
                hotkeys: [
                    {
                        modifiers: ["Mod", "Shift"],
                        key: "d"
                    }
                ]
            });
        },
    
        async createDailyNote() {
            // 데일리 노트 생성 로직
        }
    };

    단축키 설정

    // 단축키 등록
    const HOTKEYS = {
        CREATE_NOTE: {
            modifiers: ["Mod", "Shift"],
            key: "n"
        },
        QUICK_CAPTURE: {
            modifiers: ["Alt"],
            key: "c"
        }
    };

    5. 외부 서비스 연동

    REST API 연동

    // 외부 API 호출
    async function fetchExternalData(url) {
        try {
            const response = await fetch(url, {
                method: 'GET',
                headers: {
                    'Content-Type': 'application/json'
                }
            });
    
            return await response.json();
        } catch (error) {
            console.error('API 호출 실패:', error);
            return null;
        }
    }

    Webhook 처리

    // Webhook 이벤트 처리
    async function handleWebhook(event) {
        const {type, data} = event;
    
        switch (type) {
            case 'note.create':
                await createNoteFromWebhook(data);
                break;
            case 'note.update':
                await updateNoteFromWebhook(data);
                break;
            default:
                console.log('알 수 없는 이벤트 타입:', type);
        }
    }

    6. 데이터 동기화 자동화

    자동 백업

    // 자동 백업 설정
    async function setupAutoBackup() {
        // 백업 간격 설정 (1시간)
        const BACKUP_INTERVAL = 60 * 60 * 1000;
    
        setInterval(async () => {
            try {
                await backupVault();
                console.log('백업 완료:', new Date());
            } catch (error) {
                console.error('백업 실패:', error);
            }
        }, BACKUP_INTERVAL);
    }
    
    async function backupVault() {
        // 백업 로직 구현
    }

    변경사항 감지

    // 파일 변경 감지
    const fileWatcher = {
        init() {
            this.watchVault();
        },
    
        watchVault() {
            app.vault.on('modify', (file) => {
                console.log('파일 수정됨:', file.path);
                this.handleFileChange(file);
            });
    
            app.vault.on('create', (file) => {
                console.log('파일 생성됨:', file.path);
                this.handleNewFile(file);
            });
        },
    
        async handleFileChange(file) {
            // 변경사항 처리 로직
        }
    };

    7. 작업 흐름 자동화

    프로젝트 관리 자동화

    // 프로젝트 상태 업데이트
    async function updateProjectStatus() {
        const projects = await getProjects();
    
        for (const project of projects) {
            const tasks = await getProjectTasks(project.id);
            const completedTasks = tasks.filter(task => task.completed);
    
            const progress = (completedTasks.length / tasks.length) * 100;
    
            await updateProjectProgress(project.id, progress);
        }
    }

    태스크 관리 자동화

    // 태스크 자동화
    const taskAutomation = {
        async checkDueDates() {
            const tasks = await this.getAllTasks();
            const today = moment();
    
            for (const task of tasks) {
                if (moment(task.dueDate).isSame(today, 'day')) {
                    await this.sendNotification(task);
                }
            }
        },
    
        async sendNotification(task) {
            // 알림 전송 로직
        }
    };

    8. 문제 해결과 디버깅

    로깅 시스템

    // 로깅 유틸리티
    const logger = {
        log(message, level = 'info') {
            const timestamp = new Date().toISOString();
            console.log(`[${timestamp}] [${level}] ${message}`);
        },
    
        error(message, error) {
            this.log(`${message}: ${error.message}`, 'error');
            console.error(error);
        }
    };

    오류 처리

    // 오류 처리 래퍼
    function errorHandler(fn) {
        return async function(...args) {
            try {
                return await fn.apply(this, args);
            } catch (error) {
                logger.error('작업 실패', error);
                throw error;
            }
        };
    }

    마무리

    옵시디언 API와 자동화는 단순한 기능 확장을 넘어서 완전히 새로운 워크플로우를 만들어낼 수 있는 강력한 도구입니다. 이 가이드에서 소개한 다양한 자동화 방법과 API 활용 예시들을 기반으로 자신만의 효율적인 시스템을 구축해보세요.

    특히 반복적인 작업의 자동화, 데이터 처리의 효율화, 그리고 외부 서비스와의 연동은 생산성을 크게 향상시킬 수 있는 핵심 요소입니다. 각 기능들을 적절히 조합하고 자신의 워크플로우에 맞게 최적화하면서, 더욱 효율적인 노트 관리 시스템을 만들어보세요.

    이제 여러분도 옵시디언의 API와 자동화 기능을 활용할 준비가 되셨나요? 이 가이드를 기반으로 하나씩 시도해보면서, 자신만의 자동화된 워크플로우를 구축해보세요.

    반응형

    '디지털 생산성 > 옵시디언' 카테고리의 다른 글

    제텔카스텐 분류법  (0) 2025.02.10
    프로젝트 관리 시스템  (1) 2025.02.10
    옵시디언 GitHub 백업 시스템  (0) 2025.02.09
    옵시디언 모바일 동기화  (0) 2025.02.09
    옵시디언과 연동되는 툴  (0) 2025.02.09
Designed by Tistory.