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

feat: 공통 예외 및 성공 Response 구현 #10

Merged
merged 10 commits into from
Jul 5, 2024

Conversation

its-sky
Copy link
Member

@its-sky its-sky commented Jul 5, 2024

🌱 관련 이슈

📌 작업 내용 및 특이사항

  • 공통 예외 클래스 및 핸들러, 성공 타입을 구현하였습니다.

[예외 클래스 관련 안내 사항]

  • 공통 예외 클래스는 BaseException입니다. 이를 상속하는 BadRequest, Unauthorized, Forbidden, NotFound, InternalServer Exception으로 공통으로 구성하였습니다.
  • 각 Exception 클래스는 매개인자로 ErrorType을 받습니다. 해당 ErrorType은 인터페이스로 각 도메인마다 이를 구현하는 Enum Type으로 만들어 사용할 수 있습니다. (MemberErrorType 참고)
  • Service Layer에서 throw한 예외는 GlobalExceptionAdvice에서 잡아 해당 Exception 정보를 처리합니다.

[성공 관련 안내 사항]

  • 성공 타입은 SuccessType으로 인터페이스입니다. 예외 타입과 동일하게 각 도메인에 맞게 상속하여 Enum으로 구현하면 되겠습니다.
  • 성공의 Http Status는 200 OK, 201 Created, 204 No Content가 존재합니다.
  • 기본적으로 GET 요청은 200 OK를 통하여 처리하고 Controller에서는 return ApiResponse.success(SuccessType, data); 형식으로 처리하시면 되겠습니다.
  • 201 Created는 Location 헤더에 자원의 정보를 심을 수 있기 때문에 return ResponseEntity.created(location).build();로 처리하시면 됩니다.
  • 204 No Content는 말 그대로 반환하는 정보가 없기 때문에 Patch와 같은 메소드에서 사용합니다. return ResponseEntity.noContent().build();로 처리하시면 되겠습니다.
  • 이에 따라 SuccessType은 200 OK만 처리하므로 SuccessType 내부에 HttpStatus를 담지 않았습니다. 따라서 ApiResponse success 메소드에서 status int 값을 200으로 스태틱하게 고정해놨습니다. 이 부분은 추후 변경 사항이 있으면 변경 가능합니다.

📝 참고사항

[BaseException 클래스 다이어그램]
image

[API 공통 응답 테스트]
스크린샷 2024-07-05 오후 3 49 06

스크린샷 2024-07-05 오후 3 48 06 스크린샷 2024-07-05 오후 3 41 00

📚 기타

@its-sky its-sky added the feature label Jul 5, 2024
@its-sky its-sky self-assigned this Jul 5, 2024
@ywonchae1 ywonchae1 changed the title Feat: 공통 예외 및 성공 Response 구현 feat: 공통 예외 및 성공 Response 구현 Jul 5, 2024
@@ -4,6 +4,7 @@ build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
**/application-secret.properties
Copy link
Member

Choose a reason for hiding this comment

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

이 파일은 어디에 쓰이는 건가요??

Copy link
Member Author

Choose a reason for hiding this comment

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

yml 파일에 ${변수} 로 들어가는 변수를 application-secret.properties 파일 내에 적어두면 세팅이 가능합니다! 세팅 방법에는 여러개 있는데 저는 저 방법을 사용하는 걸 선호합니다

Copy link
Member

Choose a reason for hiding this comment

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

오와 하나 배워 갑니다 .. ovo

import com.depromeet.global.dto.type.SuccessType;

public enum MemberSuccessType implements SuccessType {
GET_SUCCESS("MEMBER_1", "멤버 조회에 성공하였습니다");
Copy link
Member

Choose a reason for hiding this comment

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

앞에 GET은 request type이 아니라 조회라는 뜻이 맞을까요!

Copy link
Member Author

Choose a reason for hiding this comment

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

음 사실 저 네이밍은 별도로 합의해서 변경해도 돼요~ 내일 얘기해봅시다!

}

/**
* 500 INTERNEL_SERVER
Copy link
Member

Choose a reason for hiding this comment

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

INTERNAL..................aldksgo

Copy link
Member Author

Choose a reason for hiding this comment

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

헉스 ㅋㅋㅋㅋ 오타났다..

@@ -0,0 +1,12 @@
## 🌱 관련 이슈
Copy link
Collaborator

Choose a reason for hiding this comment

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

역시 갓민철님....

/**
* CUSTOM
*/
@ExceptionHandler(BaseException.class)
Copy link
Collaborator

Choose a reason for hiding this comment

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

customexception을 가장 마지막에 둔 이유가 있을까요?

@@ -2,6 +2,7 @@ spring:
config:
activate:
on-profile: local
import: optional:application-secret.properties
Copy link
Collaborator

Choose a reason for hiding this comment

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

이런 방법이 있었군요..ㄷㄷ

@its-sky its-sky merged commit 7e68eb4 into develop Jul 5, 2024
@its-sky its-sky deleted the feature/8-common-response branch July 30, 2024 03:59
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.

✨ 공통 예외 및 성공 Response 구현
3 participants