15분 안에 Unlayer의 Drag-and-Drop Email Editor를 Next.js에 추가한 방법

발행: (2026년 1월 3일 오후 08:27 GMT+9)
11 min read
원문: Dev.to

Source: Dev.to

Unlayer의 SDK를 실험해 보았습니다

Unlayer의 드래그‑앤‑드롭 이메일 편집기를 Next.js 앱에 삽입해 보았습니다. SDK를 사용하면 다음을 할 수 있습니다:

  • 몇 분 안에 HTML 및 JSON 디자인을 내보내기
  • 반응형이며 프로덕션에 바로 사용할 수 있는 이메일 HTML 생성
  • 일반적인 이메일 클라이언트 렌더링 quirks(특징) 회피

아래는 제가 발견한 내용과 다른 개발자를 위한 단계별 가이드입니다.

내가 발견한 것

Unlayer는 이메일 편집용 Stripe와 같습니다 – 렌더링 quirks를 처리해 주어 앱에 집중할 수 있습니다.

주요 기능

  • 클라이언트‑사이드 JavaScript 래퍼가 드래그‑앤‑드롭 편집기를 삽입합니다
  • 크로스‑클라이언트 호환 HTML을 생성하여 바로 프로덕션에 사용할 수 있습니다
  • JSON(저장/편집용) 및 정돈된 HTML(전송용)를 내보냅니다
  • React 래퍼가 기본 제공됩니다
  • 백엔드 의존성이 없으며 브라우저에서 완전히 실행됩니다

단계 1: 설치

npm install react-email-editor

단계 2: 컴포넌트 설정

'use client'

import { useRef } from 'react'
import dynamic from 'next/dynamic'

// Critical: Dynamic import with SSR disabled
// react-email-editor relies on browser APIs like `window`
// that aren't available during server‑side rendering
const EmailEditor = dynamic(
  () => import('react-email-editor').then((mod) => mod.EmailEditor),
  { ssr: false }
)

export default function Home() {
  const emailEditorRef = useRef(null)

  const exportHtml = () => {
    if (emailEditorRef.current) {
      emailEditorRef.current.editor.exportHtml((data: any) => {
        const { design, html } = data

        // Store JSON in your database for later editing
        console.log('Design JSON:', design)

        // Use HTML for sending emails
        console.log('Exported HTML:', html)

        // Download the HTML file
        const blob = new Blob([html], { type: 'text/html' })
        const url = URL.createObjectURL(blob)
        const link = document.createElement('a')
        link.href = url
        link.download = 'newsletter.html'
        link.click()
        URL.revokeObjectURL(url)
      })
    }
  }

  return (
    <>
      {/* Newsletter Builder UI */}
      <div style={{ height: 'calc(100vh - 60px)' }}>
        <EmailEditor ref={emailEditorRef} />
        <button onClick={exportHtml}>Export HTML</button>
      </div>
    </>
  )
}

장애물: SSR 및 하이드레이션

문제: 편집기가 서버‑사이드 렌더링 중 window에 접근하려고 하여 하이드레이션 오류가 발생합니다.

해결책: Next.js dynamic import를 { ssr: false }와 함께 사용합니다. 이렇게 하면 컴포넌트가 클라이언트에서만 렌더링되도록 강제하여 불일치를 없앨 수 있습니다.

이 패턴은 Next.js 프로젝트에서 브라우저 전용 라이브러리를 사용할 때 일반적입니다.

주요 구현 세부 사항

세부 사항설명
Ref 관리useRefexportHtml()와 같은 메서드를 호출하기 위해 에디터 인스턴스에 직접 접근할 수 있게 합니다.
Height 계산컨테이너는 calc(100vh - header height)를 사용하여 남은 뷰포트 공간을 채웁니다.
Dual ExportSDK는 JSON(나중에 저장/편집)과 HTML(이메일 서비스로 전송) 두 가지를 모두 반환합니다.

결과

약 15 분 안에 다음을 얻었습니다:

  • 완전한 기능을 갖춘 드래그‑앤‑드롭 이메일 편집기
  • JSONHTML 내보내기 기능
  • 반응형, 프로덕션 준비된 이메일 HTML
  • 유지해야 할 커스텀 렌더링 엔진이 없음

마음에 든 점

이유
속도통합이 몇 분 안에 완료됐으며, 몇 달이 걸리지 않았습니다.
백엔드 없음완전히 클라이언트 측에서 실행됩니다.
깨끗한 API편집기 메서드에 대한 간단한 ref 기반 접근.
프로덕션 준비 출력HTML이 주요 이메일 클라이언트 전반에서 작동합니다.

트레이드오프

⚠️우려
SSR 처리동적 import({ ssr: false })가 필요합니다.
번들 크기~500 KB를 추가합니다 (기능에 비해 허용 가능).
스타일링전체 높이 레이아웃을 위해 약간의 조정이 필요합니다.

직접 구축 vs 구매

커스텀 이메일 편집기를 직접 구축할지 Unlayer를 사용할지 결정할 때는 다음 비교를 고려하세요:

Factor직접 구축Unlayer SDK 사용
Initial Development Time4‑6개월 (전일제)15분 – 2시간 (통합)
Email Client Compatibility직접 매트릭스를 관리Unlayer가 처리 (50개 이상 클라이언트 테스트)
Responsive Design커스텀 미디어 쿼리 및 테이블 레이아웃 작성내장 반응형 엔진
Dark‑Mode Support커스텀 CSS 및 테스트 필요자동 다크 모드 호환
Maintenance Burden클라이언트 변경에 대한 지속적인 업데이트최소 – SDK 업데이트가 처리
Custom Blocks / Extensibility완전한 제어, 하지만 인프라를 직접 구축내장 확장 API (React/Vue 컴포넌트)
HTML Output Quality구현에 따라 다름프로덕션 준비 완료, 검증된 HTML
State Management자체 JSON 스키마 및 파서 구축JSON 스키마 제공, 저장/로드 용이
Bundle Size직접 제어 (하지만 모든 것을 직접 구축)약 500 KB (전체 편집기 포함)
Learning Curve가파름 – 이메일 HTML 특이점, 렌더링 엔진최소 – 간단한 API를 가진 React 컴포넌트
Time to Market6개월 이상 프로덕션 준비스프린트 내에 배포
Technical Debt높음 – 레거시 이메일 HTML, 브라우저 특이점낮음 – 추상화됨
Engineering Hours (Cost)초기 ~800‑1200시간 + 지속적통합 ~2‑4시간 + 최소 유지보수
Risk높음 – 프로덕션에서 알 수 없는 렌더링 이슈낮음 – 수천 건의 프로덕션 검증

결론

빠르고, 신뢰할 수 있으며, 유지보수가 용이한 이메일 편집기가 필요하다면 Unlayer SDK가 확실한 선택입니다. 이메일 클라이언트 특이점에 대한 무거운 작업을 없애고, 빠르게 배포할 수 있게 하며, 코드베이스를 가볍게 유지합니다. 유일한 추가 작업은 Next.js와 같은 SSR 환경에서 라이브러리의 클라이언트 전용 특성을 처리하는 것입니다.

앱 유형

직접 구축할 경우:

  • 6개월 이상의 시간과 전담 팀이 있는 경우.
  • Unlayer가 제공하지 못하는 극도의 맞춤화가 필요한 경우.
  • 이메일 편집이 핵심 제품인 경우(단순 기능이 아님).

구매(Unlayer)할 경우:

  • 이메일 편집이 기능일 뿐, 제품이 아닌 경우.
  • 빠르게 출시해야 할 경우.
  • 엔지니어링 자원을 핵심 비즈니스 로직에 집중하고 싶을 때.
  • 유지보수 부담 없이 신뢰할 수 있는 크로스‑클라이언트 호환성이 필요할 때.

대부분의 SaaS 애플리케이션에서, 결론은 명확합니다: 구매.
렌더링 엔진 유지보수에 소요되는 시간을 절감하는 것만으로도 통합 비용을 여러 번 상쇄합니다.

왜 그냥 리치 텍스트 에디터를 사용하지 않을까?

당신은 이렇게 물을 수도 있습니다: “Tiptap이나 Quill을 왜 안 쓰나요?”

리치 텍스트 에디터는 문서 작성에 훌륭하지만 이메일 레이아웃에서는 한계가 있습니다. 사용자가 필요로 하는 것은:

  • 다중 컬럼 레이아웃
  • 반응형 이미지
  • 모든 클라이언트에서 동작하는 버튼
  • 구조화된 템플릿

Unlayer는 레이아웃 빌더를 제공하여 모바일 친화적인 출력을 보장하고, 디자인을 JSON 형태로 저장해 프로그램적으로 편집할 수 있게 합니다.

실제 운영에서는 다음과 같이 합니다:

  1. JSON 디자인을 데이터베이스에 저장합니다.

  2. 저장된 디자인을 다음과 같이 로드합니다:

    editor.loadDesign(designJson);
  3. 이메일 전송 서비스와 통합합니다.

  4. 도메인에 맞는 커스텀 블록을 추가합니다 (예: 제품 목록, 사용자 데이터).

Next.js Newsletter Builder

결론

Unlayer는 이메일 렌더링 복잡성을 추상화합니다. 앱에 이메일 편집기가 필요하다면, 이 SDK를 평가해볼 가치가 있습니다. 렌더링 엔진 유지 관리에 절감되는 시간만으로도 통합을 정당화합니다.

때때로 가장 좋은 코드는 작성할 필요가 없는 코드입니다. 😉

더 많은 것을 탐구하고 여러분과 공유하기를 기대합니다!

Back to Blog

관련 글

더 보기 »

Next.js에서 Hydration 오류 수정

수화 오류의 일반적인 원인 브라우저/환경 문제 - 속성을 주입하는 브라우저 확장 프로그램, password managers, ad blockers, accessibility tools - Br...