관심분야/모바일서버

Spring 3.x F/W 기본 구조

알 수 없는 사용자 2019. 8. 21. 13:48

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 검색

 

음... 별로 구체적인 설명은 없지만 막연하게 프로젝트를 실행해야할경우 도움이 되길 바랍니다.

^^ 이만..