MVC (Model - View - Controller) 개요
소프트웨어 개발에서 사용되는 디자인 패턴 , 모델 뷰, 컨트롤러로 분리하여 개발하는 방법론
MVC의 장점
☞ 유연성 : 각각의 구성 요소를 분리하여 개발하기 때문에 각 부분을 독립적으로 수정하거나 확장하기 용이함
☞ 유지보수성 : 각 구성요소가 분리되어 있기 때문에 코드의 가독성이 좋고 유지보수에 용이함
☞ 확장성 : 새로운 기능이나 모듈을 추가하기가 용이함
☞ 개발자 간의 커뮤니케이션 효율성을 높일 수 있음
Model (모델)
데이터 처리를 담당하며 데이터베이스 또는 외부 소스와 상호작용을 처리
☞ Controller에게 받은 데이터를 가공(조작)하는 역할 수행 ( 값, 기능을 가지는 객체 )
View (뷰)
사용자에게 데이터를 시각적으로 보여주기 위한 파일들이 있는 곳 ex. index.jsp / board.jsp
☞ Controller에게 받은 Model의 데이터를 사용자에게 시각적으로 보여주기 위한 역할 수행 ( 화면 )
Controller (컨트롤러)
모델과 뷰 사이에서 상호동작을 관리하며 대부분의 데이터 가공 처리는 컨트롤러에서 맡아 진행됨
사용자의 입력을 받아 모델에 전달하고, 전달받은 데이터를 감지하여 뷰에 전달함
☞ Controller는 Model과 View의 역할을 분리하는 중요한 요소임

MVC - View
View는 아래와 같이 css, js, jsp 등 유저에게 화면을 볼 수 있도록 시각적으로 표현하고 사용자의 입력을 받는
코드들이 모여있는 공간

MVC - Controller
모델과 뷰 사이에서 상호작용을 관리하고 데이터 가공 처리 등의 작업을 맡아 진행하는 부분으로써,
사용자가 요청한 URL을 매핑하여 특정 작업을 진행함

MVC - Model
Model에는 Service, DAO, VO, DTO, Entity가 있음
☞ Service
컨트롤러와 DAO 사이에 존재하며 비즈니스 로직을 처리하는 역할을 수행함
일반적으로 데이터 검증, 데이터베이스 연결 등의 작업을 하게 되며 서비스에서의 메소드는 각각의 기능(등록,수정,삭제 등)으로 나눠 생성함
ex) 데이터베이스 연동에 관한 코드 작성 DAO에서 수행한 데이터베이스의 성공 여부 검증
☞ DAO
데이터베이스에 연결하여 쿼리를 실행하는 등 데이터베이스와 관련된 작업을 수행함
☞ DTO
privat을 가진 변수들을 setter / getter를 사용하여 데이터의 구조(변수)를 표현하는 객체가 됨
☞ VO
성자를 사용하여 객체를 생성할 때에 데이터(변수)를 저장함
setter를 가지지 않기 때문에 객체를 생성한 이후에는 데이터(변수)를 변경할 수 없으며 오로지 읽을수만 있는 read-only 속성을 가짐
일부 사람들은 DTO(=VO) 라고 표현하지만 setter를 가지지 않음으로써 갖게되는 read-only 속성으로 인해 “VO는 DTO와 같다” 라는 표현은 잘못된 표현
☞ Entity
DB에 저장된 테이블과 매핑이 되어 인스턴스 형태로 존재하는 데이터를 가짐 실제 DB의 테이블과 매핑이 되기 때문에 자주 변경되어서는 안됨
DTO와 상당히 유사해 보이지만 이러한 영속성을 갖는 것 때문에 만약 Entity를 사용해야 한다면 DB Layer에서 쓰이며 데이터가 자주 변경되는 View, Controller는 DTO를 사용함
모델의 패키지는 아래와 같은 구조를 가질 수 있음
* 패키지의 구조는 회사 또는 개발자의 스타일마다 차이가 있음
