TIL 21.05.31

Jaemin Jung·2021년 6월 1일
0

Today I Learned

목록 보기
31/62
post-thumbnail

오늘한일

이전에 리액트를 이용해 States Airline Client Application을 만들어보았다.
오늘은 해당 과제의 서버를 express 프레임워크를 통해 구현해보았고,
이를 통해 좀더 알게된 사실에 대해서 작성해보려한다.

프레임워크와 라이브러리의 차이점

우선 라이브러리와 프레임워크는 둘다 다른 누군가가 쓴 코드라는점이 동일하다.
이 둘의 차이점은 아주 심플한 컨셉으로 갈린다.
내가 코드를 컨트롤할지, 누군가의 규칙을 따라 코딩을 하는지 즉 흐름을 누가 쥐고 있느냐에 달려있다.
전자의 경우는 라이브러리, 후자의 경우는 프레임워크다.

라이브러리는 생산에 도움을 줄수 있는 도구들의 집합이며, 내가 자유롭게 미리 작성된 코드(도구)를 사용하면 된다.

프레임워크는 생산을 할수있게 일정하게 짜여진 틀이며, 이것을 사용하기 위해서는 정해진 규칙을 따라야한다.

  • 정리
    라이브러리: 내가 필요로 할 때 도서관에서 자료 찾듯이 마음대로 빌려 쓰는 것
    프레임워크: (정해진) 프레임 내에서 작업을 해야 하는 것

Express의 query string 객체의 사용

query는 url의 기본요소에 더해지는 요소이며 웹 서버에 보내는 추가적인 질문이다.
query는 uri의 마지막 부분에 ?(물음표)뒤에 붙으며, Express에서는
req.query를 사용해야 접근가능하다.
실제 예제로 내가 수행했던 과제에서 uri를 입력했을때 실행되는 해당 라우터 로직에 콘솔로그를 해보았다.

console.log(req.query) 

Node.js DevTools로 콘솔로그를 확인한 결과 ?이후로 작성된 query가 객체형태로 조회된다.
즉, 전달되는 형식은 ?키 = 값 & 키 = 값 의 형식이다.

Express의 params 객체의 사용

uri에서 지정한 라우터 이후로 추가적인 경로를 보낼때 이를 req.params를 이용해 접근 가능하다.
마찬가지로 실행되는 해당 라우터 로직에 콘솔로그를 해보았다.

console.log(req.params)


id라는 키값으로 추가적인 경로가 속성값이 된 객체형태가 조회된다.
(id라는 키값이 왜 생성되었는지는 좀더 연구해볼 예정이다.)

node server 에러 대처

node app.js나 nodemon app.js를 통해서 서버를 실행할 경우
가끔씩 다음과 같은 에러코드가 나올때가 있다.
이번에 과제를 진행하면서 여러번 보게된 에러코드이며, 이럴때마다 컴퓨터를 재부팅하여 해결했었다.

Starting inspector on {server} failed: address already in use

이 경우에 대해서 stackoverflow에 질문이 있었으며 답변은 이러하며, 대응책을 제시했다.

VSCode, Puppeteer, nodemon, express 등이 이 문제를 일으키는 것 같습니다.
백그라운드에서 프로세스를 실행했거나 디버깅 영역 (브라우저, 터미널 등)을 닫았거나의 경우입니다.

$ ps ax | grep node
$ killall -9 node

백그라운드에서 돌아가고 있는 프로세스를 강제 종료 시키는 코드로 해석되고, 두 코드를 순차적으로 입력하니,
에러가 더이상 발생하지 않았다.

그밖에 핵심

서버를 개발할때 규모가 크다면 express를 이용한 라우팅 처리를 필수로 진행하며,
이에대한 로직은 다른 파일에서 연결하여 처리해야 유지 보수가 좀더 원활하다.

미들웨어를 통해 모든경우의 404상태코드 에러 처리를 하나의 코드로 핸들링 가능하다.
단, 주의할점은 모든 등록과 라우팅처리 코드 이후에 작성해야하는것이다.

app.use((req, res, next) => {
  res.status(404).send('Not Found!');
});

참고사이트

https://wayhome25.github.io/nodejs/2017/02/18/nodejs-11-express-query-string/
https://blog.metafor.kr/138
https://velog.io/@jcinsh/Query-string-path-variable
https://stackoverflow.com/questions/47609400/how-to-stop-the-node-js-inspector-chrome-debugger-on-sigint

profile
내가 보려고 쓰는 블로그

0개의 댓글