Open a web server

Python-Django를 통해 처음 블로그 예제를 만들었을 때, Node.js로 채팅 프로그램을 만들었을 때, 이러한 예제 블로그들은 대부분 http://localhost:3000에서 결과를 확인하는 정도에서 끝난다.

Issue

이렇게 만들어서 localhost 에서 확인하는 서버는 진짜 서버가 아니다. 무언가 http 통신을 통해서 웹의 요청을 처리할 수 있어야 서버가 아닌가? localhost의 요청만 처리해서는 무슨 의미가 있지?

내가 처음 챗봇을 만들면서 부딪힌 이런 상황에서, 가장 쉽게 찾을 수 있는 답변은 aws, heroku를 통해서 deploy, hosting 하는 거였다. 특히 heroku가 처음 사용에 용이하기 때문에(물론 여기서도 맨땅에 헤딩을 많이 했지만) heroku를 통해 웹에 배포했다. 그래서 나는 로컬에서 만든 앱은 무언가 복잡한 과정을 통해서 서버를 올리거나, 클라우드를 통해 웹에 올리거나 둘중에 하나라고 생각했다. 그런데 클라우드가 아닌 더 로우한(?) 레벨의 서버는 어떻게 돌아가는 걸까?

PORT 3000

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2016-10-23-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-3-17-29%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2016-10-23-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-3-18-00위의 사진은 장고 서버를 작동시킬 때 포트번호를 설정해주고, 아래의 사진은 node.js 프로그램에서 bin/www에서 포트번호를 설정해주는 모습이다. 나는 이렇게 port 번호를 작성해도 로컬호스트로 접근할때나 되는 것이고, 이것을 서버로써 의미있게 만들기 위해서는 apache나 nginx가 꼭 필요한 것이고 이건 복잡한 일이라고 막연히 두려워했다. 그러나 컴퓨터 네트워크 수업을 들은게 맞나 싶을 정도로 어이없는 생각이었다. 내가 이렇게 port를 설정해서 프로그램을 돌리면 포트는 열린다. 3000번 포트가 열린다. 그리고 이것은 내 pc의 아이피 주소와 결합되어 하나의 소켓이 되어 웹과 TCP/IP 통신을 한다. 

그래서 내 서버에 어떻게 접근할까?

ifconfig

ifconfig 명령어를 통해 내 머신의 ip주소를 확인할 수 있다.스크린샷 2016-10-23 오후 3.24.51.png  ifconfig 명령어를 입력하면 위와 같은 출력이 나온다. 이 중 en0에 inet 부분이 우리가 흔히 알고 사용할 수 있는 ip 주소이다. 내 inet 값이 192.168.x.xx라고 했을 때, 내가 연 포트 번호가 3000번이므로 192.168.x.xx:3000을 통해 내가 실행시킨 서버에 접근할 수 있다.

이 때 192.168.x.xx은 나의 로컬네트워크 주소이다. 외부망에서 접속하려면 공유기에 접속해 공유기의 80포트를 내 머신의 로컬 네트워크를 통해 포트포워딩 하면 된다.

Hosting a web server on aws ec2

aws ec2는 하나의 머신은 나에게 제공해주는 개념이므로 똑같은 개념으로 서버를 작동시킬 수 있다. 그런데 한가지 과정이 더 필요하다. 내가 3000번 포트를 통해 TCP/IP 통신을 하겠다고 프로그래밍을 했다. 따라서 aws ec2의 security group에서 3000번 포트를 사용하겠다는 설정을 해주어야 한다. 내 컴퓨터는 주요 포트를 제외하곤 내가 연 포트를 자유롭게 사용할 수 있지만 ec2의 포트는 security group을 통해서 관리되기 때문이다. 스크린샷 2016-10-23 오후 3.35.12.pngaws ec2 console > security group > security group 선택 > 하단의 Inbound 에서 위와 같이 Custom TCP Rule 을 추가하고 3000번 포트를 프리소스에 대해서 열어주어야 해당 포트를 통해 내 ec2에서 돌아가는 서버에 접근할 수 있다.

Basic chat site

스크린샷 2016-10-23 오후 3.37.38.png

스크린샷 2016-10-23 오후 3.36.52.pngec2 linux 머신에서 실행시킨 node.js 서버를 맥북의 크롬을 통해서 접근하는 모습이다.

Next Issue

그렇다면 왜 굳이 apache나 nginx를 사용하는 것일까?

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

search previous next tag category expand menu location phone mail time cart zoom edit close