-
Notifications
You must be signed in to change notification settings - Fork 0
4조 그룹 리뷰
- 이미지 파싱에서 다들 문제가 있었는데 시작부터 InputStream을 사용하여 읽은 것이 다행입니다.
- 스프링처럼 인스턴스를 주입하는 것까지 구현하신 것이 인상깊었습니다.
- 다들 클래스를 잘게 나눠서 최소한의 역할을 잘 부여한 것 같습니다.
- UI도 저와 다르게 다들 보기 좋게 만든 것도 인상깊었습니다.
- 어떤 DB를 사용할 지 빈으로 주입을 시도하는 코드도 인상깊었습니다.
- 템플릿 엔진을 별도로 두고, 역할을 분리한 것이 나중에 사용하기 편할 것 같습니다.
- 템플릿 엔진에서 중첩 반복문도 해결하도록 구현한 부분이 인상깊었습니다.
-
이번 주차는 multipart까지 구현하고 다른 분들처럼 reflection 도입 등을 하는 것이 좋을 것 같습니다
특히 Spring 내부를 최대한 보면서 추후에 보강을 한다면 어떤 방식으로 할 지 고민을 해봐야 할 것 같습니다 -
jdbc 엔진 구현 시에 고려해야할 것들이 많다는 것을 알게 되었습니다
특히 Connection 등을 고려하는 것이 중요할 것 같습니다
구현은 이번에 안하더라도 내부 구조나 어떤 방식으로 되어 있는 지는 확인해야 할 것 같습니다 -
문서화나 사진 첨부를 열심히 해야할 것 같습니다.. 리팩토링 중에 서버가 켜지지 않아서…
오늘도 다른 분들의 질문이나 코드로 많이 배워갑니다 ^^
- 컴포넌트 스캔, DI, http 요청으로부터 핸들러 메서드에 전달하기 위한 인자 추출을 다들 깔끔하게 처리한 것 같습니다.
- 현종님은 등록되지 않은 빈 객체의 의존성 주입을 이터레이터를 이용해 깔끔하게 해결한 로직이 인상적이었습니다.
- 승훈님은 핸들러 메서드의 ArgumentResolving을 잘 처리하신 것 같습니다.
- 다들 컴포넌트 스캔에 대해서 잘 신경쓰신 것 같습니다.
- 다들 구조를 챙기면서도 기능 구현을 빠르게 진행하였습니다.
빈을 만들고, 빈을 만들기 위해서 의존성을 자동으로 주입해주신 캠퍼분이 계셨다. 나는 상상만 했지, 실제로 구현하신 분들이 있어 너무 놀랐다. 빈으로 관리하기에 성능상 이점도 있고, 싱글톤이 아니고, 의존하는 값들을 생성할때 넘기기에 테스트하기에도 너무 편할 것 같다.
미션을 진행하던 초창기, 바로 요청을 받기 보다는 필터로 한번 걸러주고, 요청을 처리하는 방식으로 구현하신분들을 많이 보았다. 인증 부분을 처리할때는 편하겠다는 생각이 들었으나, 구현량이 많을 것 같아 잠시 미루어 두었다. 계속 미루다가 사용자 인증 미션이 주어졌고, 현재 나의 프로젝트에는 요청을 처리하는 부분마다 사용자 인증을 하고 있다. 이번 그룹 리뷰에서 필터, 인터셉터로 인증부분을 처리하신 분들이 많았는데, 코드가 너무 깔끔한 것을 확인할 수 있었다. 미션에 치여 구현하기 힘들 것 같지만 한번 노력해 보아야겠다.
sequenceDiagram
participant Client
participant WebServer
participant FilterChain
participant SessionCheckFilter
participant StaticResourceResolver
participant StaticResourceHandler
participant DispatcherServlet
participant HandlerMapping
participant HandlerAdapter
participant Controller
participant ViewResolver
participant View
participant HttpResponseBuilder
Client->>WebServer: HTTP Request
WebServer->>FilterChain: doFilter(HttpRequest)
FilterChain->>SessionCheckFilter: doFilter(HttpRequest, FilterChain)
SessionCheckFilter->>FilterChain: doFilter(HttpRequest)
FilterChain->>StaticResourceResolver: resolveResource(HttpRequest)
alt is static resource
StaticResourceResolver->>StaticResourceHandler: handleRequest(HttpRequest)
StaticResourceHandler->>HttpResponseBuilder: build response
HttpResponseBuilder-->>StaticResourceHandler: HttpResponse
StaticResourceHandler-->>FilterChain: HttpResponse
else is dynamic resource
StaticResourceResolver->>DispatcherServlet: service(HttpRequest)
DispatcherServlet->>HandlerMapping: getHandler(HttpRequest)
HandlerMapping-->>DispatcherServlet: Handler
DispatcherServlet->>HandlerAdapter: handle(HttpRequest, Handler)
HandlerAdapter->>Controller: handleRequest(HttpRequest)
Controller-->>HandlerAdapter: ModelAndView
HandlerAdapter-->>DispatcherServlet: ModelAndView
DispatcherServlet->>ViewResolver: resolveViewName(String viewName)
ViewResolver-->>DispatcherServlet: View
DispatcherServlet->>View: render(Map<String, Object> model)
View->>HttpResponseBuilder: build response
HttpResponseBuilder-->>View: HttpResponse
View-->>DispatcherServlet: HttpResponse
DispatcherServlet-->>FilterChain: HttpResponse
end
FilterChain-->>WebServer: HttpResponse
WebServer-->>Client: HTTP Response
- 다들 큰 흐름은 비슷했습니다.
- 그런데 승훈님의 경우 소켓 처리를 비동기로 하셨던데 I/O 까지 생각하면 꽤 흥미로웠습니다.
- 이게 지금 멀티파트 파싱때문에 기존에 BufferedReader를 쓰셨다가 수정해야 하는 분들이 많던데 저도 이 부분이 좀 힘들었습니다.
- JDBC를 구현하는 단계를 벌써 나가시는 분도 계셨는데 속도에 놀랐고 구현 내용에 또 놀랐습니다.
- 그런데 대부분 리플렉션을 도입해 어노테이션 기반 구현을 하고 계셨다는게 또 재밌네요.