JasperReports 튜토리얼: JasperReport란 무엇인가요? Java?

⚡ 스마트 요약

JasperReports용 Java Jaspersoft Studio는 애플리케이션 데이터를 픽셀 단위까지 완벽한 문서로 변환하는 오픈 소스 보고 엔진입니다. 이 글에서는 보고 수명 주기, Jaspersoft Studio 설치, 보고서 템플릿 생성, 밴드 구조, Pentaho와의 비교, 그리고 팀에서 직면하는 실제적인 제약 사항에 대해 설명합니다.

  • 📊 핵심 정의: JasperReports는 Java 데이터를 화면, 프린터, PDF, HTML, XLS, RTF, CSV, XML, ODT 및 TXT 형식으로 출력하는 클래스 라이브러리입니다.
  • 🔄 수명 주기 단계: 네 단계가 순서대로 진행됩니다. 즉, JRXML을 설계하고, 이를 .jasper 파일로 컴파일하고, 데이터를 채우고, 결과를 내보내는 것입니다.
  • 🖥️ 디자인 환경: Jaspersoft Studio Community Edition은 시각적 디자이너를 제공하며, 현재 커뮤니티 릴리스 버전은 6.21.3입니다.
  • 🧩 밴드 구성: 제목, 페이지 머리글, 열 머리글, 세부 정보, 열 바닥글, 페이지 바닥글 및 요약 밴드는 각 요소가 인쇄되는 위치를 제어합니다.
  • 🔌 데이터 유연성: 하나의 보고서로 여러 요소를 결합할 수 있습니다. JavaBean 컬렉션, SQL 결과 집합, XML 파일 및 사용자 지정 데이터 어댑터.
  • ⚖️ 플랫폼 비교: Jaspersoft는 문서화 및 모바일 비즈니스 인텔리전스 분야를 선도하고, Pentaho는 대시보드 및 데이터 마이닝 분야를 선도합니다.
  • ⚠️ 알려진 제한 사항: 보고서는 실행 전에 컴파일되어야 하므로 모든 보고서 개발자는 완전한 컴파일 환경을 갖추어야 합니다. Java SDK가 설치되었습니다.

JasperReports 튜토리얼

JasperReports란 무엇입니까? Java?

재스퍼 리포트 오픈소스 보고 도구입니다. Java JasperReports는 애플리케이션 보고에 사용되는 도구입니다. 이 보고 도구를 사용하면 풍부한 콘텐츠를 화면, 프린터 또는 HTML, PDF, XLS, RTF, CSV, XML, ODT, TXT와 같은 다양한 파일 형식으로 출력할 수 있습니다. JasperReports는 또한 다음과 같은 용도로도 사용할 수 있습니다. Java다음과 같은 지원 애플리케이션 Java 동적 콘텐츠를 생성하는 EE 또는 웹 애플리케이션.

대부분의 논의에서 세 가지 제품 이름이 함께 등장하므로, 이 페이지에서 나중에 발생할 수 있는 혼동을 방지하기 위해 초기에 제품 이름을 구분해 두는 것이 좋습니다.

이름 그것이 무엇인가? 누가 사용합니까?
JasperReports 라이브러리 The Java 보고서를 컴파일, 작성 및 내보내는 라이브러리 Java 애플리케이션에 보고서를 삽입하는 개발자
재스퍼소프트 스튜디오 The Eclipse JRXML 파일을 생성하는 비주얼 디자이너 기반 보고서 디자이너가 레이아웃을 구축합니다
JasperReports 서버 보고서를 저장, 예약 및 제공하는 독립형 서버 팀에서 비즈니스 사용자에게 보고서를 배포합니다.

이 페이지에서는 라이브러리와 Jaspersoft Studio에 중점을 둡니다. 첫 번째 보고서를 디자인하고 실행하는 데 필요한 구성 요소는 이 두 가지뿐이기 때문입니다. JasperReports Server는 더 이상 커뮤니티 에디션으로 다운로드할 수 없으므로, 커뮤니티 에디션에는 이 두 가지 구성 요소만 포함되어 있다는 점에 유의하십시오.

Jasper Report를 사용하는 이유는 무엇입니까?

