TIL: 상대-절대 경로, URL, Cookie, Session, Body-Parser

엉썬·2022년 3월 19일
0
post-thumbnail

서버에서 등장하는 개념 정리

서버를 운영하기 위한 공부를 하던 도중에 자꾸 개념이 헷갈리거나 확실하게 숙지가 안되어 코드를 제대로 이해하기 힘들었다. 그래서 미숙한 개념들을 정리해보고 한다.

절대 경로/ 상대 경로

기본적으로 절대 경로는 고유한 경로를 말한다. 만약 어떤 파일을 읽어오자고 한다면 맥을 기준으로 MacintoshHD/Users/unsnruu/Documents이 되는 셈이다. 윈도는 C:\~부터 시작하는 파일이 될 것이다.
상대 경로는 그 파일이 위치한 곳을 기준으로 작동한다. 만약 상대경로로 어떤 파일을 읽어오자고 한다면, 읽어오기 위한 작동을 시작하는 지점이 상대경로의 출발지가 될 것이고 출발지/읽어오려는 파일로 경로가 설정될 것이다.

path.join(), path.resolve()

절대 경로와 상대 경로에 대한 의문은 path에 속한 두 메서드, joinresolve때문이었다.
join과 resolve에서 /(슬래시)를 인수로 받았을 떄 다르게 작동한다.

  • join은 /를 기존의 경로에 합쳐서 반환한다.
  • resolve는 /를 만나면 절대 경로로 인식하고 앞에 합쳐진 경로를 버리고 새로 경로를 만들기 시작한다.

만약 두 메서드에서 /가 존재하지 않는다면 상대경로를 기준으로 동일하게 작동한다.

Nodejs의 URL

Nodejs가 URL을 다루는 방식은 두 가지가 존재한다. 하나는 WHATWG방식이고 다른 하나는 기존의 nodejs가 자체적으로 다루던 방식이다. 기존 nodejs방식은 deprecated다고 한다. 다만 경우에 따라서는 nodejs 자체의 방식으로 쓰는 경우도 있다고 한다.

노드의 url 형식을 꼭 사용해야 하는 경우가 있습니다. host 부분 없이 pathname 부분만 오는 주소인 경우(예시: /book/bookList.apsx)에는 WHATWG 방식이 처리할 수 없습니다.
-알라딘 eBook <Node.js 교과서 개정2판> (조현영 지음) 중에서

WHATWG 방식은 search부분을 searchParams라는 특수한 객체로 반환하므로 유용하게 쓸 수 있다고 한다.

searchParam 객체는 JS의 맵 객체와 비슷한거 같은데 append라는 메서드를 사용하면 set과는 다르게 key값을 중복해서 사용이 가능한 듯 하다.

기존 노드에서는 searchParam 대신 querystring 모듈을 사용한다.

쿠키는 stateless한 http 통신에서 사용자의 정보를 저장하는 하나의 방법이다. 다만 보안상 취약한 부분이 있고 저장할 수 있는 정보의 한계가 있기 때문에 세션이 등장했다고 한다.

처음에 이해가 안되었던 부분은 쿠키와 세션이 아예 다른 것인가 하는 부분이었다. 쿠키는 클라이언트에게 세션은 서버에만 정보를 저장하는 것인가 하는 의문이 들었던 것이다.
차근히 들여다 본 결과, 세션은 서명된 쿠키인 id를 클라이언트에게 전달한다. 따라서 쿠키가 아예 쓰이지 않는 것은 아니다.
다만 클라이언트에게 부여한 id를 통해 사용자에 관한 정보나 설정을 서버 측에서 복원하므로 보다 정보량의 제한에서 자유롭고 보안의 안전성도 높다고 할 수 있다.

express-session

express-session 패키지는 req.session 객체 내부에 유저에 따라 정보를 유지하도록 돕는 패키지이자.
쿠키를 서명하는데 있어서 secret 값이 필요한다. 이때 cookie-parser를 사용한다면 이와 동일하게 값을 설정하는 편이 좋다고 한다.

Body-Parser

Express를 사용하면서도 req.body에 대체 뭐가 어떻게 들어가는 것인가 하는 의문이 있었다. 모르는 채로 일단 강의를 진행하다가 혼자서 서버를 다시 재현해보려하니 그제서야 body가 어떻게 생겼는지 모르겠다는 생각이 들었다.

express.json();
express.urlencoded({ extended:false});

너무 자연스럽게 사용했던 위의 구문이 사실 body-parser이었다. 이 두 instruction은 미들웨어로서 form이나 ajax 요청의 데이터를 처리한다.
단 멀티파트 데이터는 처리하지 못하므로 이 때는 multer를 사용하는 것을 추천했다.

express 4.16 이후로는 body-parser의 일부기능이 익스프레스에 내장되었다고 한다.

마찬가지로 cookier-parser의 경우 데이터를req.cookies 객체로 변환해주는 미들웨어이다.

MySQL: Pool

express로 MySQL과 연결을 할 때, createConnection메서드가 있는 한편, createPool이 존재한다.

작동의 결과는 같은데 깃문서를 살펴보면 pool을 사용할 시에 미리 연결을 설정해 두어서 보다 빠르게 sql과의 상호작용이 일어나는 듯 싶다.

참고

profile
하던 일부터 끝내자

0개의 댓글