회사에서 API 개발을 하나 하게 되었음
기존에 GET 방식으로 단건만 처리하던 API를 다건을 동시에 처리할 수 있게 수정하는 건이였는데, 쿼리스트링으로 리퀘스트를 받아서 뭔가를 처리하고 리스폰스하는 API였음
우선 여러건의 데이터를 리퀘스트로 받아야 했기 때문에 json 형식으로 @RequestBody를 사용하였고, 자연스럽게 POST 방식으로 기존의 API를 변경함.
엥 근데? 개발을 다 하고 포스트맨으로 테스트를 하려고 브레이크 포인트를 걸어놨는데, 디버거에 걸리지가 않았음 !!!
걍 컨트롤러에 들어가지조차 못하고 있었음.
(인터페이스 서버에서 개발한게 아니라 그냥 컨트롤러 하나 만들어서 개발해놨던 API라 테스트를 로컬 서버를 돌리고 Postman으로 했음)
그래서 왜 그러나 하고 쭉 따라가 봤는데 ~~~PreHandler라는 필터에서 지금 보낸 요청의 Header에 referer라는 애를 validation하고 있는거임!!
예를 들면 referer가 현재 요청을 보낸 곳의 도메인으로 시작하는지?
isStartWith()을 써서,,, 물론 검사하는 방법같은건 다 다르겠지만 암튼!!
나는 이때 referer라는 걸 처음 들었음 ㅎㅎ
referer란?
"referer"는 HTTP 헤더의 일종으로, 클라이언트가 이전에 어떤 웹 페이지나 자원을 요청했을 때, 그 요청이 어디서 왔는지를 나타냄
주로 웹 브라우저나 웹 클라이언트가 서버에게 현재 요청된 페이지로 이동하기 전에 어떤 페이지나 자원에서 링크나 리다이렉션을 통해 왔는지 알려주는 역할을 한다고 함.
referer의 형식
referer 헤더는 보통 다음과 같은 형식을 가짐
referer: https://example.com/previous-page
보통 이런 형식이고, HttpServlet에서 현재 요청의 domain을 가져와서
if(referer.isStartWith(domain)) {
...
}
이렇게 검증하거나 할거임
결론
그니까 뭐 일부러 건드리거나 할 필요는 없는거긴 함 ㅎㅎ
나 같은 경우에는 이제 그 외부(Postman 등의 테스트툴)에서 비정상적인 접근처럼 보이지 않게 하려고 Header에 어거지로 referer를 지정해서 넣어준거고 !
마지막으로 이 referer는 웹 서버나 웹 애플리케이션이 현재 요청이 어디서 왔는지 파악하는 데 사용될 수 있다고 함. 예를 들면, 특정 페이지에서의 유입 경로를 추적하거나 분석하는 데 활용될 수 있겠지?!?