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

[MVC 구현하기 - 2단계] 유콩(김유빈) 미션 제출합니다 #251

Merged
merged 12 commits into from
Sep 26, 2022

Conversation

kyukong
Copy link

@kyukong kyukong commented Sep 26, 2022

안녕하세요 칙촉 잘 지내고 계신가요ㅎㅎ

2단계 미션 제출합니다
1단계 미션의 피드백도 일부 적용하였고 답변도 달아두었습니다!
이번에도 잘 부탁드려요 😊

✓ 체크리스트

  • ControllerScanner 클래스에서 @controller가 붙은 클래스를 찾을 수 있다.
  • HandlerMappingRegistry 클래스에서 HandlerMapping을 처리하도록 구현했다.
  • HandlerAdapterRegistry 클래스에서 HandlerAdapter를 처리하도록 구현했다.

@kyukong kyukong self-assigned this Sep 26, 2022
Copy link

@Youngyoon-1 Youngyoon-1 left a comment

Choose a reason for hiding this comment

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

안녕하세요 유콩!! 2단계 코드 잘 봤습니다!!
역시 유콩답게 꼼꼼하게 코드를 짜주셨네요!!
테스트 코드도 신경써서 리펙토링해주신게 인상적이였습니다 👍
2단계 고생하셨습니다!! 몇 가지 코멘트 남겼는데 확인 부탁드려요!!

@@ -16,8 +16,8 @@ public class HandlerExecution {
private final Object clazz;

Choose a reason for hiding this comment

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

이 멤버필드는 실제 요청을 처리하는 객체일텐데요. 필드이름을 좀 더 명확하게 지어보는건 어떨까요?

Copy link
Author

Choose a reason for hiding this comment

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

앗 생성자에서 받아오는건 controller 로 변경했는데 여기는 빠트렸네요 😅

final HandlerKey handlerKey = new HandlerKey(request.getRequestURI(), RequestMethod.from(request.getMethod()));
log.info("request handler [{}]", handlerKey);
if (!handlerExecutions.containsKey(handlerKey)) {
throw new IllegalArgumentException(String.format("요청한 핸들러가 존재하지 않습니다. [%s]", handlerKey));
Copy link

@Youngyoon-1 Youngyoon-1 Sep 26, 2022

Choose a reason for hiding this comment

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

현재 ManualHandlerMapping의 경우 핸들러가 없는 경우 null이 반환되고 여기서는 예외가 발생하는군요!!
물론 ManualHandlerMapping을 먼저 등록해주기 때문에 별 문제가 없지만 만약 이 순서가 바뀐다면 ManualHandlerMapping의 Handler는 동작하지 않을 것 같네요!!
지금도 좋지만 일관적으로 null 이나 Optional을 반환하도록 하고 registry에서 예외를 던지는건 어떨까요?!

Copy link
Author

Choose a reason for hiding this comment

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

꼼꼼한 리뷰 너무 감사해요 HandlerMapping 을 관리하는 Registry 에서 처리하도록 수정했습니다!

return request;
}

public static HttpServletRequest getRequest(final String path) {

Choose a reason for hiding this comment

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

Suggested change
public static HttpServletRequest getRequest(final String path) {
public static HttpServletRequest getRequest(final String path, final RequestMethod method)

이런식으로 클라이언트에서 인자를 넣도록하는건 어떨까요?!
그러면 하나의 Fixture를 범용적으로 사용할 수 있을것 같아서요!


@DisplayName("annotation 기반 handler adapter 초기화")
@Test
void annotationInit() {

Choose a reason for hiding this comment

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

이 테스트는 요청을 처리하는 핸들러가 잘 동작했는가 를 검증하는 테스트 같은데 이름을 좀 더 명확하게 하는게 어떨까요?!


@DisplayName("annotation 기반 handler mapping 초기화")
@Test
void annotationInit() {

Choose a reason for hiding this comment

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

요청을 처리할 수 있는 핸들러를 반환하는지 검증한다 를 테스트하는 것 같은데 테스트 이름을 명확하게 지어준다면 좋을 것 같아요!!
여기에 더해서 요청을 처리할 핸들러가 없는 경우도 검증해준다면 좋을 것 같다는 생각이 들었습니다!!

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