노코드 툴 만드는 사람들 - 노션 홈페이지 제작, 2분 안에 가능하게 하기

노코드 툴 만드는 사람들 - 노션 홈페이지 제작, 2분 안에 가능하게 하기

노션 페이지 지원 배경

나두아이오는 인터페이스, 데이터베이스, 워크플로우 등의 다양한 서비스를 지원한다. 그중에서도 인터페이스는 노코드/로우코드 툴이다. 웹빌더 기반으로 웹 서비스를 제작하고 호스팅 할 수 있다. 이때 장점 중 하나는 호스팅이 쉽다는 점이다. 간편 호스팅의 장점을 극대화할 수 있는 방법 중 하나는 외부에서 만들어진 걸 우리 서비스로 배포할 수 있게 하는 것이다. 이에 따라 대표적으로 많이 사용되는 '노션 페이지' 기반의 홈페이지를 지원하기로 하였다. 이와 관련해 고민했던 내용과 의사결정의 기준이 되었던 부분들을 정리해보았다.

노션 페이지 지원 방식 결정

1. 노션 '컴포넌트' 추가

그림처럼 인터페이스(Interface)의 앱(App)은 여러 페이지(Page)를 가지고, 각 페이지는 여러개의 컴포넌트(Component)로 구성된다. 노션 홈페이지를 우리 서비스에서 지원한다면 앱 / 페이지/ 컴포넌트 레벨에 추가하는 시나리오를 생각해볼 수 있다. 별도의 ‘노션 전용 앱’ 혹은 ‘노션 전용 페이지’ 형태로 제공할 수도 있지만 아래와 같은 이유로 컴포넌트 레벨에 추가하기로 결정하였다.

  1. 노션 기능이 추가됨으로써 기존의 서비스 로직에 영향을 미치지 않는다.
    • ‘노션 전용 앱’, ‘노션 전용 페이지’와 같이 기존 로직에 분기를 태우면 관리 복잡도가 증가하고 확장성이 떨어질 것이다.
    • 현재 독립적으로 확장이 용이한 단위는 컴포넌트다. 노션 지원을 중단해야 하는 경우 특정 컴포넌트만 제거하면 된다.
  2. 기존 컴포넌트와 호환된다. 노션 컴포넌트는 컴포넌트 중 하나일 뿐이다. 즉 다른 컴포넌트들과도 같이 사용할 수 있다는 것을 의미한다.

2. 노션 페이지 전환 방식

먼저 각 노션 페이지를 인터페이스의 어떤 개념에 매칭할지가 고민이었다. 만약 '노션 페이지 = 인터페이스 페이지' 개념으로 호환한다면 노션 내부에 연결된 모든 페이지에 매칭되는 인터페이스 페이지를 생성해야 한다. 노션 홈페이지를 지원하는 목적 중 하나는 간편 호스팅의 장점을 극대화하면서도 우리 서비스 상에서 0-1으로 만들어야 하는 번거로움을 줄이기 위함이다. 그런데 제작 동선이 늘어나게 되면 이 또한 진입장벽을 낮추는 데 기여할 수 없다. 따라서 페이지 전환은 노션 컴포넌트 안에서 이뤄져야 한다.

기존 컴포넌트 구현 방식과 한계

에디터는 개발을 위한 몇가지 원시(primitive) 요소들을 제공한다. 사용자는 이를 가지고 개발을 진행하기 때문에 일관된 경험을 주기 위해서는 컴포넌트 역시 정해진 규칙 안에서 상호작용 하도록 구현되어야 한다.

<주요 원시 요소>

  • 컴포넌트
  • 데이터
    • 컴포넌트 변수 (컴포넌트에 바인딩된 데이터를 의미한다.)
    • 전역 변수
  • 이벤트 핸들러
  • 스크립트

<노션 컴포넌트 구현 방식>

노션 컴포넌트가 기존의 컴포넌트 메커니즘을 따라 구현되면 아래와 같을 것이다.

  • N: 노션 컴포넌트
  • Global State(전역 변수)
    • URL Query, 현재 페이지 정보 등은 전역 변수에 저장된다.
  • 노션 컴포넌트의 Props
    • homePageId: 기본 페이지로 인식할 노션 페이지 아이디다.
    • currentPageId: 이를 기반으로 현재 출력할 노션 페이지가 결정된다. homePageId보다 우선순위가 높다.
    • onPageClick: 노션 페이지가 클릭되었을 때 호출되는 이벤트 핸들러다.
  • 노션 컴포넌트의 State(컴포넌트 변수)
    • clickedPageId: 현재 클릭된 노션 페이지 아이디다. 이는 컴포넌트 외부에서 notionComponent.clickedPageId와 같이 접근해서 쓸 수 있도록 컴포넌트에 바인딩된다. (*onPageClick의 파라미터로 넘어갈 수도 있지만 일반적으로 파라미터가 없는 이벤트 핸들러를 기준으로 설명하기 위함이다.)

