강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

오스틴님의 프로필 이미지
오스틴

작성한 질문수

Next.js 완벽 마스터 (v15): 노션 기반 개발자 블로그 만들기 (with 커서AI)

Notion API 블로그 목록 개발 (@notionhq/client v5 사용시 설명란 참고!!)

Notion API-DB 연결이 안돼요

작성

·

27

0

노션 API 통합해서 API키 제대로 입력했고,

블로그템플릿 데이터베이스에서 링크 오픈하고, 그 링크에서 사이트주소랑 쿼리스트링 다 날리고 ID 부분만 제대로 입력했고, 다 제대로 했습니다.

그런데 계속 노션 API 연결 안된다고 에러가 뜹니다. 아예 다 지우고 다시 만들고 해봐도 안됩니다. 왜그런걸까요? ㅠㅠ

 

그리고 현재 @notionhq/client 의 버전에서는

database.query가 아니라 dataSources.query입니다.

const { Client, APIErrorCode } = require("@notionhq/client")

try {
  const notion = new Client({ auth: process.env.NOTION_TOKEN })
  const myPage = await notion.dataSources.query({
    data_source_id: dataSourceId,
    filter: {
      property: "Landmark",
      rich_text: {
        contains: "Bridge",
      },
    },
  })
} catch (error) {
  if (error.code === APIErrorCode.ObjectNotFound) {
    //
    // For example: handle by asking the user to select a different data source
    //
  } else {
    // Other error handling code
    console.error(error)
  }
}
image.pngimage.pngimage.png

 

 

답변 2

0

짐코딩님의 프로필 이미지
짐코딩
지식공유자

안녕하세요 🙂

노션 데이터베이스 우측 상단 더보기 버튼 클릭 후 [연결] 메뉴에서

생성하신 API 통합을 설정하셨을까요?

많은 분들이 이부분을 실수로 누락하셔서요.

오스틴님의 프로필 이미지
오스틴
질문자

네. 제가 첨부한 스크린샷을 보면 API통합 설정을 한것으로 보입니다.

오스틴님의 프로필 이미지
오스틴
질문자

강의 내용이랑 현재 노션 API버전이랑 좀 다른것같습니다.

https://developers.notion.com/docs/upgrade-guide-2025-09-03

이 내용을 보면 소스업데이트를 하라고 합니다.

그래서 일단 저도 그거에 맞게 선생님의 기존 소스에서

export const getPublishedPosts = async (): Promise<Post[]> => {
  console.log(process.env.NOTION_DATABASE_ID);
  const response = await notion.dataSources.query({
   data_source_id: process.env.NOTION_DATABASE_ID!,
   filter: {
    property: 'Status',
    select: {
     equals: 'Published',
    },
   },

이런식으로 변경을 하였습니다. 참고하세요

짐코딩님의 프로필 이미지
짐코딩
지식공유자

노션 데이터베이스 ID를 정확히 입력하셨을까요?

오스틴님의 프로필 이미지
오스틴
질문자

네.

https://www.notion.so/28ba6685887d81d9b312d0d8a06d6a92?v=28ba6685887d81d783ff000cfd12bc64&source=copy_link

이게 링크주소구요,

.env에 NOTION_DATABASE_ID=28ba6685887d81d9b312d0d8a06d6a92 이렇게 입력했고,

image.png

개발자도구 보면 데이터베이스 아이디도 제대로 출력이되는걸 확인할수있어요..

물론 노션토큰도 제대로 입력했구요.. ㅠ

짐코딩님의 프로필 이미지
짐코딩
지식공유자

안녕하세요 🙂

우선 package.json 에서 사용중인 @notionhq/client 버전을 확인해주세요.

  • 만약 v2.x.x (강의 버전)과 동일 하다면 강의대로 진행해주시면 됩니다. 참고링크

  • 만약 v5.x.x 최신 버전이시라면 아래 가이드를 참고해주세요.

     

Notion API가 2025-09-03 버전으로 업데이트되면서 database_id 대신 data_source_id를 사용해야 합니다. SDK v5부터 이 변경사항이 반영되어 있습니다.

새로운 API 구조로 코드 작성

const { Client } = require('@notionhq/client');

// 클라이언트 초기화 (v5에서는 notionVersion 설정 필수)
const notion = new Client({
  auth: process.env.NOTION_API_KEY,
  notionVersion: '2025-09-03'
});

async function getPublishedPosts() {
  try {
    // 1. Database 정보 가져오기 (data_sources 배열 포함)
    const database = await notion.databases.retrieve({
      database_id: process.env.NOTION_DATABASE_ID
    });
    
    // 2. 첫 번째 Data Source ID 추출
    const dataSourceId = database.data_sources[0].id;
    console.log('Data Source ID:', dataSourceId);
    
    // 3. dataSources.query 메서드로 쿼리 (databases.query 아님!)
    const response = await notion.dataSources.query({
      data_source_id: dataSourceId,
      filter: {
        property: 'Status',
        status: {
          equals: 'Published'
        }
      },
      sorts: [{
        timestamp: 'created_time',
        direction: 'descending'
      }]
    });
    
    return response.results;
  } catch (error) {
    console.error('Error:', error);
    throw error;
  }
}

0

안녕하세요, 인프런 AI 인턴입니다. 건우님.

Notion API와의 연결 문제가 발생하여 고생하고 계신 것 같습니다. 이러한 오류는 주로 API 인증 정보 설정, 데이터베이스 권한 설정, 또는 코드의 사소한 실수로 인해 발생할 수 있습니다. 아래에서 이 문제를 해결하기 위한 몇 가지 방안을 제시드리겠습니다.

문제 원인과 해결 방법:

  1. API 토큰 확인:

    • .env 파일에 NOTION_TOKEN이 올바르게 설정되었는지 확인해보세요. 이 토큰은 Notion API Dashboard에서 생성되고, 올바른 권한을 부여받아야 합니다.
  2. 데이터베이스 공유 설정 확인:

    • API가 접근할 수 있도록 데이터베이스와 페이지는 Notion에서 생성된 통합(integration)과 공유되어야 합니다. 데이터베이스 우측 상단의 “공유” 버튼을 클릭하여 통합과 공유되어 있는지 확인하세요.
  3. 데이터베이스 ID 확인:

    • 데이터베이스 ID가 정확한지 다시 한 번 검토하세요. 데이터베이스 URL에서 복사해온 ID가 맞는지, 중간에 잘못된 부분은 없는지 확인이 필요합니다. 링크에서 쿼리스트링을 제외한 ID 부분을 올바르게 가져와야 합니다.
  4. 코드 부분 검토 및 수정:

    • 코드 상에서 notion.dataSources.query 대신 notion.databases.query 메서드를 사용해야 할 가능성이 있으므로 확인해보세요.
const { Client, APIErrorCode } = require("@notionhq/client")

try {
  const notion = new Client({ auth: process.env.NOTION_TOKEN })
  const myPage = await notion.databases.query({
    database_id: dataSourceId,
    filter: {
      property: "Landmark",
      rich_text: {
        contains: "Bridge",
      },
    },
  })
} catch (error) {
  if (error.code === APIErrorCode.ObjectNotFound) {
    console.error("데이터베이스가 존재하지 않거나 공유가 되어 있지 않습니다.")
  } else {
    console.error(error)
  }
}

이러한 사항들을 확인한 후에도 문제가 해결되지 않으면, Notion API 공식 문서에서 최신 정보를 확인하거나, 문제를 겪고 있는 코드를 조금씩 단순화하여 범위를 좁혀가는 방식으로 문제를 해결해보시길 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

오스틴님의 프로필 이미지
오스틴

작성한 질문수

질문하기