-
KOSTA 교육 57일차(Spring, MVC, myBatis, CRUD)Review 2020. 6. 24. 00:49
19. 1. 25(금)
배운 내용
- Spring MVC
- myBatis
- CRUD
1. MVC
어플리케이션의 확장을 위해 Model, View, Controller로 분리하여 개발하는 방법
- 컴포넌트의 변경이 다른 영역 컴포넌트에 영향을 미치지 않음
- 컴포넌트 간의 결합성이 낮아 프로그램 수정이 용이
장점
- 화면과 비즈니스 로직을 분리해서 작업 가능
- 영역별 개발로 확장성이 뛰어남
- 표준화된 코드를 사용하여 공동작업 및 유지보수가 편리함
단점
- 개발과정이 복잡해 초기 개발속도가 늦음
- 초보자가 활용하기엔 난이도가 있음
MVC 패턴 구조 순서
- Dispatcher Servlet : url의 요청을 받아서 연결시켜준다.
- Handler Mapping(default) : Dispatcher Servlet이 Controller로 매핑하는 방식을 결정
- Controller : 로직을 처리한다.
- ModelAndView : view 이름, data를 담는다.
- ViewResolver : view 타입을 정해준다.
- View : 받은 data를 출력한다.
요청 처리 순서
- Dispatcher Servlet이 requset를 수신 → 어느 컨트롤러에 요청할지 Handler Mapping에게 보냄
- Handler Mapping은 Dispatcher Servlet에게 요청을 받아 URL과 Mapping
- Dispatcher Servlet은 요청을 Controller에게 전송하여 Controller는 요청을 처리 후 Model을 생성하고 View를 return
- ModelAndView 오브젝트는 수행결과를 포함하여 Dispatcher Servlet에 return
- ViewResolver가 JSP로 출력하도록 논리적 이름을 실제로 변환
- View에서 출력
Maven 세팅
- Spring MVC : mvc를 사용하기 위해 필요
- inject : @inject 의존성 주입 어노테이션을 주기 위해 필요
- validator : @valid, @InitBinder 어노테이션 주기 위해 필요
- Spring jdbc : DB연동을 위해 필요
- mybatis : xml 사용을 위해 필요
- mybatis-spring : spring과의 연동을 위해 필요
DispatcherServlet 세팅
- springapp인 servlet-name을 선언
- mapping시 동일한 name을 선언하여 준다.
- url-pattern은 /를 주어 모든 요청에 대해 Dispatcher Servlet이 처리하는 URL Mapping패턴을 정의.
- web.xml에서 주었던 name으로 xml 생성
- context 태그를 이용하여 kosta 패키지 안의 어노테이션을 scan한다.
- mvc 태그를 이용하여 Mapping되는 Controller가 없어도 Handler가 default로 빈 객체로 등록되어 요청을 전달.
- ViewResoler는 Controller가 넘긴 view 이름을 받아 view를 찾는다.
- prefix : 경로, suffix : 타입
한글처리
- filter 태그를 통해 한글처리
ModelAndView예제
- getMessage 메소드에서 String타입을 return한다.
- @Controller로 Controller인 클래스를 지정해주고 setter를 통해 의존성 주입을 해준다.
- @RequestMapping을 통해 URL 지정을 해주고 ModelAndView 객체를 생성하여 view의 이름과 메세지의 data를 담아 return한다.
- message라고 정한 data를 가져온다.
Model 예제
- board_list로 가는 url을
- parameter로 Model을 선언한다.
- dao로 Mapping한 list를 model 함수인 addAttribute를 사용하여 list에 담는다.
- view에 return한다.
command객체 예제
form에서 입력받은 데이터를 받기 위한 객체로 command객체의 필드 변수명과 같을 때 사용한다.
- input 태그에 DTO에 선언한 필드명과 같은 name을 선언한다.
- 파라미터에 Form에서 입력한 Board객체를 선언해준다.
2. Mybatis
DB와 연동하기 위하여 사용하는 방법
- 위와 같은 형식으로 server.xml에 기입한다.
- sqlSessionTemplate을 사용하기 위해 위와 같은 과정을 거친다.
- 최종적으로 sqlSessionTemplate를 사용하여 Mapping한다.
3. CRUD
CRUD(insert, read, update, delete)를 Spring을 이용하여 구현한다.
- 한글처리, DB연동, Dispatcher Servlet, Maven 등 세팅이 완료되었다고 가정한다.
- Mapping할 CRUD의 쿼리문이 있는 xml파일이다.
- select 제외 모든 DML에는 parameterType을 선언한다.
- 추가적인 쿼리에 대한 설명은 생략한다.
- CRUD에 해당되는 추상 메소드들을 Mapping할 interface이다.
- Serializable한 DTO객체를 생성한다.
- @Repository를 사용하여 빈 등록을 하여 Container에 객체로 만든다.
- @Autowired를 통해 의존성 주입을 한다.
- sql 객체를 생성한 sqlTemplate로 Mapping한다.
- 클래스에 @Controller를 선언하여 Controller임을 알려주고 @RequestMapping을 통하여 URL Mapping을 해준다.
- 그리고 String을 이용하여 바로 view로 return한다.
- 각 메소드별 data를 받는 파라미터에 따라 Mapping한다.
오늘 교육 간 느낀점
오늘은 Spring MVC와 CRUD를 학습하였다. JSP와는 또다른 느낌이었고 구성 방식과 진행 방식이 비슷하면서도 많이 달라서 이해하는데 애를 먹었다.
하지만 구조 자체는 비슷해서 익숙해지는데 큰 시간이 걸리진 않았고 세팅 후 CRUD를 시작했을 때 적응이 안되서 조금 힘들었지만 간단한 코드와 data 전달 방식으로 JSP보다 간편하게 구현할 수 있었다.다음 주는 Spring의 최신 버전인 5를 학습하면서 바뀐 코드들과 실무에서 직접 사용하는 예제를 사용하면서 학습할 예정이다.
마지막 과목인 만큼 한 주 잘 배워서 파이널 프로젝트 때 적용해야겠다.'Review' 카테고리의 다른 글
KOSTA 교육 59일차(Spring, JUnit, DB, myBatis, log4jdbc-log4j2, MVC) (0) 2020.06.24 KOSTA 교육 58일차(RequestParam, ModelAttribute, RESTful, PathVariable, tiles, File Up/Download, JSON, AOP, Transaction) (0) 2020.06.24 KOSTA 교육 56일차(Spring, DI, AOP) (0) 2020.06.24 KOSTA 교육 55일차(Semi-Project 회고) (0) 2020.06.24 KOSTA 교육 54일차(Semi-Project, Ajax, jQuery, update) (0) 2020.06.24