포스트맨으로 이것저것 재밌게 만져보는 중인데,
나땐 맞지만 지금은 틀린 것이 있었다.
GET메서드와 DELETE메서드의 경우는 리퀘스트에 body를 담아보낼 수 없다는 것!
에에에에엥????
포스트맨은 되는데요?????
그건 포스트맨이 능력이 좋은 것(?)이고, 실제로는 불가능한 부분이라고 한다..
실제로 body값이 입력이 되지 않게끔 막아 놓지도 않았고,
서버에서도 body값이 조회되기 때문에 이런줄 저언혀 모르고 있었다..
(근데 2014년부터는 body를 담아 보내는 것이 가능하다고 하는데..? 아직 나의 뇌는 이부분을 담을 수 없기에 나중에 포스팅 해보기..)
그럼 이제 어떡해야해..?
방법은 당연히 있다. 아직까지는 내가 못하는 것은 아직 내가 모르는 것이 대부분이기 때문!
GET메서드로 요청시 리퀘스트에 데이터를 담는 방법은 총 2가지가 있다!
바로, 패스 마라미터와 쿼리 스트링!
패스 파라미터는 URL의 경로(path)에 데이터를 포함시키는 방식
예)
형식 : GET / blog.naver.com/hoifoi/post/:post_id
예시 : GET / blog.naver.com/hoifoi/post/1
정말 내 방식대로 짠 예시이니 실제로 누를 일은 없도록..ㅜ
위 형식처럼 짜게 되면, 프론트에서는 :post_id라는 부분에
조회를 하고싶은 post의 id를 넣어서 보내 줄 것이다!(GET메서드 이니까)
즉, {post_id} 부분이 패스 파라미터!
위 예시처럼 리퀘스트를 보내게 된다면, 백엔드 개발자는
console.log(req.params)를 찍어보면
{
post_id : 1
}
와 같이 데이터가 들어오는 것을 알 수 있다!
URL 경로에 데이터가 포함되어 있어 직관적이고 읽기 쉽다!
URL 경로에 직접 데이터가 노출되므로 보안에 취약할 수 있다!
데이터 전달 시 경로가 복잡해지면 가독성이 심각하게 떨어진다..ㅜ
쿼리 스트링은 URL 끝에 ?를 사용하여 데이터를 전달하는 방식!
키-값 쌍으로 데이터를 표현하며, 여러 개의 파라미터를 사용할 때는 &로 구분!
예)
형식 : GET / www.naver.com/users?id?name?gender
예시 : GET / www.naver.com/users?id=1?name=hororo?gender=female
정말 내 방식대로 짠 예시이니 실제로 누를 일은 없도록..ㅜ
위 형식처럼 짜게 되면, 프론트에서는 해당 영역에 필요한 정보를 넣어서 보내줄 것이다
즉, ?이후의 부분이 쿼리스트링!
위 예시처럼 리퀘스트를 보내게 된다면, 백엔드 개발자는
console.log(req.query)를 찍어보면
{
id : 1,
name : 'hororo',
gender : 'female'
}
와 같이 데이터가 들어오는 것을 알 수 있다!
URL에 명시적으로 파라미터를 표현하므로 가독성이 좋다!
(패스파라미터에 비해 아주 많이 직관적으로 금방 알 수 있다!)
이 역시 긴 URL의 경우, 쿼리 스트링이 길어질 수 있어 가독성이 떨어진다.. ㅜ
그럼 때에 따라 필요한 경우가 나뉘어져 있을진데..
어떤 상황에서 사용할까?
단일 값 전달 시: 하나의 값을 전달할 때는 패스 파라미터이 간단하고 효율적이다!
blog.naver.com/hoifoi/post/1과 같은 URL을 보면
네이버의 hoifoi란 블로거의 1번 게시글을 조회될 것임을 금방 알 수 있다!
그럼 1번 게시글의 2번 댓글을 보고싶다면?
blog.naver.com/hoifoi/post/1/reply/2와 같이 해야 하지 않을까?
이럼 좀 지저분하고, 읽기도 쉽지가 않다..
여러 값 전달 시: 여러 값을 전달하거나 복잡한 데이터를 처리할 때는 쿼리 스트링이 더 효율적이다!
auction.com?category=IT?subcategort=phone와 같이
보통의 경우에는 쇼핑몰에서 많이 보이는 것 같다!
(아직 경험이 부족해 현재로서는 이 부분만 느끼고 있다..ㅜ)
이번 교육을 기점으로 모든 홈페이지를 직접 들어가보고
URL에서 정보가 어떤식으로 입력되어있는지 눈여겨 보게 되었다!
심심할때마다 하는데, 상당히 공부가 되고 있다!(내가 API를 만들때 어떻게 할지 결정에 도움이 되기도 하고!)
이 글을 보고 있는 당신이 백엔드 개발자가 되려한다면
이런 부분에서 웹을 눈여겨 보고 있다면 아마 도움이 많이 될 듯 싶다!
++
발돋움 중인 예비 개발자 입니다.
태클 및 의견 공유 언제나 환영 :D