본문 바로가기
IT

파이썬으로 노션 할일 자동화하기: 매일 아침 오늘 날짜로 생성하는 방법

by qwanjk 2025. 7. 23.
반응형

매일 반복되는 할일을 노션에 수동으로 입력하는 것이 번거로우신가요? Python과 Notion API를 활용하면 매일 아침 자동으로 오늘 날짜의 할일이 생성되도록 설정할 수 있어요. macOS 환경에서 이 자동화를 구현하는 방법을 코드 예시와 함께 상세히 알아볼게요.

 

Notion API 설정하기

 

노션에서 자동화를 시작하려면 먼저 Integration을 만들어야 해요. Notion 개발자 페이지에서 새로운 Integration을 생성하고 API 토큰을 발급받아요. 이때 가장 중요한 것은 자동화할 데이터베이스에 Integration 권한을 부여하는 거예요.

 

데이터베이스 우측 상단의 점 세 개 메뉴에서 'Connections'를 선택하고 만든 Integration을 추가해요. 이 단계를 빠뜨리면 아무리 코드를 잘 짜도 권한 오류가 발생해요.

# 필수 라이브러리 설치 (터미널에서 실행)
pip install notion-client

 

데이터베이스 구조 준비하기

 

노션에 할일 관리용 데이터베이스를 만들어요. Table 형식으로 만들고 다음과 같은 속성을 추가해요:

 

  • 이름 (Title): 할일 내용
  • 날짜 (Date): 할일 날짜
  • 상태 (Select): 완료/미완료 등

 

속성명은 나중에 코드에서 정확히 일치시켜야 하니 띄어쓰기나 특수문자 사용을 피하는 것이 좋아요. 영문 소문자와 언더바 조합을 추천해요.

 

반응형

 

Python 코드 작성하기

 

이제 본격적으로 자동화 코드를 작성해볼게요. 다음은 매일 반복되는 할일을 오늘 날짜로 생성하는 기본 코드예요:

from notion_client import Client
from datetime import datetime
import os

# 환경변수로 토큰 관리하기 (보안상 중요!)
NOTION_TOKEN = os.environ.get('NOTION_TOKEN')
DATABASE_ID = os.environ.get('NOTION_DATABASE_ID')

# 반복되는 할일 리스트 정의
TODO_LIST = [
    "아침 스트레칭 10분",
    "이메일 확인 및 답장",
    "오늘의 주요 업무 3가지 정리",
    "점심 후 산책 20분",
    "일일 회고 작성"
]

# Notion 클라이언트 초기화
notion = Client(auth=NOTION_TOKEN)

# 오늘 날짜 설정
today = datetime.now().strftime("%Y-%m-%d")

def create_today_tasks():
    """오늘의 할일들을 노션에 생성하는 함수"""
    for task in TODO_LIST:
        try:
            new_page = {
                "parent": {"database_id": DATABASE_ID},
                "properties": {
                    "이름": {
                        "title": [{
                            "text": {"content": task}
                        }]
                    },
                    "날짜": {
                        "date": {"start": today}
                    },
                    "상태": {
                        "select": {"name": "미완료"}
                    }
                }
            }
            
            # 노션에 새 페이지(할일) 생성
            notion.pages.create(**new_page)
            print(f"✅ 생성 완료: {task}")
            
        except Exception as e:
            print(f"❌ 오류 발생: {task} - {str(e)}")

# 함수 실행
if __name__ == "__main__":
    create_today_tasks()

 

환경변수 설정하기

 

보안을 위해 API 토큰은 환경변수로 관리해요. macOS 터미널에서 다음과 같이 설정해요:

# .zshrc 또는 .bash_profile 파일 열기
nano ~/.zshrc

# 다음 내용 추가
export NOTION_TOKEN="secret_여기에_토큰_입력"
export NOTION_DATABASE_ID="데이터베이스_ID_입력"

# 변경사항 적용
source ~/.zshrc

 

