AWS로 배포하는 포스팅들은 다양하고 정보가 많았으나, Ncloud로 배포하는 방식은 포스팅 글도 적고 제가 배포를 해보면서 겪었던 오류와 이슈들을 해결하는 것을 정리하기 위해 글을 썼습니다.
<Linux Ubuntu 서버환경에서 배포를 진행하였습니다.>
NCloud에서 서버를 생성하는 과정은 해당 블로그에 정리가 잘 되어있으니 참고하시면 좋습니다.
https://www.linux.co.kr/bbs/board.php?bo_table=lecture&wr_id=2086
저는 이 서버를 생성하고 배포를 하는 과정에서 용어가 이해가 잘 안되었고, 이 IP주소는 뭐고 왜 이것을 설정하는가에 대한 글을 써볼까 합니다.
(Window 환경에서 진행하였습니다.)
server를 설정하다 보면 ACG를 기본적으로 사용을 권장한다고 설명을 합니다.
이 ACG는 뭘까요?
네이버클라우드 공식 사이트의 설명은 다음과 같습니다.
내부의 다른 서버에서 해당 서버로 들어오는 인바운드 트래픽과
외부로 나가는 아웃바운드 트래픽에 대해 IP 주소와 포트 단위로 접근을 제어할 수 있습니다.
간단하게 말하면 아무나 내 서버에 접근 하는 것을 막아주는 필터링을 해주는 기능이라고 생각하시면 됩니다.
제가 배포를 하고 개발을 진행하거나, 서비스를 운영중인데 디도스 공격을 받거나, 허용되지 않은 사용자가 제 서버에 접근을 하면 보안상 취약해질 수도 있기 때문에, 이를 방지하기 위한 방화벽이라고 이해를 했습니다.
역시 서버를 생성하다보면 공통적으로 포트포워딩을 설정을 해야 접근이 가능합니다.
포트포워딩이 왜 필요할까요?
우선 IP주소에 대해 알아야 합니다.
IP주소는 공인 IP와 사설IP가 존재합니다.
IP주소는 겹치지 않아야하는 고유한 인터넷의 주소라고 보시면 됩니다. 우리가 사는 집 주소라고 간단하게 생각해보시면 됩니다. (집 주소가 겹치지는 않죠)
단, IP주소는 갯수가 한정되어 있습니다. (IPv4 기준 약 42억개)
그래서 공인 IP와 사설 IP를 나누고, IP주소의 일정 영역을 사설 IP주소로 지정을 해버립니다
(ex. cmd창에 ipconfig를 입력해봅시다.)
이 사설 IP주소의 경우에는 겹칠수도 있겠죠?
그러면 우리는 이제 인터넷에서 다른 서버와 통신을 하고 싶습니다.
이러한 사설 IP를 엮어주고 관리해주는 존재가 "공유기" 입니다.
이제 제가 네이버클라우드 서비스를 이용해 저기 네이버의 이름모를 한 서버의 22번 포트를 열었습니다.
제가 연 서버는 22번 포트를 열고 데이터를 전송하거나 받을 준비가 되어있지만, 저 네이버클라우드 서버의 사설 IP주소와 포트가 몇번이 열렸는지를 알려면 무조건 공유기를 통해서 접속을 해야합니다. (문지기? 안내원? 이라고 생각하면 편할것 같네요)
즉 컴퓨터가 공유기에게 "나 22번 포트 열려있어! 22번 포트로 들어오는 애들 나에게 안내해줘!"라고 알려주는 것을 포트포워딩 입니다.
다음과 같이 보시면 서버 접속용 공인 IP는 공유기의 public 주소라고 생각하시면 되며 공유기에게 4000번 포트로 들어오는 친구는 제가 설정한 client-server로, 3000번 포트로 들어오는 친구들은 express-server로 들어오라고 안내해줘! 라고 생각하시면 쉬울 것 같습니다.
server를 생성하면서 인증키를 발급받고 다운 받으셨을 겁니다.
이 인증키는 관리자 권한으로 네이버클라우드의 linux server에 접근을 할 때 필요한 비밀번호를 발급받기 위한 키라고 생각하시면 됩니다.
당연히 그 누구에게도 유출하거나, 인증키를 보내시면 안됩니다. (이 인증키가 있으면 누구든 제가 연 서버에 들어와서 무슨짓을 할 지 몰라요..)
위의 내용을 숙지하고 서버를 생성하셨으면, 이제 저희가 생성한 네이버클라우드의 컴퓨터에 직접 접속을 해야겠죠?
포트포워딩 까지 마쳤다면, 서버 접속용 공인 IP (네이버클라우드 컴퓨터의 공유기 주소)와 외부 포트 (우리가 접속할 사설 컴퓨터 주소)를 설정을 합니다.
이제 open을 누르시면 (편의상 N공유기라 칭하겠습니다.) N공유기에 접근하여, 3000번 포트를 통하여 저희가 생성한 server에 접속을 하게 됩니다. 이후에 관리자 권한 비밀번호를 입력 하여 관리자 권한으로 접속을 할 수 있습니다.
이후에 putty를 통해 Ncloud의 서버에 접속을 하고, 여러 설정을 하다가 오면 putty가 자동으로 연결이 종료되는 현상을 겪으시는 분들이 많으실 꺼라 생각합니다.
이는 session이 유지가 되지 않으면 보안상? 자동으로 연결이 종료되는 현상인데, 즉 서버에 아무런 작업을 하지않으면 자동으로 종료가 됩니다. (다시 putty설정하고 들어가기 매우 귀찮아요...)
다음과 같이 Connection을 클릭하시면 Sending of null packets to Keep session active 가 있습니다, 세션 유지를 통한 빈 packet을 보내준다는 의미인데, 저는 1초마다 세션 유지를 위해 빈 packet을 보내기 위해 1로 설정하였습니다.
이러면 아무런 작업을 하지 않아도 자동으로 연결이 끊어지지 않습니다. (너무 오래 있으면 또 끊어지긴 하더라구요, 이유는 모르겠습니다.)
결정적으로 이 글을 쓴 계기입니다.
저의 경우에는 node js의 express server를 통해 배포를 진행할 예정이었으므로, Ubuntu Express 기본 설정으로 진행하였습니다.
해당 포스팅의 글을 그대로 진행해 나갔습니다.
https://kjwsx23.tistory.com/354?category=811138
다른 부분은 정상적으로 모두 작동하실 거라 생각합니다.
npm install pm2@latest -g
이후에 pm2를 설치하면서 오류를 만나실 거라 생각합니다.
자꾸 pm2만 설치를 하려고 하면 Error가 뜨며 설치가 안되었는데 오류를 읽어보니 현재 node와 npm 버전이 너무 낮아서 설치가 진행되지 않는다는 내용이었습니다.
당황하여 node -v 로 버전을 확인해보니 4.x.x 버전이었습니다. (현재 기준 16.x.x)
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
해당하는 설정을 진행 하여 다시 설치를 진행하여도 계속 node version은 바뀌지 않고, npm 버전 또한 그대로 였습니다.
이후에 node version update란 키워드로 검색을 해보니 n 이라는 모듈을 통해서 가능하다고 합니다.
npm install -g n
를 통해 n모듈 설치후에
n stable
n lts
n latest
진행하고 node -v 를 찍어보니 역시나 4.x.x가 ... node를 지워보고 다시 설치해보고 ㅎ ㅐ도 계속 4.2.6 버전이 찍혀있어서 멘붕이 왔었습니다. (예상하기로는 이미 linux서버에 node 가 깔려있는데, 환경변수가 자꾸 기존의 node를 가리키는 상황이라고 생각했습니다.)
우선 해결한 방식은 NVM (node version manager)를 활용한 방식이었습니다.
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
해당 명령어를 입력하면 NVM 설치와 환경변수 설정을 동시에 진행합니다.
nvm install 16.x.x //설치하고싶은 버전
nvm use 16.x.x
설치하고 싶은 버전을 설치한 후에 해당하는 node version을 사용하겠다고 use를 통해 명시하니 정상적으로 node version이 업데이트 되었습니다!