Jasper Report 도구를 사용해야 하는 이유는 다음과 같습니다.

  • 보고서 생성 성능과 사용자에게 전달 기능을 제공합니다.
  • 데이터를 텍스트 또는 그래픽 형식으로 표현하는 데 도움이 됩니다.
  • 보고 편집 및 실행을 위한 독립형 및 내장형 보고 서버입니다.
  • 이는 저장소의 모든 보고서에 대한 역할 기반 액세스 제어를 허용합니다.
  • Spring Security 프레임워크를 사용하여 사내 인증 시스템과 통합할 수 있습니다.
  • 이 시스템은 안전하고 예약된 시간에 자동으로 전달되는 대화형 보고 엔진을 제공합니다.
  • 보고서를 다음에 삽입할 수 있습니다. Java 또는 비Java 분야의 다양한 어플리케이션에서 사용됩니다.
  • 다양한 형식의 보고서를 내보낼 수 있습니다.
  • 기본 이미지 위에 놓이는 워터마크를 생성할 수 있습니다.
  • 그것은 완전한 세트를 제공합니다 SOAP, REST 및 웹 서비스.
  • 이를 통해 여러 데이터 소스의 단일 보고서 데이터를 사용할 수 있습니다.

이 라이브러리는 LGPL 라이선스로 배포되므로, 사용자별 요금 없이 상용 제품에 포함하여 사용할 수 있으며, 이것이 많은 사람들이 이 라이브러리를 선호하는 이유입니다. Java 팀들은 자체 개발 보고 엔진보다 이 방법을 선택합니다.

재스퍼 리포트의 특징

이제 JasperReports의 기능에 대해 알아보겠습니다.

Jasper Reports 도구의 주요 기능은 다음과 같습니다.

  • 밴드, 열, 자유 형식 영역 등 다양한 영역에 걸쳐 유연한 보고서 레이아웃을 제공합니다.
  • 개발자는 다음과 같은 다양한 방법으로 데이터를 제공할 수 있습니다. Java빈 컬렉션, SQL 쿼리 및 XML 문서.
  • 여러 데이터 소스를 하위 보고서 및 데이터 어댑터를 통해 단일 보고서 내에 결합할 수 있습니다.
  • 워터마크는 기본 이미지 위에 적용할 수도 있습니다.
  • 상위 레이아웃 내부에 중첩된 하위 보고서를 생성할 수 있습니다.
  • 다음과 같은 다양한 형식으로 보고서를 내보내는 데 도움이 됩니다. PDFHTML, RTF 및 Microsoft Excel 파일.
  • 이 엔진을 사용하면 막대형 차트, 원형 차트, 선 차트, 시계열 차트와 같은 차트를 보고서 정의에 포함할 수 있습니다.
  • 보고서 표현식은 다음과 같이 작성할 수 있습니다. Java, Groovy및 Java스크립트.

이러한 기능은 고정된 처리 순서를 통해 드러나며, 다음 섹션에서 단계별로 자세히 설명합니다.

JasperReports의 수명주기

이제 JasperReports의 수명 주기에 대해 알아보겠습니다.

다음은 Jasper Reports의 일반적인 수명 주기 흐름입니다.

JasperReports의 수명주기

위 그림은 네 단계를 순서대로 보여줍니다. 각 단계는 다음 단계의 입력이 되는 파일을 생성하므로 순서는 절대 역순으로 진행될 수 없습니다.

단계 입력 산출 파일 확장자
설계 레이아웃 결정 보고서 템플릿 .jrxml
컴파일 .jrxml 파일 컴파일된 바이너리 템플릿 .벽옥
실행 중 .jasper 파일과 데이터 작성된 보고서 .jrprint
내보내기 .jrprint 파일 최종 문서 .pdf, .html, .xls 및 기타

보고서 디자인하기

첫 번째 단계는 JRXML 파일을 생성하는 것입니다. JRXML 파일은 보고서 레이아웃을 정의하는 간단한 XML 문서입니다. 이 파일은 텍스트 편집기나 보고서 디자인 도구를 사용하여 작성할 수 있습니다.

하지만 보고서 디자이너를 사용하는 경우 보고서 레이아웃을 시각화할 수 있으므로 JRXML의 실제 구조는 무시해도 됩니다.

보고서 작성

이 생명주기 단계에서는 첫 번째 단계에서 생성된 JRXML이 컴파일되어 Jasper 파일(확장자가 jasper인 파일)이라는 바이너리 객체가 생성됩니다.

