배포 환경 구성

배포 생략한 개발환경 실험

이 웹사이트는 개인용으로 구매한 NAS 장비와 가정용 인터넷을 이용하여 구동되고 있다. 그것도 개발모드로 ㅎㅎ. 그래서 엄청 불안할 수 있음. NAS에서 제공하는 클라우드 드라이브에 git 프로젝트를 클론하여 로컬이 아닌 리모트 서버를 개발과 동시에 운영하는 실험이다.
System:
- ISP에서 제공한 허브에서 DMZ 서버를 NAS로 할당
- firejune.io 도메인을 CloudFlare로 연결
- 유동IP 이슈 때문에 DSM에서 CloudFlare를 DDNS로 사용
- NAS 장비에서 기본으로 사용중인 80, 443 포트를 풀어주기
- NAS에 Node.js 설치
- 클라우드 드라이브 싱크모드 구성
Enviroment:
- 클라우드 드라이브로 설정된 경로에서 blog 프로젝트 클론
- ssh로 NAS에 접속하여 싱크된 blog 디렉토리로 이동
- 디펜던시 설치(npm install)
- node_modules, .git, .next 디렉토리는 싱크 해제
- 프로젝트를 pm2에서 개발모드로 시작
ㄴ sudo pm2 start npm --name "blog" -- start

시나리오

IDE에서 프로젝트를 열고 파일을 수정하면 웹사이트에 변경내역이 실시간 반영된다. 변경사항 반영되기 까지 1, 2초 정도 로컬에서 개발 서버 띄운것과 크게 다르지 않음, 개발하는 과정이 실시간으로 다 노출됨 실수하는 것 까지 ㄷㄷㄷㄷ, Next.js는 개발자가 오류를 내면 이를 피드백하기 위한 핸들러를 내장하고 있어 서버가 죽을일은 없음

관찰

개발 모드를 리얼로 운영하면 얼마나 안정적일 수 있을까? 이 프로젝트가 완성될 때 까지 현상태를 유지하면서 관찰해 볼 예정이다. 죽을일은 없겠지만 노파심에 pm2로 올렸다. next.js도 로컬에서 서버를 오랜시간 돌리고 있으면 v8에서 뻑나는 현상이 종종 있기는 함. 괜찮은 결과를 도출해 내면 그지같은 카페24 가상서버 호스팅은 이제 안녕이야.

결과

개발 모드는 너무 느리다. 그렇다면 build 디랙토리가 싱크되도록 하고 pm2의 watch 기능을 이용해서 로컬에서 빌드하면 pm2에서 클라이언트를 갱신하도록 되도록 구성해 보자.
- pm2.config.js 작성
- 변화 감지를 위해 빌드ID 추출
	ㄴ export BUILD_ID=$(git rev-parse --short HEAD) 
- BUILD_ID가 갱신되면 watch에 client가 업데이트 되도록 pm2 config 구성
	ㄴ sudo pm2 start pm2.config.js --update-env