스프링의 필터를 공부하던 도중, servletRequest.setAttribute("key", "value")
형식의 코드를 볼 수 있었다. 해당 데이터가 HTTP 요청의 Header에 저장되는 코드라고 생각했지만, 뭔가 이상했다. 그 이유는 해당 객체에 setHeader
라는 메소드가 따로 존재하기 때문이다.
그렇다면, ServletRequest에서의 Attribute란 무엇일까?
HTTP
환경일 경우, WAS의 서블릿 컨테이너에선 ServletRequest
의 하위 객체인 HttpServletRequest
가 생성setAttribute
와 getAttribute
메소드 형태로 제공됨public void setAttribute(String name, Object o) //데이터 저장시 사용
public Object getAttribute(String name) //데이터 꺼낼 때 사용
생각해 보면, 사용자 데이터를 스프링에서 사용하기 위해선 컨트롤러단으로 데이터를 가져와야 한다. 요청에 대한 모든 데이터는 ServletRequest
에 담겨 있으며, 이를 컨트롤러단으로 전파할 필요가 있다. 그렇기에 서블릿에 데이터 및 객체를 담을 수 있는 공간인 attribute
가 있는 게 아닐까 싶다.
반면에, ServletResponse
에는 attribute
가 없다. 단순히 사용자에게 데이터를 보내줄 용도로만 사용되기 때문이라고 생각이 돼서 그런 것 같다.