The Debugging Chronicles : "코드의 미학"
[Spring] 2-Layerd 아키텍처 본문
서비스 레이어가 추가 되었으니까
다른 어노테이션이 되기 전에 먼저 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류들을 모아서 정리해두면 된다.
'Spring' 카테고리의 다른 글
[Spring] 비동기처리 - 여러개의 데이터 보내기 (0) | 2024.10.14 |
---|---|
[Spring] 비동기 처리 (0) | 2024.10.14 |
[Spring] 서비스 레이어 나누기 (0) | 2024.10.10 |
[Spring] 2주차 (9일) 과제 핵심 포인트 (0) | 2024.10.10 |
[Spring] Command 객체 (0) | 2024.10.08 |