ABOUT ME

-

오늘
-
어제
-
-
  • KOSTA 교육 43일차(JSP MVC Pattern)
    Review 2020. 6. 23. 01:42

    19. 1. 4(금)

     

    배운 내용

     

    1. MVC(모델 2)

    1. MVC(모델 2)

    초창기 사용하던 모델 1 방식에서 발전된 모델로서 모델, 뷰, 컨트롤러 세 영역으로 나눈 패턴이다.

     

    모델 1과 모델 2의 장단점
    • 모델 1 장점 : 고도의 스킬이 필요 없음, 개발 속도가 빠름
    • 모델 1 단점 : 프레젠테이션 로직과 비즈니스 로직이 혼재되면 코드가 복잡해짐
      , 개발자와 디자이너의 작업 분리가 힘듬, 유지보수가 힘듬
    • 모델 2 장점 : 비즈니스 로직과 프리젠테이션 로직의 분리로 애플리케이션이 명료해짐, 유지보수와 확장이 용이, 디자이너와 개발자의 작업을 분리하기 쉬움
    • 모델 2 단점 : 개발자의 높은 스킬이 요구됨

     

    Controller(컨트롤러), Model(모델), View(뷰)의 역할

     

    Controller(컨트롤러) : 데이터를 처리하는 역할

    • Servlet(서블릿)이 컨트롤러의 역할을 담당한다.
    • (웹 브라우저)클라이언트 요청을 받는다 → (웹 브라우저)클라이언트가 어떤 기능을 요청했는지 분석 → 분석에 맞는 비즈니스 로직을 처리하는 모델을 호출한다 → 모델을 가공하고 request 혹은 session의 setAttribute 메소드로 속성에 저장한다(이렇게 저장된 값은 JSP에서 사용한다) →  처리 결과를 보여줄 JSP를 선택한 후 해당 JSP를 forward한다.

     

    Model(모델): 웹 브라우저 요청에 따라 필요한 기능을 처리하는 역할

    • 컨트롤러가 요청한 작업을 처리한 후 그에 대한 알맞은 결과를 컨트롤러에게 전달한다.
    • 컨트롤러의 요청을 받는다 → 비즈니스 로직을 수행한다 → 수행한 결과를 컨트롤러를 거쳐 뷰에 전달한다.

     

    View(뷰) : 요청한 결과보여주는 역할

    • JSP로 구현한다.
    • 비즈니스 로직과 관련된 코드가 없다. 하지만 컨트롤러에서 request 혹은 session에 저장한 데이터를 사용하여 알맞는 결과를 출력해준다.

     

    MVC 진행 과정
    1. Client 요청
    2. Controller(Servlet)이 url 판별
    3. Action생성 → Model(DAO) 호출 → Mybatis → DB 호출
    4. View의 path 결정, View에 data 전달
    5. 화면에 View 출력

     

    MVC 예제(CRUD게시판)

    전제 : Mybatis, JNDI, EL, JSTL을 사용한다.

     

    • *(페이지 내에 있는 모든 것).do 시 URL Mapping을 할 수 있도록 Servlet 생성한다.

     

    • html을 실행 했을 시 list.do로 이동하는 Script문

     

    • sendRedirect의 여부와 path를 정하기 위해 생성
    • boolean값을 통해 Redirct가 참이면 실행되고 아니면 dispatcher가 되게끔 코딩한다.

     

    • execute 추상메소드를 가지고 각 기능별 클래스마다 override해서 사용하게끔 선언

     

    • doProcess를 만들어 doGet과 doPost 두 메소드를 한 번에 사용할 수 있도록 선언
    • 페이지를 이동하려면 경로를 알아 해당 View를 출력해줘야 하기 때문에 경로를 알아내는 코드를 작성한다
    • URI를 찾기 위한 함수를 requestURI에 담고, 해당 URI를 contextPath로 경로를 담고 command에 URI에 substring을 통해 list로 가는 list.do를 구한다.

     

    • ActionForward.java에서 redirect 여부의 조건을 해주기 위해 forward가 null이 아니도록 하려 if 조건을 걸어주고 Redirect가 true라면 sendRedirect해주고 아니라면 dispatcher되게 해준다.

     

    • forward변수에 ActionForward 객체를 생성한다.
    • list으로 가기 위해서 setRedirect에 false로 주어 list.jsp로 게시글을 출력할 수 있게 이동하도록 한다.

     

    • 게시글을 넣기 위해서 작성한 DAO 객체를 선언하고 Board 객체를 선언하여 Form에서 입력한 값들을 set으로 담아 dao의 insertBoard로 담는다.
    • 위와 동일하게 경로 방식과 경로를 정해주기 위해 ActionForward 객체를 사용한다.
    • command가 insert_action.do와 동일하다면 insertAction 객체를 action 에 선언한다.
    • 자바빈인 forward에 객체의 구현된 execute 메소드를 호출하여 실행시킨다.

     

    • 먼저 form태그에서 입력 후 list.do로 이동하여 URL 체크를 Controller가 진행하고 맞다면 Action을 하여 forward한다.
    • DAO 객체를 생성하고 search 자비 빈을 불러와서 parameter를 set 해준 뒤 list에 해당 함수를 담고 list를 setAtrribute한 후 list.jsp로 이동하여 리스트를 출력한다.

     

    • 제목을 누르면 detail.jsp?seq=${board.seq}로 board에 저장된 seq의 정보를 가져간다.

     

    • DAO 객체를 생성하고 seq를 형변환 하여 가져온 뒤 showdetail 메소드를 가져온다.
    • 그리고 뒤로가기를 만들어 list.do로 이동하여 기존의 list.do로 돌아온다.

     

    • 상세보기에 들어가 updateForm으로 seq를 가지고 이동한다.
    • 그리고 제목과 내용을 수정하면 update.do로 이동한다.
    • 그렇기 때문에 여기선 View가 2개이기 때문에(Form, list) 2개의 Action이 필요하다.

     

    • Form태그로 가는 Action이며 seq를 가져가기 때문에 seq를 선언하고 board에 담아 setAttribute를 하여 updateForm.jsp로 가져간다.

     

    • 수정하는 Action을 하는 클래스로 DAO를 호출하고 Board객체를 호출하여 Form에서 수정한 Parameter를 set한다. 이 때 seq도 set해주어야한다.
    • 그리고 메소드를 호출하여 list.do로 이동하면 된다.

     

    • 삭제 버튼을 누르면 delete.do로 이동한다.

     

    • DAO 객체를 생성하고 seq를 가져온 뒤 deleteBoard 메소드를 호출하여 list.do로 이동한다.

    오늘 교육 간 느낀점

    오늘은 실무에서 사용하는 MVC 를 배우고 게시판에 적용해보았다.
    기존의 모델 1은 코드가 바로 보이고 직관성이 있어서 코딩하기 상대적으로 편했는데 MVC는 클래스가 너무 많다보니 서로 엇갈리고 어렵다는 생각이 들었다. 더군다나 비전공이다 보니 이런 종류에 익숙하지도 않아서 골머리를 앓았다.

     

    그래도 자기 클래스 마다의 역할이 확실히 정해져 있어서 가독성이 좋아졌다.
    하지만 정말 많은 작업을 필요로 하다 보니 생각할 부분도 많고 고난도의 숙련이 필요할 것 같다. 하지만 차근차근 하다보면 결국 해결할 수 있지 않을까 생각한다. 주말에는 해당 내용들을 복습하고 차근차근 혼자 자체 게시판을 만들어볼까 한다.

     

    댓글