유데미 웹개발 챌린지

47일차 - NodeJS로 서버 만들어보기, NodeJS의 여러 메서드

창고관리장 2023. 4. 25. 20:42

 

NodeJS로 서버 만들어보기

 

백엔드는 기본적으로 사용자가 보낸 요청을 서버 컴퓨터에서 받아 요청을 허가하면 사용자에게 저장된 HTML 파일을 응답으로 보내주는 과정을 담당한다. 

 

NodeJS로 사용자로부터 오는 요청을 받기 위해, 또 응답을 하기 위해 노드JS에 내장된 require 키워드를 이용할 수 있다.

requiee 키워드

이 키워드 뒤에는 위 이미지처럼 괄호를 추가해서 키워드를 함수로 실행할 수 있으며, 이 안에 노드JS에 구축된 HTTP 패키지를 문자열로 추가해준다. HTTP 패키지는 요청과 응답을 처리하는데 도움이 되는 특정 기능을 제공한다.

 

이렇게 구성된 require 함수를 호출하면 노드JS에서 제공하는 유틸리티 메서드와 속성으로 가득 찬 객체가 반환된다.

 

이 객체를 가져오기 위해 내장된 메서드인 createServer를 사용할 수 있다. 이 메서드는 이름처럼 웹서버를 생성하는 메서드이다. 생성된 서버에는 내장된 메서드인 listen을 사용하여 사용자가 웹사이트에 들어올 때 쓰게 되는 포트를 매개변수로 추가해주어야 한다.

createServer 메서드(위)와 listen 메서드(아래)

위 이미지는 위에서 저장한 http 상수에 createServer 메서드를 사용하여 이를 server로 저장하고, 이 server는 listen 메서드를 사용하여 포트번호 3000을 넣은 모습이다.

 

포트같은 경우 개발중에는 3000 같은 잘 안쓰는 닫힌 포트를 테스트하게 되며, 나중에 호스팅 업체의 원격 컴퓨터로 코드가 보내지면 기본값인 80이나 443으로 수정하여 사용하게 된다.

 

그리고 더 많은 웹사이트의 지침을 추가하고 노드JS에 더 많은 요청이 들어오는 경우에 수행할 작업을 알려주려면 위 이미지처럼 createServer 메서드의 매개변수에 이벤트리스너에 한 것처럼 함수명을 넣어주어야 한다. 즉, 수행할 작업을 함수로 만들어야 한다는 것이다.

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 페이지를 응답으로 보내는 것을 할 수가 있게 되었다. 이것은 백엔드에서 굉장히 중요한 포인트에 해당하는 일이다.