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

[BSVR-63] custom exception & global exception handler 추가 #15

Merged
merged 5 commits into from
Jul 5, 2024

Conversation

EunjiShin
Copy link
Collaborator

📌 개요 (필수)

  • 비즈니스 로직과 관련된 exception들을 팀 내 포맷에 맞추어 관리해요.
  • 이 custom exception들은 클라이언트에서 예외 처리를 세분화할 때, 또는 서버 파트에서 디버깅을 할 때 활용되어요.

🔨 작업 사항 (필수)

  • common 모듈 추가 :: 이 exception들은 추후 admin이나 batch에서도 활용할 여지가 있다고 판단했어요.
  • common 모듈에 exception 관련 코드 추가
  • application 모듈에 exceptionHandler 추가
    • 어플리케이션 특성별로 handler 동작 결과가 달라질 수 있다고 생각했어요.
    • e.g., http 어플리케이션은 errorResponse를 반환해야 하지만, 배치 프로그램은 따로 반환할 값이 없어요.
  • member custom exception 예제 코드 추가

🌱 연관 내용 (선택)

  • swagger에 API에서 발생할 수 있는 errorCode를 손쉽게 정리할 수 있도록, 커스텀 어노테이션을 만들 수도 있어요.
  • 당장은 그리 중요도가 높아 보이지 않아서.. 일단 노션을 활용할까해요.

💻 실행 화면 (필수)

  • API 실행했을 때, exception이 발생하면 errorResponse 양식에 맞춰서 응답이 반환되어요.
스크린샷 2024-07-05 오후 9 17 46
  • 서버에선 이렇게 로그가 남아요.
스크린샷 2024-07-05 오후 9 18 28

@EunjiShin EunjiShin self-assigned this Jul 5, 2024
@EunjiShin EunjiShin added the ✨ Feature 기능 개발 label Jul 5, 2024
@github-actions github-actions bot added the size/L label Jul 5, 2024
Copy link

github-actions bot commented Jul 5, 2024

Test Results

0 tests  ±0   0 ✅ ±0   0s ⏱️ ±0s
0 suites ±0   0 💤 ±0 
0 files   ±0   0 ❌ ±0 

Results for commit 3e1c6fa. ± Comparison against base commit eca8047.

♻️ This comment has been updated with latest results.

@github-actions github-actions bot added size/M and removed size/L labels Jul 5, 2024

import org.springframework.http.HttpStatus;

public interface ErrorCode {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

모든 도메인의 errorCode가 하나의 enum class에서 관리되면, 클래스가 너무 커져서 관리하기 힘들거라고 생각했어요.
(e.g., 200개의 error code 중에서 member와 관련된 error들을 찾는 상상..)

따라서 공통 포맷을 인터페이스로 만들고, 도메인별로 errorCode를 구현하게 처리해 응집도를 높였어요.

import lombok.Getter;

@Getter
public enum MemberErrorCode implements ErrorCode {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

custom error를 만들어야 한다면, 이런식으로 ErrorCode를 구현하는 enum 클래스를 새로 생성하면 돼요.

Comment on lines +23 to +26
public MemberErrorCode appended(Object o) {
message = message + " {" + o.toString() + "}";
return this;
}
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

정해진 메세지 외에 추가로 정보를 제공하고 싶을 수 있어요. 그때 사용하는 메서드에요.

Comment on lines +12 to +18
public MemberNotFoundException() {
super(MemberErrorCode.MEMBER_NOT_FOUND);
}

public MemberNotFoundException(Object o) {
super(MemberErrorCode.MEMBER_NOT_FOUND.appended(o));
}
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

단순 예시..!
no args constructor를 사용하면 enum code에 지정해둔 message가 할당될 것이고,
appended() 메서드를 활용하면 원하는 정보를 추가로 전달할 수 있어요.

(e.g., 특정 name에 해당하는 유저가 없을 경우, name : {string}을 message에 추가하는 등)

@EunjiShin EunjiShin marked this pull request as ready for review July 5, 2024 12:32
Copy link
Member

@char-yb char-yb left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Copy link
Member

@wjdwnsdnjs13 wjdwnsdnjs13 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@EunjiShin EunjiShin merged commit 36ae2b3 into main Jul 5, 2024
4 checks passed
@EunjiShin EunjiShin deleted the feat/BSVR-63 branch July 5, 2024 13:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants