Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

예외 처리 기준에 대한 고민 #81

Open
Tracked by #80
kyupid opened this issue Jan 19, 2022 · 0 comments
Open
Tracked by #80

예외 처리 기준에 대한 고민 #81

kyupid opened this issue Jan 19, 2022 · 0 comments
Assignees
Labels
도큐먼트 Improvements or additions to documentation 스프링 자바 학습 Extra attention is needed

Comments

@kyupid
Copy link
Owner

kyupid commented Jan 19, 2022

"커스텀 예외보다는 표준 예외를 사용하라"
검색해보니 이펙티브 자바에 그렇게 나와있나보다.
나도 이미 지원하는 예외처리가 있다면 그것을 사용해야하는 게 맞다고 보는데,
사용하려다가 의문이 들었다.

내가 과연 처리하려는 예외가 "예외처리"를 해야하는 것인가?
예외처리가 아니라 뭔가 다른 방식의 처리를 해야할거 같다는 느낌..

예를 들어서
닉네임 변경시에 변경 후에는 30일간 변경을 못한다는 제약이 있다고 하자.
내가 하려는건 아래와 같은 플로우이다.

  1. 유저가 닉네임을 변경 요청
  2. 닉네임변경일시 조회후 30일 지났는지 true, false 반환
  3. true 이면 닉네임 변경 쿼리 실행
  4. false 이면 예외처리

여기서 false일때
throw new NicknameNoChangeableException() 같은 것을 던져주려고 한다.
근데 이게 맞는 방식인지 의문이든다.

왜냐하면 검색해서 나온 이펙티브자바의 표준예외를 사용하라의 예제 예외들은 다음과 같다

IllegalArgumentException
가장 많이 재사용되는 예외로, 호출자가 인수로 부적절한 값을 넘길 때 던지는 예외다. 
IllegalStateException
이 예외는 대상 객체의 상태가 호출된 메서드를 수행하기에 적합하지 않을 때 주로 던진다.
IndexOutOfBoundsException
NullPointerException과 유사하게 특수한 예로, 어떤 시퀀스의 허용 범위를 넘는 값을 건넬 때
ConcurrentModificationException
단일 스레드에서 사용하려고 설계한 객체를 여러 스레드가 동시에 수정하려 할 때 던진다.
UnsupportedOperationException
이 예외는 클라이언트가 요청한 동작을 대상 객체가 지원하지 않을 때 던진다. 

위 예외들의 공통사항을 보자면 기대하려는 로직처리에서 if-else 중에 else를 처리하려고 Excpetion을 던지는게 아니라
정말 "예외적인" 상황에 Exception을 던진다는 것을 알 수 있다.

그럼 다시 돌아가서 닉네임 변경시 조건에 충족되지 않으면 사용자에게 메세지를 날려주고 싶은데,
Exception을 날리는게 아니라 정상 응답 200 OK에 message를 담아서 보내면 되는 걸까?

message에 담아서 보내도 괜찮지 않다고 생각하는 건 컨트롤러에서 서비스의 비즈니스 로직을 호출하여
그 비즈니스 로직 내에서 메소드를 타고, 타고 또 타고 들어가는 형태에서 제일 안쪽 메소드에서 message를 바로 return 하고 싶다면 어떻게 해야할까?
그거 하나때문에 해당 메소드를 호출하는 상위 메소드 그리고 그 상위 메소드까지 그에 따른 처리를 해줘야한다.

@kyupid kyupid added 도큐먼트 Improvements or additions to documentation 학습 Extra attention is needed 스프링 자바 labels Jan 19, 2022
@kyupid kyupid self-assigned this Jan 19, 2022
@kyupid kyupid changed the title 커스텀 예외보다는 표준 예외를 사용하라는 것에 대한 고민 예외 처리 기준에 대한 고민 Jan 19, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
도큐먼트 Improvements or additions to documentation 스프링 자바 학습 Extra attention is needed
Projects
None yet
Development

No branches or pull requests

1 participant