고급 기능 추가하기

 

기본 기능에 더해 다양한 기능을 추가할 수 있어요. 예를 들어 요일별로 다른 할일을 설정하거나, 특정 조건에 따라 할일을 추가하는 코드예요:

from datetime import datetime
import calendar

def create_advanced_tasks():
    """요일별 맞춤 할일 생성"""
    
    # 현재 요일 확인 (0=월요일, 6=일요일)
    weekday = datetime.now().weekday()
    today = datetime.now().strftime("%Y-%m-%d")
    
    # 기본 할일
    base_tasks = TODO_LIST.copy()
    
    # 요일별 추가 할일
    if weekday == 0:  # 월요일
        base_tasks.append("주간 계획 수립")
        base_tasks.append("팀 미팅 준비")
    elif weekday == 4:  # 금요일
        base_tasks.append("주간 회고 작성")
        base_tasks.append("다음 주 준비사항 체크")
    elif weekday == 6:  # 일요일
        base_tasks.append("주간 운동 계획 점검")
        base_tasks.append("독서 30분")
    
    # 월초에만 추가되는 할일
    if datetime.now().day == 1:
        base_tasks.append("월간 목표 설정")
        base_tasks.append("지난달 회고 작성")
    
    # 할일 생성
    for task in base_tasks:
        create_task_with_tags(task, today)

def create_task_with_tags(task_name, date):
    """태그와 우선순위를 포함한 할일 생성"""
    
    # 우선순위 키워드 체크
    priority = "보통"
    if "중요" in task_name or "미팅" in task_name:
        priority = "높음"
    elif "점검" in task_name or "확인" in task_name:
        priority = "낮음"
    
    new_page = {
        "parent": {"database_id": DATABASE_ID},
        "properties": {
            "이름": {
                "title": [{
                    "text": {"content": task_name}
                }]
            },
            "날짜": {
                "date": {"start": date}
            },
            "상태": {
                "select": {"name": "미완료"}
            },
            "우선순위": {
                "select": {"name": priority}
            }
        }
    }
    
    notion.pages.create(**new_page)

 

macOS에서 자동 실행 설정하기

 

코드 작성이 완료되면 매일 자동으로 실행되도록 설정해야 해요. macOS에서는 crontab을 사용해요:

# crontab 편집기 열기
crontab -e

# 매일 아침 7시에 스크립트 실행
0 7 * * * /usr/bin/python3 /Users/사용자명/notion_automation/daily_tasks.py >> /Users/사용자명/notion_automation/logs.txt 2>&1

 

더 간편한 방법으로는 macOS의 자동화 앱이나 LaunchAgent를 사용할 수 있어요. LaunchAgent 설정 파일을 만들어볼게요:


http://www.apple.com/DTDs/PropertyList-1.0.dtd">


    Label
    com.user.notion.daily
    
    ProgramArguments
    
        /usr/bin/python3
        /Users/사용자명/notion_automation/daily_tasks.py
    
    
    StartCalendarInterval
    
        Hour
        7
        Minute
        0
    
    
    StandardOutPath
    /Users/사용자명/notion_automation/stdout.log
    
    StandardErrorPath
    /Users/사용자명/notion_automation/stderr.log


 

이 파일을 ~/Library/LaunchAgents/com.user.notion.daily.plist로 저장하고 다음 명령어로 활성화해요:

launchctl load ~/Library/LaunchAgents/com.user.notion.daily.plist

 

자주 발생하는 문제와 해결방법

 

API 권한 오류가 발생하는 경우가 많아요. Integration이 데이터베이스에 접근 권한이 있는지 다시 확인해보세요. 노션에서 데이터베이스 공유 설정을 확인하는 것이 중요해요.

 

속성명 불일치 오류도 흔해요. 노션 데이터베이스의 속성명과 코드의 속성명이 정확히 일치하는지 확인하세요. 한글 속성명을 사용할 때는 특히 주의가 필요해요:

# 오류 처리를 포함한 안전한 코드
def safe_create_task(task_name, date):
    """오류 처리가 포함된 할일 생성 함수"""
    
    try:
        # 먼저 데이터베이스 구조 확인
        db_info = notion.databases.retrieve(DATABASE_ID)
        properties = db_info.get("properties", {})
        
        print("데이터베이스 속성 목록:")
        for prop_name in properties:
            print(f"- {prop_name}")
        
        # 할일 생성
        new_page = {
            "parent": {"database_id": DATABASE_ID},
            "properties": {
                "이름": {
                    "title": [{
                        "text": {"content": task_name}
                    }]
                },
                "날짜": {
                    "date": {"start": date}
                }
            }
        }
        
        result = notion.pages.create(**new_page)
        print(f"✅ 생성 성공: {task_name}")
        return result
        
    except Exception as e:
        print(f"❌ 오류 발생: {str(e)}")
        
        # 상세 오류 정보 출력
        if "validation_error" in str(e):
            print("속성명이 일치하지 않을 수 있습니다.")
        elif "unauthorized" in str(e):
            print("API 토큰이나 권한을 확인하세요.")
        
        return None

 

타임존 문제도 자주 발생해요. 서버와 로컬의 시간대가 달라서 날짜가 하루씩 밀리는 현상이 생길 수 있어요:

from datetime import datetime
import pytz

# 한국 시간대로 명시적 설정
KST = pytz.timezone('Asia/Seoul')
today_kst = datetime.now(KST).strftime("%Y-%m-%d")

# 또는 더 간단하게
from datetime import datetime, timezone, timedelta

KST = timezone(timedelta(hours=9))
today = datetime.now(KST).strftime("%Y-%m-%d")

 

추가 활용 팁

 

할일뿐만 아니라 다양한 자동화가 가능해요. 예를 들어 주간 보고서 템플릿을 자동 생성하거나, 프로젝트 진행 상황을 자동으로 업데이트할 수 있어요:

def create_weekly_report():
    """주간 보고서 템플릿 자동 생성"""
    
    week_number = datetime.now().isocalendar()[1]
    report_title = f"{week_number}주차 업무 보고서"
    
    # 보고서 내용 템플릿
    content = f"""
    # {report_title}
    
    ## 이번 주 완료 업무
    - 
    
    ## 다음 주 계획
    - 
    
    ## 이슈 및 건의사항
    - 
    
    작성일: {datetime.now().strftime('%Y-%m-%d')}
    """
    
    # 노션 페이지 생성 (다른 데이터베이스 사용)
    new_report = {
        "parent": {"database_id": REPORT_DATABASE_ID},
        "properties": {
            "제목": {
                "title": [{
                    "text": {"content": report_title}
                }]
            },
            "작성일": {
                "date": {"start": today}
            }
        },
        "children": [
            {
                "object": "block",
                "type": "paragraph",
                "paragraph": {
                    "rich_text": [{
                        "type": "text",
                        "text": {"content": content}
                    }]
                }
            }
        ]
    }
    
    notion.pages.create(**new_report)

 

이렇게 Python과 Notion API를 활용하면 반복적인 작업을 자동화해서 시간을 절약할 수 있어요. 처음에는 설정이 복잡해 보일 수 있지만, 한 번 구축해놓으면 매일 아침 자동으로 할일이 생성되는 편리함을 경험할 수 있어요.

 

 

2025.07.23 - [생산성] - Mac에서 파이썬으로 파일 확장자별 자동 정리하는 방법

 

Mac에서 파이썬으로 파일 확장자별 자동 정리하는 방법

Mac 데스크탑이나 다운로드 폴더가 너무 어지러워서 정리가 필요한가요? 파이썬 스크립트를 사용하면 확장자별로 파일을 자동으로 분류할 수 있어요. PDF는 PDF 폴더로, JPG는 JPG 폴더로 알아서 이

qwanjk.tistory.com

 

반응형