본문 바로가기
SpringBoot

[Spring Boot] 03. MVC 구조

by 청양호박이 2019. 11. 8.

이번에는 실질적인 코딩보다는 실제로 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-

 

 

 

 

 

 

댓글