Skip to content

refactor(example): 불필요한 예외 제거#62

Closed
LeeBaekHaeng wants to merge 1 commit into
eGovFramework:mainfrom
itcen-entec-2026:refactor/remove-throws-all2
Closed

refactor(example): 불필요한 예외 제거#62
LeeBaekHaeng wants to merge 1 commit into
eGovFramework:mainfrom
itcen-entec-2026:refactor/remove-throws-all2

Conversation

@LeeBaekHaeng

Copy link
Copy Markdown
Contributor

수정 사유 Reason for modification

소스를 수정한 사유가 무엇인지 체크해 주세요. Please check the reason you modified the source. ([X] X는 대문자여야 합니다.)

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

수정된 소스 내용 Modified source

검토자를 위해 수정된 소스 내용을 설명해 주세요. Please describe the modified source for reviewers.

검토 결과 보완

테스트의 throws Exception은 제거 대상이 아니지만
throws Exception을 롬복 @SneakyThrows 으로 변경하는 것을 제안합니다.

@SneakyThrows는 Lombok에서 제공하는 애너테이션으로, 체크 예외(Checked Exception)를 컴파일러에 선언하지 않고 전파할 수 있게 해줍니다.

장점

  • throws Exception 선언을 제거할 수 있다.
  • try-catch 없이 코드를 간결하게 작성할 수 있다.
  • 테스트 코드나 샘플 코드에서 유용하다.

단점

  • 메서드 시그니처만 봐서는 어떤 예외가 발생하는지 알기 어렵다.
  • 호출하는 입장에서 체크 예외를 인지할 수 없다.
  • IDE와 정적 분석 도구가 예외를 추적하기 어려워진다.
  • API나 라이브러리 코드에서는 권장되지 않는다.

사용 권장 여부

  • JUnit 테스트 코드, ✅ 권장 가능

#61

JUnit 테스트 JUnit tests

테스트를 완료하셨으면 다음 항목에 [대문자X]로 표시해 주세요. When you're done testing, check the following items.

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

테스트 브라우저 Test Browser

테스트를 진행한 브라우저를 선택해 주세요. Please select the browser(s) you ran the test on. (다중 선택 가능 you can select multiple) [X] X는 대문자여야 합니다.

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

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

테스트 전과 후의 스크린샷 또는 캡처 영상을 이곳에 첨부해 주세요. Please attach screenshots or video captures of your before and after tests here.

https://youtu.be/aYS6Z8vCDQc

@eGovFrameSupport

Copy link
Copy Markdown
Contributor

검토 결과를 공유드립니다.

먼저 #61 에서 확인된 부분은 해결되었습니다. assertDoesNotThrow
방식은 verify() 호출이 람다 내부로 들어가면서 MockitoAssertionError
"Unexpected exception thrown"으로 포장되어 실제 대조 메시지가 없어지는 문제가
있었는데, @SneakyThrows는 메서드 본문을 그대로 두므로 이 문제가 없습니다.

다만 아래 사유로 이번에도 반영하지 않고 close 하겠습니다.

  1. 테스트 메서드의 throws Exception은 제거 대상이 아닙니다.

#61을 close한 근거는 assertDoesNotThrow라는 수단의 문제가 아니라, JUnit 5에서
테스트 메서드의 checked 예외 선언이 프레임워크가 권장하는 표준 관용구라는 점이었습니다.
수단을 @SneakyThrows로 바꾸어도 제거해야 할 이유 자체는 달라지지 않습니다.
커밋 제목은 "불필요한 예외 제거"이나, 실제 결과는 키워드 한 개가 import 한 줄과 어노테이션 한 줄로 대체되어 코드가 증가합니다.

  1. src/test 전체가 아니라 일부만 변경되어 방식이 갈립니다.

현재 main의 src/test에는 throws Exception 선언이 19곳(12개 파일)에 있습니다.
본 PR은 그중 3곳(2개 파일)만 변경하므로, 반영 시 나머지 16곳(10개 파일)은
그대로 남습니다.

  1. @SneakyThrows는 개발 시에 권장되지 않는 어노테이션입니다.

@SneakyThrows는 컴파일러의 checked 예외 검증을 바이트코드 수준에서 우회하는
장치로 성격이 다르며, Lombok 문서 역시 예외가 발생할 수 없음이 명확한 경우에
한해 제한적으로 사용할 것을 안내하고 있습니다.

표준 관용구를 제거하기 위해 컴파일러 검증 우회 장치를 도입하는 것은 적절하지 않다고 판단됩니다.

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.

2 participants