비교

Spire.PDF vs IronPDF: 기술 비교 가이드

.NET 개발자가 PDF 생성과 조작 라이브러리를 평가할 때, Spire.PDF와 IronPDF는 문서 품질과 사용성에 중대한 영향을 미치는 근본적으로 다른 접근 방식을 대표합니다. Spire.PDF는 E-iceblue 오피스 스위트 내에서 포괄적인 PDF 라이브러리를 제공하며, IronPDF는 최신 Chromium 기반 HTML-to-PDF 엔진을 제공합니다. 이 기술 비교는 2025년 이후 .NET 애플리케이션의 PDF 생성 결정을 내리는 전문 개발자와 아키텍트를 위해 가장 중요한 차원에서 두 라이브러리를 검토합니다.

Spire.PDF 이해하기

Spire.PDF는 E-iceblue의 포괄적인 오피스 스위트의 일부로 인식되는 .NET 개발자를 위한 상업용 PDF 라이브러리입니다. 이는 다른 스위트 구성 요소와의 통합 기능을 제공하여 Word, Excel 및 PowerPoint 처리와 함께 광범위한 PDF 조작을 필요로 하는 조직에 통일된 개발 경험을 제공합니다.

Spire.PDF는 PDF 파일을 생성, 읽기, 쓰기, 조작할 수 있는 다용도의 접근 방식을 제공합니다. 이 다용성은 E-iceblue 생태계 내의 레거시 호환성과 도구 간 일관성을 요구하는 상황에서 채택을 이끕니다.

중대한 제한점: Spire.PDF에는 구조적인 문제가 있습니다—LoadFromHTML() 메서드를 사용하여 HTML을 PDF로 변환할 때, 종종 텍스트를 실제 텍스트가 아닌 비트맵 이미지로 렌더링합니다. 이로 인해 텍스트를 선택하거나 검색하거나 복사할 수 없는 PDF가 생성됩니다.

IronPDF대하여 PDF

IronPDF는 최신 Chromium 기반 렌더링 엔진을 사용하는 상업적으로 지원되는 PDF 생성 라이브러리를 제공합니다. 이 라이브러리는 HTML, CSS, JavaScript를 PDF 문서로 변환하여 텍스트가 모두 선택 가능하고 검색할 수 있으며 접근 가능한 상태를 보장합니다.

Spire.PDF의 이미지 기반 접근 방식과 달리, IronPDF는 결과 PDF에서 텍스트를 실제 텍스트 문자로 유지하며 Flexbox, CSS Grid 및 CSS 변수와 같은 모든 CSS3 기능을 지원합니다.

텍스트를 이미지로 렌더링 하는 문제

Spire.PDF와IronPDF간의 가장 중요한 차이점은 PDF 문서 내에서 텍스트가 렌더링되는 방식에 있습니다. 이러한 근본적인 아키텍처 차이는 문서 사용성에 여러 가지 방식으로 영향을 미칩니다.

Spire.PDF 이미지 기반 렌더링

Spire.PDF가 HTML을 PDF로 변환할 때, 텍스트는 종종 비트맵 이미지로 렌더링됩니다.

// ❌ Spire.PDF - Creates image-based PDF
PdfDocument pdf = new PdfDocument();
pdf.LoadFromHTML("<h1>Important Contract</h1>", false, true, true);
pdf.SaveToFile("contract.pdf");

// Problems with resulting PDF:
// - Text CANNOT be selected
// - Text CANNOT be searched
// - Text CANNOT be copied
// - Screen readers CANNOT read it (accessibility violation)
// - File size is MUCH larger
// - Zooming causes pixelation
// ❌ Spire.PDF - Creates image-based PDF
PdfDocument pdf = new PdfDocument();
pdf.LoadFromHTML("<h1>Important Contract</h1>", false, true, true);
pdf.SaveToFile("contract.pdf");

// Problems with resulting PDF:
// - Text CANNOT be selected
// - Text CANNOT be searched
// - Text CANNOT be copied
// - Screen readers CANNOT read it (accessibility violation)
// - File size is MUCH larger
// - Zooming causes pixelation
$vbLabelText   $csharpLabel

IronPDF실제 텍스트 렌더링

IronPDF는 텍스트를 실제 텍스트 문자로 유지합니다.

using IronPdf;

// ✅IronPDF- Creates real text PDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>");
pdf.SaveAs("contract.pdf");

// Result:
// ✅ Text is fully selectable
// ✅ Text is searchable with Ctrl+F
// ✅ Text can be copied to clipboard
// ✅ Screen readers work perfectly
// ✅ File size is compact
// ✅ Zooming is crystal clear
using IronPdf;

// ✅IronPDF- Creates real text PDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>");
pdf.SaveAs("contract.pdf");

// Result:
// ✅ Text is fully selectable
// ✅ Text is searchable with Ctrl+F
// ✅ Text can be copied to clipboard
// ✅ Screen readers work perfectly
// ✅ File size is compact
// ✅ Zooming is crystal clear
$vbLabelText   $csharpLabel

문서 사용성에 미치는 영향

기능Spire.PDF (이미지 기반)IronPDF (실제 텍스트)
텍스트 선택❌ 가능하지 않음✅ 전체 선택 가능
텍스트 검색 (Ctrl+F)❌ "일치하는 항목 없음"✅ 완벽하게 작동
복사/붙여넣기❌ 복사되는 내용 없음✅ 완벽하게 작동
화면 읽기 프로그램❌ 내용을 읽을 수 없음✅ 전체 접근성
파일 크기큰 크기 (이미지)작은 크기 (텍스트)
줌 품질픽셀화됨매우 선명함

인터넷 익스플로러 렌더링 문제

Spire.PDF는 많은 시나리오에서 HTML 렌더링을 위해 Internet Explorer/Edge Legacy에 의존하여 최신 웹 표준과의 호환성 문제를 야기합니다.

Spire.PDF 렌더링 엔진의 한계


<div style="display: flex; justify-content: space-between; gap: 20px;">
    <div style="flex: 1;">Column 1</div>
    <div style="flex: 1;">Column 2</div>
</div>

<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;">
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>

<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>

<div style="display: flex; justify-content: space-between; gap: 20px;">
    <div style="flex: 1;">Column 1</div>
    <div style="flex: 1;">Column 2</div>
</div>

<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;">
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>

<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>
HTML

IronPDF최신 Chromium 엔진

IronPDF는 최신 Chromium 렌더링 엔진을 사용하여 모든 현대 CSS 기능을 지원합니다:

using IronPdf;

// ✅IronPDF- Uses modern Chromium rendering
var renderer = new ChromePdfRenderer();

var html = @"
<style>
    :root { --primary: #007bff; }
    .container { display: flex; gap: 20px; }
    .grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
    <div style='flex: 1; color: var(--primary)'>Column 1</div>
    <div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>";

var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!
using IronPdf;

// ✅IronPDF- Uses modern Chromium rendering
var renderer = new ChromePdfRenderer();

var html = @"
<style>
    :root { --primary: #007bff; }
    .container { display: flex; gap: 20px; }
    .grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
    <div style='flex: 1; color: var(--primary)'>Column 1</div>
    <div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>";

var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!
$vbLabelText   $csharpLabel

기능 비교 개요

기능Spire.PDFIronPDF
HTML 렌더링IE/Edge 기반 (구식)Chromium (현대식)
텍스트 출력이미지 (선택 불가)실제 텍스트 (선택 가능)
CSS3 지원제한적전체
플렉스박스/그리드지원되지 않음지원됨
JavaScript제한적전체 ES6+
폰트 임베딩문제 발생신뢰성 있음
PDF 접근성부족함 (이미지 기반)우수함
최신 .NET.NET 6+ 부분적전체 .NET 6-9
API 설계복잡함간단하고 직관적임
배포 풋프린트대형보통

HTML을 PDF로 변환

핵심 HTML-to-PDF 워크플로우는 라이브러리 간의 기본 API 및 출력 차이점을 보여줍니다.

Spire.PDF HTML 변환

Spire.PDF는 여러 부울 매개변수를 사용하는 LoadFromHTML() 메서드를 사용합니다:

// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf = new PdfDocument();
        PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();

        string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        pdf.LoadFromHTML(htmlString, false, true, true);
        pdf.SaveToFile("output.pdf");
        pdf.Close();
    }
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf = new PdfDocument();
        PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();

        string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        pdf.LoadFromHTML(htmlString, false, true, true);
        pdf.SaveToFile("output.pdf");
        pdf.Close();
    }
}
$vbLabelText   $csharpLabel

