[TOAST Study] 2. 서버

두번째 과제 : 생성한 인스턴스 ubuntu 환경에 각종 서버를 설치

Apache를 설치하려다가 새롭게 주목받고 있는 Nginx를 설치해보기로 했다.
- Apache vs Nginx

Apache 
요청 하나 당 프로세스(또는 쓰레드)가 처리하는 구조
즉 요청이 많을수록 cpu와 메모리 사용량이 증가하기 때문에 성능 저하가 있을 수 있다. 또한 Apache 서버의 프로세스가 블로킹 되면 요청을 처리하지 못하고, 처리가 완료 될 때까지 계속 대기하는 일이 발생한다.
이와 같은 문제들은 Keep Alive 활성화 함으로써 해결이 가능하지만, Keep Alive 때문에 대량 접속 시 효율이 급격하게 떨어지는 또 다른 문제점이 발생한다.

Keep Alive
HTTP 프로토콜의 특성상 한 번 통신이 이루어지면 접속을 끊어버리지만, KeepAlive On 상태에서는 KeepAliveTimeOut 시간 동안 접속을 끊지 않고 다음 접속을 기다린다. 즉, 한 번 연결된 클라이언트와 통신을 유지하고 있기 때문에, 다음 통신 시에 Connection을 생성하고 끊는 작업이 필요없게 된다. 따라서 성능 향상을 기대 할 수 있다.
정적 자원(html, 이미지 파일 등) 으로만 구성된 웹 서버에 KeepAlive On 설정을 할 경우 약 50%의 성능 향상을 기대 할 수 있다. 하지만 바쁜 서버 환경에서 설정 할 시 모든 요청마다 연결을 유지해야 하기 때문에 프로세스의 수가 기하급수적으로 늘어나 MaxClient 값을 초과하게 되고 메모리를 많이 사용하게 되어 곧 성능 저하로 이어진다.

Nginx
보안과 속도를 최적화 시키려는 노력에서 탄생한 웹서버이다. 사용이 매우 심플하고 규모가 작은 서비스이면서 정적 데이터 처리가 많은 서비스에 적합하다. Apache에서 지원하는 수많은 기능이 따로 필요없고 보안 문제들은 특별한 업데이트 없이 Nginx 자체에서 처리해주고 있다. Apache와 달리 Nginx는 프로그램의 흐름이 이벤트에 의해 결정 되는 Event Driven 방식의 웹서버. 즉 요청에 대한 각 state를 정해서 event가 발생할 때마다 그것을 처리한다.
적은 수의 쓰레드로 효율적인 일 처리를 하며, 쓰레드를 적게 사용하기 때문에 쓰레드당 할당 되는 메모리도 적게 사용하고 context switching 비용이 적고 따라서 cpu 소모도 적다. 단점은, 모듈 개발이 어려우며 다양한 모듈이 없다는 것이다.

최근 대용량의 정적 파일 및 큰 규모의 사이트가 많아짐에 따라 대량 접속에도 적은 리소스를 이용하여 빠르게 서비스를 할 수 있는 웹 사이트가 대세가 되었는데 이런 면에서 Nginx가 각광받고있는 추세이다. 성능 면에서는 Nginx가 미세한 차이로 더 좋지만 PHP 모듈 등을 직접 적재 할 수 있다는 Apache가 구조상 이점이 있기에 복잡한 웹 사이트의 경우는 Apache가 적합하다.


정리 하자면,
안정성과 확장성, 호환성에서 Apache가 우세,
성능 면에서는 Nginx가 우세하다.

ubuntu 환경에 nginx 설치
<터미널>
(설치 전 upgrade 진행)
$ sudo apt-get install nginx
입력 시 설치가 진행된다. 설치가 완료 되면
$ nginx -v
명령어로 버전도 확인하고 설치가 되었는지 확인할 수 있다.

주요 명령어
$ sudo service nginx start
$ sudo service nginx restart
$ sudo service nginx stop
$ sudo service nginx status
$ sudo service nginx reload

서버를 실행하고 ip주소로 웹브라우저에서 접속하여 nginx 접속 확인 기본 페이지를 확인함으로 설치를 마쳤다.


ubuntu - FTP 서버 설치

FTP (File Transfer Protocol) : A network protocol for transferring or downloading fiels between the systems.
<터미널>
(upgrade 진행)
$ sudo apt-get install vsftpd
($ sudo apt-get install filezilla)
명령어로 설치를 진행할 수 있지만 몇가지 설정을 해야 했다.

$ sudo nano /etc/vsftpd.conf

local_enable=YES
write_enable=YES
user_sub_token=$USER
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
locatl_root=/home/$USER/Public_html
allow_writeable_chroot=YES
ls_recurse_enable=YES

위 설정들을 주석처리 되어있다면 앞에 #을 제거하여 uncomment 시켜주고 없다면 추가로 작성해 준다. 파일을 저장하고 나온다.

$ sudo nano /etc/vsftpd.chroot_list
명령어 실행 후 username을 추가하고 파일을 저장한다.

설정을 적용하기 위해
$ sudo systemctl restart vsftpd
명령어로 재시작해준다.


설정 완료 후 윈도우 환경에서 Filezilla로 연결하려고 하니 문제가 발생했다.
문제 해결을 위해 파일질라 설정에서 연결> ftp > 수동형 모드 설정을 '능동형 모드로 자동 전환'으로 변경했다. 그리고 접속에 성공!

서버를 설치하고 최근에 작업한 나를 소개하는 웹페이지를 서버에 올려보기로했다.

해당 페이지는 이클립스환경에서 동적웹브라우저 프로젝트를 만든 것으로 home 페이지와 비슷한 두개의 페이지 그리고 현재시간을 나타내는 하나의 서블릿 자바클래스로 구성되어있었다. 파일들을 nginx html default 디렉토리로 옮겨 파일의 권한은 기본 (644)으로 설정해두었다. html, css 파일들은 서버위에서도 잘 구동이되었으나 서블릿으로 돌아가는 페이지는 java 파일만 옮기니 구동시킬수가 없었다.
서블릿은 톰캣 기반이라 nginx 위에 apache를 연동시키는 방법을 찾아보았다.

연동 후 default 페이지는 톰캣이 연결되었음을 알리는 페이지로 변경되었다. 그러나 여전히 서블릿은 자바 파일만 옮긴다고 출력되지않았다. web.xml 파일을 비롯해 여러가지 파일이 해당 폴더에 없기 때문인 것 같았다. 결국 Java Developer kit로 깔았던 이클립스에 Java EE를 포함한 플러그인을 설치하였다.



No comments:

Powered by Blogger.