이 컴파일은 실행 중에 더 나은 성능을 얻기 위해 수행됩니다. 보고서를 실행하려면 이렇게 생성된 Jasper 파일을 애플리케이션과 함께 제공해야 합니다.

보고서 실행

이 단계에서는 애플리케이션의 데이터가 수집되어 컴파일된 보고서 형식으로 채워집니다. 보고서의 데이터를 채우는 기능을 제공하는 net.sf.jasperreports.engine.JasperFillManager라는 클래스가 있습니다.

출력 결과는 Jasperprint 파일(확장자가 jrprint인 파일) 형식으로 저장되며, 이 파일을 사용하여 보고서를 인쇄하거나 내보낼 수 있습니다.

원하는 형식으로 보고서 내보내기

이 마지막 단계에서는 JasperExportManager 클래스를 사용하여 이전에 생성된 Jasper 인쇄 파일을 어떤 형식으로든 내보내야 합니다. Jasper는 다양한 형식의 내보내기를 제공하므로 동일한 입력을 사용하여 데이터의 다양한 표현을 생성할 수 있습니다.

Jasper Reports 설치 방법 - 환경 설정

이제 JasperReports 환경 설정 과정을 단계별로 살펴보겠습니다. 아래 스크린샷은 6.9 설치 프로그램을 사용하여 캡처한 것입니다. 현재 커뮤니티 릴리스는 2024년 4월 23일에 게시된 6.21.3 버전이며, 파일 이름의 버전 번호만 다를 뿐 화면 순서는 동일합니다.

단계 1) Jasper Reports 커뮤니티 에디션 다운로드
이것으로 가라. (링크) Jasper Reports Community 에디션을 설치하려면 "지금 다운로드" 옵션을 클릭하십시오.

Jasper Reports 설치 - 환경 설정

단계 2) Jaspersoft Studio CE를 선택하세요.
커뮤니티 에디션에서 Jaspersoft Studio CE를 선택하십시오.

Jasper Reports 설치 - 환경 설정

단계 3) Jaspersoft Studio 다운로드
이것으로 가라. 링크 다운로드 버튼을 클릭한 다음 다운로드한 운영 체제용 설치 실행 파일을 엽니다.

Jasper Reports 설치 - 환경 설정

단계 4) 동의 버튼을 클릭하세요
다음 화면이 나타납니다. '동의합니다' 버튼을 선택하세요.

Jasper Reports 설치 - 환경 설정

단계 5) 위치 선택
설치 위치를 선택하고 다음 버튼을 클릭하십시오.

Jasper Reports 설치 - 환경 설정

단계 6) 현재 진행 중입니다.
다음 화면에서 진행 상황을 볼 수 있습니다.

Jasper Reports 설치 - 환경 설정

단계 7) 완료 버튼을 클릭하세요
다음 화면에서는 완료 버튼을 클릭하세요.

Jasper Reports 설치 - 환경 설정

단계 8) 진행이 완료되었습니다
다음 화면이 창에 나타납니다.

Jasper Reports 설치 - 환경 설정

단계 9) 지금 시작하기
다음으로, '시작하기' 옵션을 클릭하세요.

Jasper Reports 설치 - 환경 설정

단계 10) Jasper Reports 스튜디오와 작업 시작
다음 화면이 나타나면 Jasper Reports Studio를 사용하여 작업을 시작할 수 있습니다.

Jasper Reports 설치 - 환경 설정

💡 팁: Jaspersoft Studio는 Eclipse 기반 애플리케이션이며 호환성이 필요합니다. Java 해당 시스템에 런타임이 설치되어 있는지 확인하십시오. 설치 프로그램이 시작되지 않으면 재설치하기 전에 설치된 JDK 버전을 확인하십시오.

보고서 템플릿 예 만들기

이제 JasperReports에서 보고서 템플릿을 만드는 방법을 알아보겠습니다.

JasperReports에서 사용하는 보고서 템플릿 파일은 jrxml 확장자를 가진 간단한 XML 파일입니다. 이 파일은 최상위 요소로 jasperReport 태그를 포함합니다. JasperReports 프레임워크는 다양한 유형의 데이터 소스를 처리할 수 있습니다.

