지금까지 node 모듈 express
를 사용하며 브라우저의 요청 request
을 받을 때 세 가지 메소드를 사용하고 있다.
처음 클론할 때는 아무것도 모르고 사용하다가, Layered Pattern을 배우며
Presentation Layer 로직에서 첫 번째 인자로 받는 req를 사용해 변수를 설정하거나, 내가 원하는 함수를 구현하기 위해선 해당 메소드들에 대한 정리가 필요하다고 느껴 정리하려 한다.
가장 처음 접한 메소드이다.
ex) http -v POST localhost:3000 id=amoeba25 password=1234
HTTPie
도구로 request/response
를 주고 받을 때, XML, JSON, Multi Form 따위의 데이터를 담을 때 사용한다.
주로 POST 메소드를 사용하며 res.status(status Code).json
객체 안에 해당 요청에 대한 응답을 담아 응답한다.
위의 예시에서 url 이후 쓰이는 사용자의 정보를 전달 받는다.
req.send 객체에 인자로 담아 어떤 정보가 담겼는지 표현할 수도 있지만, 위의 사진처럼 res.status(status Code).json 객체 안에 담아 해당 요청에 대한 응답 메세지나 에러 메세지를 전달하는 경우가 더 많은 것 같다.
body에 담긴 정보는 url에 담기진 않지만 DevTools, Terminal 같은 곳에서 확인할 수 있다.
사용자 정보가 포함될 수 있기 때문에, jwt나 Bcrypt 등을 사용해 암호화한 후 보내는 과정을 거쳤다.
향후 RESTful API 를 사용할 때 request body에 담아 보내는 정보를 유용하게 사용할 수 있는 메소드이기 때문에 자주 사용할 거 같다.
url에 담긴 정보를 가져와 사용하는 방식이다. 경로를 담는 방식으로, Path Variable
라 불린다고 한다.
ex) http -v GET localhost:3000/users/1
const userId = req.params.userId // 1
와 같은 방식으로 url에 포함된 정보를 사용해 변수에 담는 등의 기능을 구현하는 메소드이다.
라우트 파라미터를 담기 때문에 엔드포인트에 유저 정보를 표현하는 로직에서 사용할 수 있다.
하지만 토큰 등의 인증 인가 방식을 배우면서 유저의 여러 정보를 굳이 url에 담는 방식으로 로직을 짜지 않기 때문에, RESTful API에서 유저 id와 같은 resource
를 식별해 함수를 구현할 때 주로 사용할 것으로 보인다.
params 메소드와 마찬가지로 url에 포함된 정보를 갖고 오지만 차이가 있다.
ex) http -v GET localhost:3000/users\?userId=1\&userName=amoeba
const { userId, userName } = req.query
위처럼 url에서 엔드포인트 이후 ?를 사용해 'key = value' 의 객체 방식으로 선언하고 이후 로직에서 내가 원하는 방식으로 사용할 수 있었다. 여러 정보를 담고 싶으면 하나의 데이터 뒤에 &를 사용해 입력하면 된다.
사실 이와 같은 Query Parameter
방식은 우리가 충분히 많이 사용하고 있다.
위처럼 유튜브와 같이 검색을 통해 정렬이나 필터링이 필요한 사이트에선 쿼리 메소드 방식이 더 유용하게 사용될 거 같다.
즉. query 방식은 params에 비해서 더 자유롭고 여러가지 키를 통해 정렬할 수 있는 방식이라고 생각한다.
https://expressjs.com/ko/api.html
https://stackoverflow.com/questions/14417592/node-js-difference-between-req-query-and-req-params