더북(TheBook)

Note ≣ localhost와 포트란?

localhost는 현재 컴퓨터의 내부 주소를 가리키며, 외부에서는 접근할 수 없고 자신의 컴퓨터에서만 접근할 수 있습니다. 따라서 서버를 개발할 때 테스트용으로 많이 사용됩니다. localhost 대신 127.0.0.1을 주소로 사용해도 같습니다. 이러한 숫자 주소를 IP(Internet Protocol)라고 합니다.

포트는 서버 내에서 프로세스를 구분하는 번호입니다. 서버는 HTTP 요청을 대기하는 것 외에도 다양한 작업을 합니다. 데이터베이스와도 통신해야 하고, FTP 요청을 처리하기도 합니다. 따라서 서버는 프로세스에 포트를 다르게 할당해 들어오는 요청을 구분합니다. 유명한 포트 번호로는 21(FTP), 80(HTTP), 443(HTTPS), 3306(MYSQL)이 있습니다. 포트 번호는 IP 주소 뒤에 콜론(:)과 함께 붙여 사용합니다.

▲ 그림 4-2 IP와 포트

현재 예제에서는 임의의 포트 번호 8080에 노드 서버(프로세스)를 연결했습니다. 따라서 http://localhost:8080으로 접근해야 합니다.

그런데 http://gilbut.co.kr 같은 사이트들은 포트 번호를 따로 표시하지 않습니다. 바로 80번 포트를 사용하기 때문입니다. 80번 포트를 사용하면 주소에서 포트를 생략할 수 있습니다. https의 경우에는 443번 포트를 생략할 수 있습니다. 따라서 http://gilbut.co.kr:80으로 요청해도 길벗 홈페이지에 접속됩니다.

이 책에서 80번 포트를 사용하지 않는 이유는 충돌을 방지하기 위해서입니다. 일반적으로 컴퓨터에서 80번 포트는 이미 다른 서비스가 사용하고 있을 확률이 큽니다. 보통 포트 하나에 서비스를 하나만 사용할 수 있으므로 다른 서비스가 사용하고 있는 포트를 사용하려고 하면 에러가 발생합니다. 따라서 예제를 실행할 때는 다른 포트 번호들을 사용하고, 실제로 배포할 때는 80번 또는 443번 포트를 사용합니다.

한 가지 더 알아둘 점이 있습니다. 리눅스와 맥에서는 1024번 이하의 포트에 연결할 때 관리자 권한이 필요합니다. 따라서 명령어 앞에 sudo를 붙여야 합니다. 예를 들면 node server1 대신 sudo node server1을 입력해야 합니다. 예제에서는 8080번 포트를 사용하므로 sudo를 붙이지 않아도 됩니다.

Warning 포트 충돌

다른 서비스가 사용하고 있는 포트를 사용할 경우 Error: listen EADDRINUSE :::포트 번호 같은 에러가 발생합니다. 이런 경우, 그 서비스를 종료하거나 노드의 포트를 다른 번호로 바꾸면 됩니다. 서비스가 종료되지 않는다면 3.8.1절의 에러 해결 방법을 참고하세요.

▲ 그림 4-3 서버 실행 화면(http://localhost:8080/)

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.