보고서 템플릿은 다음 단계를 통해 설계 및 생성됩니다.

단계 1) Jaspersoft Studio에서 JRXML 파일을 생성합니다.

  1. 파일 옵션으로 이동하세요.
  2. [새로 만들기] 하위 메뉴를 선택하세요.
  3. Jasper Report 옵션을 클릭하세요.

보고서 템플릿 예 만들기

단계 2) 원하는 템플릿을 선택합니다.

  1. 예를 들어 체리와 같은 템플릿을 선택합니다.
  2. "다음" 버튼을 클릭하십시오.

보고서 템플릿 예 만들기

단계 3) 상위 폴더 선택.

  1. '내 보고서' 폴더를 선택하세요.
  2. 예를 들어 "Cherry Report"와 같이 파일 이름을 입력합니다.
  3. "다음" 버튼을 클릭하십시오.

보고서 템플릿 예 만들기

단계 4) 데이터 소스 창에서 "새로 만들기" 버튼을 클릭하여 새 데이터 어댑터를 생성합니다.

보고서 템플릿 예 만들기

단계 5) 데이터 어댑터 선택.

  1. 목록 상자에서 데이터 어댑터를 선택하세요. 예를 들어, "컬렉션" Java콩.”
  2. "다음" 버튼을 클릭하십시오.

보고서 템플릿 예 만들기

단계 6) 데이터 어댑터 세부 정보를 입력하고 팩토리 클래스를 선택합니다.

  1. 어댑터 이름을 입력합니다.
  2. "..." 버튼을 클릭하여 팩토리 클래스를 선택하세요.

보고서 템플릿 예 만들기

단계 7) 접두사 또는 패턴을 입력합니다.

  1. 이름 접두사 또는 패턴을 입력합니다.
  2. 일치하는 항목을 클릭하세요.
  3. "확인"버튼을 클릭합니다.

보고서 템플릿 예 만들기

단계 8) 팩토리 클래스를 정의하고 JAR 파일 경로를 추가합니다.

  1. 팩토리 클래스의 정적 메서드 이름을 입력합니다. 이 Jasper 보고서 예제에서는 createBeanCollection입니다.
  2. 귀하의 경우 JavaBeans 정의에는 필드 설명이 포함되어 있으며, Jaspersoft Studio에서 이러한 필드 설명을 이름으로 사용하려면 "필드 설명 사용" 확인란을 선택하십시오.
  3. jar 파일에 경로를 추가합니다.
  4. "완료" 버튼을 클릭하세요.

보고서 템플릿 예 만들기

단계 9) "다음" 버튼을 클릭하십시오.

보고서 템플릿 예 만들기

단계 10) 축하합니다! 보고서 생성에 필요한 모든 정보를 성공적으로 입력하셨습니다. "완료" 버튼을 클릭하세요.

보고서 템플릿 예 만들기

보고서는 아래 화면과 같이 생성됩니다.

보고서 템플릿 예 만들기

위 파일은 JasperReport 바이너리 형식(jasper 파일이라고 함)으로 컴파일해야 합니다.

JasperReports 라이브러리의 일부인 인터페이스 net.sf.jasperreports.engine.design.JRCompiler는 이 보고서 템플릿 파일의 컴파일에 중요한 역할을 합니다.

이 인터페이스의 구현은 다음과 같이 작성할 수 있습니다. Java, JavaScript, Groovy, 또는 기타 스크립팅 언어.

다음 두 가지 방법을 사용하여 JRXML 파일을 컴파일할 수 있습니다.

  • 프로그램 컴파일 Java 암호.
  • 컴파일은 다음을 사용하여 수행됩니다. 아파치 개미 작업.

아래 코드 조각은 프로그래밍 방식을 보여줍니다. 첫 번째 줄은 템플릿을 컴파일하고, 두 번째 줄은 템플릿에 데이터를 채웁니다. Java콩 수집.

import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

public class ReportRunner {

    public static void main(String[] args) throws JRException {

        // 1. Compile the JRXML template into a .jasper file
        JasperReport report = JasperCompileManager.compileReport("CherryReport.jrxml");

        // 2. Fill the compiled template with a collection of beans
        JRBeanCollectionDataSource source =
                new JRBeanCollectionDataSource(EmployeeFactory.createBeanCollection());

        JasperPrint print = JasperFillManager.fillReport(report, null, source);

        // 3. Export the filled report to PDF
        JasperExportManager.exportReportToPdfFile(print, "CherryReport.pdf");

        System.out.println("Report exported successfully");
    }
}

