-
Notifications
You must be signed in to change notification settings - Fork 0
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
[refactor] : Chatbot 관련 리팩토링을 진행한다 #85
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수고하셨습니다! LGTM!!
) | ||
.map(answer -> GetGuideChatbotAnswerResponse.of(answer.getAnswers(), answer.getImgUrl())) | ||
// 3. 아무 답변도 없으면 예외 처리 | ||
.orElseThrow(() -> new CustomException(ChatbotErrorStatus._NOT_FOUND_GUIDE_CHATBOT_ANSWER)); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저도 키워드에 따른 결과 찾을 때 stream 많이 사용했는데 사용하기 간편하고 좋더라구요
filter, and, or 조건으로 쉽게 조건 붙일 수 있어서 사용하는 데 익숙해지면 좋을 것 같아요!!
request.messages().add(messageFactory.createUserMessage(message)); | ||
String answer = clovaApiClient.requestClova(request); | ||
public Mono<GetClovaChatbotAnswerResponse> getClovaChatbotAnswer(String message) { | ||
ChatbotRequest request = clovaRequestFactory.createClovaRequest(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
GetClovaChatbotAnswerResponseDto로 바꿔주세요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
변경 완료!
} | ||
|
||
// 실패 응답 - 오버라이드 메서드용 | ||
public static <T> ResponseEntity<Object> onFailureForOverrideMethod(BaseErrorCode code, String message) { | ||
ApiResponse<T> response = new ApiResponse<>(false, code.getReasonHttpStatus().getCode(), message, null); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
public static <T> ResponseEntity<ApiResponse<T>> onFailureForOverrideMethod(BaseErrorCode code, String message) {
여기 onFailureForOverrideMethod메서드도 ApiResponse로 바꾸면 좋을 것 같아요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아 이부분은
// HttpMessageNotReadableException 처리 (잘못된 JSON 형식)
@Override
public ResponseEntity<Object> handleHttpMessageNotReadable(HttpMessageNotReadableException ex,
HttpHeaders headers,
HttpStatusCode status,
WebRequest request) {
String errorMessage = "요청 본문을 읽을 수 없습니다. 올바른 JSON 형식이어야 합니다.";
logError("HttpMessageNotReadableException", ex);
return ApiResponse.onFailureForOverrideMethod(ErrorStatus._BAD_REQUEST, errorMessage);
}
위처럼 ResponseEntityExceptionHandler
내에 기본적으로 있는 메서드를 오버라이드하는 경우에 쓰는 거라서 타입을 ResponseEntity<Object>
로 고정해야 할 것 같아요!!
✅ PR 유형
어떤 변경 사항이 있었나요?
📝 작업 내용
이번 PR에서 작업한 내용을 간략히 설명해주세요(이미지 첨부 가능)
기존에는
block
을 사용했는데, 이는 비동기가 아닌 동기 처리로 응답이 올 때까지 기다린다고 합니다.만약 1,000명의 유저가 챗봇을 동시 사용할 때, 1명의 유저를 처리하는 과정에서 처리가 늦어지면 비동기 처리에 비해 월등하게 속도가 느려진다는 단점이 존재합니다. 때문에
block
을 제거하고 reactive 기술의 흐름을 살리는 방향으로 변경하였습니다.참고 블로그
이 과정에서 테스트 코드 또한 일부 변경해야 했는데요.
중요 변경점은 아래와 같습니다.
.andExpect(request().asyncStarted())
: 비동기 처리를 시작합니다.asyncDispatch(mvcResult)
: 비동기 작업이 종료될 때까지 기다리고 최종 응답을 가져옵니다..andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
: application/json 이 아닌 application/json;charset=UTF-8 의 경우에도 호환 허용합니다.✏️ 관련 이슈
본인이 작업한 내용이 어떤 Issue Number와 관련이 있는지만 작성해주세요
#78
🎸 기타 사항 or 추가 코멘트
비동기 작업에 대한 테스트 코드 부분은 나중에 필요 시 참고해봐도 좋을 것 같습니다!
참고 블로그