이 접근 방식은 다음을 요구합니다:

  • PdfDocument 인스턴스 생성
  • PdfHtmlLayoutFormat를 선택적으로 구성
  • 여러 부울 매개변수와 함께 LoadFromHTML() 호출
  • 저장 후 명시적인 Close() 호출 중요: 텍스트가 이미지로 렌더링될 수 있음

IronPDFHTML 변환

IronPDF는 깔끔한 API와 함께 ChromePdfRenderer를 제공합니다:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(htmlString);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(htmlString);
        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

RenderHtmlAsPdf 메소드는 Chromium 렌더링 엔진을 사용하여 진정한 텍스트 출력을 생성합니다. 명시적인 Close() 호출이 필요 없습니다—IronPDF는 표준 dispose 패턴을 사용합니다.

PDF 병합

여러 PDF 문서를 병합하면 라이브러리 간의 다른 API 패턴이 나타납니다.

Spire.PDF PDF 병합

Spire.PDF는 InsertPageRange() 메서드를 사용하여 문서를 병합합니다:

// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf1 = new PdfDocument();
        pdf1.LoadFromFile("document1.pdf");

        PdfDocument pdf2 = new PdfDocument();
        pdf2.LoadFromFile("document2.pdf");

        pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);

        pdf1.SaveToFile("merged.pdf");
        pdf1.Close();
        pdf2.Close();
    }
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf1 = new PdfDocument();
        pdf1.LoadFromFile("document1.pdf");

        PdfDocument pdf2 = new PdfDocument();
        pdf2.LoadFromFile("document2.pdf");

        pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);

        pdf1.SaveToFile("merged.pdf");
        pdf1.Close();
        pdf2.Close();
    }
}
$vbLabelText   $csharpLabel

이 접근 방식은 다음을 요구합니다:

  • 각 문서를 별도로 로딩
  • 페이지 범위 계산 사용 (pdf2.Pages.Count - 1)
  • 첫 번째 문서에 삽입 (수정)
  • 두 문서를 명시적으로 닫음

IronPDFPDF 병합

IronPDF는 정적 Merge() 메서드를 제공합니다:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2);

        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2);

        merged.SaveAs("merged.pdf");
    }
}
$vbLabelText   $csharpLabel

PdfDocument.Merge() 메소드는 원본을 수정하지 않고 새로 병합된 문서를 만듭니다. 명시적인 Close() 호출이 필요 없습니다.

PDF에 텍스트 추가

기존 문서에 텍스트를 추가하면 다른 텍스트 렌더링 철학이 드러납니다.

Spire.PDF 텍스트 추가

Spire.PDF는 캔버스 기반의 드로잉 접근 방식을 사용합니다:

// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf = new PdfDocument();
        PdfPageBase page = pdf.Pages.Add();

        PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
        PdfBrush brush = new PdfSolidBrush(Color.Black);

        page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));

        pdf.SaveToFile("output.pdf");
        pdf.Close();
    }
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf = new PdfDocument();
        PdfPageBase page = pdf.Pages.Add();

        PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
        PdfBrush brush = new PdfSolidBrush(Color.Black);

        page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));

        pdf.SaveToFile("output.pdf");
        pdf.Close();
    }
}
$vbLabelText   $csharpLabel

