Spring 프레임워크를 기반으로 프로젝트를 만들자 라고 마음먹고 시작하려고 할때
정작 뭐부터 시작할까?? 어떤걸 우선 작업해야하지?? 등등 ㅡㅡ?? 프로젝트 시작도 전에 많은 고민을 하게됩니다.
이런 고민에서 조금은 벗어날 수 있도록 Spring 프레임워크를 초기 구성 방법에 대해 간단히 작성 하도록 하겠습니다.
그럼 우선은 스프링이 어떤 구조로 동작하는지 알아봅시다.
아래 구조에서 사용된 프레임워크는 Spring 3.x, Mybatis, Freemarker 입니다.
① Client 가 최초 요청 Request 를 보내면 DispatcherServlet 요청을 받는다.
② 요청을 받은 DispatcherServlet는 요청을 HandlerMapping 에게 넘기고, HamdlerMapping은
요청에 맞는 Controller를 찾아 Controller 명을 리턴 해준다.
③ DispatcherServlet이 해당 Controller에서 Client에서 받은 값들을 넘기면 Controller가
Business로직을 수행하는 Service를 요청하고 model을 만든다. 그리고는 이에 맞는 View을 ModelAndView 객체로
Dispatcher Servlet으로 넘겨준다.
④ DispatcherServlet은 ModelAndView 에 맞는 View를 ViewResolver 에게 요청한다.
⑤ ViewResolver에게 받은 View로 Model을 넘겨 View 출력해준다.
요약하면 위와 같이 동작이 되는것을 알 수 있습니다.
음~ 일단 뭔가 흘러가는건 알듯 말듯 이제 패키지 구조를 볼까요?
패키지 구조를 짤때 어떤 방법이 정답인지 어떻게 해야 잘짤수 있을까? 많은 고민을 했는데
정답은 없는것 같아요 ㅡ,.ㅡ 하지만 아래와 같이 구성할경우 모듈별로 구분이 될 수 있다 라는점이 장점으로 보입니다.
① 패키지의 기본 구조는 JAVA 소스파일이 위치하는 src/main/java 와
각 설정 파일이 위치한 src/main/resources 로 분리된다.
② src/main/java 의 구조는 기능의 성격(DB 테이블 기준)에 따라 분리 하도록 구성되어 있으며,
이 후 기능에 따라 (패키지 묶음)을 추가 하여 진행 하도록 한다.
③ src/main/resources 의 구조는 spring(spring Framework 관련 설정),
database(mybatis 등 Dao설정), sqlmapper(mybatis mapper.xml )로 구성된다.
Spring 프로젝트를 생성하는 방법은 이클립스, STS 등으로 간단히 생성할 수 있습니다. (여기서는 생략)
프로젝트 구성시 사용된 라이브러리 정보와 설정파일에 대한 정보는 다음과 같이 구성하였습니다.
* 라이브러리
명칭 |
설명 |
spring-aop:3.2.6.RELEASE' |
AOP기능을 사용하기 위함. |
spring-beans:3.2.6.RELEASE |
스프링 XML 설정파일과 자바 어노테이션을 파싱 하는데 필요 |
spring-context:3.2.6.RELEASE |
스프링 코어를 확장한 많은 클래스가 들어있다 빈 유효성 검증,JNDI 스케줄링 하는 클래스 포함 |
spring-context-support:3.2.6.RELEASE |
spring-context 모듈을 확장, 메일지원, 프리마커, 벨로시티 등 템플릿 엔진과 연동하는 클래스 Quarts와 같은 스케줄링 라이브러리등이 포함됨. |
spring-core:3.2.6.RELEASE |
모든 스프링모듈에서 필요한 모듈(공통 클래스가 포함됨) |
spring-expression:3.2.6.RELEASE |
스프링 표현언어(SpEL)지원 클래스 포함. |
spring-jdbc:3.2.6.RELEASE' |
JDBC 지원 클래스 포함 |
spring-tx:3.2.6.RELEASE |
스프링 트랜잭션 지원 클래스포함 JTA지원을 위한 클래스도 포함 |
spring-oxm:3.2.6.RELEASE |
객체 XML매핑을 지원하는 클래스 포함 XML 추상화 마샬링 언마샬링 XMLBeans, XStream 같은 클래스 지원 |
spring-webmvc:3.2.6.RELEASE |
스프링의 자체 MVC를 위한 클래스가 포함됨. |
aspectjlib:1.6.2 |
AOP aspect(관점) 영역을 설정하기 위함. |
aspectjweaver:1.7.1 |
|
commons-dbcp:1.4 |
Database-ConnectonoPool을 사용하기 위함. |
freemarker:2.3.19 |
프리마커 템플릿 |
opensymphony:sitemesh:2.4.2 |
레이아웃 프레임 우크(프리마커 의존 라이브러리로 사용) |
hibernate-validator:4.3.0.Final |
JSR-303의 구현체로써 도메인 모델에서 어노테이션을 통한 필드 값 검증을 가능하게 해준다. |
lombok:0.10.6 |
Getter/setter 등의 불필요한 소스 중복방지를 위함. |
slf4j-log4j12:1.7.2 |
Log4j 로깅 프레임워크 |
jcl-over-slf4j:1.7.2 |
자카르타 로깅 프레임워크 대체 어뎁터 |
mybatis:3.2.1 |
데이터 매퍼 프레임워크 |
mybatis-spring:1.2.0 |
스프링 프레임워크에 mybatis를 통합할 수 있도록 지원 |
jackson-core-asl:1.9.13 |
Json 출력을 위함 |
jackson-mapper-asl:1.9.13 |
Json 스프링 프레임워크와 연결을 위함. |
* 설정정보
명칭 |
위치(package 구조) |
설명 |
root-context.xml |
src/main/resources/spring |
웹 어플리케이션 전체에서 공유해야 될 Bean 들의 정보를 가지고 있다.(DB 로깅등 에 사용,) |
servlet-context.xml |
src/main/resources/spring/appservlet |
서블릿에서만 이용되는 컨텍스트로 타 서블릿과 공유를 위한 Bean은 루트 컨텍스트에 등록해야 한다. (DispatcherServlet 생성 초기화.) |
config.properties |
src/main/resources/ |
웹 어플리케이션 환경 정보 (DB 연결 정보 등) |
log4j.xml |
src/main/webapp/WEB-INF/ |
웹 어플리케이션 로그 설정정보. |
web.xml |
웹 어플리케이션의 모든 메타 정보를 가지고 있다. (Servlet 정보 등) |
|
Build.gradle |
project/ |
웹 어플리케이션에 필요한 라이브러리 설정 및 빌드 정보 |
*Mapper.xml |
src/main/resources/sqlmapper |
Mybatis 프레임워크에서 사용될 매퍼 파일들로 Sql Query 정보를 가지고 있다. |
* root-context.xml
태그 |
설명 |
<context:property-placeholder> |
*.properties 파일 로더 |
<mybatis:scan> |
매퍼 인터페이스를 검색하여 주입.(Mybatis) |
<SqlSessionFactoryBean> |
Datasource, Mybatis 설정정보에 대한 객체 생성 |
<BasicDataSource> |
JDBC Datasource 설정. |
<SqlSessionTemplate> |
Mybatis-spring 의 핵심기능으로 Mybatis SqlSession관리 및 Mybatis SQL method호출을 담당한다. |
<DataSourceTransactionManager> |
트랜젝션 관리에 대한 설정. |
<tx:advice> |
AOP 를 위한 공통 기능 구현 클래스 |
<aop:config> |
Advice와 pointcut을 연결하여 advisor 생성 |
<context:component-scan> |
@Component 어노테이션 정보를 가지고 있는 클래스 검색 (Controller 제외) |
* servlet-context.xml
태그 |
설명 |
<annotation-driven> |
어노테이션 방식의 @MVC 를 사용시 필요한 Bean을 자동으로 등록한다.(@RequestMapping 을 이용한 핸들러 매핑 전략 등록) |
<resources mapping> |
스태틱 리소스에 대한 매핑을 지원해주는 태그 |
<ContentNegotiatingViewResolver> |
Content-Type에 따른 뷰를 검색하여 출력해주는 클래스 View를찾지 못할 경우 DefaultViews를 사용한다. |
<FreeMarkerConfigurer> |
Freemarker 템플릿을 사용하기 위한 설정. |
<FreeMarkerViewResolver > |
Freemarker View 출력을 위한 설정. |
<SimpleMappingExceptionResolver> |
예외 타입별 View 지정할 수 있다. |
<AnnotationMethodHandlerAdapter> |
매핑된 URL 핸들러를 호출하는 기능을 수행 (기본적으로 등록되어있는 클래스 이나 옵션 설정 하기위해 사용) |
<context:component-scan> |
@Component 어노테이션 정보를 가지고 있는 클래스 중 Controller 검색 |
음... 별로 구체적인 설명은 없지만 막연하게 프로젝트를 실행해야할경우 도움이 되길 바랍니다.
^^ 이만..
'관심분야 > 모바일서버' 카테고리의 다른 글
CORS 해결하기(안드로메다 갔다옴) (0) | 2019.11.05 |
---|---|
AWS MySQL 설치된 EC2 인스턴스 HeidSQL 연동 절차 (0) | 2019.09.11 |
제주버스OpenApi 적용방식(2) (0) | 2019.07.16 |
제주버스OpenApi 적용방식(1) (0) | 2019.07.16 |