파일 업로드를 목표로 노션 API 사용을 파보았다. 결과적으로 노션 API 메뉴얼에서 파일 업로드를 하지 않는다고 글로 적혀있어 노션 API 활용 부분을 더 파는걸 중단한 상태고, 데이터베이스에 글관련 정보를 넣는것 까지는 성공했다. 이에 이 과정을 글로 남기 위해 이 글을 작성한다.
네이버 API나 카카오 API 구글 API처럼 노션도 API를 사용하기 위해선 API를 생성해야한다.
노션을 프로그램에서 사용하는 사람이 있는데, 그래도 API생성은 브라우저에서 진행이 된다.
링크 : https://www.notion.so/my-integrations

링크를 타고 들어가면 다음과 같다. API 통합 만들기를 눌러서 만들자. 다른 기업의 API와 다르게 심플하게 되어있다.

크게 복잡한건 없고 이름과 연결할 워크 스페이스 정도만 해주면 된다. 아래 댓글기능을 자주 사용한다면 해당 부분을 체크해도 좋다. 필자는 API 이름을 TEST라고 하고 진행해보겠다.

등록이 완료되면 통합 토큰이 있다. 저 토큰으로 이 API에 접근하는거라 저것만 복사하면 된다. 나머지는 크게 건들만한건 없다.

정보를 저장할 데이터 베이스를 생성한다.
데이터 베이스는 해당 노션의 주소를 통해 확인할 수 있다.
https://zippy-nannyberry-e35.notion.site/<Database_id>?v=><뭔가 다른 값>
예를 들어 다음과 같은 노션 데이터베이스 주소가 있다고 치자.
그러면 6a1a4549f37g42h90251569d8271d1d 가 주소다.
인라인 데이터베이스는 페이지에 데이터베이스가 추가된 상태로 페이지 하나가 데이터베이스가 아니라서 데이터베이스에 추가로 열어줘야한다.

인라인은 올려보면 전체 페이지로 열기가 있다.

이렇게 나온다.

그러면 우측 상단 공유 눌러서 웹링크를 복사하면 데이터베이스 id를 확인할 주소를 얻을 수 있다.

인라인 데이터페이스에서 전체페이지로 보기한걸 바로 보는거와 다름이 없다.

이 경우는 바로 주소를 복사하면 된다.

위에 주소를 복사한 데이터베이스 페이지에서 우측 상단에 ... 아이콘 클릭. 아래로 쭉 내리면 연결 나오는데 연결 추가에서 API 선택하기. 실제로 내가 추가한 API인 TEST가 있는데 이걸 선택하면 됨.
curl에 대해 잘 몰랐는데 아래 사이트에 잘 정리되어있어서 링크를 가져와봤다.
https://shutcoding.tistory.com/23
요약하면 리눅스 환경에서 http 요청을 보낼 때 사용하는 HTTP 통신 보내는 툴이라 볼 수 있다. curl을 통해서 HTTP 요청을 보내 데이터베이스에 정보를 조회, 추가, 업데이트, 제거 할 수 있다.
따라서 윈도우에선 CURL을 따로 설치를 해야하며, 그렇다고 하더라도 아래 명령어를 복붙하는 방식으로 실습시 오류가 발생할 수 있으므로 주의.
단 이 경우는 C C++ Java Python 같은 언어에서는 curl이 아니라 다른 방법으로 데이터베이스에 접근해야하므로 커맨드라인 상에서 토큰이나 데이터베이스 ID를 똑바로 얻어왔는지 확인하는 용도로 써보면 좋을 것
curl 'https://api.notion.com/v1/databases/DATABASEID' \
-H 'Authorization: Bearer_TOKENSECRET>'' \
-H 'Notion-Version: 2021-05-13'
다음과 같이 입력하면 됨. 이러면 데이터베이스의 메타정보와 속성에 뭐가 있는지가 다 옴. 다만 윈도우 환경에서 cmd 환경에서 입력시 안되고,
예를 들어 데이터 베이스 ID가 30889zb9eq8a787685a678978621adf9 이고
토큰 값이 secret_dfds0923487jkvfdjkhzxvlkKLADSSFLJ1dskfl2q34p0iri21 이라면 아래처럼 입력하면됨.
curl 'https://api.notion.com/v1/databases/30889zb9eq8a787685a678978621adf9' \
-H 'Authorization: Bearer secret_dfds0923487jkvfdjkhzxvlkKLADSSFLJ1dskfl2q34p0iri21' \
-H 'Notion-Version: 2021-05-13'

자동으로 파싱해주는게 있는것도 있을거 같은데 그냥 저거 하나만 보는거라 일일이 라인 맞춰봄. 캡처 사진이 안나와서 그렇게 안중요한 부분은 날리고 올림.

인라인 데이터베이스다보니 is_inline이 true인 모습이 보임. properties에 진짜 properties가 뭐가 있는지 나옴. 단 실제 데이터베이스의 내용이 아니라 데이터베이스의 속성들의 항목들이 표시됨.
properties에 id가 title이라고 되어있는건 Notion API guide에서도 special 한 것이라고 함. 데이터베이스있으면 무조건 저건 존재하는 properties 항목으로 생각됨.
결론부터 말하자면 필요한건 api 토큰값, 데이터베이스 id, 그리고 properties 항목들의 id값들이다. 그러니 예시부터 보자
curl -X POST https://api.notion.com/v1/pages -H "Authorization: Bearer <API 토큰 값>" -H "Content-Type: application/json" -H "Notion-Version: 2021-08-16" \
--data "{
\"parent\": { \"database_id\": \"<데이터베이스 ID>\" },
\"properties\": {
\"title\": {
\"title\": [
{
\"text\": {
\"content\": \"잠자기\"
}
}
]
},
\"D@f>\": {
\"rich_text\": [
{
\"text\": {
\"content\": \"아주 편안하다\"
}
}
]
}
}
}"

아주 잘 들어갔다. 다른 항목에 값을 추가하고 싶으면 json 양식에 맞춰서 적절하 수정하면 될듯하다. 아래는 대충 그 form을 참고할 수 있도록 아랫쪽에 추가해보았다.
curl -X POST https://api.notion.com/v1/pages -H "Authorization: Bearer <API 토큰 값>" -H "Content-Type: application/json" -H "Notion-Version: 2021-08-16" \
--data "{
\"parent\": { \"database_id\": \"<데이터베이스 ID>\" },
\"properties\": {
\"title\": {
\"title\": [
{
\"text\": {
\"content\": \"잠자기\"
}
}
]
},
\"D@f>\": {
\"rich_text\": [
{
\"text\": {
\"content\": \"아주 편안하다\"
}
}
]
},
\"<Properties 항목 ID>\": {
\"<Properties 항목 Type> \": [
{
\"text\": {
\"content\": \"안에 들어갈 내용\"
}
}
]
}
}"
아직 하지는 않았지만 이런 curl 코드를 먼저 짜보고 그걸 다른 언어로 바꿔보고 싶다면 아래 링크를 이용해보는 것도 어떨까 싶다.
curl 통신이 가능한 것을 확인했으니 다른 언어에서도 다른 폼으로도 충분히 api를 활용할 수 있다는 생각은 들었다. 노션 API를 건든 가장 큰 이유인 파일 업로드를 API로 해보려고 했으나 노션 API에선 지원하지 않았다.

따라서 현재 진행하는 프로젝트에서 노션을 파일 저장소로 활용하는 기능을 생각을 하면서 삽질하다가 결국 노션을 활용하는건 무리라는 결론에 도달하고 여태까지 알아낸 것들을 정리해서 올렸다.