[java Anti Pattern Series] 24.neglectingtoreleaseresource
February 7, 2025
Neglecting To Release Resource
- 리소스 해제하지 않는 경우 메모리 누수, 과도한 리소스 낭비, 성능 이슈가 발생할 수 있다.
- 리소스 미사용 시 해제하지 않는 경우 발생한다.
원인
- 이해 부족
- 긴밀한 결합
- 리소스 획득, 릴리즈 로직 간 긴밀한 결합이 이뤄진다 이러면 모든 경로에서 리소스가 릴리즈되도록 보장하기가 어려워질 수 있다.
- 예외 처리
- 복잡한 코드
- 너무 복잡하면 리소스가 제대로 릴리즈 됐는지 확인하기 어려울 수 있다.
영향
- 메모리 누수
- 리소스 고갈
- 성능 저하
- 보안 취약점
해결
- try-with-resource 사용
- 리소스 획득, 릴리즈 로직을 분리
- 리소스 사용량 모니터링
- finally 등을 사용해서 닫거나 권장하는 사용법을 지키기 ( 명시적으로 리소스 해제 등 )
finalizer를 사용해서 닫기 -> GC에서 처리될 때 호출할 수 있지만 언제 호출될지는 모른다. 추가적으로 finalizer 자체가 객체 재생성 공격 등에 취약하다.