출력:

Report exported successfully

다양한 보고 대역 이해하기

JasperReports 레이아웃은 밴드라고 하는 수평 섹션으로 나뉩니다. 각 밴드에는 고정된 인쇄 규칙이 있으며, 이러한 규칙을 이해해야 디자이너가 최종 문서에서 값이 나타나는 정확한 위치를 제어할 수 있습니다.

다음은 대부분의 상용 보고서 생성 도구에서 채택하는 표준 보고서 범위입니다.

  • Title
  • 페이지 헤더
  • 열 머리글
  • 세부
  • 열 바닥글
  • 페이지 바닥글
  • 마지막 페이지 바닥글
  • 제품 개요
  • 그룹 헤더
  • 그룹 푸터
  • 배경
  • 데이터가 없습니다

각 보고 대역을 자세히 알아보겠습니다.

Title

이 밴드는 보고서의 시작 부분에 표시됩니다. 속성을 설정하면 별도의 첫 페이지에 배치할 수 있습니다. isTitleNewPage="true".

페이지 헤더

페이지 헤더 밴드는 각 페이지의 시작 부분에 표시됩니다. 제목 밴드를 사용하는 경우 첫 페이지는 제외되고, 요약 밴드를 사용하는 경우 마지막 페이지는 제외됩니다. isSummaryWithPageHeaderAndFooter="false".

열 머리글

열 머리글은 각 페이지의 세부 밴드 앞에 나타납니다.

세부

상세 정보 섹션은 제공된 데이터 소스의 각 레코드에 대해 반복적으로 처리됩니다. 또한 여러 개의 상세 정보 밴드(1, 2 등)를 가질 수 있습니다.

컬럼 푸터

이 섹션은 상세 정보 밴드가 있는 각 페이지의 상세 정보 밴드 아래에 나타납니다. 기본 설정은 페이지 끝이지만, 속성을 설정하여 마지막 상세 정보 밴드 아래로 위치를 변경할 수 있습니다. isFloatColumnFooter="true".

페이지 바닥 글

이 섹션은 요약 밴드, 제목 밴드 및 마지막 비요약 밴드를 제외한 각 페이지의 맨 아래에 표시됩니다.

마지막 페이지 바닥글

요약 내용이 제공되지 않을 경우, 이 섹션은 일반적인 페이지 바닥글 대신 마지막 페이지에 나타납니다.

제품 개요

요약 부분은 보고서의 마지막 새 페이지에만 표시됩니다. isSummaryNewPage="true" 설정되어 있고 페이지 헤더와 푸터가 있는 경우 isSummaryWithPageHeaderAndFooter="true" 설정됩니다.

그룹 헤더

이 섹션은 정의된 경우에만 나타나며, 그룹 표현식이 변경될 때마다 상세 정보 밴드 앞에 표시됩니다.

그룹 푸터

이 섹션은 그룹이 정의된 경우에만 표시되며, 상세 정보 밴드 다음에 그룹 표현식이 변경되기 직전에 매번 표시됩니다.

배경

이는 모든 페이지에서 다른 모든 보고 밴드의 배경으로 표시됩니다.

데이터 없음

이 밴드는 데이터 소스가 전달되지 않았거나 데이터 소스가 비어 있을 때 나타납니다. whenNoDataType="NoDataSection" 설정됩니다.

재스퍼 vs. 펜타호

이제 우리는 재스퍼와 펜타호의 차이점에 대해 알아보겠습니다.

Jasper와 Pentaho의 주요 차이점은 다음과 같습니다.

