Spring framework MVC를 사용하여 웹개발을 진행하면서,
Package/Class 구조를 어떻게 구성해야 많은 고민을 하게 된다.
그동안 web을 개발하면서 느끼는것은 정답은 없으며 어떻게 만들든지 결과만 잘나오면 된다.
코드를 이쁘장하게 해도 결과물이 이쁘지 않으면 오류이다.
개발은 경험이 중요하듯, 그동안 개발해왔던 패턴을 정리하기로 하였다.
아래 내용은 멍멍돌이야 기준이며 MVC패턴에 맞게 Class layer단위 규칙을 정의한 것인다.
1. Package 분리
- 업무(URL)단위별 패키지 정리
업무 단위로 패키지를 분리할경우, URL단위로 소스들이 나뉘기 때문에 찾기가 편리하다.
그러나 업무단위가 너무 많을 경우 패키지가 많아지게 된다.
기본적으로 MVC 패턴을 사용할때, bean/controller/dao/entity/service 별로 패키지를 구성을 한다.
상위단에 업무단위로 패키지가 구성이 되면, 개발단위/패키지별 개발단위가 쪼개지기 때문에 편리하다.
- MVC단위로만 패키지 정리
업무단위별 패키지는 사용하지 않고,
bean/controller/dao/entity/service 만으로 구성을 하게 된다.
업무단위를 구분짓기위해서는 Class명에 명확한 이름이 주어져야되며,
Class 명에 따라 리스트 출력되는 목록이 정해지게 된다.
보통 가나다 순이지 않을까..
bean/entity class인경우는 너무많은 class가 생기게 마련인데 tree구조로 소스를 찾을때문 불편하게된다.
요즘은 이클립스 보단, 인텔리j를 많이 사용한다.
워낙 툴이 좋다보니 단축키로 소스를 금방 찾지만,
Tree 목록을 보며 하나씩 찾을때는 업무별 패키지가 없으며 불편하게 느껴진다.
2. MVC 흐름도
View->Controller->Service 흐름간에는 vo class 사용하여 데이타를 주고 받는다.
service->dao , dao에 파라미터값을 넘겨줄때는 HashMap를 정의해서 값을 parameter를 넘겨준다.
dao->service, dao에서의 결과물은 entity class를 생성하여 result type으로 전달한다.
2. MVC 패키지 단위
MVC란 model, view, controll 단위로 class를 나뉘며 이구조는 변함이 없다. 기본바탕이 되는 설계는 변화가 없이 좀더 편리하게 변화는 패턴이 생겨나고 없어지지만, 기본적인 패턴이 가장 좋은것 같다.
개발을 하면서 항상 bean/controller/dao/entity/service 단위로 패키지를 구성한다.
- bean
VO class 모음이며, 단순히 View에 전달되는 object 또는 View에서 controll에 전달되는 object 이다.
vo 개체는 view단에서 사용되는 object를 기준으로 생성되며, DB 결과물하고는 별개로 운영이 되어야한다.
이렇게 entity와 분리하여 사용되는 이유는 view에서 사용되어지는 데이타 값은 비즈니스로직에 의해 가공이 되며
DB에서 로딩된 데이타가 view에 맞게 정의하기 위해서 entity와 별개로 운영/설정을 하고 있다.
- controller
view에서 전달받은 정보를 비지니스로직 Service 단에 전달하고, view로 아웃풋한다.
view단에서 request 호출되는 비즈니스 로직(service) 단하고 연결을 해주는 중계 역활을 하게 된다.
아웃풋 종류는 보통, modelview를 사용하는 jsp 페이지나 Ajax같은 rest호출되어 json으로 아웃풋처리한다.
- dao
DB관련된 쿼리문을 실행/정의 한다.
Mybatis를 많이 사용되어지므로, Mybatis Mapper를 설정한 부분이다.
- entity
쿼리 결과에 따른 result type형태로 정의하며, select에 결과물 기준으로 단위 class를 생성하여 사용한다.
- service
비즈니스 로직에 해당하는 코드를 작성한다.
controller에 서 넘온다 값을 가공 또는 생성하여, dao단에 전달한다.
4. 트랜젝션 처리
Spring Framework에 설정에서, Service 단의 함수명을 insert/update/delete 로 시작되는 함수명은 트랜젝션이 설정되게 셋팅한다.
'Programing' 카테고리의 다른 글
지겹다. (0) | 2020.12.10 |
---|---|
logrotate를 사용하여 tomcat catalina.out 로그 파일 짜르기 (0) | 2020.04.18 |
리눅스 Centos 7 부팅시 명령어 자동실행 방법 (0) | 2020.04.18 |
Windows에서 tail명령어 사용하기 (0) | 2020.03.16 |
Tortoise SVN, 계정 캐쉬 삭제 (0) | 2020.01.03 |
댓글