[ 결론 ]
비즈니스 로직 & 서비스 계층은 applicationContext.xml 에서 객체화 설정 작업을 한다.
즉, DAO, Service 류의 객체화는 applicationContext.xml 에서 작업 한다.
이때,
DAO, Service 류는 서버가 시작할 때 "가장 먼저 객체화" 작업이 이루어지게 설정을 하려 한다.
위의 applicationContext.xml 설정 파일은 스프링 컨테이너이며,
이렇게 "가장 먼저 생성 되는" 설정 파일을 "루트 컨테이너" 라고 한다.
"가장 먼저 생성 되는" == "서버 시작을 감지 하여 생성" == "리스너 설정 하기"
"루트 컨테이너" == "비즈니스 레이어" == "서비스 레이어"
>> applicationContext.xml
프로젝트나 조직에 따라 사용하는 용어가 다를 수 있고,
비즈니스 레이어와 서비스 레이어가 완전히 같은 용어라고 볼 수는 없지만,
두 용어 사이에 엄격한 정의가 없어서 비슷하다고 생각 하면 될듯 하다.
1.
리스너 설정 하기.
서블릿을 상속 받은 리스너 (Not POJO) 를 객체화 하기 위해서, web.xml 에 작성 한다.
서블릿을 상속 받은 필터 (Not POJO) 를 객체화 하기 위해서도, web.xml 에 작성 했었다.
[ web.xml ]
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
차례대로,
1)
<servlet>, <servlet-name>, <servlet-class> 태그를 사용하여, 서블릿을 객체화.
2)
<servlet-mapping>, <servlet-name>, <url-pattern> 태그를 사용하여, 서블릿 매핑.
3)
<filter>, <filter-name>, <filter-class>, <init-param>, <param-name>, <param-value>
태그를 사용하여, 필터 서블릿 객체화.
4)
<context-param>, <param-name>, <param-value>, <listener>, <listener-class>
태그를 사용하여, 리스너 서블릿 객체화를 위한 설정.
이다.




2.
[ applicationContext.xml ]

Java Resources - src/main/resources 패키지 내부에 생성 한다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<context:component-scan base-package="com.spring.biz"/>
<!-- com.spring.biz 하위 폴더들을 대상으로 객체화를 해주게 하는 설정 이다. -->
</beans>
3.
applicationContext.xml 을 "루트 컨테이너" 로 사용 하는 이유 :
>> AOP 개념을 적용 하기 위해
AOP 이란 ?
AOP는 Aspect Oriented Programming 의 약자로, 관점 지향 프로그래밍이라고 불린다.
관점 지향은 쉽게 말해서,
어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고,
그 관점을 기준으로 각각 모듈화 하는것을 말한다.
여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다.
모듈화가 이루어진다 == 유지 보수가 용이해진다
비즈니스 레이어 (서비스 레이어) 사용 예제 링크 :
https://hwanii96.tistory.com/330
"비즈니스 레이어 (서비스 레이어) 를 사용 하기" 예제
1. 서버에서 DBMS (DataBase Management System) 변경이 자주 발생 한다. 즉, DAO 변경이 자주 발생 하게 된다는 의미 이다. DAO 이란 ? Domain Access Object 을 의미하며, 데이터베이스나 다른 영구한 저장소에 접
hwanii96.tistory.com
또한,
로그, 보안, 권한 확인, .. 등을 대신 처리 할 수 있게 한다.
(AOP 개념은 다시 정리할 예정 이다)
4.
[ 프레젠테이션 레이어와 비즈니스 레이어의 통합 ]
(표현 계층과 비즈니스 (핵심 / 관심 / concern / CRUD) 계층의 통합)
>>
이렇게 두개의 레이어를 통합한 방식을 "2-Layerd 아키텍처 스타일" 이라 부른다.
프레젠테이션 레이어란 ?
.do 요청이 브라우저 (Client == 사용자) 으로부터 오게 되면,
(사용자가 버튼을 클릭 == 서버로 요청 == request)
web.xml 은 DispatcherServlet 을 생성 한다.
이때, DI (Dependency Injection == 의존 주입) 을 필요로 한다.
왜 ?
스프링에서 기본 제공 해주는 DispatcherServlet 을 사용 하니까 ~
DI를 위해 DispatcherServlet-servlet.xml 기능 설정 파일을 확인 하고, DI 를 한다.
위의 과정을 통해 "스프링 컨테이너"가 구동 된다.
이렇게 "하나의 컨테이너가 구동 됬다" == "하나의 계층" 이라 하며,
이것을 "프레젠테이션 레이어" 라고 한다.
비즈니스 레이어란 ?
비즈니스 로직을 처리하고 관리하는 계층이다.
주로 비즈니스 프로세스를 처리하기 위한 로직을 포함 한다.
비즈니스 룰, 엔티티 (데이터 모델), 프로세스 흐름 등을 다룬다.
데이터의 유효성 검사 및 계산, 규칙 적용 등이 포함 된다.
서비스 레이어의 일부로 여겨질 수 있다.
>>
요약 : 비즈니스 로직을 처리하는 계층 == 비즈니스 레이어
서비스 레이어란 ?
비즈니스 레이어의 일부로 볼 수도 있지만,
주로 외부 시스템과의 연동 및 데이터베이스와의 상호 작용을 조정하는 역할을 강조 한다.
외부 시스템과 통신 하기 위한 인터페이스를 제공하고,
클라이언트의 요청을 받아 해당 요청을 비즈니스 로직에 전달하는 역할을 한다.
주로 서버간의 통신 및 데이터 전송, 데이터 변환 등을 다루며,
프레젠테이션 레이어와의 인터페이스 역할도 수행 한다.
>>
요약 :
비즈니스 레이어의 기능을 외부 시스템과의 통신 및 상호작용을 하는 계층 == 서비스 레이어
[ 정리 ]
루트 컨테이너 (applicationContext.xml == 스프링 컨테이너 == 비즈니스 레이어) 가
객체들을 메모리에 new 하기 위해서,
서블릿 컨테이너 (web.xml) 가,
스프링 컨테이너인 DispatcherServlet 을 메모리에 new 한다.
그러면, 의존 주입을 위해, DispatcherServlet-servlet.xml 이 요청을 처리 한다.
>> 비즈니스 레이어와 프레젠테이션 레이어의 통합
>> 2-Layerd 아키텍처 스타일
'Spring 프레임워크 > 이론' 카테고리의 다른 글
AOP (Aspect Oriented Programming) (관점 지향 프로그래밍) (0) | 2023.08.10 |
---|---|
Spring 프레임워크를 통한 경량화된 서블릿 파일 (0) | 2023.08.09 |
@ModelAttribute("이름") 어노테이션 (2) | 2023.08.07 |
Spring MVC 패턴의 구조 파악 4 (Controller 파트) (0) | 2023.08.04 |
Spring MVC 패턴의 구조 파악 3 (Controller 파트) (0) | 2023.08.04 |