지난달까지는 이 프로젝트를 배포할 때 nodemon을 이용해서 배포를 하였다.
nodemon으로 배포하고 있을 때는 소스코드를 수정한 결과물을 자동으로 반영해주어서
결과물을 확인하기 좋았기 때문이다.
하지만 단점도 있었다.
매번 프로젝트를 할 때마다 노드몬을 키고 끄는 작업을 반복해야했기 때문이다.
물론 노드몬 자체를 백그라운드로 실행시킬 수도 있겠지만
나중에 노드몬을 끌 때 프로세스 아이디를 읽고 꺼야하는 귀찮음이 있어서 하고 싶지 않았다.
이 작업이 너무 번거롭다고 생각해서 백그라운드에서 배포하는 방법을 알아보았다.
검색을 해보니 nodemon말고도 forever와 pm2 등 선택지가 더 있었다.
그 중에서 나는 forever를 선택했다.
그 이유는 다음과 같았다.
- forever start 명령어로 백그라운드 실행이 가능하다.
- forever 명령어만으로 nodemon처럼 쓸 수 있다.
- watch 옵션으로 변화를 감지하여 재실행 할 수 있다.
- 에러발생시 서버를 자동으로 재실행한다.
(노드몬은 수동이었다. 별도 설정을 하면 자동으로 되는진 모르겠지만) - pm2도 위 기능을 이용할 수 있지만, 스레드나 클러스터링 등의 설명으로 보아
규모가 큰 서비스에 사용하기 좋은 패키지 같았다.
나처럼 백그라운드 실행 용도로만 사용하는데는 forever가 좋아보였다. - 실행중 발생하는 모든 출력을 별도 파일에 자동으로 로깅한다.
그리고 한번 테스트를 해보았다.
forever 명령어에 watchDirectory 옵션을 주어 폴더내 파일들의 변화를 감지하게 한 다음
다른 터미널로 접속하여 변경사항을 원격 레포지토리에서 당겨와봤다.
forever -w server.js --watchDirectory src/
git pull
nano /home/ubuntu/.forever/ABCD.log
(node:278289) Warning: Accessing non-existent property 'padLevels' of module ex>
(Use `node --trace-warnings ...` to show where the warning was created)
{"level":"error","message":"Could not read .foreverignore file."}
{"level":"error","message":"ENOENT: no such file or directory, open '/var/www/h.."
listening on 3000
{"level":"error","message":"restarting script because /var/www/html/project/ym_.."
{"level":"error","message":"Forever detected script was killed by signal: SIGKI.."
{"level":"error","message":"Script restart attempt #1"}
listening on 3000
[Object: null prototype] {}
[Object: null prototype] {}
[Object: null prototype] {}
[Object: null prototype] {}
...
그러자 자동으로 서버가 재실행되면서 알아서 배포가 되었고
사이트에 접속하면 내가 작성한 디버깅 로그도 잘 찍힌다.
원래 100% 완전한 결과물은 내가 프로젝트 작업할 때만 서버를 키다보니 항상 볼 수 없었는데
이제는 유튜브 뮤직 클론코딩을 언제 어디서나 누구나 볼 수 있게 되었다.😀
다음으로 유튜브 뮤직의 음악 재생창을 만들려고 사이트 디자인을 시작했다.
오늘은 노래를 재생하면 음악 재생창의 존재 여부와 관계없이 생기는 플레이어바를 만들었다.
아직 클릭시 반응하는 기능은 없이 간단하게 색하고 레이아웃만 잡아주었다.
이런 느낌으로 잡았다.
지금은 플레이어바가 이렇게 항상 뜨지만, 나중엔 로그인해서 노래를 선택하면 그 때 생기도록 수정할 예정이다.
'개인 프로젝트 > [2022] 유튜브 뮤직 클론코딩' 카테고리의 다른 글
[유튜브 뮤직 클론코딩] 9. 노래 재생 기능 만들기 (2) | 2023.09.29 |
---|---|
[유튜브 뮤직 클론코딩] 7. 로그인 시 발생할 수 있는 에러처리 (0) | 2022.08.16 |
[유튜브 뮤직 클론코딩] 6. 프로젝트 구조 수정과 로그인 구현 (0) | 2022.08.05 |
[유튜브 뮤직 클론코딩] 5. MariaDB + NodeJS 연동하기 (0) | 2022.06.08 |
[유튜브 뮤직 클론코딩] 4. Express 프레임워크 적용과 API 서버에서 데이터 받기 (0) | 2022.06.05 |