2-Layerd 아키텍처
자체 개발하는 기업 솔루션에 많이 등장한다.
Controller에 Service 멤버변수를 끼워 넣으면서 서비스 레이어를 만들기 시작하면,
그 기업은 대부분 2-Layerd 아키텍처라는 것을 사용한다.
1) Service 레이어를 추가했으니
2) @Service == new Service 를 먼저 해주면 어떨까? 에서 출발.
3) 또 다른 스프링 컨테이너 (== 루트 컨테이너(가장 먼저 일을 하는 컨테이너))를 추가
현재 우리가 다루는 컨테이너가 총 3개가 있다.
- web.xml - 서블릿 컨테이너 (톰캣)
- ds-servlet.xml - 스프링 컨테이너
- applicationContext.xml - 스프링 컨테이너(루트 컨테이너)
ds-servlet.xml 가 Controller이고,
applicationContext.xml이 Service라고 할 때, Service가 먼저 존재해야 한다.
(의존 대상이 먼저 있어야 하므로)
근데 web.xml에 ds-servlet 생성으로 인하여 ds-servlet.xml이 먼저 생성된다.
applicationContext.xml을 먼저 만들어줘야 해서, 리스너를 생성한다.
리스너는 톰캣이 시작되는 걸 모니터링/감지해서 뭔갈 자동으로 수행시켜 주는 역할을 한다.
리스너는 POJO가 아니므로 web.xml에 추가해준다.
// web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
이렇게만 넣고 돌린 경우, 에러가 발생한다.
>> xml parsing이 안된다! == xml이 없다 / 연결이 안 됐다.
applicationContext.xml 파일이 현재 존재하는데 이 오류가 발생되었다면?
파일을 읽지 못한다는 뜻이다.
4) 루트 컨테이너는 /WEB-INF/applicationContext.xml 를 참고하여 돌아간다.
이때 처리할 수 있는 방법이 2가지가 있다.
① WEB-INF 하위에 xml 파일 넣어주기
② applicationContext.xml이 저장된 위치를 알려주기
WEB-INF 하위는 앞단에서 사용하는 곳이다.
따라서 대부분 저장된 위치를 알려주는 2번 방식을 사용한다.
// web.xml 수정
<context-param>
<param-name>contextConfigLocation</param-name>
<param-vlaue>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
여기서 calsspath라는 단어가 나오는데,
이는 자바 부분의 src/main/resources를 뜻한다.
'Spring' 카테고리의 다른 글
[Spring] AOP 관점지향프로그래밍 (0) | 2024.10.15 |
---|---|
[Spring] 비동기 처리 (0) | 2024.10.15 |
[Spring] Service와 ServiceImpl (3) | 2024.10.10 |
[Spring] 게시판 로직 Spring으로 구현하기 (0) | 2024.10.10 |
[Spring] Controller 요청 줄이기와 Model 객체 (0) | 2024.10.10 |