Skip to content

try-finally로 자원을 정리하던 코드를 try-with-resource문으로 개선#241

Open
yjj8353 wants to merge 2 commits into
eGovFramework:mainfrom
yjj8353:security
Open

try-finally로 자원을 정리하던 코드를 try-with-resource문으로 개선#241
yjj8353 wants to merge 2 commits into
eGovFramework:mainfrom
yjj8353:security

Conversation

@yjj8353

@yjj8353 yjj8353 commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

수정 사유 Reason for modification

  • 버그수정 Bug fixes
  • 기능개선 Enhancements
  • 기능추가 Adding features
  • 기타 Others

수정된 소스 내용 Modified source

개선해야 하는 이유

1. finally 절에서 리소스 정리 시 발생할 수 있는 휴먼 에러 원천 차단

자원을 여러 개 close 하는 도중 예외가 발생하면 후속 자원이 close 되지 않을 수 있음

2. 예외 묻힘 방지

finally 절에서 자원을 close 할 수 없는 경우 예외로 이를 처리하는데, 이 경우 예외 발생 시 이중으로 예외가 발생할 수 있음

3. 코드 간략화

finally 절을 제거함으로써 코드가 간략해짐

4. 오탐 방지

try-finally절은 정상적으로 자원정리를 하더라도 시큐어 코딩에서 매우 빈번하게 오탐 될 수 있음. (행안부의 소프트웨어 개발보안 가이드의 '부적절한 자원 해제 항목과 연관되어 있음)

수정 전

try {
    // 외부에서 추가적으로 변수 선언이 필요하므로 코드가 늘어남
    FileInputStream fileIn = null;
    Workbook wb = null;
    try {
        fileIn = new FileInputStream(filepath);
        wb = loadWorkbook(fileIn);
        return wb;
    } finally {
        // wb.close()는 예외 발생 가능성이 있는데, 여기서 예외가 발생하면 fileIn이 close되지 않을 수 있음
        if (wb != null) wb.close();
        if (fileIn != null) fileIn.close();
    }
} catch (IOException e) {
    throw new BaseRuntimeException("IOException: loadWorkbook(String filepath)", e);
}

수정 후

try {
    try (
        // 변수 선언과 동시에 자원을 할당하고, 이 메서드가 더 이상 유효하지 않을 경우 자동으로 자원을 정리하므로 코드가 간결해지고 안전해짐
        FileInputStream fileIn = new FileInputStream(filepath);
        Workbook wb = loadWorkbook(fileIn)
    ) {
        return wb;
    }
} catch (IOException e) {
    throw new BaseRuntimeException("IOException: loadWorkbook(String filepath)", e);
}

JUnit 테스트 JUnit tests

  • JUnit 테스트 JUnit tests
  • 수동 테스트 Manual testing

테스트 브라우저 Test Browser

  • Chrome
  • Firefox
  • Edge
  • Safari
  • Opera
  • Internet Explorer
  • 기타 Others

테스트 스크린샷 또는 캡처 영상 Test screenshots or captured video

스크린샷 2026-06-09 오후 8 11 03

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant