Surge 소개
정적 파일을 간편하게 웹에 업로드하여 웹 CDN 기능을 제공하는 surge 라는 프로그램을 소개해 본다. 단, surge 에서 사용하는 서비스 프로바이더 디지털 오션의 경우 한국, 일본 등의 리전을 미지원하므로 CDN 의 장점인 네트워크 지연 완화 측면에서 이득을 볼 수 없다.
현재 무료/유료 가능하며, 테스트 용도로는 무료도 충분해 보인다. 향후 한국 리전도 지원된다면 운영기로써 사용도 고려해 볼 만큼 편의성 이 강점이다.
참고로 가격 정책도 1개월 30[$] 정액제이므로 잘만 사용한다면 좋은 가성비로 운영이 가능해 보인다.
Surge 장점
- 무료 버전에서도 custom domain 을 사용 가능하다.
- Web Cache 기능을 제공한다. 단, Client 에서 Cache-Control 조작은 불가하다. (ETag 변경이 유지되는 동안 무제한 캐시 저장)
- Gzip 압축을 지원한다.
Surge 단점
- 한국 리전을 미지원한다. (테스트 시 싱가폴, 미국 리전 서버에 배포된다.)
- http2 미지원
Surge 설치
NodeJS 를 바로 설치하는 방법도 있지만 여기서는 nvm 을 통해 특정 NodeJS 런타임을 다운로드 받는다.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
. ~/.bashrc
nvm install --lts
nvm ls
node --version
npm install --global surge
Surge 예제
본 예제에서 커스텀 도메인 및 유료 기능은 다루지 않는다.
Surge 예제 1
정적 웹페이지를 최초 배포해보자.
mkdir test && cd test/
echo hello > index.html
surge
project: /home/user/test/
## CDN 에 업로드 하고자 하는 프로젝트 루트 경로를 입력한다.
domain: noiseless-duck.surge.sh
## 배포하고자 하는 도메인을 입력한다.
## Aborted 오류가 발생한 경우 다른 사람이 해당 서브도메인을 사용중인 상태이다. 다시 시도 혹은 더 복잡한 단어를 입력한다.
## Success! 메세지를 확인하면 정상 배포가 된 상태이다.
curl -I https://noiseless-duck.surge.sh
## HTTP/1.1 200 OK 확인 시 정상 응답된 상태이다.
Surge 예제 2
surge 의 기능을 사용하여 정적 웹페이지를 배포해보자.
우선 아래 예제를 실습하기 위한 사전 준비를 한다.
mkdir test && cd test/
echo "index" > index.html
mkdir ignore/
echo "ignore/index" > ignore/index.html
.surgeignore 와 200.html 파일의 기능을 테스트해보자.
# .surgeignore
echo "ignore/" > .surgeignore
# 자동으로 아래 파일들은 배포되지 않고 무시된다.
## .git
## .*
## *.*~
## node_modules
## bower_components
# 200.html
## 404 에러가 발생하는 경우 200.html 이 응답된다.
echo "200" > 200.html
surge ./ --domain noiseless-duck.surge.sh
## ./ 현재 경로에 있는 파일을 noiseless-duck.surge.sh 라는 이름으로 배포한다.
curl https://noiseless-duck.surge.sh
## index.html 페이지 응답
curl https://noiseless-duck.surge.sh/notexist
## 404 에러 발생 -> 200.html 페이지 응답
curl https://noiseless-duck.surge.sh/ignore
## .surgeignore 파일로 인해 업로드 안됨 -> 404 에러 발생 -> 200.html 페이지 응답
현재 계정에서 생성된 프로젝트 삭제 및 로그아웃을 해보자.
surge list
## 배포된 프로젝트를 조회한다.
surge teardown noiseless-duck.surge.sh
## 해당 프로젝트를 삭제한다.
surge logout
## 계정 토큰을 쉘에서 제거한다.
Surge 결론
surge 의 기본 기능에 대해 알아보았다. 해당 포스트의 조회수가 많이 발생한다면 surge 시리즈로 기재 예정이다.
참고 문헌
https://surge.sh/help/