네스트를 활용해서 특정 파라미터를 전달받아 DB에 데이터를 조회하는 간단한 API를 추가했다.
분명 전달해줘야되는 데이터는 test-test... 같은 문자열이였는데 갑자기
"안되는데요?!" 이러면서 찾아오는것 아닌가
침착하게 시도한 파라미터를 공유해달라 하면서 받았는데 이런..
멋진아들-sadf-1241..같은 형태가 아닌가...
이마를 짚으며 탄식했다.
URL은 아래의 3가지 이유로 여러 특수문자들을 인코딩한다
1. 무결성 - 특수문자들이 서버로 전달될때 무작위성의 변경이나 변질을 방지하기 위해
2. 보안 - 악의적인 코드가 포함된 파라미터를 전송할 경우 서버에서 예기치 못한 동작을 일으킬 수 있어서
3. 안정성 - 몇몇 특수문자들은 URL에서 특수한 의미를 지닌다(EX. / , ?) 그렇기에 잘못된 요청을 막아야해서
그런데 이것만 보면 특수문자만이라며? 이라고 의아할 수 있는데
한글도 특수문자로 취급된다.
이는 URL의 표준 규격 RFC 3986의 규격을 준수하기 위해서인데 여기서 영어와 몇개의 규칙을 제외하곤 전부 특수문자 취급이다.
그리하여.. nest js에서는 그러한 규칙과 위의 3가지 이유로 특수문자가 포함된 URL 자원을
아래와 같은 메서드 2개를 활용해 변환시킨다
1. encodeURL
2. encodeURLComponent
왜 두개인가요?
좋은 질문이에요.
1번은 path 전체를 인코딩할때 사용합니다
예를 들어보면 / ? : @ & = + $ # 라는 문자 자체는 인코딩을 하지않아 쿼리 스트링의 시작점(? = 기호)를 알수 있어서 path 전체를 인코딩 시킬땐 사용하면된다
2번은 파라미터만 인코딩할때 사용합니다
예를 들자면 파라미터로 전달받은 문자열이 몰?루 라면 몰,?,루 전체를 인코딩해야되기 때문에 encodeURL을 써버리면 물음표 기호가 안되니 잘못된 결과이다.
즉 정리하자면
path 전체를 인코딩해야될땐 encodeURL
api/param 같이 파라미터만 인코딩 해야될땐 encodeURLComponent
잘 기억하자
'개발 > Nodejs' 카테고리의 다른 글
nestjs의 Middleware,interseptor <미들웨어편> (1) | 2023.12.28 |
---|---|
Nestjs 데코레이터,어노테이션 무엇이 맞을까? (0) | 2023.12.27 |
신규 카테고리 node js! (0) | 2023.12.27 |