이 접근 방식은 다음을 요구합니다:

  • 폰트 및 브러쉬 객체 생성
  • 캔버스 드로잉 메서드 사용
  • PointF으로 좌표 기반 위치 지정
  • 명시적 리소스 관리

IronPDF텍스트 추가

IronPDF는 스탬퍼 기반 접근 방식을 사용합니다:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");

        var textStamper = new TextStamper()
        {
            Text = "Hello from IronPDF!",
            FontSize = 20,
            VerticalOffset = 50,
            HorizontalOffset = 50
        };

        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");

        var textStamper = new TextStamper()
        {
            Text = "Hello from IronPDF!",
            FontSize = 20,
            VerticalOffset = 50,
            HorizontalOffset = 50
        };

        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

TextStamper 클래스는 별도의 글꼴 및 브러시 객체 생성이 필요 없는 선언적 접근 방식을 제공합니다.

API 매핑 참조

Spire.PDF의 IronPDF로의 마이그레이션을 평가하는 팀은 다음과 같은 동등한 작업 맵핑을 참조할 수 있습니다:

Spire.PDFIronPDF
PdfDocumentPdfDocument
pdf.LoadFromHTML()renderer.RenderHtmlAsPdf()
pdf.LoadFromFile()PdfDocument.FromFile()
pdf.SaveToFile()pdf.SaveAs()
pdf.Close()필요 없음
pdf.InsertPageRange()PdfDocument.Merge()
PdfFont + PdfBrushTextStamper
page.Canvas.DrawString()pdf.ApplyStamp()
PdfHtmlLayoutFormatRenderingOptions

중대한 기술 문제

알려진 Spire.PDF 문제

문제영향IronPDF 솔루션
이미지로 렌더링된 텍스트PDF 검색 불가능, 접근 불가, 텍스트 복사 불가실제 텍스트 렌더링
Internet Explorer 의존성구식 렌더링, 보안 위험최신 Chromium 엔진
글꼴 포함 실패다른 시스템에서 문서가 잘못 표시됨신뢰할 수 있는 글꼴 처리
큰 배포 발자국높은 메모리 사용량, 느린 시작효율적인 배포
제한된 CSS 지원최신 레이아웃이 올바르게 렌더링되지 않음전체 CSS3 지원

접근성 준수

Spire.PDF의 LoadFromHTML() 메서드로 생성된 이미지 기반 PDF는 접근성 준수 문제를 일으킵니다:

  • WCAG 2.1 준수 — 텍스트 접근성 요구사항 미충족
  • 섹션 508 준수 — 미국 정부 접근성 표준 미충족
  • ADA 요구사항 — 미국 장애인법 요구사항 미충족
  • 화면 읽기 장치 호환성 — 콘텐츠를 읽을 수 없음

IronPDF의 실제 텍스트 렌더링은 모든 문서 콘텐츠를 읽을 수 있는 화면 읽기 장치로 전체 접근성 준수를 보장합니다.

팀이 Spire.PDF 마이그레이션을 고려할 때

다양한 요인이 개발 팀이 Spire.PDF 대안을 평가하게 만듭니다:

텍스트 선택 가능성 요구사항은 사용자들이 콘텐츠를 복사하거나 문서 내에서 검색하거나 문서 관리 시스템이 PDF 콘텐츠를 인덱싱해야 할 때 중요해집니다. Spire.PDF의 이미지 기반 렌더링은 이러한 모든 기능을 차단합니다.

접근성 준수는 WCAG, 섹션 508 또는 ADA 요구사항의 영향을 받는 조직에 영향을 미칩니다. 이미지 기반 PDF는 접근성 감사를 통과하지 못하며 법적 책임을 초래할 수 있습니다.

현대식 CSS 레이아웃은 Flexbox, CSS Grid 또는 CSS Variables를 사용하는 디자인에서 올바르게 렌더링되지 않습니다. Spire.PDF의 Internet Explorer 기반 렌더링은 이러한 현대 웹 표준을 처리할 수 없습니다.

글꼴 포함 문제는 다른 시스템에서 문서가 잘못 나타나게 합니다. 사용자들은 정확한 글꼴 포함에 대한 Spire.PDF의 어려움을 보고하며, 문서 충실도에 영향을 줍니다.

