body-parser의 urlencoded는 도대체 어떤 역할을 하는 걸까?

Hazel_Song·2020년 10월 16일
17

SERVER_EXPRESS

목록 보기
4/11

node express를 사용할 때, 뭐랄가 기본 세트처럼 딸려오는 모듈들 중에서,
데이터(client에서 post로 보내준 데이터)들을 자동으로 파싱해주어서, 진짜로 필요한 부분인 body부분을 쉽게 추출해주는 body-parser 모듈이 있다.

그런데 해당 모듈을 사용할 때마다 항상 같이 사용하던 셋팅에

app.use(express.urlencoded({extended: false}))

이것도 있는데, 이건 정확히 무슨 의미를 지니고 있을까?

일단 body-parser 모듈을 사용할 때 아무 옵션을 주지 않는 다면
body-parser deprecated undefined extended: provide extended option 같은 문구가 뜬다.

그리고 해당 모듈을 사용하고자 한다면 위에서 기재한 urlncoded 옵션을 사용해야 한다고 한다.

urlencoded({extended : })는 어떤 옵션일까?

이를 이야기 하기 전에 우선 자바스크립트에서 데이터를 주고받는 형식에 대해서 잠깐 이야기하고 가면 좋을 듯하다.

자바스크립트에서 데이터를 주고받고 읽을 땐느 객체 형태를 띄고, 실제로 데이터를 주고 받을 때도 객체 형태를 선호한다.
(따라서 여러 과정을 거쳐 파싱을 거쳐야 하는 것이다. JSON을 사용하는 것처럼)

extended 옵션의 경우, true일 경우, 객체 형태로 전달된 데이터내에서 또다른 중첩된 객체를 허용한다는 말이며, false인 경우에는 허용하지 않는 다는의비니다.

일반적으로는 false로 셋팅하고 사용하기는 하는 것을 express 셋팅 관련해서 예시를 볼 때 많이 볼 수 있었다. 그렇다면 true와 false로 셋팅했을 때 차이가 무엇일까?

bodyParser 미들웨어의 여러 옵션 중에 하나로 false 값일 시 node.js에 기본으로 내장된 queryString, true 값일 시 따로 설치가 필요한 npm qs 라이브러리를 사용한다.

queryString 과 qs 라이브러리 둘 다 url 쿼리 스트링을 파싱해주는 같은 맥락에 있으나 qs가 추가적인 보안이 가능한 말 그대로 extended 확장된 형태이다.
기본이 true 값이니 qs 모듈을 설치하지 않는다면 아래와 같이 false 값으로 따로 설정을 해주어야 한다.

즉 qs는 추가적인 보안기능이 있는 모듈로서 필요하다면 모듈 설치후에 사용하면 된다.

아무래도 중첩된 객체를 허용한다는 말은 추가적인 보안기능이 있는 것에 대한 일부 사용에 대한 설명인 것으로 추측된다.

profile
코드 한 줄로, 세상의 가치를 만들자🌟

0개의 댓글