이번에는 실질적인 코딩보다는 실제로 Spring Boot를 활용한 Application을 제작할때의 구조에 대해서 알아볼까 합니다. 흔히 MVC구조라고 하는데, 이는 Model-View-Controller의 유기적인 구조입니다. 이는 데이터의 흐름을 각 단계별 체계적인 역할 구분을 골자로하는 디자인 패턴입니다. 사실 MVC에 대해서 논하면 책한권을 가지고도 부족할 거 같아서 여기서는 그냥 개념적인 내용만 다루고자 합니다.
제가 생각하고자 하는 MVC구조입니다. Spring Boot에서 관리하게 되는 MVC는 아래의 4가지 항목을 갖습니다.
- Controller
- Service
- Mapper
[Controller]
- 사용자가 URL을 통해 온 요청을 받고 Response 하는 역할 (View에 전달)
- 해당 역할을 명시하기 위해서 Annotation을 기재함 ( @RestController)
- 인입되는 URL을 분류하기 위한 Annotation을 기재함 ( @RequestMapping(value=" ") )
[Service]
- Controller를 통해서 요청받은 비즈니스 로직을 구현하고, 이를 통해 얻은 결과를 Controller로 전달하는 역할
- 해당 역할을 명시하기 위해서 Annotation을 기재함 ( @Service )
- 로직을 트랜잭션 단위로 처리하기위한 Annotation을 기재함 ( @Transactional )
: 트랜잭션 단위란 - 예를들어 한개의 메소드에 for구분을 통해 DB에 insert하는 로직이 있다면, 진행 중 한개라도
동작에 실패하면 그전에 수행됬던 로직도 원복시키는 단위
[Mapper]
- mybatis 영역으로 java interface와 xml로 구성
- java interface에는 해당 역할을 명시하기 위해서 Annotation을 기재함 ( @Mapper )
- xml에는 실질적인 SQL query문이 기재되며, namespace를 통해 java interface와 연동함
사실 MVC를 설명하기에는 턱없이 부족하지만 실질적인 Application을 만들기위한 기본적인 로직은 설명이 된 것 같습니다. 그럼 다음은 전체 로직에서 돌아다니는 Data 유형에 대해서 알아보겠습니다.
- DTO (Data Tranfer Object)
- DAO (Data Access Object = Entity)
[DTO]
- 각 계층간 데이터를 교환하기 위한 객체
- 계층간 오갈때 변경이 발생
[DAO]
- DB table 필드와 같으며, DB를 통해 조회한 값을 가져오기 위한 객체
- 해당 Data를 DTO에 전달하는데... ModelMapper를 사용함
ModelMapper는 DAO와 DTO를 체계저으로 분리하기 위해서 사용하는데, 이부분은 다음에 더 자세히 다뤄 보기로 하겠습니다. 우선은 초보적인 단계로 "DAO건 DTO건 난 모르겠고, 데이터 모델을 통해서 DB를 쿼리하여 데이터를 가지고 오고 그 모델을 잘 가공해서 View에 전달한다!!" 정도로 하겠습니다.
그렇다면 실제 프로젝트의 폴더 구조를 살펴보겠습니다.
java 영역에는 controller / dto / mapper / service폴더를 만들어주고, resource 영역에는 xml을 위한 main_mapper를 만들어 줍니다. 이제 다됬습니다. 사실은 이렇게 구성만 한다고 Spring Boot가 다 알아주는 것이 아닙니다. 왜냐하면, 저기 폴더들은 사용자가 마음대로 만들었기 때문입니다.
이제 Spring이 이해할 수 있도록 어디에 뭐가 있는지를 datasource설정을 통해서 알려주면 실질적인 application 개발 기본 세팅을 마치게 됩니다.
그럼 다음시간에는 datasource설정 및 테스트를 해보도록 하겠습니다. 감사합니다.
-Ayotera Lab-
댓글