Spring으로 웹개발을 하다보면 Security 등의 이유로 Servlet Filter를 사용할 때가 있다.
코드를 예로 들면 아래와 같다.
import javax.servlet.Filter
import javax.servlet.FilterChain
import javax.servlet.ServletRequest
import javax.servlet.ServletResponse
import javax.servlet.http.HttpServletRequest
class MyFilter : Filter {
override fun doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain) {
request as HttpServletRequest
if (request.requestURI == "/") {
response.contentType = "application/json"
response.writer.println("""{"message": "Hello World!"}""")
return
}
chain.doFilter(request, response)
}
}
위 코드에서 response.writer(java.io.PrintWriter)
를 사용하는데, IO를 사용하는 코드기 때문에 close 메서드를 호출해야하지 않을까?
이에 대한 대답은 No 이다.
ServletResponse
는 Servlet Container
에서 관리를 하고 ServletResponse의 life cycle이 끝날 때 close를 한다고 한다.
이를 어떻게 보면 부수 효과를 일으키지 않는 doFilter
메서드를 만드는 것이다.
The general rule of them is this: if you opened the stream, then you should close it. If you didn't, you shouldn't. Make sure the code is symmetric.
그렇기 때문에 close를 호출하지않는 것이 좋다.
Reference
'Java & Kotlin > Java' 카테고리의 다른 글
[Java] List, Set, Map 구현체들 (0) | 2023.01.06 |
---|---|
BigDecimal이 소수를 다루는 방법 (0) | 2022.12.08 |
jabba global JDK 설정하기 (0) | 2022.04.09 |
gradle multi module test 속도를 높여보자 (with parallel) (1) | 2021.07.29 |
JUnit5 - @TestInstance에 대해 알아보자 (0) | 2021.07.25 |
댓글