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 구현하기 - 3단계] 디노(신종화) 미션 제출합니다. #611

Merged
merged 11 commits into from
Sep 25, 2023

Conversation

jjongwa
Copy link
Member

@jjongwa jjongwa commented Sep 25, 2023

안녕하세요 그레이! 디노입니다아아아🦕🦖

3단계 제출이 많이 늦었네요.. 조금 더 서둘렀어야 했는데.. 변명의 여지가 없습니다.

우선 요구사항 만족을 최우선으로 두었구요..! 테스트 부분을 조금 더 고민해 보려 했는데, 세션을 건드리는 컨트롤러 부분은 아직 어떻게 짜야할 지 모르겠어서 일단 두었습니다..

userController 사용하는 쪽은 다음과 같이 출력됩니다.!
image

이번 리뷰도 잘 부탁드려요!🙇🙇🙇

@jjongwa jjongwa requested a review from Kim0914 September 25, 2023 06:54
@jjongwa jjongwa self-assigned this Sep 25, 2023
@sonarcloud
Copy link

sonarcloud bot commented Sep 25, 2023

SonarCloud Quality Gate failed.    Quality Gate failed

Bug A 0 Bugs
Vulnerability B 1 Vulnerability
Security Hotspot A 0 Security Hotspots
Code Smell A 14 Code Smells

52.4% 52.4% Coverage
0.0% 0.0% Duplication

warning The version of Java (11.0.20.1) you have used to run this analysis is deprecated and we will stop accepting it soon. Please update to at least Java 17.
Read more here

idea Catch issues before they fail your Quality Gate with our IDE extension sonarlint SonarLint

Copy link

@Kim0914 Kim0914 left a comment

Choose a reason for hiding this comment

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

안녕하세요 디노, 그레이입니다 ㅎㅎ
예비군 다녀오신다고 고생많으셨어요 !

3단계 구현도 너무너무 잘 해주셔서 크게 수정할 부분이 없는 것 같아요.
제가 미션하면서 궁금했던 부분이 있어서 코멘트로 남겨보았습니다 ~
디노의 생각이 궁금해서(개인적인 사심) 이 부분만 확인하고 바로 approve 하겠습니다 !

Comment on lines +18 to +20
if (model == null || model.isEmpty()) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
Copy link

Choose a reason for hiding this comment

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

404 체크까지 꼼꼼해서 좋습니다 ㅎㅎ

Comment on lines +25 to +26
dispatcherServlet.addHandlerMapping(new AnnotationHandlerMapping("com.techcourse.controller"));
dispatcherServlet.addHandlerAdapter(new AnnotationHandlerAdapter());
Copy link

Choose a reason for hiding this comment

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

ServletInitializer를 이런 방식으로 사용해볼 수 있네요..!!

어떻게 사용할 수 있을지 궁금했는데 좋은 아이디어 얻어갑니다 ㅎㅎ

@Override
public String execute(final HttpServletRequest req, final HttpServletResponse res) throws Exception {
@RequestMapping(value = "/login", method = RequestMethod.POST)
public ModelAndView execute(final HttpServletRequest req) {
Copy link

Choose a reason for hiding this comment

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

제가 고민했던 내용을 한번 남겨봅니다 ㅎㅎ (반영 XXX)

이번 3단계를 진행하면서 컨트롤러의 반환타입을 모두 ModelAndView로 해주는것이 적절한가라는 생각이 들었습니다 !

지금 상황에서는 컨트롤러가 ModelAndView가 아닌 다른 타입을 반환하면 예외가 발생하는데.. 그러면 ModelAndView를 반환하지 않는 컨트롤러를 처리할 수 없는 프레임워크가 정상적인가? 라는 의문이 들더라구요 !
왜냐하면 저희도 컨트롤러를 작성할 때 반환타입을 고려하지 않고 작성한다고 생각해요.

그래서 각 컨트롤러에서는 원하는 타입을 반환하도록 하고 다른 부분(어댑터)에서 ModelAndView로 바꿔보려는 시도를 했지만 돌아는 가는데 코드가 너무 지저분해서 원래대로 돌렸습니다 🥲 하드 코딩을 할 수 밖에 없더라구요. (if object instanceOf String ... 등등)

어쩔 수 없이 저도 각 컨트롤러들을 ModelAndView로 반환하도록 우선 구현했습니다.
스프링부트에서는 반환 타입에 맞도록 변환해주는(핸들러 매핑처럼) 클래스가 있더라구요 !

제가 고민한 부분인데 한번 고민해보면 좋을 것 같아 주저리 주저리 남겨봅니다 ㅎㅎ
디노는 어떻게 생각하시는지도 궁금하네요 !

Copy link
Member Author

Choose a reason for hiding this comment

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

if (result instanceof ModelAndView) {
     return (ModelAndView) result;
}

if (result instanceof String) {
     return new ModelAndView(new JspView((String) result));
}

대충 HandlerAdapter에서 요런 분기문으로 하드코딩 하는게 지저분하다고 생각하신건가요..!

음 제가 봤을땐 충분히 괜찮다고 느껴져요..!
컨트롤러에서 하지 않는다면 어디서 하던 들어가야 하는 로직인 것 같구요.

해당 로직을 통해 반환타입을 신경 안써도 된다는 장점이 생긴다면 충분히 고려해 볼 만한 가치가 있다고 생각합니다!

실제로 이번에 해당 방식으로 구현한 크루도 있더라구요! https://github.com/woowacourse/jwp-dashboard-mvc/pull/570/files#r1335799296

저는 생각해보지 못한 부분이었는데, 그레이 덕분에 한 번 더 생각해보게 됐어요!ㅎㅎ 감사합니다!!

Copy link

Choose a reason for hiding this comment

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

좋은 레퍼런스까지 !!
감사합니다 ㅎㅎ

@jjongwa
Copy link
Member Author

jjongwa commented Sep 25, 2023

답변을 빨리 남기려고 했는데 시간이 많이 늦어졌네요..

그레이가 고민한 부분을 공유해 주셔서 저도 새로운 방향으로 생각해 볼 수 있는 기회가 됐어요! 정말정말 좋은 리뷰 감사합니다ㅎㅎ

변경사항은 없고 답글만 남겼습니다!

Copy link

@Kim0914 Kim0914 left a comment

Choose a reason for hiding this comment

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

디노 ㅎㅎ 늦은 시간까지 고생많으셨습니다 👏

남겨주신 코멘트도 확인했습니다 !
다음 미션도 뽜이팅이에요 😎

@Kim0914 Kim0914 merged commit 2d2dfa5 into woowacourse:jjongwa Sep 25, 2023
1 of 2 checks passed
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