반응형
해당 글에서는 Java에서 SornarLint에서 발생하는 오류에 대한 해결방법에 대해 알아봅니다.
1) 문제점
💡 Use try-with-resources or close this "CloseableHttpClient" in a "finally" clause. 문제점
- 리소스 누출을 피하기 위해 "try-with-resources" 문을 사용하거나 "finally" 절에서 "CloseableHttpClient"를 닫는 것이 권장됩니다. 이렇게 하면 예외가 발생하더라도 리소스가 제대로 닫히게 됩니다.
💡 변경 이전 소스코드
public Map<String, Object> httpPost(String url, String queryParams) {
try {
// HTTPClient 객체 생성
CloseableHttpClient httpClient = HttpClients.createDefault();
//외부 api url
HttpPost httpPost = new HttpPost(url);
// ....
} catch (Exception e){
e.printStackTrace();
}
return null;
}
[ 더 알아보기 ]
💡 CloseableHttpClient
- Apache HttpClient 라이브러리에서 제공하는 인터페이스입니다. 이 인터페이스는 HTTP 프로토콜을 사용하여 통신하는 클라이언트를 생성하고 사용하는 데 도움을 줍니다. CloseableHttpClient를 사용하여 웹 서버와의 통신을 쉽게 처리할 수 있습니다.
💡 createDefault()
- Apache HttpClient 라이브러리에서 제공하는 메서드입니다. 이 메서드는 기본적인 구성으로 CloseableHttpClient 인스턴스를 생성합니다. 즉, 기본적인 설정으로 HTTP 클라이언트를 생성하고 사용할 수 있습니다. 이 메서드를 사용하면 웹 서버와의 통신을 간편하게 처리할 수 있습니다.
반응형
2) 해결방법
💡 해결방법은 baeldung 사이트에서 알려주고 있습니다.
- CloseableHttpClient 인스턴스를 생성하는 createDefault()를 수행하는 순간 예외처리로 try()로 감싸서 수행을 합니다.
- 해당 방법을 수행하는 이유는 자원을 안전하게 사용하고 닫을 수 있도록 합니다.이렇게 구성을 하면 예외가 발생하더라도 "CloseableHttpClient"가 제대로 닫히게 됩니다. 따라서, try-with-resources 구문을 사용하여 자원 누출을 피할 수 있습니다.
public Map<String, Object> httpPost(String url, String queryParams) {
try {
// HTTPClient 객체 생성
String response;
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
//외부 api url
HttpPost httpPost = new HttpPost(url);
//...
}
Object object = objectMapper.readValue(response, Object.class);
Map<String, Object> returnMap = objectMapper.convertValue(object, Map.class);
return returnMap;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
Apache HttpClient vs. CloseableHttpClient | Baeldung
💡 [참고] CloseableHttpClient API Document
오늘도 감사합니다. 😀
반응형