본문 바로가기
도서로 공부하는 프로그래밍/코딩 자율학습

[NodeJS] createServer() 리팩터링 하기

by 열공노년 2024. 4. 8.
반응형

createServer() 리팩터링 하기: 교재는 Node.js 백엔드 개발자 되기

전 시간에 공부한 내용은 간단한 서버로 기본을 다지는 과정이었습니다. 그러나 createServer() 콜백 함수참고1에 모든 코드를 다 추가하기 때문에 좋은 코드는 아닙니다. 라우팅 이후 처리를 별도의 함수를 만들어서 처리하도록 코드를 리팩토링참고2합니다.

 

라우터와 실행하는 함수 코드를 나누기

패스에서 /user 요청을 처리하는 코드를 user() 함수로, /feed 요청을 처리하는 코드를 feed() 함수로 분리합니다. 또한 패스가 없을 때나 틀린 경우는 notFound() 함수로 분리합니다.

리팩토링한 코딩

 

동적으로 응답하기

지금까지 작성된 코드는 정해진 결과만을 보여주는 단순한 코딩이었습니다. 'localhost:3000/user'로 접속했을때 항상 같은 내용이 표현되는 것이 아닌 다른 내용이 출력되게 변경합니다. 방법은 user() 함수의 변경입니다.

user() 함수 변경

변경된 user() 함수는 쿼리 스트링 데이터를 userInfo 변수에 할당하여 그 값을 받아 표현하는 것입니다. 쿼리 스트링이란 HTTP 요청을 보낼 때 사용자가 원하는 값을 보내는 방식입니다. 경로값 뒤에 ?를 붙인 다음 key=value 형식으로 사용합니다. 쿼리 스트링이 여러 개일 경우는 &로 추가합니다.

쿼리 스트링에 의한 브라우저 출력

 

라우터 리팩터링

동적으로 응답하나 아직은 하나의 분기문에서 모든 요청을 분석합니다. 함수가 적을 때는 문제가 없으나 패스 경로에 대한 함수가 많아지면 유지보수 등의 관리가 어려워집니다. 유지보수가 용이하도록 라우터를 리팩터링 합니다.

 

분기문에 사용되는 매개변수가 같은 패턴을 보일 때는 멥 자료구조가 유용합니다. 여기 적용되는 라우팅 규칙도 분기문에 들어가는 매개변수가 같은 패턴입니다. 그러므로 맵을 사용 해서 분기문을 깔끔하게 할 수 있습니다.

urlMap을 사용한 리팩터링

        if (path in urlMap) { // urlMap에 path가 있는지 확인(in 연산자 사용)
            urlMap[path](req, res); // urlMap에 path값으로 맵핑된 함수 실행
        } else {
            notFound(req, res);

 

객체와 함께 in 연산자를 사용하면 객체의 키가 있는지 검사합니다. 자바스크립트의 in 연산자와 맵을 사용해서 URL라우팅을 할 수 있게 됐습니다. urlMap[키]를 넣으면 키에 대항하는 값을 반환합니다. 키로 path를 넣으면 값인 함수가 반환됩니다. urlMap['user']를 입력하면 user가 반환되므로 결국 코드는 user(req, res);가 됩니다. urlMap['feed']가 입력되면 코드는 user(req, res);가 되는 맵핑입니다.

 

urlMap을 사용해서 간단하게 라우팅 규칙을 구현했습니다. urlMap의 키로는 path를 나타내는 문자열을, 값으로 함수를 주게 됩니다.

 

코드의 가장 하단의 urlMap은 위치는 하단이지만 브라우저에서 url 정보를 받기 전이기 때문에 호이스팅참고3이 되지 않습니다. 호이스팅은 함수 선언이 된 후에 함수 실행이 있어야 한다는 자바스크립트 변수 let과 const에 적용되는 규칙입니다. 


콜백 함수란:

다른 함수에 인자로 전달되어, 그 함수 내부에서 호출되는 함수를 말합니다. 콜백은 주로 비동기 처리, 이벤트 처리, 타이머 함수 설정 등에서 사용되며, 특정 작업이 완료된 후에 실행되어야 할 코드를 관리하는 데 유용합니다.

예를 들어, 자바스크립트에서 웹 서버에 데이터를 요청하고, 해당 데이터가 성공적으로 받아졌을 때 어떤 행동을 취해야 하는 경우, 데이터 요청 함수에 콜백 함수를 인자로 제공합니다. 서버로부터의 응답을 받으면, 콜백 함수가 호출되어 응답에 대한 처리를 합니다.

 

리팩터링:

코드를 변경하여 프로그램의 외부 동작을 그대로 유지하면서 내부 구조를 개선하는 과정입니다. 이는 가독성을 높이고, 유지보수를 용이하게 하며, 버그를 줄이고 성능을 개선할 수 있도록 도와줍니다. 주로 중복을 제거하고, 명확성을 개선하며, 이해하기 쉬운 코드로 만드는 작업을 포함합니다.

 

호이스팅:

호이스팅은 자바스크립트에서 변수와 함수 선언을 코드 상단으로 끌어올리는 것입니다. 그러나 constlet 선언은 끌어올려지나 초기화 전까지는 접근할 수 없습니다. 함수 선언은 전체가 호이스팅 됩니다.

 

반응형