47일차 - NodeJS로 서버 만들어보기, NodeJS의 여러 메서드
NodeJS로 서버 만들어보기
백엔드는 기본적으로 사용자가 보낸 요청을 서버 컴퓨터에서 받아 요청을 허가하면 사용자에게 저장된 HTML 파일을 응답으로 보내주는 과정을 담당한다.
NodeJS로 사용자로부터 오는 요청을 받기 위해, 또 응답을 하기 위해 노드JS에 내장된 require 키워드를 이용할 수 있다.
이 키워드 뒤에는 위 이미지처럼 괄호를 추가해서 키워드를 함수로 실행할 수 있으며, 이 안에 노드JS에 구축된 HTTP 패키지를 문자열로 추가해준다. HTTP 패키지는 요청과 응답을 처리하는데 도움이 되는 특정 기능을 제공한다.
이렇게 구성된 require 함수를 호출하면 노드JS에서 제공하는 유틸리티 메서드와 속성으로 가득 찬 객체가 반환된다.
이 객체를 가져오기 위해 내장된 메서드인 createServer를 사용할 수 있다. 이 메서드는 이름처럼 웹서버를 생성하는 메서드이다. 생성된 서버에는 내장된 메서드인 listen을 사용하여 사용자가 웹사이트에 들어올 때 쓰게 되는 포트를 매개변수로 추가해주어야 한다.
위 이미지는 위에서 저장한 http 상수에 createServer 메서드를 사용하여 이를 server로 저장하고, 이 server는 listen 메서드를 사용하여 포트번호 3000을 넣은 모습이다.
포트같은 경우 개발중에는 3000 같은 잘 안쓰는 닫힌 포트를 테스트하게 되며, 나중에 호스팅 업체의 원격 컴퓨터로 코드가 보내지면 기본값인 80이나 443으로 수정하여 사용하게 된다.
그리고 더 많은 웹사이트의 지침을 추가하고 노드JS에 더 많은 요청이 들어오는 경우에 수행할 작업을 알려주려면 위 이미지처럼 createServer 메서드의 매개변수에 이벤트리스너에 한 것처럼 함수명을 넣어주어야 한다. 즉, 수행할 작업을 함수로 만들어야 한다는 것이다.
위 이미지는 오늘 사용해본 함수인데, 요청과 응답만을 담당하는 함수여서 이름도 handleRequest로 하고 매개변수로 request와 response를 넣어주었다. 또, if 조건문을 사용하여 사용자가 입력한 url에 /currenttime이 들어가는지와 기본값으로 들어오는지에 대해 각각에 해당하는 내용을 채워주었다. /currenttime을 붙여서 접속하면 현재 시간이 나오는 것이고, 기본값으로 들어오면 Hello World만 나오는 식이다.
그리고 여기서 사용자에게 요청이 성공했는지 여부를 알리는 방법으로 statusCode 메서드를 사용했다. 이 메서드는 개발자가 직접 값을 설정할 수 있는 메서드로, 보통 성공했음을 알리는 200을 사용한다. 그 외에도 404, 401, 500도 있는데, 모두 에러와 관련되는 숫자이다.
💡 404 - 클라이언트 측 오류로, 요청한 리소스나 URL을 찾을 수 없다라는 뜻이다. 따라서 예상된 응답을 생성할 수 없게 된다.
💡 401 - 클라이언트 측 오류로, 요청한 클라이언트(사용자)가, 요청한 리소스나 URL에 액세스할 수 있는 권한이 없는 것이다.
💡 500 - 서버측 오류로, 요청이 유효하지만 서버에서 오류가 발생하여 예상된 응답을 생성할 수 없는 경우이다.
그 다음으로 사용자에게 HTML 코드가 전송되어야 하므로 HTML 코드를 동적으로 생성하기 위해 end 메서드로 응답 준비를 끝내고 괄호 안에 보내야 하는 데이터를 입력해주었다.
기본값으로 접속하면 그 데이터로 Hello World!가 뜨게 되고, /currenttime을 붙여서 접속하면 현재 시간이 H1 크기로 나타나게 된다. 여기서 날짜를 불러오기 위해 Date() 속성을 사용해주었고, 이 Date() 속성에서만 사용할 수 있는 toISOString() 메서드를 사용해주었다. 이 메서드는 날짜를 ISO 포맷의 문자열로 반환해주는 메서드이다.
위 이미지는 결과를 보여주고 있는데, 위는 현재시간이 나타난 모습이고, 아래는 Hello World!만 나온 모습이다.
이처럼 NodeJS를 씀으로 인해 사용자의 요청에 맞춰서 각기 다른 HTML 페이지를 응답으로 보내는 것을 할 수가 있게 되었다. 이것은 백엔드에서 굉장히 중요한 포인트에 해당하는 일이다.