파라미터 벽옥 펜타 호
보고서 재스퍼는 보고서 디자인에 Jaspersoft Studio를 사용합니다. 이 프로그램은 Pentaho Report Designer를 사용합니다.
ETL 지원 Jaspersoft는 ETL 목적으로 Talend Open Studio 버전을 사용합니다. Pentaho Data Integrator를 기본으로 사용합니다. ETL 도구.
대시보드 대시보드 기능은 Jaspersoft 엔터프라이즈 에디션에서만 제공됩니다. Pentaho는 대시보드에서 다양한 기능을 제공합니다.
모바일 비즈니스 인텔리전스 Jaspersoft는 모바일 BI 지원이 더 뛰어납니다. Pentaho는 모바일 BI 환경을 개선하기 위해 타사 도구에 의존해야 합니다.
문서 더 나은 마케팅, 사이트 및 문서화. 문서 지원이 좋지 않습니다.
최고의 기능 필요한 것을 더 쉽게 조사하고 찾을 수 있습니다. 데이터 마이닝 및 iPhone 통합을 제공합니다.
유료 버전 유료 버전은 다음과 같은 기능을 제공합니다. 임시 쿼리 웹 UI 및 대시보드 생성 웹 UI. LDAP 통합, SSO 및 감사와 같은 기능을 제공합니다.

이미 투자한 팀들 Java 일반적으로 스택은 Jasper를 선택하는 반면, 보고 기능과 함께 대규모 데이터 통합이 필요한 팀은 종종 다른 옵션을 선택합니다. 펜타 호.

JasperReports를 생성하는 동안 직면한 문제

Jasper Reports를 만들 때 직면하게 될 몇 가지 어려움은 다음과 같습니다.

  • 핵심 변경 사항 – 비즈니스 규칙이 변경되거나 개선될 경우 보고서의 핵심 로직을 변경해야 합니다.
  • 복잡한 보고서, 예를 들어 하위 보고서와 교차표 보고서가 좋은 예입니다.
  • 차트 보고서 또는 시각적 차트(예: 그래프, XY 선 차트, 원형 차트, 막대 차트, 시계열 차트, 미터 차트).

Jasper Report 사용의 단점

Jasper Reports 사용의 단점은 다음과 같습니다.

  • 패키지의 일부를 변경하거나 기능을 제거하기 시작하면 기본 패키지 설정으로 되돌리기가 매우 어렵습니다.
  • 너무 경직되어 있어서 행을 편집하거나 교차표를 만드는 것이 어려운 작업입니다.
  • 그룹화된 보고서의 소계를 지정하는 것과 같은 몇 가지 일반적인 작업은 다른 보고서 디자이너에서 더 쉽습니다.
  • Jasper에서는 보고서를 실행하기 전에 보고서를 컴파일해야 합니다. 이는 보고서 개발자가 전체 Java SDK가 설치되었습니다.
  • 때로는 보고서를 편집할 때 웹에 표시되는 것과 동일한 미리보기가 표시되지 않는 경우가 있습니다.

자주 묻는 질문

.jrxml 파일은 설계자가 편집하는 사람이 읽을 수 있는 XML 템플릿입니다. .jasper 파일은 이 템플릿을 컴파일하여 생성된 바이너리 파일이며, 런타임 시에는 컴파일된 파일만 실행됩니다.

JasperReports 라이브러리와 Jaspersoft Studio Community Edition은 오픈 소스 라이선스로 배포되며 상용 제품에 포함될 수 있습니다. 대시보드, 일정 관리 및 보안 기능은 유료 버전에서만 사용할 수 있습니다.

예. Jaspersoft Studio에서 JDBC 데이터 어댑터를 생성하고 드라이버 JAR 파일과 연결 문자열을 제공한 다음 보고서 내에 쿼리를 작성하면 됩니다. 매개변수는 달러 기호($)와 중괄호({}) 구문을 사용하여 전달합니다.

예. JasperReports 종속성을 추가하고, 컴파일된 .jasper 파일을 클래스패스에 배치한 다음, 서비스 클래스에서 JasperFillManager를 호출하면 됩니다. 내보낸 바이트는 HTTP 응답으로 바로 스트리밍할 수 있습니다.

AI 어시스턴트는 JRXML 골격과 표현식 구문을 신속하게 작성할 수 있습니다. 생성된 파일은 항상 Jaspersoft Studio에서 열어보세요. 밴드 높이와 요소 좌표는 수동으로 수정해야 하는 경우가 많습니다.

이 시스템은 AI 대시보드에서 생성되지 않는 송장 및 명세서와 같은 픽셀 단위까지 완벽한 운영 문서를 처리합니다. 모델 출력은 데이터베이스에 기록되고 Jasper는 이를 렌더링하여 배포합니다.

이 게시물을 요약하면 다음과 같습니다.