우선 본격적으로 Notion API를 활용하기 전 노션의 용어에 대한 이해가 필요합니다. '데이터베이스'와 '페이지' 개념입니다.
일반적으로는 데이터베이스는 실제 DB처럼 테이블 개념이라고 보시면 좋을 것 같고, 페이지는 데이터베이스 안에 들어가는 각각의 Object라고 이해하시면 좋습니다. 이 페이지 각각은 새 창으로 열 수도 있고, 페이지 안에 또 제목과 내용을 달 수 있죠.
이번 실습에서는 간단하게 노션 데이터베이스에 새 페이지를 어떻게 추가하는지를 살펴보겠습니다. 진행하기에 앞서 Notion API 활용하기 (1)을 먼저 진행해 유저 token 값을 얻고 진행해야 합니다.
실습은 노션API 공식 설명서를 참고하면서 진행해주시길 바랍니다.
먼저 데이터베이스 각각에는 고유의 key 값이 있습니다. 이 key를 활용해서 개발을 진행하는데요, 이 key값을 알 수 있는 방법은 url에 있습니다. 먼저 새 데이터베이스 만들기 - 표 보기를 통해 새 표 형식의 데이터베이스를 만들어주고, 전체 페이지로 열어 줍니다.
전체 페이지로 열면 notion.so/~~~?v=**** URL로 접속이 됩니다. 이때, notion.so/~~~에 있는 ~~~ 이 데이터베이스의 고유 ID값이 됩니다.
이제 본격적으로 개발에 들어가봅시다.
mkdir notion-example
cd notion-example
export NOTION_KEY=secret_...
export NOTION_DATABASE_ID=...
디렉터리를 설정할 루트에서 notion-example이라는 작업 공간을 만들고 export명령을 통해 환경변수를 설정해 줍니다. 여기서 NOTION_KEY는 (1)에서 진행했던 유저 토큰 값, NOTION_DATABASE_ID는 바로 위에서 얻었던 데이터베이스의 고유 ID 값이 됩니다.
그다음 index.js 파일을 생성해 해당 코드를 붙여 넣습니다.
import { Client } from "@notionhq/client"
const notion = new Client({ auth: process.env.NOTION_KEY })
const databaseId = process.env.NOTION_DATABASE_ID
async function addItem(text) {
try {
const response = await notion.pages.create({
parent: { database_id: databaseId },
properties: {
title: {
title:[
{
"text": {
"content": text
}
}
]
}
},
})
console.log(response)
console.log("Success! Entry added.")
} catch (error) {
console.error(error.body)
}
}
addItem("Yurts in Big Sur, California")
package.json 파일도 생성해 코드를 붙여 넣습니다.
{
"name": "notion-example",
"type": "module",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"@notionhq/client": "^1.0.1"
}
}
이제 해당 명령어를 통해 예제를 실행시켜 봅시다.
npm install
node index.js
터미널 창에 Success! 가 출력되고 데이터베이스에 새로운 창이 추가되었으면 성공입니다.
이제 데이터베이스에 추가하는 것 까지는 알아봤고, 내가 원하는 요소들로 어떻게 추가할지를 알아봅시다.
앞서 작성한 index.js 코드를 살펴봅시다. 가시성을 위해 코드를 조금 바꿔보았습니다.
import { Client } from "@notionhq/client"
const notion = new Client({ auth: process.env.NOTION_KEY })
const databaseId = process.env.NOTION_DATABASE_ID
async function addItem(text) {
try {
const response = await notion.pages.create({
parent: { database_id: databaseId },
properties: {
"제목": { //이름 값
title:[ //속성 값
{
"text": { //text 형식
"content": "Hello World!" //text에 들어갈 값
}
}
]
}
},
})
console.log(response)
console.log("Success! Entry added.")
} catch (error) {
console.error(error.body)
}
}
addItem("Yurts in Big Sur, California")
properties-이름값-속성 값의 순서로 입력을 해야 합니다. 즉, 이름값은 내가 설정한 데이터베이스의 칼럼 제목이고, 속성 값은 notion이 지정한 속성 유형입니다. title 속성의 값이 "제목"이라는 의미이죠. 하지만 이대로 실행을 시키면 실패가 떠버립니다. 이유는 무엇일까요?
이유는 노션의 데이터베이스 칼럼 제목과 적용시키려는 코드의 이름값이 다르기 때문입니다. 즉, 덮어쓰기가 허용되지 않습니다. notion 데이터베이스의 규격에 맞춰 데이터를 넣어야 합니다. "제목"으로 칼럼 이름을 변경한 후 다시 실행시키면, 올바르게 "Hello World!"문이 추가된 것을 확인할 수 있습니다.
이제 제목을 추가해보았고, 아이콘, 날짜와 숫자 값도 추가를 해봅시다. 노션 공식 API 문서 - Property values를 참고해보면 원하는 요소들에 대한 유형 값들을 가져올 수 있습니다. Number, Multi-select 등 원하는 요소들을 선택하면 됩니다. 제 예제 코드는 아이콘과 날짜, 숫자 값을 추가해 보았습니다. 코드를 실행하기 전 데이터베이스 칼럼 생성하는 것 잊지 마세요!
import { Client } from "@notionhq/client"
const notion = new Client({ auth: process.env.NOTION_KEY })
const databaseId = process.env.NOTION_DATABASE_ID
async function addItem() {
try {
const response = await notion.pages.create({
parent: { database_id: databaseId },
icon: {
type: "emoji",
emoji: "📊"
},
properties: {
"Title": {
title: [
{
text: {
content: '오늘의 유저 리포트',
},
},
],
},
"Total User": {
number: 100,
},
"Today User": {
number: 100,
},
"Date": {
"date": {
"start": "2022-06-06"
}
}
},
})
console.log(response)
console.log("Success! Entry added.")
} catch (error) {
console.error(error.body)
}
}
addItem()
이제 notion 데이터베이스에 새로운 페이지를 추가하는 법까지 알아보았습니다. 다음 실습에서는 AWS Lambda 환경에서 특정 시간마다 새 페이지를 추가하는 방법에 대해 알아보겠습니다.
(다음 글)
https://newdeal123.tistory.com/88
'📜메모장' 카테고리의 다른 글
Notion API 활용하기 - (1) API용 유저 토큰 생성하기 (0) | 2022.05.25 |
---|---|
App Store 애플리케이션 소유권 이전 오류 해결 방법 (3) | 2022.05.20 |
역대 SCPC 예선문제 유형,난이도 모음(+2020 기출 추가) (4) | 2020.07.07 |
개발자 추천도서 마인드맵 (0) | 2020.02.21 |
알고리즘 및 코테에 유용한 링크 및 사이트 정리 (1) | 2019.10.10 |