<노션 컴포넌트에 쿼리 기반의 라우팅 적용>

실제로는 에디터 상에서 UI로 수행되는 부분들이지만 데이터를 중심으로 재구성했다. 각 색상이 동일한 것은 변수 참조 관계다.

  • homePageId: 기본 노션 페이지 아이디를 설정한다.
  • currentPageId: page.params.notionId에는 URL 쿼리에서 notionId 값이 파싱된 값이 저장된다. 이를 변수로 참조한다.
  • onPageClick: 노션 페이지가 클릭되면 URL의 notionId 쿼리를 선택된 페이지(clickedPageId)로 업데이트한다. (*실제로는 UI로 NavigateAction의 파라미터만 설정한다. NavigateAction은 내부적으로 호출된다.)

정리하자면 onPageClick으로 URL을 변경하고, 변경된 currentPageId를 기준으로 노션 페이지가 새로 출력되는 원리다.

이 다음부터는 화면 진입 후 초기 스크립트를 실행해 URL의 notionId 쿼리가 homePageId로 업데이트된 이후를 전제한다.

<사용자 동작에 따른 페이지 전환 과정 - 1, 2>

사용자가 노션 페이지를 클릭하면 컴포넌트 내부에서 clickedPageId 상태를 업데이트하고, onPageClick가 호출된다.

<사용자 동작에 따른 페이지 전환 과정 - 3, 4, 5>

NavigateAction이 실행되면서 클릭된 페이지를 기준으로 URL이 변경된다. 변경된 URL을 기준으로 global state가 업데이트 되고, 이는 노션 컴포넌트의 pageId prop에도 반영된다.

<사용자 동작에 따른 페이지 전환 과정 - 6>

변경된 pageId를 기준으로 노션 페이지가 재출력된다.

결과적으로 사용자가 이해해야 할 개념이 많다는 걸 확인할 수 있다. 이는 LCNC 빌더의 숙명적인 허들인데, 이제 이를 컴포넌트 레벨로 어느정도까지 위임할 것인지는 제공하려는 사용자 경험에 달렸다. 여기서 주안점은 사용자 동선을 최소화하는 것이다.

사용자 경험 개선을 위한 동선 단축 방안

  1. 컴포넌트 외부에서 전달받도록 설계한 값들을 모두 컴포넌트 내부에서 처리한다.
    • 이는 곧 컴포넌트 안에서 URL 쿼리를 직접적으로 바라본다는 말인데, 이에 따라 쿼리 키값을 컴포넌트 단위의 예약어로 관리해 사용자에게 노출시킬 필요가 있다. 사용자가 쓰려는 쿼리 키값과 특정 컴포넌트 내부에서 쓰는 쿼리 키값이 충돌할 수 있기 때문이다.
  2. homePageId는 homePageUrl로 변경한다.
    • 사용자가 노션 URL에서 페이지 아이디를 인식하는 것조차 허들이라고 생각했다. 전체 URL을 받아 노션 페이지 아이디를 파싱해서 사용한다.

이로써 사용자 동선은 '노션 컴포넌트 추가하기 - 노션 페이지 주소 붙여넣기', 두 단계로 줄어들었다.

여기서 한 단계 더 줄일 수 있다. 노션 컴포넌트와 관련한 프리셋을 템플릿으로 만들어 사용자가 '컴포넌트가 필요하다'는 개념을 인지할 필요 없이 템플릿으로 시작하고, 노션 URL을 복붙해서 사용하도록 할 수 있다.

현재 설계의 한계 및 향후 개선 방향

노션 컴포넌트의 첫 버전 설계에서는 사용자 경험을 단순화하는 데 중점을 두었다. 이를 위해 컴포넌트가 homePageUrl prop만을 입력받도록 하여 사용자의 동선을 최소화했다. 그러나 이 접근 방식에는 몇 가지 한계가 있다.

  1. 제한된 사용자 제어: 컴포넌트가 내부적으로 많은 기능을 처리하면서, 사용자의 세부적인 제어 가능성이 줄어들었다.
  2. 유연성 부족: 현재 내부적으로 처리되는 currentPageIdonPageClick 같은 기능들을 사용자가 직접 관리하고 싶을 수 있다.

