1. Spring MVC
MVC는, Model-View-Controller의 약자로 시스템 모듈화 하여 각자의 역할을 수행하도록 한다.
1-1. MVC 동작과정
- 사용자가 웹브라우저를 통해 Controller에게 데이터를 요청 / 전송
- Controller는 요청 받은 데이터를 처리하기 위해 Model에게 전송
- Model은 데이터를 처리 후 Controller에게 반환
- Controller는 모델에게 받은 데이터를 View로 전송
- 최종적으로 사용자가 웹브라우저를 확인
1-2. 프로젝트 생성
각 폴더와 파일의 역할이 헷갈렸는데 정리가 잘 된 포스트를 찾아서 정리해보았다.
https://jaehoney.tistory.com/45
웹 어플리케이션 프로젝트를 생성하면 다음과 같은 폴더가 만들어진다.
- src/main/java
- src/main/webapp
- src/main/webapp/WEB-INF
- src/main/webapp/WEB-INF/view
webapp에는 HTML, CSS, JavaScript, JSP 등 웹 개발에 필요한 코드들이,
Web-Inf에는 웹에 관련된 설정을 모아둔 web.xml 파일이 생성된다.
이때 이미지, 동영상, js, css 파일 등은 반드시 /webapp/resources 또는 /webapp/resources 아래에 폴더를 만들어 그 안에 저장해야 한다.
세미플젝을 진행할 때 이미지 파일을 다른 경로에 저장해 이미지를 띄운다고 애먹었던 적이 있었다.

수업시간에 Board라는 이름의 프로젝트를 만들었는데 해당 프로젝트의 pom.xml 파일의 일부이다.
packaging 태그의 값으로 war(web application archive)을 주었는데 서블릿/JSP을 이용한 웹 애플리케이션 개발을 위한 필수사항이다.
그 외에도 프로젝트에 필요한 기능을 추가했다.



1-3 컨트롤러 구현
2. 스프링 AOP
1-1. AOP(Aspect Oriented Programming)
AOP를 말 그대로 풀어보면 관심(관점) 지향 프로그램이라는 것을 알 수 있다.
어떤 어플리케이션을 만들 때, 어플리케이션이 갖는 주기능과 주기능을 도와주는 보조기능으로 구분할 수 있는데 이를 분리(모듈화)하여 사용하는 방법이다.
모듈화 : 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것
이처럼 모듈화를 하게 되면 코드를 재사용할 수 있을 뿐만 아니라 유지보수에 드는 비용을 절감할 수 있다는 장점이 있다.
1-2 Pointcut
Pointcut은 Advice가 적용될 위치를 선별한다.
Spring AOP는 프록시를 기반으로 하기 때문에 메서드에만 적용이 가능하다는 특징이 있다. 따라서 어느 메서드에 적용을 해줄 것인지 구체적인 Advice 실행지점을 정한다.

3. tiles
Tiles : 웹페이지의 상단메뉴나 좌측메뉴, 하단메뉴 등의 내용처럼 반복되는 부분들을 한 곳에서 관리할 수 있게 도와주는 템플릿 프레임워크
- Tiles는 별도 공유파일 하나를 만들어 Include형식으로 각 페이지에 붙여서 사용하기에 한번만 수정하면 전체 페이지가 모두 반영되어 유지보수 용이하다.
- JSP Include에 비해 조금 더 세분화된 관리 가능하고 ajax처럼 부분적으로만 페이지 새로고침이 가능하다.

위와 같은 형태로 공통으로 사용할 페이지를 tiles를 통해 만들어 준다.
이때, @RequestMapping을 이용해 요청받을 url을 설정하여 어떤 방식으로 요청 받을지 정의한다. 이와 같이 들어온 요청을 특정 메서드와 매핑하여 원하는 페이지를 로딩하게 된다.

위와 같이 src/main/webapp/WEB-INF/tiles/tiles-layout.xml 파일을 생성해 header, content, footer, sidebar 의 기본 레이아웃을 설정해두었다.