Content Table

cm-toc v.0.4 By 코마

(파트-1) Express.js 를 이용한 파일 다운로드 서버 개발

CentOS 7 에 Nginx 를 설치하기

04 Sep 2019 by 코마 (gbkim1988@gmail.com)

안녕하세요 코마입니다. 오늘은 Express.js 를 이용하여 파일 다운로드 서버를 구축하고 여기에 더 나아가 임시 URL 을 통해서 특정 기간만을 파일 다운로드 할 수 있도록 개발하는 방법에 대해 알아보도록 하겠습니다.

시작하기 전에

오늘은 nginx 와 express.js 를 이용한 파일 다운로드 서버를 구축하기 위한 서버 설정 작업에 대해 설명드리도록 하겠습니다. 이미 구성을 완료하신 분들은 (파트-2) Express.js 를 이용한 파일 다운로드 서버 개발 를 구독해 주시길 바랍니다.

이번 시간을 통해 여러분은 아래의 스펙을 가진 서버를 가지게 될 것입니다.

이제, nginx 서버의 아름다움을 감상하러 여행을 떠나볼까요?



서버 환경 체크

cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)

7.6.1810 버전은 아래의 형태로 해석하면 됩니다.

[Major Release].[Minor Release].[Asynchronous Erratum]



Nginx 설치

sudo yum install epel-release
sudo yum install nginx
whereis nginx
sudo firewall-cmd --permanent --zone=public --add-service=http 
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload


아래의 명령을 실행하면 CentOS 의 아이피 정보를 빠르게 찾아줍니다.

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

만약의 경우 서버를 재부팅해야할 수 있습니다. 이때 nginx 를 구동하도록 등록하려면 아래의 명령어로 등록해주세요.

💁 TIP: 아래의 명령어를 통해 /etc/systemd/system/multi-user.target.wants/nginx.service 경로의 파일을 /usr/lib/systemd/system/nginx.service 경로로 심볼릭 링크를 생성합니다.



$ sudo systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service

Server 설정

/usr/share/nginx/html 경로는 기본 root 디렉터리 경로임을 기억해주세요. /etc/nginx/conf.d/default.conf 파일을 통해서 이러한 경로를 지정합니다.

/etc/nginx/conf.d 는 Apache 의 가상 호스트와 같은 개념입니다. Nginx는 Server Block 이라고 표현함에 주의해주세요^%^

/etc/nginx/nginx.conf 는 Nginx 의 전역 설정입니다.

포트 변경 설정

/etc/nginx/nginx.conf 파일을 편집하여 Default 포트 정보를 변경합니다.

vim /etc/nginx/nginx.conf

server 절의 listen 옵션을 변경해주세요.

 server {
        # listen       80 default_server;
        # listen       [::]:80 default_server;
        listen       4093 default_server;
        listen       [::]:4093 default_server;
        # skipping ...
 }

전송 파일 압축하기

파일을 빠른 속도로 다운로드 받기 위해서는 gzip 설정을 해주어야 합니다. 이를 통해 전송 간에 파일 크기를 줄 일 수 있어 웹 사이트 로딩 속도를 빠르게 만들 수 있습니다. 또한 bandwidth 사용량을 줄일 수 있어 더욱 경제적이에요.

gzip 은 인기있는 데이터 압축 프로그램이에요. Nginx 를 사용하여 gzip 을 사용하도록 파일을 압축할 수 있습니다. 이러한 파일은 브라우저(chrome 등의 브라우저)를 통해서 손실 없이 압축 해제되게됩니다.

압축 효율은 아래와 같습니다. 어떤가요? gzip 방식이 인기있는 이유에는 효율에 있습니다. (개발자분에게 경의를 표합니다.)



|compressor|min ratio|max ratio|min time|max time| |:—:|:—:|:—:|:—:|:—:| |gzip|7.01%|10.67%|14.4s|31.4s| |bzip2|4.85%|8.01%|295s|592s| |xz 0-3|4.68%|5.52%|48s|133s| |xz 4-9|4.54%|5.42%|193s|755s|

gzip 특성

파일 유형별 gzip 압축 효율을 파악하면 좋습니다.

gzip 모듈 설정하기

sudo vim /etc/nginx/conf.d/gzip.conf


##
# `gzip` Settings
#
#
gzip on;
gzip_disable "msie6";

gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;

gzip.conf 설정 리딩

저 코마는 항상 이슈를 설명하기 위해 노력합니다. 위와 같이 gzip.conf 파일을 구성한 이유는 아래와 같습니다.


gzip 테스트

아래의 명령어를 통해 gzip 압축을 테스트 해보세요.

$ curl -H "Accept-Encoding: gzip" -I http://localhost/test.html


아래 응답의 헤더 중 Content-Encoding: gzip 를 통해 gzip 이 활성화 되었음을 확인할 수 있습니다.

>HTTP/1.1 200 OK
Server: nginx/1.6.3
Date: Fri, 11 Mar 2016 13:19:16 GMT
Content-Type: text/html
Last-Modified: Fri, 11 Mar 2016 12:48:02 GMT
Connection: keep-alive
Vary: Accept-Encoding
Content-Encoding: gzip

마무리

이번 시간은 Express.js 를 이용한 파일 다운로드 서버를 구성하기 전에 nginx 를 설치하고 구성하는 방법에 대해 알아보았습니다. 👏 (짝짝짝) 이 과정은 모든 문서를 정복할 때까지 매일 매일 업로드 하도록 할테니 내일 이 시간에도 시간을 내어 코마의 훈훈한 블로그 를 찾아주세요!

다음 시간에는 아래의 내용을 완벽하게 이해하실 수 있도록 정리해보도록 하겠습니다.

아직 드릴 이야기가 무궁무진하니 좀 더 지켜봐주시면 더욱 감사할 것 같아요! 여러분이 Vue.js 를 장난감처럼 가지고 노는 그날까지 저 코마는 멈추지 않겠습니다. 대한민국 IT인 여러분들의 건승을 기원합니다.

지금까지 코마 였습니다.

구독해주셔서 감사합니다. 더욱 좋은 내용으로 찾아뵙도록 하겠습니다. 감사합니다



링크 정리

이번 시간에 참조한 링크는 아래와 같습니다. 잘 정리하셔서 필요할 때 사용하시길 바랍니다.

이 작가의 다음 글 감상