큰 배포 발자국은 자원이 제한된 환경에 영향을 미칩니다. Spire.PDF의 운영 발자국은 시스템 메모리 사용량 및 관련 비용에 영향을 줍니다.

강점과 절충

Spire.PDF 장점

  • 포괄적인 E-iceblue 오피스 스위트의 일부
  • 다른 스위트 구성 요소(Word, Excel, PowerPoint)와의 통합
  • 도구 간 일관성을 요구하는 레거시 애플리케이션에 적합
  • 다양한 PDF 조작 기능
  • Freemium 라이센스 옵션 사용 가능

Spire.PDF 한계

  • 텍스트가 이미지로 렌더링됨(선택 가능하지 않으며, 검색할 수 없고 접근성 없음)
  • Internet Explorer 의존 렌더링 엔진
  • 알려진 폰트 임베딩 문제
  • 큰 배포 발자국
  • 제한적인 최신 CSS 지원(플렉스박스, 그리드, CSS 변수 없음)
  • 명시적인 자원 관리가 필요한 복잡한 API

IronPDF강점

  • 참된 텍스트 렌더링(선택 가능, 검색 가능, 접근 가능)
  • 최신 Chromium 기반 엔진을 통한 전체 CSS3 지원
  • 신뢰할 수 있는 폰트 처리
  • 중간 수준의 배포 발자국
  • 포괄적인 문서 및 전문 지원
  • 명시적인 Close() 요구 사항이 없는 간단한 API
  • 완전한 Flexbox, CSS Grid 및 CSS Variables 지원
  • PDF 조작 기능(병합, 분할, 스탬프)

IronPDF고려 사항

  • 상업적 라이센스 모델
  • E-iceblue Suite와 다른 API 패턴

비교 표

기능Spire.PDFIronPDF
HTML to PDF 렌더링텍스트가 이미지로 렌더링됨참된 텍스트 렌더링(선택 가능하고 검색 가능)
렌더링 엔진Internet Explorer 의존Chromium 기반, 최신 웹 표준 준수
폰트 처리폰트 임베딩에 관한 알려진 문제신뢰할 수 있고 강력한 폰트 처리
사용 사례레거시 애플리케이션, 오피스 스위트최신 애플리케이션, 정확한 문서 렌더링
라이센스프리미엄/상용상업적
배포 발자국대형보통

결론

Spire.PDF 와 IronPDF는 서로 다른 조직적 환경과 기술적 요구에 부응합니다. Spire.PDF는 레거시 호환성과 도구간 일관성이 필요한 E-iceblue 오피스 스위트에 많이 투자한 조직에 가치를 제공합니다. 통합 기능은 통합된 개발 경험을 위해 다른 스위트 구성 요소와 일치합니다.

텍스트 선택성, 검색성, 접근성 준수, 또는 최신 CSS 렌더링이 필요한 애플리케이션의 경우, IronPDF는 Spire.PDF가 제공할 수 없는 필수 기능을 제공합니다. Chromium 기반 렌더링 엔진은 이미지 기반 PDF 생성의 근본적인 한계를 해결하기 위해 전체 CSS3 지원과 함께 참된 텍스트 출력을 보장합니다.

Spire.PDF에서 IronPDF로의 마이그레이션 평가 시, 팀은 텍스트 접근성, 문서 검색성, 최신 CSS 지원, 및 접근성 준수에 대한 구체적인 요건을 고려해야 합니다. .NET 10 및 C# 14를 2026년에 타겟팅하는 팀이 접근성 요구사항을 가질 때, IronPDF의 참된 텍스트 렌더링 아키텍처는 Spire.PDF의 이미지 기반 접근 방식보다 더 적절한 기반을 제공합니다.


구현 지침을 위해 IronPDF HTML-to-PDF 튜토리얼과 현대 .NET 응용 프로그램용 PDF 생성 패턴을 다루는 문서를 탐색하십시오.