웹 프로그래밍을 해본적은 있으나,
아파치-톰캣위에 JSP와 Oracle DB연동하는 수업을 듣고 과제를 한 것이 다였다.
(라떼는 말이야....이클립스에서...톰캣을 깔아서..)
MVC 모델을 새롭게 공부하면서
MVC 패턴의 웹 프로젝트를 시작해보고자 한다.
특히 View와 Controller를 분리해서 구성할 것이다.
프로젝트 명은 핑퐁_프로젝트.
이 시리즈의 프로젝트는 정보전달 보다는
웹페이지 구현을 위해 SpringBoot를 공부한 내용을 정리하는 포스팅이 될 것이다.
(부정확한 내용이 있다면 댓글 부탁드립니다!)
- MVC 패턴이란? 🙄
Model-View-Controller 의 약자로,
프로젝트에서 구성요소들을 3가지로 구분한 패턴을 말한다
View는 사용자가 직접 접근하는 UI. FrontEnd 역할의 구성요소이다
Model은 DB를 조회, 조작하는 구성요소이다
Controller는 View와 Model의 중간에서 흐름을 제어하거나 사용자의 요청을 처리는 하는 등의
비즈니스 로직을 처리하는 BackEnd 역할의 구성요소를 뜻한다.
MVC패턴도 Model01과 Model02로 분류될 수 있다.
Model01은 예전 방식인,
jsp파일에 html/CSS의 FE와 java의 BE 코드가 모두 존재하는 패턴이다.
(혼종...예전에는 이렇게 웹프로그래밍을 했었다.)
반면에 Model02는 FE와 BE의 부분을 확실히 나눠서
기존 레거시 프로젝트보다 유지보수에 유용하며 기능 확장에도 편리한 패턴이라고 한다.
Model02 패턴이 무조건 좋은 개발 패턴이라고 할 수 없겠지만,
이번 핑퐁 프로젝트는 MVC Model02 패턴을 활용하여 개발해보고자 한다.
- main.jsp 실행 프로세스 on SpringBoot 👀
1. url: 'localhost:8888/pingpong/main' 브라우저에 입력
2. SpringBoot 내부에서 dispatcher servlet이 먼저 실행됨
3. 전체 파일 중 @RestController, @Controller 를 탐색함
4&5. Handler Adapter가 @Controller 를 가진 ViewController.java를 실행하고
6. @RequestMapping(main) 어노테이션의 메소드 실행. 'main'이라는 String 값 리턴
view name은 리턴 값과 application.properties에 설정된 prefix, suffix 값이 합쳐진 값
7. view name 해당되는 값을 view resolver가 찾음
8&9. 최종적으로 main.jsp View가 Response로 전달
- 서비스 구상 및 Controller,Model 프로세스 😵
일단, 이 프로젝트에서 기능은 크게 3가지 (+로그인/회원가입 기능)
1. 자유게시판 기능
2. 유튜브 영상 리스트 기능
3. 탁구장 위치 검색 기능
모든 컨트롤러와 모델은 위와 같은 구조와 프로세스로 동작한다.
* 이 프로젝트에서 DAO 클래스는 따로 만들지 않고 Mapper 클래스로 구성할 것이다.
[ApiController.java] annotation - @RestController, @Controller.
dto와 Service 클래스의 객체를 생성하여 호출한다
@PostMapping, @GetMapping, @RequestMapping 등의 어노테이션으로
리퀘스트 메쏘드 방식에 따라 Service 객체의 다른 함수로 연결시킨다.
--->
[Service.java] annotation - @Service
Mapper 인터페이스의 객체를 생성, 호출 하여 DB 쿼리문 수행한 값을 받는다.
ApiController로부터 호출되어 실질적인 비즈니스 로직을 수행한다.
--->
[Mapper.java] annotation - @Mapper
Mapper.xml 에 정의된 쿼리문을 id값을 이용하여 호출한다
->
[Mapper.xml]
MySQL DB에서 사용하는 resultMap, select 등의 쿼리문이 정의되어 있다
이 외에 javascript, jsp 파일에 부가기능을 정의한다.
(복잡하다...)
다음 포스팅은 sts에서 프로젝트 생성, mybatis 환경설정, gradle 설정 등을 해볼 것이다.
[참조한 블로그]
https://m.blog.naver.com/jhc9639/220967034588
https://pjh3749.tistory.com/89