DokuWiki는 사용자들에게 보다 다양한 문서 저장소를 구성할 수 있게 도와주는 위키이며 표준을 준수하여 사용하기 쉽다.
DokuWiki는 데이터 자료가 위키 외부에서 구조화되고, 읽을 수 있는 형태로 나타나도록 보장하며 간단하고 강력한 문법을 사용해 개인이나 팀 구성원, 회사 등이 해당 자료를 쉽게 이용할 수 있는 환경을 제공한다.
무제한적인 페이지 생성은 페이지 초기 혹은 특정 버전으로 복원을 할 수 있고, 이 때 데이터베이스가 필요하지 않는 텍스트 파일에 저장된 데이터도 함께 복원된다. 강력한 plugin을 활용하면 DokuWiki의 코어 시스템을 확장하거나 강화 할 수 있다.
DokuWiki의 보다 자세한 설명은 http://www.dokuwiki.org/ko:dokuwiki 사이트를 참조하기 바란다.
설치환경
OS : CentOS 5.4 i386
Web : Apache2
CGG : gcc version 4.1.2
Perl : 5.8.8
STEP 1.
CentOS 5.4의 설치는 다른 카테고리에 있으므로 설치 과정은 생략한다.
DokuWiki설치에 필요한 파일 등을 다운 받을 디렉토리(download)를 생성하고, 웹서버인 Apache를 설치하기로 한다.
[root@wiki ~]# cd /usr/local/
[root@wiki local]# mkdir download
[root@wiki local]# cd download
PHP를 설치 할 때 사용할 libjpeg, libpng, freetype의 라이브러리를 yum을 통해 업데이트 한다.
[root@wiki download]# yum -y install libjpeg-devel libpng-devel freetype-devel
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* addons: data.nicehosting.co.kr
* base: data.nicehosting.co.kr
* extras: data.nicehosting.co.kr
* updates: data.nicehosting.co.kr
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package libjpeg-devel.i386 0:6b-37 set to be updated
---> Package libpng-devel.i386 2:1.2.10-7.1.el5_3.2 set to be updated
---> Package freetype-devel.i386 0:2.2.1-21.el5_3 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================================================
Package Arch Version Repository Size
=============================================================================================================
Installing:
libjpeg-devel i386 6b-37 base 105 k
libpng-devel i386 2:1.2.10-7.1.el5_3.2 base 181 k
freetype-devel i386 2.2.1-21.el5_3 base 146 k
Transaction Summary
=============================================================================================================
Install 3 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 433 k
Downloading Packages:
(1/3): libjpeg-devel-6b-37.i386.rpm | 105 kB 00:00
(2/3): libpng-devel-1.2.10-7.1.el5_3.2.i386.rpm | 181 kB 00:00
(3/3): freetype-devel-2.2.1-21.el5_3.i386.rpm | 146 kB 00:00
-------------------------------------------------------------------------------------------------------------
Total 2.3 MB/s | 433 kB 00:00
warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID e8562897
base/gpgkey | 1.5 kB 00:00
Importing GPG key 0xE8562897 "CentOS-5 Key (CentOS 5 Official Signing Key) <centos-5-key@centos.org>" from /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : libpng-devel 1/3
Installing : libjpeg-devel 2/3
Installing : freetype-devel 3/3
Installed:
libjpeg-devel.i386 0:6b-37 libpng-devel.i386 2:1.2.10-7.1.el5_3.2 freetype-devel.i386 0:2.2.1-21.el5_3
Complete!
[root@wiki download]#
[root@wiki download]# wget http://mirror.apache-kr.org/httpd/httpd-2.2.15.tar.gz
--2010-04-06 11:06:52-- http://mirror.apache-kr.org/httpd/httpd-2.2.15.tar.gz
Resolving mirror.apache-kr.org... 211.174.58.187
Connecting to mirror.apache-kr.org|211.174.58.187|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6593633 (6.3M) [application/x-gzip]
Saving to: `httpd-2.2.15.tar.gz'
100%[========================================================================>] 6,593,633 7.73M/s in 0.8s
2010-04-06 11:06:53 (7.73 MB/s) - `httpd-2.2.15.tar.gz' saved [6593633/6593633]
[root@wiki download]# tar xvfz httpd-2.2.15.tar.gz
..................... 생략 ...................
httpd-2.2.15/server/mpm_common.c
httpd-2.2.15/server/.indent.pro
httpd-2.2.15/server/util_charset.c
httpd-2.2.15/server/eoc_bucket.c
httpd-2.2.15/BuildAll.dsp
httpd-2.2.15/acinclude.m4
httpd-2.2.15/Makefile.win
httpd-2.2.15/httpd.spec
httpd-2.2.15/configure
httpd-2.2.15/configure.in
httpd-2.2.15/VERSIONING
httpd-2.2.15/README
httpd-2.2.15/LAYOUT
httpd-2.2.15/buildconf
httpd-2.2.15/.gdbinit
[root@wiki download]# cd httpd-2.2.15
[root@wiki httpd-2.2.15]# ./configure --prefix=/usr/local/apache --enable-mods-shared=all --enable-so --enable-rewrite
...................... 생략 ........................
config.status: creating docs/conf/extra/httpd-mpm.conf
config.status: creating docs/conf/extra/httpd-multilang-errordoc.conf
config.status: creating docs/conf/extra/httpd-ssl.conf
config.status: creating docs/conf/extra/httpd-userdir.conf
config.status: creating docs/conf/extra/httpd-vhosts.conf
config.status: creating include/ap_config_layout.h
config.status: creating support/apxs
config.status: creating support/apachectl
config.status: creating support/dbmmanage
config.status: creating support/envvars-std
config.status: creating support/log_server_status
config.status: creating support/logresolve.pl
config.status: creating support/phf_abuse_log.cgi
config.status: creating support/split-logfile
config.status: creating build/rules.mk
config.status: creating build/pkg/pkginfo
config.status: creating build/config_vars.sh
config.status: creating include/ap_config_auto.h
config.status: executing default commands
[root@wiki httpd-2.2.15]#
--prefix=/usr/local/apache는 /usr/local/apache에 설치한다.
--enable-mods-shared=all은 DSO모드라고 한다는데, 모듈이 추가로 설치 되었을 때 다시 컴파일 하지 않고 추가 할 수 있어서 좋다고 한다.
--enable-so는 DSO모드를 활성화 한다고 한다.
--enable-rewrite는 URL 재작성 모듈을 활성화 한다.
[root@wiki httpd-2.2.15]# make
......................... 생략 ...............................
wnload/httpd-2.2.15/modules/database -I/usr/local/download/httpd-2.2.15/srclib/apr/include -I/usr/local/download/httpd-2.2.15/srclib/apr-util/include -I/usr/local/download/httpd-2.2.15/server -I/usr/local/download/httpd-2.2.15/modules/proxy/../generators -I/usr/local/download/httpd-2.2.15/modules/ssl -I/usr/local/download/httpd-2.2.15/modules/dav/main -prefer-pic -c mod_rewrite.c && touch mod_rewrite.slo
/usr/local/download/httpd-2.2.15/srclib/apr/libtool --silent --mode=link gcc -g -O2 -pthread -o mod_rewrite.la -rpath /usr/local/apache/modules -module -avoid-version mod_rewrite.lo
make[4]: Leaving directory `/usr/local/download/httpd-2.2.15/modules/mappers'
make[3]: Leaving directory `/usr/local/download/httpd-2.2.15/modules/mappers'
make[2]: Leaving directory `/usr/local/download/httpd-2.2.15/modules'
make[2]: Entering directory `/usr/local/download/httpd-2.2.15/support'
make[2]: Leaving directory `/usr/local/download/httpd-2.2.15/support'
make[1]: Leaving directory `/usr/local/download/httpd-2.2.15'
[root@wiki httpd-2.2.15]# make install
............... 생략 ..................
mkdir /usr/local/apache/htdocs
Installing error documents
mkdir /usr/local/apache/error
Installing icons
mkdir /usr/local/apache/icons
mkdir /usr/local/apache/logs
Installing CGIs
mkdir /usr/local/apache/cgi-bin
Installing header files
Installing build system files
Installing man pages and online manual
mkdir /usr/local/apache/man
mkdir /usr/local/apache/man/man1
mkdir /usr/local/apache/man/man8
mkdir /usr/local/apache/manual
make[1]: Leaving directory `/usr/local/download/httpd-2.2.15'
[root@wiki httpd-2.2.15]#
Apache의 환경을 설정한다.
[root@wiki httpd-2.2.15]# vi /usr/local/apache/conf/httpd.conf
<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User daemon
Group daemon
</IfModule>
</IfModule>
아래와 같이 변경한다.
<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User nobody
Group nobody
</IfModule>
</IfModule>
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
#ServerName www.example.com:80
아래와 같이 주석을 제거하고 서버의 IP에 맞게 웹서버를 등록한다.
(도메인이 등록되었다면 도메인 이름을 도메인이 없다면 IP를 입력하면 된다.)
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName 123.123.123.123:80
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
아래와 같이 추가하여 준다.
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
# If the AddEncoding directives above are commented-out, then you
# probably should define those extensions to indicate media types:
#
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
#
# AddHandler allows you to map certain file extensions to "handlers":
뒤에 설치 할 php를 사용하기 위해서 아래와 같이 추가한다.
# If the AddEncoding directives above are commented-out, then you
# probably should define those extensions to indicate media types:
#
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
#
# AddHandler allows you to map certain file extensions to "handlers":
Apache 설정이 완료되었으며, Apache를 실행하여 웹서버가 동작하는지 확인한다.
리눅스 방화벽에서 웹서버 포트를 열어주는 것은 잊지말자.
[root@wiki httpd-2.2.15]# /usr/local/apache/bin/apachectl start
[root@wiki httpd-2.2.15]#
웹서버가 동작하는 것을 확인 할 수 있다.
보안 때문에 내가 설치한 서버의 주소는 공개하지 않는다.
[root@wiki httpd-2.2.15]# vi /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
아래와 같이 변경하여 서버가 재부팅 되더라도 웹서버가 자동으로 실행 할 수 있게 변경한다.
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
/usr/local/apache/bin/apachectl start
STEP 2.
DokuWiki는 php를 기반으로 구동되기 때문에 서버에 php를 설치 할 것이다.
[root@wiki httpd-2.2.15]# cd /usr/local/download/
[root@wiki download]# wget http://kr2.php.net/get/php-5.2.13.tar.gz/from/kr.php.net/mirror
--2010-04-06 11:34:08-- http://kr2.php.net/get/php-5.2.13.tar.gz/from/kr.php.net/mirror
Resolving kr2.php.net... 211.234.110.150
Connecting to kr2.php.net|211.234.110.150|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://kr.php.net/distributions/php-5.2.13.tar.gz [following]
--2010-04-06 11:34:08-- http://kr.php.net/distributions/php-5.2.13.tar.gz
Resolving kr.php.net... 115.165.178.40
Connecting to kr.php.net|115.165.178.40|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11719620 (11M) [application/x-gzip]
Saving to: `php-5.2.13.tar.gz'
100%[========================================================================>] 11,719,620 8.99M/s in 1.2s
2010-04-06 11:34:09 (8.99 MB/s) - `php-5.2.13.tar.gz' saved [11719620/11719620]
[root@wiki download]#
PHP를 다운 받았으며 압축을 풀고 설치를 한다.
[root@wiki download]# tar xvfz php-5.2.13.tar.gz
.................... 생략 ....................
php-5.2.13/README.SELF-CONTAINED-EXTENSIONS
php-5.2.13/stub.c
php-5.2.13/buildconf
php-5.2.13/stamp-h.in
php-5.2.13/README.SVN-RULES
php-5.2.13/README.input_filter
php-5.2.13/generated_lists
php-5.2.13/README.Zeus
php-5.2.13/INSTALL
php-5.2.13/TODO-PHP5
php-5.2.13/EXTENSIONS
php-5.2.13/server-tests-config.php
php-5.2.13/snapshot
php-5.2.13/php.gif
php-5.2.13/README.PARAMETER_PARSING_API
php-5.2.13/acconfig.h
php-5.2.13/README.PHP4-TO-PHP5-THIN-CHANGES
php-5.2.13/CREDITS
php-5.2.13/README.UPDATE_5_2
php-5.2.13/README.UNIX-BUILD-SYSTEM
php-5.2.13/buildconf.bat
[root@wiki download]# cd php-5.2.13
[root@wiki php-5.2.13]# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --with-config-file-path=/usr/local/apache/conf --disable-debug --enable-safe-mode --enable-sockets --enable-sysvsem=yes --enable-sysvshm=yes --enable-ftp --enable-magic-quotes --enable-gd-native-ttf --enable-inline-optimization --enable-bcmath --with-zlib --with-jpeg-dir=/usr --with-png-dir=/usr/lib --with-freetype-dir=/usr --with-libxml-dir=/usr --enable-exif --with-gd --with-ttf --with-gettext --enable-sigchild --enable-mbstring
.................... 생략 .....................
creating libtool
appending configuration tag "CXX" to libtool
Generating files
creating ./config.status
creating php5.spec
creating main/build-defs.h
creating scripts/phpize
creating scripts/man1/phpize.1
creating scripts/php-config
creating scripts/man1/php-config.1
creating sapi/cli/php.1
creating main/php_config.h
creating main/internal_functions.c
creating main/internal_functions_cli.c
+--------------------------------------------------------------------+
| License: |
| This software is subject to the PHP License, available in this |
| distribution in the file LICENSE. By continuing this installation |
| process, you are bound by the terms of this license agreement. |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point. |
+--------------------------------------------------------------------+
Thank you for using PHP.
[root@wiki php-5.2.13]#
--prefix=/usr/local/php는 php가 설치될 디렉토리 경로이다.
--with-apxs2=/usr/local/apache/bin/apxs는 Apache의 apxs를 이용해 아파치에 모듈을 적재한다.
--with-config-file-path=/usr/local/apache/conf는 php의 환경설정 파일인 php.ini가 생성 될 위치이다.
[root@wiki php-5.2.13]# make
................ 생략 ................
lo Zend/zend_execute_API.lo Zend/zend_highlight.lo Zend/zend_llist.lo Zend/zend_opcode.lo Zend/zend_operators.lo Zend/zend_ptr_stack.lo Zend/zend_stack.lo Zend/zend_variables.lo Zend/zend.lo Zend/zend_API.lo Zend/zend_extensions.lo Zend/zend_hash.lo Zend/zend_list.lo Zend/zend_indent.lo Zend/zend_builtin_functions.lo Zend/zend_sprintf.lo Zend/zend_ini.lo Zend/zend_qsort.lo Zend/zend_multibyte.lo Zend/zend_ts_hash.lo Zend/zend_stream.lo Zend/zend_iterators.lo Zend/zend_interfaces.lo Zend/zend_exceptions.lo Zend/zend_strtod.lo Zend/zend_objects.lo Zend/zend_object_handlers.lo Zend/zend_objects_API.lo Zend/zend_default_classes.lo Zend/zend_execute.lo sapi/cli/php_cli.lo sapi/cli/php_cli_readline.lo sapi/cli/getopt.lo main/internal_functions_cli.lo -lcrypt -lcrypt -lrt -lfreetype -lpng -lz -ljpeg -lz -lresolv -lm -ldl -lnsl -lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt -lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt -o sapi/cli/php
Build complete.
Don't forget to run 'make test'.
[root@wiki php-5.2.13]# make install
Installing PHP SAPI module: apache2handler
/usr/local/apache/build/instdso.sh SH_LIBTOOL='/usr/local/apache/build/libtool' libphp5.la /usr/local/apache/modules
/usr/local/apache/build/libtool --mode=install cp libphp5.la /usr/local/apache/modules/
cp .libs/libphp5.so /usr/local/apache/modules/libphp5.so
cp .libs/libphp5.lai /usr/local/apache/modules/libphp5.la
libtool: install: warning: remember to run `libtool --finish /usr/local/download/php-5.2.13/libs'
chmod 755 /usr/local/apache/modules/libphp5.so
[activating module `php5' in /usr/local/apache/conf/httpd.conf]
Installing PHP CLI binary: /usr/local/php/bin/
Installing PHP CLI man page: /usr/local/php/man/man1/
Installing build environment: /usr/local/php/lib/php/build/
Installing header files: /usr/local/php/include/php/
Installing helper programs: /usr/local/php/bin/
program: phpize
program: php-config
Installing man pages: /usr/local/php/man/man1/
page: phpize.1
page: php-config.1
Installing PEAR environment: /usr/local/php/lib/php/
[PEAR] Archive_Tar - installed: 1.3.3
[PEAR] Console_Getopt - installed: 1.2.3
[PEAR] Structures_Graph- installed: 1.0.2
[PEAR] XML_Util - installed: 1.2.1
[PEAR] PEAR - installed: 1.9.0
Wrote PEAR system config file at: /usr/local/php/etc/pear.conf
You may want to add: /usr/local/php/lib/php to your php.ini include_path
Installing PDO headers: /usr/local/php/include/php/ext/pdo/
[root@wiki php-5.2.13]#
PHP의 환경 설정을 한다. /usr/local/apache/conf에 php.ini라는 이름으로 복사 한다.
[root@wiki php-5.2.13]# cp php.ini-dist /usr/local/apache/conf/php.ini
[root@wiki php-5.2.13]#
테스트 페이지를 만들어 PHP의 정보를 보여주는 함수를 입력한다.
[root@wiki php-5.2.13]# vi /usr/local/apache/htdocs/phpinfo.php
[root@wiki php-5.2.13]#
웹 서버를 멈췄다가 재시작하여 테스트 하도록 한다.
[root@wiki php-5.2.13]# /usr/local/apache/bin/apachectl stop
[root@wiki php-5.2.13]# /usr/local/apache/bin/apachectl start
[root@wiki php-5.2.13]#
웹브라우저에서 위와 같이 뜨는 것을 확인하면 된다.
STEP 3.
DokuWiki를 다운받고 설치하도록 한다.
[root@wiki php-5.2.13]# cd /usr/local/download/
[root@wiki download]# wget http://www.splitbrain.org/_media/projects/dokuwiki/dokuwiki-2009-12-25c.tgz
--2010-04-06 13:50:02-- http://www.splitbrain.org/_media/projects/dokuwiki/dokuwiki-2009-12-25c.tgz
Resolving www.splitbrain.org... 78.46.97.149
Connecting to www.splitbrain.org|78.46.97.149|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2543601 (2.4M) [application/octet-stream]
Saving to: `dokuwiki-2009-12-25c.tgz'
100%[========================================================================>] 2,543,601 39.3K/s in 64s
2010-04-06 13:51:06 (39.0 KB/s) - `dokuwiki-2009-12-25c.tgz' saved [2543601/2543601]
[root@wiki download]# tar xvfz dokuwiki-2009-12-25c.tgz
........................ 생략 ............................
dokuwiki-2009-12-25/data/pages/playground/playground.txt
dokuwiki-2009-12-25/data/pages/wiki/
dokuwiki-2009-12-25/data/pages/wiki/syntax.txt
dokuwiki-2009-12-25/data/pages/wiki/dokuwiki.txt
dokuwiki-2009-12-25/data/meta/
dokuwiki-2009-12-25/data/meta/_dummy
dokuwiki-2009-12-25/data/attic/
dokuwiki-2009-12-25/data/attic/_dummy
dokuwiki-2009-12-25/data/_dummy
dokuwiki-2009-12-25/data/tmp/
dokuwiki-2009-12-25/data/tmp/_dummy
dokuwiki-2009-12-25/install.php
dokuwiki-2009-12-25/bin/
dokuwiki-2009-12-25/bin/.htaccess
dokuwiki-2009-12-25/bin/wantedpages.php
dokuwiki-2009-12-25/bin/dwpage.php
dokuwiki-2009-12-25/bin/indexer.php
[root@wiki download]# mv dokuwiki-2009-12-25 /usr/local/apache/htdocs/dokuwiki
[root@wiki download]#
DokuWiki를 서버의 dokuwiki라는 디렉토리 이름으로 Apache 경로로 이동을 시켜주었다.
아래와 같이 경로에 맞게 접속하여 install을 할 수 있는 화면이 뜨면 끝나게 된다.
run the installer를 클릭한다.
편의(?)를 위해서 언어를 영어에서 한글로 변경한다.
en이라고 된 체크박스를 ko로 바꾸고 Update를 클릭하면 아래와 같은 화면으로 변경된다.
위와 같은 화면을 보이며 설치가 진행되지 않을 것이다.
압축을 풀고 디렉토리를 옮기기만 했을 뿐 사용권한을 주지 않았기 때문에 위와 같은 메시지를 띄운다.
dokuwiki 디렉토리를 찾아가 설정을 쓸 수 있게 파일 권한을 변경하여준다.
[root@wiki download]# cd /usr/local/apache/htdocs/dokuwiki/
[root@wiki dokuwiki]# chmod 777 conf
[root@wiki dokuwiki]# chmod 777 -R data
[root@wiki dokuwiki]#
디렉토리 권한을 변경한 후 스크롤 아래에 있어서 보이지 않지만, 웹 페이지 하단에 있는 [다시 시도] 버튼을 클릭하면 아래와 같은 화면으로 변경 된 것을 확인 할 수 있다.
위키 이름과 슈퍼유저 등 해당 정보를 입력하여 DokuWiki를 관리자 입맛에 맞게 사용 할 수 있다.
위 화면은 허용된 사용자만 글을 게시하거나 쓸 수 있게 한 화면이다.
로그인 버튼을 눌러서 로그인을 한다.
사용자(ID)와 패스워드(Password)를 입력하여 로그인 한다.
위와 같이 로그인을 하고나면 글을 게시하여 페이지를 만들 수 있다.
이상으로 DokuWiki를 설치하는 방법을 설명하였다.