13주차 개념 정리
2020. 11. 22. 22:02ㆍfront-end
- 클라이언트의 특정 웹페이지에 대한 요청이 왔을 때 Spring framework 동작원리를 클라이언트에게 응답할 때까지 단계별로 정리하기(DispatcherServlet, HandlerMapping, Controller, Service, DAO, VO, ViewResolver, View 요소를 이용할 것)
- client가 서버에 request를 보냅니다.
- DispatcherServlet이 보낸 request를 중간에서 가로챕니다.
- DispatcherServlet이 HandlerMapping에 요청을 보낼 Controller를 결정하게 합니다.
- 매핑된 컨트롤러에 맞게 request를 처리할 메서드로 request를 보냅니다.
- controller에서 request를 처리할 수 있는 service를 받아서 해당 처리 logic을 service에 넘깁니다.
- service에서 request를 위한 코드들을 담당하여 db에 access할 시 DAO를 받아서 DAO에 db처리를 넘깁니다.
- DAO는 sql쿼리를 보내서 db에 저장된 data를 받습니다.
- 받은 data를 DAO가 VO를 통해 service에 보내줍니다.
- data를 받은 service가 해당 logic들을 처리합니다.
- service가 logic들을 실행하고 난 결과를 controller에 보냅니다.
- 결과를 받은 controller가 결과를 model에 넣거나 어떤 view를 출력할지 등의 정보를 DispatcherServlet에 보냅니다.
- DistpatcherServlet이 controller로 부터 받은 뷰의 정보를 ViewResolver에 보냅니다.
- ViewResolver가 해당 JSP에 대한 정보를 Dispatcher에게 보냅니다.
- DispatcherServlet이 해당 view에게 render를 요청하고 view는 이에 응하는 logic을 처리합니다.
- web.xml root-context.xml servlet-context.xml 세 파일의 차이점에 대해 조사하기
- web.xml: 프로젝트 초기 설정 구성 파일
- root-context.xml: view와 무관한 작업 처리 파일(예 db 접근)
- servlet-context.xml: request 관련 처리 파일 (예 view)
- 기존에 MySQL 접속한 방식과 JdbcTemplate을 사용하여 접속하는 방식 차이점에 대해 정리할 것
- JdbcTemplate 전: JDBCUtil과 같이 파라미터 이름이 정해진 JdbcTemplate을 사용합니다. 그리고 간단한 Jdbc주입방법을 사용하고 DataSource를 주입하였습니다.
- JdbcTemplate 후: 생성자를 주입하고 UserMapper class를 따로 빼서 lambda로 처리를 하였으며 사용자 리포지터리의 인터페이스를 생성하여 사용을 하였습니다. 이는 JPA 사용을 고려한 것으로 mocking하기 쉬워집니다. 그리고 예외처리까지 들어있습니다.
- 의존성 주입(Dependency Injection): 어떤 클래스에서 다른 클래스를 내부의 변수로 사용하는 것 같이 내부에서 만든 변수를 외부에서 넣어주는 것을 의존성 주입이라고 합니다.
- @Autowired vs @Inject
- 의존성 주입을 위한 annotation들로 Autowired와 inject 둘 다 필드, 생성자, setter에 붙일 수 잇으며 필드, setter에 붙여서 사용할 경우 반드시 기본 생성자가 정의되어있어야 한다는 공통점이 있습니다. 대신 autowired의 @Qualifier는 태그의 value값을 지정해야하고 <qualifier>가 필요한 데에 비해 inject의 @named는 빈 이름을 지정하므로 xml 설정파일이 다소 짧아집니다. 그리고 xml 설정파일에 추가적으로 설정할 것이 없습니다.
'front-end' 카테고리의 다른 글
13주차 내용 정리 (1) | 2020.12.11 |
---|---|
13주차 과제 (0) | 2020.12.10 |
13주차 실습 (0) | 2020.11.22 |
11주차 실습 (0) | 2020.11.15 |
개인 프로젝트 2 소스코드 + 수행내용 (0) | 2020.11.08 |