본문 바로가기
AWS

[AWS] Go 프로젝트 무중단 배포하기(w/ pm2)

by 워뇨옹2 2024. 9. 26.
728x90
반응형

개요

현재 제작중인 메인 앱의 서버 코드가 타입스크립트 + express로 구성되어있다. 근데 golang을 사용해보면서 패키지 관리, 모듈관리, 코드적인 측면에서 봤을 때 좀 더 직관적이고 관리하기 쉬울것 같다는 생각에 새로 시작중인 프로젝트들은 하나씩 Go프로젝트로 제작을 해보고 있다.

 

근데 문제가 있다. 코딩을 하는것 까지는 서버 개발자가 아니더라도 개발자라면 다들 어느정도 코드 작성이 가능하겠지만, 배포하고 서버 환경을 구축하는 것은 조금 다른 얘기다. 현재 Cufit 프로젝트 초기만 보더라도 파이어베이스를 기반으로 하던 걸 전부 aws로 마이그레이션 하겠다고 자그마치 두달이라는 시간이 걸렸다. 물론 혼자 개발하는 입장이라 프론트, 기획, 디자인(은 다행히 팀원이 존재)을 총괄적으로 하면서 잘 모르는 것까지 같이 하려니까 그렇게 좀 더 오래 걸린것 같기는 하다.

 

어쨋든 나는 현재 타입스크립트 서버 코드 역시 도커 이미지를 만드는 것 까지는 가지 못했고, 다른 방법들을 찾아봐야했다.

nohup

첫 번째로 알아봤던 방법은 nohup을 사용하는 방법이다. 일단 명령어만 보자면 다음과 같다.

go build -o <빌드파일이름> <메인함수가 있는 파일 이름>.go
nohup ./<빌드파일이름> &

nohup은 "no hangup"의 약자라고 한다. (feat. chat gpt)

(참고로 hangup은 영어 표현에서 전화를 끊다 라고 많이 쓰는 표현이다.)

 

정확히 어떻게 작동하는 녀석인지 모르겠다. 로그를 출력하려면 명령어를 조금 수정해주면 되는데,

프로세스를 보는것도 조금 복잡하고 일단 익숙하지 않다보니 별로 마음에 안든다.

 

무엇보다 프로세스를 종료하려면 "kill" 명령어를 써야한다.😅

숫자하나 잘못 입력했다가 엄한 프로세스 종료하고 인스턴스가 통째로 먹통이 되는 상황(은 없겠지만)은 맞이하고 싶지 않다.

 

사용할 사람들은 사용해보자.

pm2

이게 이제 내가 사용하고 있는 방법이다.

사실 nodejs 기반 패키지라서 js코드만 배포 가능할 줄 알았다.

근데 꼭 그런건 아니고 빌드 파일이 있으면 다른 언어 및 프레임워크로 작성된 프로젝트도 배포가 가능한 것 같다.

 

명령어를 보면 다음과 같다.

npm install -g pm2
go build -o <file-name> main.go
pm2 start <file-name> --name <사용하고 싶은 이름>

pm2의 명령어는 다음에 한 번 정리 해보도록 하겠다.

 

이렇게 빌드파일을 사용하면 pm2로도 golang 프로젝트를 중단없이 실행하고 배포할 수 있다.

 

728x90
반응형

'AWS' 카테고리의 다른 글

[AWS] NGINX로 하나의 도메인에 여러개의 앱 연결하기  (0) 2024.09.26