The Debugging Chronicles : "코드의 미학"

[Spring] 2-Layerd 아키텍처 본문

Spring

[Spring] 2-Layerd 아키텍처

sweetseonah1004 2024. 10. 10. 11:28

서비스 레이어가 추가 되었으니까

다른 어노테이션이 되기 전에 먼저 new가 되면 어떨까?

New의 순서를 컨트롤 하기 위해 고안된 아키텍처(구조)이다

 

1)service 레이어를 추가했으니

2)@service == new service 를 먼저 해주면 어떨까?

3) 또 다른 스프링 컨테이너 ( == 루트 컨테이너)를 추가

 

총 xml이 3개

1.web.xml 서블릿 컨테이너(==톰캣)

2. ds-servlet.xml 스프링 컨테이너

3. applicationContext.xml 스프링 컨테이너 (== 루트 컨테이너)

 

그럼 컨트롤러가 먼저 new가 되어야 할까 service가 되어야 할까?

서비스가 먼저 되어야한다. 그래서 루트 컨테이너가 먼저 된다.

 

dispatcherSevlet 때문에 ds-servlet.xml이 먼저 된다.

그래서 톰캣이 작동되면 자동으로 되는 리스너를 만들어서 컨트롤 해보려고 한다.

 


왜?? web.xml에 리스너를 만들어야 할까??

리스너가 서블릿 컨테이너가 실행될때 ds-servlet.xml 보다 먼저 실행되어야 하기 때문이다 

 

크롤링 리스너도 web.xml에 만들어야한다.

왜냐면 POJO가 아니기 때문에

 

 

 

서버를 돌리면 이런 에러가 뜬다

xml 파싱이 되지 않는다

루트 컨테이너를 읽지 못한다는 뜻이다.

연결이 안되었거나 없다는 뜻이다.

 

있지만 읽지 못하고 있다.

 

왜그럴까?

 

 

WEB-INF 하위에 있는 applicationContext.xml를 읽기 때문이다

 

그럼 어떻게야할까?

 

1) WEB-INF  하위에 xml 파일을 생성하기

2) applicationContext.xml 이 저장된 위치를 알려주기

 

WEB-INF 는 결과물이 오는 파일이라서 건들지 않는다 

그래서 2번을 대부분 사용하여 문제를 해결한다.

 

그럼 위치를 알려주자!

 

 

classPath는 

 

src/main/resource이다

 

톰캣 동작 = > 리스너 = > 루트 컨테이너 => ds-servlet => 스프링 컨테이너

 

ds-sevlet.xml에는 view류들 

applicationContext.xml biz류들을 모아서 정리해두면 된다.