ABOUT ME

-

오늘
-
어제
-
-
  • KOSTA 교육 57일차(Spring, MVC, myBatis, CRUD)
    Review 2020. 6. 24. 00:49

    19. 1. 25(금)

     

    배운 내용

     

    1. Spring MVC
    2. myBatis
    3. CRUD

    1. MVC

    어플리케이션의 확장을 위해 Model, View, Controller로 분리하여 개발하는 방법

    • 컴포넌트의 변경이 다른 영역 컴포넌트에 영향을 미치지 않음
    • 컴포넌트 간의 결합성이 낮아 프로그램 수정이 용이

     

    장점
    • 화면과 비즈니스 로직을 분리해서 작업 가능
    • 영역별 개발로 확장성이 뛰어남
    • 표준화된 코드를 사용하여 공동작업 및 유지보수가 편리함

     

    단점
    • 개발과정이 복잡해 초기 개발속도가 늦음
    • 초보자가 활용하기엔 난이도가 있음

     

    MVC 패턴 구조 순서

    • Dispatcher Servlet : url의 요청을 받아서 연결시켜준다.
    • Handler Mapping(default) : Dispatcher Servlet이 Controller로 매핑하는 방식을 결정
    • Controller : 로직을 처리한다.
    • ModelAndView : view 이름, data를 담는다.
    • ViewResolver : view 타입을 정해준다.
    • View : 받은 data를 출력한다.

     

    요청 처리 순서

    1. Dispatcher Servlet이 requset를 수신 → 어느 컨트롤러에 요청할지 Handler Mapping에게 보냄
    2. Handler Mapping은 Dispatcher Servlet에게 요청을 받아 URL과 Mapping
    3. Dispatcher Servlet은 요청을 Controller에게 전송하여 Controller는 요청을 처리 후 Model을 생성하고 View를 return
    4. ModelAndView 오브젝트는 수행결과를 포함하여 Dispatcher Servlet에 return
    5. ViewResolver가 JSP로 출력하도록 논리적 이름을 실제로 변환
    6. 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를 학습하면서 바뀐 코드들과 실무에서 직접 사용하는 예제를 사용하면서 학습할 예정이다.
    마지막 과목인 만큼 한 주 잘 배워서 파이널 프로젝트 때 적용해야겠다.

    댓글