Tiny Bunny [Spring] 2-Layerd 아키텍처 - 솜님의 블로그
솜님의 블로그
카테고리
작성일
2024. 10. 10. 15:47
작성자
겨울솜사탕

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를 뜻한다.