-
Notifications
You must be signed in to change notification settings - Fork 16
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
3주차 미션 / 서버 1조 - 강지윤 #3
base: main
Are you sure you want to change the base?
Conversation
enum 클래스 생성 (HttpHeader, HttpMethod, URL, Status Code, UserQueryKey)
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.
안녕하세요!
Enum 클래스의 활용과 깔끔한 테스트 코드, 컨트롤러 싱글톤 유지까지,, 정말 깔끔해서 너무 놀랐어요!
다만, 코멘트에서도 적어주셨듯 중복 제거에 대한 리뷰도 조금 남겨드렸으니 참고해보시면 도움 될 것 같습니다!
추가로, Controller에 너무 로직이 집중 된다 싶으면 controller -> service-> repository 구조도 고려해보세요!
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.
forward(String url) 메서드의 의미에 대해서 한번 되짚어 보시면 좋을 것 같아요!
forward: url의 위치 뷰의 파일을 response body에 작성한다.
즉, 파일 read와 Header 세팅을 HttpResponse 내부로 캡슐화할 수 있지 않을까요??🧐🧐
httpResponse.setHeaders(httpHeaders); | ||
|
||
// 로그인 성공 - redirect MAIN_PATH | ||
httpResponse.redirect(path); |
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.
마찬가지로 redirect가 헤더의 Location:path와 status code를 변경함은 고정되어있기 때문에 httpResponse.redirect(path) 메서드 내부로 로직을 분리하면 중복을 제거할 수 있을 것 같아요!🧐
return Arrays.stream(values()) | ||
.filter(m -> method.equals(m.method)) | ||
.findFirst() | ||
.orElseThrow(() -> new IllegalArgumentException(String.format("해당되는 Http Method가 없습니다."))); |
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.
Enum 클래스의 valueOf 메서드 활용해보세요! 👍
} | ||
if (line.startsWith(COOKIE.getHeader())) { | ||
headers.put(COOKIE, line.split(": ")[1].strip()); | ||
} |
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.
조사해야하는 Header가 추가될 때마다 HttpRequest에 까지 와서 Header if문 분기 처리 하는 작업은 단일책임 원칙을 어긴 것 같아요!
HttpHeaders에 생성자로 BufferedReader를 넘겨주어서 처리하는 것은 어떨까요??
추가로 HttpHeader enum 클래스에 메서드를 만들어서 분기 처리를 없앨 수 있을 것 같아요😮
} | ||
|
||
// 200 OK | ||
public void forward(String path) throws IOException { |
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.
forward 메서드가 고정적으로 하는 File I/O 작업과 Content-Length, Content-Type 처리를 이 메서드 안에서 처리하면 훨씬 깔끔해져요!!
// 302 FOUND | ||
public void redirect(String path) throws IOException { | ||
startLine.setStatus(REDIRECT); | ||
writeResponse(); |
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.
forward와 마찬가지!!!
controllers.put(SIGNUP_ACTION.getURL(), new SignUpController()); | ||
controllers.put(LOGIN_ACTION.getURL(), new LoginController()); | ||
controllers.put(USERLIST_ACTION.getURL(), new UserListController()); | ||
} |
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.
static 을 사용해 정적으로 처리하여 스레드가 생성될 때마다 컨트롤러를 생성하는 것이 아닌 싱글톤으로 컨트롤러를 유지해주셨네요!!👍👍👍
싱글톤으로 유지할 수 있는 이유가 컨트롤러가 상태(인스턴스 변수)를 가지고 있지 않기 때문임을 이해하고 계셨으면 좋겠습니다!
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.
테스트 전부 깔끔하고 좋은 것 같아요!👍
흑흑,, 자세한 코드 리뷰 너무너무 감사드려요!!😭😭 |
InputStream에서 read하며 각 요소 파싱 후 저장
url에서 쿼리가 들어오면 path와 query 분리하여 저장
Map으로 관리
empty line으로 body와 구분
body로 쿼리가 들어오면 파싱하여 이용
각 요소를 조합하여 OutputStream에 write
Map으로 관리
외부에서 주입 받음 (각 Controller에서 주입)
empty line으로 body와 구분
Controller에서 주입
각 Controller는 받아온
Http request message
를 해석하여Http response message
를 작성하는 일을 수행Controller마다
Http response message
작성 시 필요한 Header와 body를 set하여 주입각 url별 controller의 mapping을 if문으로 처리하지 않고,
미리 Map을 mapping 해놓고 해당 데이터를 활용