맨위로가기

웹 프레임워크

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

웹 프레임워크는 웹 애플리케이션 개발을 돕기 위해 만들어진 소프트웨어로, 초기에는 정적인 HTML 페이지로 구성되었으나, CGI 표준의 도입으로 동적 웹 페이지 구현이 가능해졌다. 1990년대 후반 풀 스택 프레임워크가 등장하여 웹 개발에 유용한 여러 라이브러리를 통합했다. 대부분의 웹 프레임워크는 모델-뷰-컨트롤러(MVC) 아키텍처 패턴을 기반으로 하며, 푸시 기반과 풀 기반 아키텍처를 모두 지원한다. 주요 기능으로는 웹 템플릿 시스템, 캐싱, 보안, 데이터베이스 접근, URL 매핑, AJAX, 웹 서비스 등이 있으며, 다양한 프로그래밍 언어(자바, 자바스크립트, C#, PHP, Perl, Python, Ruby 등)를 지원한다. 대부분의 프레임워크는 여러 운영체제에서 동작하며 특정 플랫폼에 종속되지 않는다.

2. 역사

월드 와이드 웹은 초기 설계 당시 동적인 기능을 갖추지 못했으며, 웹 서버에 게시된 HTML 문서들은 사람이 직접 작성해야 했다. 따라서 게시된 문서를 수정하려면 페이지 작성자가 직접 수정 작업을 수행해야 했다. 1993년, 공통 게이트웨이 인터페이스(CGI) 표준이 도입되면서 외부 애플리케이션과 웹 서버 간의 통신이 가능해졌고, 사용자 입력을 반영한 동적 웹 페이지를 제공할 수 있게 되었다.[27]

1995년에는 콜드퓨전, PHP, 액티브 서버 페이지(ASP)와 같이 서버와 언어가 통합된 개발 환경이 처음 등장하며 새로운 웹 특화 언어들이 나타났다. CGI 초기 구현은 각 요청마다 별도의 프로세스를 생성하여 서버 부하를 가중시키는 문제가 있었으나,[2] 이후 기술 발전으로 서버 리소스 부담을 줄이고 성능을 향상시킨 구현 방식이 등장했다.

1990년대 후반에는 웹 개발에 필요한 여러 라이브러리를 통합하여 제공하는 "풀 스택" 프레임워크가 등장하기 시작했다.

2. 1. 초창기 웹과 CGI

월드 와이드 웹은 설계 당시에는 동적이지 않았으며, 웹 서버에 게시된, 사람이 직접 코딩한 HTML로 이루어진 초기의 하이퍼텍스트로 구성되었다. 게시된 문서를 수정하려면 페이지를 만든 사람이 직접 해야 했다. 1993년, 공통 게이트웨이 인터페이스(CGI) 표준이 도입되어 외부 애플리케이션과 웹 서버 간 통신이 가능해졌고, 사용자 입력을 반영한 동적 웹 페이지를 제공할 수 있게 되었다.[27]

CGI 인터페이스의 초기 구현은 각 요청마다 별도의 프로세스를 시작했기 때문에 서버 부하에 부정적인 영향을 미쳤다.[2]

2. 2. 서버/언어 개발 환경의 등장

1995년, 콜드퓨전, PHP, 액티브 서버 페이지(ASP) 등 서버 측 스크립트 언어와 개발 환경이 처음 등장하면서 동적 웹 페이지 개발이 본격화되었다.

2. 3. 웹 프레임워크의 성숙

1990년대 후반, 웹 개발에 필요한 여러 라이브러리를 통합한 "풀 스택" 프레임워크가 등장하기 시작했다. 이러한 프레임워크는 웹 개발자가 사용할 수 있는 단일의 일관된 소프트웨어 스택으로 구성되었다. Jakarta EE, OpenACS, Ruby on Rails 등이 대표적인 예이다.

2. 4. 포틀릿 프레임워크

기존의 프레임워크는 기본적으로 수평으로 분할되어 있어 사용자 기능을 추가, 변경, 삭제하려면 애플리케이션을 교체해야 했다. 포털 프레임워크는 사용자 기능을 수직으로 분할하여 사용자 기능별로 핫 배포/언데플로이할 수 있다. 배포된 포틀릿을 드래그 앤 드롭 조작으로 웹 페이지에 배치할 수 있는 것이 특징이다.

포틀릿마다 엔티티 인터페이스(모델), 표시(뷰), 비즈니스 로직이 포함되어 있어 포틀릿마다 다른 스택 기술을 사용할 수도 있다. 예를 들어 JSF로 작성된 포틀릿과 Spring Framework로 작성된 포틀릿을 하나의 웹 페이지에 배치할 수 있다. 또한 다른 언어로 포틀릿을 기술할 수도 있다. 예를 들어 Java, Ruby, PHP로 작성된 포틀릿을 하나의 웹 페이지에 배치할 수 있다.

사용자 기능을 수시로 추가, 교체, 삭제할 수 있으므로, 포틀릿 프레임워크는 애자일 개발과 같이 지속적으로 개발을 진행하는 경우에 적합하다. 예를 들어 Scrum의 각 사용자 스토리를 플러그인으로 만들 수 있다.

포틀릿 프레임워크를 이용한 웹 시스템의 예로는 Liferay, Alfresco 등이 있다. 그중 Liferay는 개발자를 위한 도구가 잘 갖춰져 있다.

3. 아키텍처

대부분의 웹 프레임워크는 모델-뷰-컨트롤러(MVC) 아키텍처 패턴을 기반으로 한다.

3. 1. 모델-뷰-컨트롤러 (MVC)

많은 웹 프레임워크는 모델-뷰-컨트롤러(MVC) 아키텍처 패턴을 기반으로 하며, 사용자 인터페이스로부터 비즈니스 규칙과 데이터 모델을 분리한다. 이는 관심사 분리를 통해 코드 재사용을 촉진하고 여러 인터페이스를 적용할 수 있게 해주므로 좋은 방법으로 간주된다. MVC 패턴을 사용하면 웹 애플리케이션에서 모바일 브라우저와 데스크톱 브라우저에 서로 다른 웹 페이지를 제공하거나, 기계가 읽을 수 있는 웹 서비스 인터페이스를 제공하는 등 서로 다른 뷰를 제공할 수 있다.

3. 1. 1. 푸시 기반 vs. 풀 기반

MVC 프레임워크는 액션 기반의 푸시 기반 아키텍처와 컴포넌트 기반의 풀 기반 아키텍처로 나눌 수 있다.[3]

대부분의 MVC 프레임워크는 푸시형 아키텍처를 따른다.[23] 이러한 프레임워크는 처리를 요청하는 액션을 실행하고, 결과를 출력하기 위해 데이터를 표시 계층에 푸시한다.[3] 스트럿츠, 장고, 루비 온 레일스, 스프링 프레임워크의 일부인 스프링 MVC 등이 이 아키텍처의 좋은 예이다.

이에 대한 대안은 풀 기반 아키텍처로, "컴포넌트 기반"이라고도 한다. 이러한 프레임워크는 표시 계층에서 처리를 시작하여 필요에 따라 여러 컨트롤러의 처리 결과를 "풀"한다. 이 아키텍처에서는 여러 컨트롤러가 하나의 뷰에 연관된다. 아파치 태피스트리, 아파치 벨로시티 등이 풀형 아키텍처의 예이다.

3. 2. 3계층 아키텍처

3계층 아키텍처에서 애플리케이션은 클라이언트, 애플리케이션, 데이터베이스의 세 가지 물리적 계층으로 구성된다.[28][29][30][31][4][5][6][7] 데이터베이스는 일반적으로 RDBMS이다. 애플리케이션은 비즈니스 로직을 포함하고 있으며, 서버를 구동시킨 다음 HTTP를 사용하여 클라이언트와 통신한다.[32][8] 웹 애플리케이션의 클라이언트는 응용 계층에 의해 생성되는 HTML을 실행하는 웹 브라우저이다.[33][34][9][10] 이 용어는 MVC와 혼동해서는 안 되는데, MVC에서는 3계층 아키텍처와 달리 비즈니스 로직을 컨트롤러, 즉 "중간 계층"에서 분리하는 것이 좋은 관행으로 여겨진다.[11][12]

4. 주요 기능

웹 애플리케이션 프레임워크는 웹 개발을 효율적으로 만들기 위해 다양한 기능을 제공한다. 주요 기능은 다음과 같다.


  • 제어 흐름 설정: 프레임워크는 프로그램의 제어 흐름을 설정하고, 사용자가 다양한 이벤트에 "훅"하여 흐름을 제어할 수 있게 한다.[16] 이는 코드의 공통 흐름을 적용하여 사용자 정의를 용이하게 한다.[16] 예를 들어, Sinatra 같은 마이크로프레임워크는 HTTP 요청 전후에 "미들웨어" 훅을 허용하여 로깅, 인증, 세션 관리, 리디렉션 등을 정의할 수 있게 한다.[17]
  • 웹 템플릿 시스템: 동적인 웹 페이지를 쉽게 생성하고 관리할 수 있도록 돕는다. 템플릿을 사용하면 HTML과 변수를 쉽게 결합하여 동적인 콘텐츠를 만들 수 있다.
  • 캐싱: 웹 캐싱을 통해 대역폭 사용량, 웹 서버 부하 및 지연을 줄여 웹 사이트의 성능을 향상시킨다.
  • 보안: 인증인가 프레임워크를 제공하여 사용자 식별 및 접근 제한 기능을 구현할 수 있다. 드루팔과 Django는 역할 기반 접근 관리 기능을 제공한다.
  • 데이터베이스: 다양한 데이터베이스 백엔드에 대한 통합 API를 제공하여 데이터베이스와의 상호 작용을 단순화한다. 일부 프레임워크는 객체 관계형 매핑(ORM) 도구를 제공하여 객체와 튜플 간의 매핑을 자동화한다.[18]
  • URL 매핑: URL을 해석하고 관리하는 기능을 제공한다. 정규 표현식이나 URL 재작성 기술을 사용하여 URL을 친숙하고 검색 엔진에 최적화된 형태로 변환한다.
  • AJAX: 비동기 자바스크립트XML을 사용하여 웹 페이지의 응답 속도를 높이고 사용자 경험을 향상시킨다.
  • 웹 서비스: 웹 서비스(SOAP, REST)를 만들고 제공하는 도구를 제공한다.[21]
  • 웹 리소스: 자원 지향 아키텍처(ROA) 인프라를 제공하여 자원 기술 프레임워크(RDF) 기반의 시맨틱 웹 온톨로지 엔지니어링에 따라 자원 컬렉션을 구축한다.[1]

4. 1. 웹 템플릿 시스템

동적인 웹 페이지는 일반적으로 정적인 부분(HTML)과 HTML을 생성하는 코드인 동적인 부분으로 구성된다. HTML을 생성하는 코드는 템플릿상의 변수 또는 코드로부터 생성을 수행한다. 생성되는 텍스트를 데이터베이스에서 가져옴으로써, 사이트 내 페이지의 수를 획기적으로 줄일 수 있다.[1]

예를 들어 500채의 집을 취급하는 부동산 회사를 생각해 보자. 정적인 웹사이트에서는 부동산 회사가 500개의 페이지를 작성해야 하지만, 동적인 웹사이트에서는 부동산 회사가 단지 동적인 페이지를 500개의 레코드를 가진 데이터베이스에 연결하기만 하면 된다.[1]

템플릿에서는 프로그래밍 언어에서 유래된 변수를 코드를 사용하지 않고 삽입할 수 있기 때문에 웹사이트 내 페이지를 갱신하기 위해 프로그래밍 지식이 필요하지 않게 된다.[1] HTML과 변수를 구별하기 위한 기술적인 방법이 정의되어 있는데, 예를 들어 JSP에서는 <c:out> 태그가 변수를 출력하기 위해 사용되고, Smarty에서는 {$variable}이 사용된다.[1]

다수의 템플릿 엔진은 IF나 FOREACH와 같은 약간의 논리 태그를 지원한다.[1] 이들은 비즈니스 로직 계층 혹은 MVC 패턴에서의 M(모델)과의 명확한 분리를 수행하기 위해, 프리젠테이션 계층에 필요한 결정을 내리기 위해서만 사용된다.[1]

4. 2. 캐싱

웹 캐싱은 전자 문서대역폭 사용량, 웹 서버 부하, 그리고 체감되는 "지연"을 줄이기 위해 문서를 캐싱하는 것이다. 웹 캐시는 그것을 통과하는 문서의 사본을 저장하며, 특정 조건이 충족되면 후속 요청은 캐시에서 충족될 수 있다. 일부 애플리케이션 프레임워크는 데이터베이스 액세스 또는 템플릿 해석과 같은 페이지 준비의 다양한 단계를 캐싱하고 우회하는 메커니즘을 제공한다.

4. 3. 보안

일부 웹 프레임워크는 인증인가 프레임워크와 함께 제공되어 웹 서버가 애플리케이션 사용자를 식별하고 정의된 기준에 따라 기능에 대한 접근을 제한할 수 있도록 한다. 드루팔과 Django는 역할에 기반하여 페이지에 대한 접근을 관리하고, 사용자 생성 및 역할 할당을 위한 웹 기반 인터페이스를 제공하는 예시이다.

4. 4. 데이터베이스 접근, 매핑 및 구성

웹 프레임워크는 다양한 데이터베이스 백엔드에 대한 통합된 API를 제공하여, 웹 애플리케이션이 코드 변경 없이 다양한 데이터베이스에서 작동하도록 한다. 이를 통해 프로그래머는 더 높은 수준의 개념으로 작업할 수 있다.[18] 또한 일부 객체 지향 프레임워크는 객체 관계형 매핑(ORM)을 제공하는 매핑 도구를 포함하며, 이는 객체튜플에 매핑한다.[18]

일부 프레임워크는 내성을 사용하거나 잘 알려진 규칙을 따름으로써 웹 애플리케이션 구성을 최소화한다. 예를 들어, 많은 자바 프레임워크는 Hibernate를 지속성 계층으로 사용하여 필요한 정보를 지속할 수 있는 데이터베이스 스키마를 런타임에 생성할 수 있다. 이를 통해 애플리케이션 설계자는 데이터베이스 스키마를 명시적으로 정의할 필요 없이 비즈니스 객체를 설계할 수 있다. Ruby on Rails와 같은 프레임워크는 반대로 작동할 수도 있는데, 즉 데이터베이스 스키마를 기반으로 런타임에 모델 객체의 속성을 정의할 수 있다.[18]

웹 프레임워크가 제공할 수 있는 다른 기능으로는 트랜잭션 지원[19] 및 데이터베이스 마이그레이션 도구가 있다.[18]

4. 5. URL 매핑

웹 프레임워크의 URL 매핑(또는 라우팅) 기능은 프레임워크가 URL을 해석하는 방식이다. 드루팔(Drupal) 및 장고(Django)와 같은 일부 프레임워크는 정규 표현식을 사용하여 주어진 URL을 미리 정해진 패턴과 맞춘다. 다른 프레임워크는 URL 재작성 기술을 사용하여 주어진 URL을 기본 엔진이 인식할 수 있는 URL로 변환한다. Zope에서 사용되는 것과 같은 그래프 순회 방식도 있는데, URL은 객체 그래프(모델 및 뷰)를 순회하는 단계로 분해된다.

패턴 일치 또는 재작성을 사용하는 URL 매핑 시스템은 더 짧고 "친숙한 URL"을 사용할 수 있게 하여 사이트의 단순성을 높이고 검색 엔진의 더 나은 인덱싱을 가능하게 한다. 예를 들어, "/page.cgi?cat=science&topic=physics"로 끝나는 URL을 "/page/science/physics"로 간단하게 변경할 수 있다. 이렇게 하면 사용자가 URL을 기억하고, 읽고, 쓰기가 더 쉬워지며, 검색 엔진에 사이트의 구조적 레이아웃에 대한 더 나은 정보를 제공한다. 그래프 순회 접근 방식 또한 친숙한 URL을 생성하는 경향이 있다. "/page/science"와 같은 더 짧은 URL은 기본적으로 "/page/science/physics"로 가는 더 짧은 형태이므로 존재한다.

파라미터가 추가된 URL을 이해하기 쉬운 URL로 자동 변환함으로써 시스템은 사용하기 쉬워지며, 더 나아가 검색 엔진이 인덱스를 생성하기 쉬워진다. 예를 들어, ?cat=1&pageid=3으로 끝나는 주소를 /category/science/topic/physics나 /science/physics로 변환하는 경우가 있다. 카테고리 ID가 변경되어도 URL은 바뀌지 않으므로 검색 엔진에 유리하다. URL 변환을 통해 애플리케이션이 REST적인 설계 방식의 일부 요소에 더 잘 부합하도록 할 수 있다.

4. 6. AJAX

Ajax는 "'''비동기 자바스크립트XML'''"의 줄임말로, 웹 애플리케이션을 만들기 위한 웹 개발 기술이다. 사용자가 변경을 요청할 때마다 전체 웹 페이지를 다시 로드할 필요 없이, 백그라운드에서 서버와 소량의 데이터를 교환하여 웹 페이지의 응답 속도를 높이는 것을 목표로 한다. 이는 웹 페이지의 상호 작용, 속도, 유지 관리 및 사용성을 향상시키기 위한 것이다.[20]

자바스크립트에서 Ajax 프로그래밍의 복잡성 때문에, Ajax 지원만을 전문적으로 처리하는 수많은 Ajax 프레임워크가 존재한다. 일부 Ajax 프레임워크는 더 큰 프레임워크의 일부로 내장되기도 한다. 예를 들어, jQuery 자바스크립트 라이브러리는 Ruby on Rails에 포함되어 있다.

4. 7. 웹 서비스

일부 프레임워크는 웹 서비스(SOAP, REST)를 만들고 제공하기 위한 도구를 제공한다. 이러한 도구는 나머지 웹 애플리케이션과 유사한 기능을 제공한다.[21]

4. 8. 웹 리소스

최신의 다수의 웹 2.0 RESTful 프레임워크는 자원 지향 아키텍처(ROA) 인프라를 제공하여, 자원 기술 프레임워크(RDF)의 개념을 기반으로 한 일종의 시맨틱 웹 온톨로지 엔지니어링에 따라 자원 컬렉션을 구축하고 있다.[1]

5. 기술

웹 애플리케이션 프레임워크는 다양한 프로그래밍 언어를 기반으로 개발된다.

5. 1. Java

자바는 엔터프라이즈 환경에서 널리 사용되는 언어이며, 스프링 프레임워크, JavaServer Faces(JSF), Struts 등 다양한 프레임워크가 존재한다.[1] 이들 프레임워크 대부분은 자카르타 EE 플랫폼 위에 구축되었거나, 그 요소를 차용하고 있다.[1]

5. 2. JavaScript

자바스크립트 프레임워크, 자바스크립트 라이브러리, AJAX 프레임워크 등으로 불린다.

전 세계적으로 널리 알려진 대표적인 예로는 Prototype JavaScript Framework와 jQuery가 있다.

HTML, CSS, 자바스크립트의 발전과 함께, 자바스크립트에서는 여러 프레임워크가 등장했다가 점차 MEAN과 같은 방식으로 수렴되고 있다.

다음은 주요 자바스크립트 프레임워크 목록이다.

5. 3. C# 및 VB.NET

마이크로소프트ASP.NET 플랫폼에서 가장 인기 있는 언어는 C# 및 VB.NET이다.[1]

초기에 가장 인기 있었던 웹 애플리케이션 프레임워크는 DotNetNuke|DotNetNuke영어였다.[1]

ASP.NET 자체는 웹 애플리케이션 구축 기술이지만, 웹 애플리케이션 프레임워크로만 언급되는 경우가 있어 오해를 사기도 한다.[1] .NET Framework를 채택하여 원하는 언어를 선택할 수 있는 기능도 제공한다.[1]

ASP.NET은 통합 AJAX 프레임워크인 ASP.NET AJAX|ASP.NET AJAX영어를 갖추고 있다.[1]

5. 4. PHP

PHP는 웹 용도에 특화되어 개발된 언어이다. PHP의 동적 웹 페이지 설계를 위해 CakePHP, Symfony, Zend Framework, FuelPHP, CodeIgniter, Yii, PRADO, Laravel, eZ Publish 등의 프레임워크가 지지를 얻고 있다. 이러한 프레임워크는 핵심 언어 위에 프레임워크 계층을 적용함으로써 애플리케이션의 구조와 모델링을 지원한다.

5. 5. Perl, Python, Ruby

Perl에는 Catalyst, Ark[24], Mojolicious 등의 프레임워크가 있다.

Python에는 Django, TurboGears, Pylons, Quixote, Karrigell, web2py[25] 등의 프레임워크가 있다. 거의 완전한 목록으로는 Python Wiki의 WebFrameworks[26]가 있다.

Ruby에는 Merb, Ruby on Rails와 같은 프레임워크가 있다.

6. 운영체제

극히 소수의 예외를 제외하면, 웹 애플리케이션 프레임워크는 다수의 플랫폼에서 동작하며, 플랫폼에 종속되지 않는 언어 위에 구축된다.

특정 구성을 권장하는 프레임워크도 있지만, 대부분은 윈도우, macOS, 리눅스 등의 유닉스 계열 플랫폼에서 동작한다. 특기할 만한 예외로, .NET을 위해 작성된 DotNetNuke는 Mono 런타임을 지원하지 않는다.

참조

[1] 웹사이트 CGI: Common Gateway Interface http://hoohoo.ncsa.u[...]
[2] 웹사이트 CGI https://www.ibm.com/[...] 2021-05-07
[3] 웹사이트 Clarification on MVC= Pull and MVC Push https://www.theserve[...] 2003-10-29
[4] 웹사이트 Three-tiered distribution http://msdn.microsof[...] 2011-09-19
[5] 웹사이트 clustering_concepts_10en http://download.orac[...] 2011-09-19
[6] 웹사이트 Introduction to Web Development http://www.sis.pitt.[...]
[7] 웹사이트 Using Client Access Express in a three tier environment http://publib.boulde[...] 2011-09-19
[8] 웹사이트 Understanding the Three-Tier Architecture http://download.orac[...] 2011-09-19
[9] 웹사이트 Pragmatic Architecture: Layering http://msdn.microsof[...] 2011-09-19
[10] 웹사이트 3-Tier Web Architecture http://www.arokiait.[...] 2011-09-19
[11] 웹사이트 ASP.NET MVC Controller Best Practices http://www.arrangeac[...] 2011-09-19
[12] 웹사이트 Skinny Controller, Fat Model http://weblog.jamisb[...]
[13] 뉴스 Getting Started With Web Frameworks https://www.wired.co[...] Wired Magazine 2018-04-02
[14] 웹사이트 Web Application Architecture – Client-Side vs. Server-Side https://spin.atomico[...] 2015-04-06
[15] 웹사이트 AngularJS vs. Backbone.js vs. Ember.js https://www.airpair.[...] 2016-06-04
[16] 웹사이트 bliki: InversionOfControl http://martinfowler.[...] 2016-03-06
[17] 웹사이트 Capital One Engineering – Philosophies that Shaped Successful Frameworks http://www.capitalon[...] 2016-03-06
[18] 웹사이트 Active Record Basics https://guides.rubyo[...] 2021-03-20
[19] 웹사이트 Active Record Transactions https://api.rubyonra[...] 2021-03-20
[20] 웹사이트 What is AJAX https://www.dlsweb.r[...] 2021-05-07
[21] 서적 2006 IEEE International Conference on Web Services (ICWS'06)
[22] 웹사이트 CGI: Common Gateway Interface http://hoohoo.ncsa.u[...] 2007-07-29
[23] 웹사이트 Clarification on MVC Pull and MVC Push http://www.theserver[...] 2003-10-29
[24] Github GitHub - ark-framework/ark https://github.com/a[...]
[25] 문서 Welcome http://mdp.cti.depau[...]
[26] 문서 WebFrameworks - Python Wiki https://wiki.python.[...]
[27] 웹인용 CGI: Common Gateway Interface http://hoohoo.ncsa.u[...]
[28] 웹인용 Three-tiered distribution http://msdn.microsof[...] 2011-09-19
[29] 웹인용 clustering_concepts_10en http://download.orac[...] 2011-09-19
[30] 웹인용 Introduction to Web Development http://www.sis.pitt.[...]
[31] 웹인용 Using Client Access Express in a three tier environment http://publib.boulde[...] 2011-09-19
[32] 웹인용 Understanding the Three-Tier Architecture http://download.orac[...] 2011-09-19
[33] 웹인용 Pragmatic Architecture: Layering http://msdn.microsof[...] 2011-09-19
[34] 웹인용 3-Tier Web Architecture http://www.arokiait.[...] 2011-09-19



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com