향후 개선 방향으로는 다음과 같은 사항들을 고려할 수 있다.

  • 사용자 요구에 따라 더 많은 prop을 외부에서 받을 수 있도록 컴포넌트를 확장한다.
  • 에디터 상에서 복잡한 설정을 쉽게 할 수 있는 UI/UX 개선을 고려한다.
  • 사용자 피드백을 지속적으로 수집하여 버전을 업그레이드하며 기능을 확장한다.

이러한 접근 방식을 통해, 초기 버전의 단순함을 유지하면서도 점진적으로 더 많은 사용자 요구사항을 수용할 수 있는 유연한 컴포넌트로 발전시킬 수 있을 것이다. 컴포넌트 설계는 사용자 요구사항에 따라 지속적으로 진화해야 한다. 이번 글에서는 그 시작이 되는 노션 컴포넌트 버전 1의 설계 과정과 고민들을 상세히 기록해보았다.

<관련 컨텐츠 바로가기>

https://blog.nadoo.io/2025/02/11/%ec%8a%a4%ed%83%80%ed%8a%b8%ec%97%85-%eb%a7%9e%ec%b6%a4-%ec%b1%84%ec%9a%a9-%ec%82%ac%ec%9d%b4%ed%8a%b8-%eb%85%b8%ec%85%98-%ec%9b%b9-%ec%82%ac%ec%9d%b4%ed%8a%b8-%ed%85%9c%ed%94%8c%eb%a6%bf


솔루션의 비즈니스 가치를 고민하며 성장하는 개발자 김지후입니다.

—김지후, SW엔지니어 @ 나두모두

Read more

클릭 한 번으로 SEO, AEO, Sitemap까지 지원!

클릭 한 번으로 SEO, AEO, Sitemap까지 지원!

홈페이지를 멋지게 만드는 것도 중요하지만, 더 중요한 것은 잠재 고객들이 내 사이트를 '찾을 수 있게' 하는 것이에요. 아무리 잘 만든 홈페이지라도 검색 엔진에 노출되지 않으면 효과를 보기 어렵죠. 나두아이오에서는 검색 엔진 최적화를 복잡한 코딩 없이 클릭 한 번으로 SEO(검색 엔진 최적화) 및 AEO(AI 엔진 최적화)를

By 나두아이오
홈페이지+폼+데이터베이스. 나두아이오의 올인원 서비스

홈페이지+폼+데이터베이스. 나두아이오의 올인원 서비스

홈페이지를 개설하고 운영하려면 보통 세 가지 도구가 필요한데요. 바로 홈페이지, 폼 서비스, 데이터 저장소 (데이터베이스)입니다. 이 3개의 서비스를 다 따로 사용하시는 분들이 계신데 시간이 지날수록 데이터가 여러 곳에 흩어지고 관리가 복잡해지는 경향이 있어요. 나두아이오는 이러한 불편함을 해결하기 위해 홈페이지·폼·데이터베이스가 한 곳에서 자동으로 연동되는 올인원 인프라를 제공합니다. 홈페이지·

By 나두아이오
나두아이오 업데이트 소식!

나두아이오 업데이트 소식!

✨ 새로운 기능 🤖 AI 이미지 생성 이제 텍스트 설명만으로 원하는 이미지를 만들 수 있습니다. AI가 당신의 아이디어를 멋진 이미지로 바꿔드립니다: * 텍스트로 설명하면 AI가 이미지를 생성해요 * 기존 이미지를 AI가 더 나은 품질로 개선해줘요 * 생성된 이미지를 바로 디자인에 적용할 수 있어요 * 무료 사용자는 하루 5회, 유료 사용자는 베타 기간 동안 무제한 무료로 사용할

By 나두아이오
OpenAI Founder Day에 초대받았어요!

OpenAI Founder Day에 초대받았어요!

나두모두가 이번 OpenAI Founder Day에 초대받아 다녀왔습니다! AI 혁명의 시초인 OpenAI가 이번에 한국 지사를 설립하면서 개최된 행사이에요. Founder Day에는 OpenAI가 선발한 창업자와 스타트업들이 초청되어, OpenAI 리더십과 직접 교류하며 최신 기술 방향성과 협력 기회를 논의하는 행사였습니다. 오직 100명의 창업자들만 초대받는 제한된 규모의 행사라 더욱 의미가 컸는데요, 나두아이오와 나두AI로 열심히 달려온 보람을

By 나두아이오