| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- application.properties
- produces
- MVC
- @
- @RequestParam
- springmvc
- @RequestMapping
- @Valid
- jointpoint
- springjdbc
- 비즈니스레이어
- 의존주입
- Java
- 어노테이션
- 스프링
- 유효성검사
- PointCut
- .xml
- 바인딩변수
- SpringBoot
- @ResponseBody
- spring
- AOP
- Model
- frontController
- 생성자주입
- 서비스레이어
- gradle
- after-throwing
- c:if
- Today
- Total
메모장
레이어 개념 정리 본문
비즈니스 로직 & 서비스 계층은 applicationContext.xml 에서 객체화 설정 작업을 한다.
즉, DAO, Service 류의 객체화는 applicationContext.xml 에서 작업 한다.
이때, DAO, Service 류는 서버가 시작할 때 "가장 먼저 객체화" 작업이 이루어지게 설정을 하려 한다.
위의 applicationContext.xml 설정 파일은 스프링 컨테이너이며,
이렇게 "가장 먼저 생성 되는" 설정 파일을 "루트 컨테이너" 라고 부른다.
이것도 스프링 컨테이너 이지만 가장 먼저 생성되는 컨테이너 라고 구분 짓기 위해 "루트 컨테이너" 라고 한다.
"루트 컨테이너" == "비즈니스 레이어" == "서비스 레이어"
>> applicationContext.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>characterEncoding</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>characterEncoding</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>

리스너를 동작시키는 코드
흐름의 순서는 이러하다.
동작하는 기본 순서는 변함 없다.
사용자가 .do 요청 -> DispatcherServlet -> HanlderMapping -> Controller의 (Command객체(VO)) --ViewResolver:String--> VIEW
추가된 것 !
서버가 시작되었을때 리스너가 작동하도록 만든다.
서버 시작 -> 리스너 -> applicationContext.xml+스프링 컨테이너(루트 컨테이너) -> new DAO,S 생성한다
-> 사용자가 .do 요청 -> DS -> HM -> C(Command객체(VO)) --VR:String--> VIEW

applicationContext.xml 파일 생성 위치

@ 사용시 객체화를 해주는 설정 이다.
applicationContext.xml 을 "루트 컨테이너" 로 사용 하는 이유 :
>> AOP 개념을 적용 하기 위해 !
AOP 이란 ?
AOP는 Aspect Oriented Programming 의 약자로, 관점 지향 프로그래밍이라고 불린다.
관점 지향은 쉽게 말해서,
어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고,
그 관점을 기준으로 각각 모듈화 하는것을 말한다.
여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다.
AOP를 사용하면 로그, 보안 , 권한 확인, ... 등을 자동호출 할 수 있다.
다 뽑아내서 따로 관리(모듈화) 할 수 있다.
별도로 분리해서 관리하기 때문에 응집도가 높아짐
모듈화가 이루어진다 == 유지 보수가 용이해진다 <<-- 이게 AOP 를 썼을때의 효과
[프레젠테이션 레이어와 비즈니스 레이어의 통합]
★★★★★
기존 구조에서 컨테이너 하나가 더 추가된 이런 구조를
====> 2-Layerd 아키텍처 스타일 (계층을 두개쓰는 구조 )
★★★★★
프레젠테이션 레이어
.do 요청이 브라우저 (Client == 사용자) 으로부터 오게 되면,
(사용자가 버튼을 클릭 == 서버로 요청 == request)
web.xml 은 DispatcherServlet 을 생성 한다.
이때, DI (의존 주입) 을 필요로 한다.
스프링에서 기본 제공 해주는 DispatcherServlet 을 사용 하기 때문
DI를 위해 DispatcherServlet-servlet.xml 기능 설정 파일을 확인 하고, DI 를 한다.
위의 과정을 통해 "스프링 컨테이너"가 구동 된다.
이렇게 "하나의 컨테이너가 구동 됬다" == "하나의 계층" 이라 하며,
이것을 "프레젠테이션 레이어" 라고 한다.
비즈니스 레이어
비즈니스 로직을 처리하고 관리하는 계층이다.
주로 비즈니스 프로세스를 처리하기 위한 로직을 포함 한다.
비즈니스 룰, 엔티티 (데이터 모델), 프로세스 흐름 등을 다룬다.
데이터의 유효성 검사 및 계산, 규칙 적용 등이 포함 된다.
서비스 레이어의 일부로 여겨질 수 있다.
요약 : 비즈니스 로직을 처리하는 계층 == 비즈니스 레이어
서비스 레이어
비즈니스 레이어의 일부로 볼 수도 있지만,
주로 외부 시스템과의 연동 및 데이터베이스와의 상호 작용을 조정하는 역할을 강조 한다.
외부 시스템과 통신 하기 위한 인터페이스를 제공하고,
클라이언트의 요청을 받아 해당 요청을 비즈니스 로직에 전달하는 역할을 한다.
주로 서버간의 통신 및 데이터 전송, 데이터 변환 등을 다루며,
프레젠테이션 레이어와의 인터페이스 역할도 수행 한다.
요약 : 비즈니스 레이어의 기능을 외부 시스템과의 통신 및 상호작용을 하는 계층 == 서비스 레이어
요약 정리
전반적인 흐름 xml이 동작해서 스프링 컨테이너 동작 !
=> 이게 결합도가 높아서 유지보수 불리하다.
그래서 서비스 레이어를 사용 하려고 하는데 이것은 *.do 요청의 스프링컨테이너가 동작하기 전에
객체화 작업이 이루어져 있었어야 한다. 만들어져 있었어야 사용 할 수 있으니까 !
리스너를 추가하여 서버의 동작을 감지 할 때 실행될 수 있는 xml 컨테이너를 추가 해주었다.
가장 처음에 수행되는 컨테이너를 구분짓는 이름으로 "루트 컨테이너" 라고 부른다.
이렇게 기존 구조에서 하나가 더 추가되는 구조를
====> 2-Layerd 아키텍처 스타일 (계층을 두개쓰는 구조 ) 이라고 한다.
'Spring > 개념정리' 카테고리의 다른 글
| Model 객체 (0) | 2024.06.21 |
|---|---|
| 비즈니스 레이어 (서비스 레이어) 적용 (0) | 2024.06.21 |
| @ModelAttribute 어노테이션 (0) | 2024.06.21 |
| Spring 에 대한 간단 정리 (0) | 2024.06.21 |
| Spring 제공 MVC로 바꾸기 (@ 어노테이션 방식) (0) | 2024.06.21 |