Spring 프로젝트 구동 순서(전체적인 흐름)

오의석·2022년 10월 20일

스프링

목록 보기
6/16

1. WAS 실행(ex: 톰캣)

config 파일을 읽어서 서버 환경을 세팅한다.
sever.xml, web.xml....등 을 읽는다. (server.xml을 보면 우리가 만든 spring 프로젝트가 존재한다.)

2. spring 프로젝트 config 파일을 읽는다.

(1) META-INF/context.xml 을 읽는다.

없을 경우는 바로 다음 config파일을 읽는다.
해당 파일은 WAS에서 알아야할 정보들이 담겨 있다.
(javax.sql.DataSourcer과 같이 미리 JDBC를 세팅할 수 있다. 이렇게 만들어진 것은 커넥션풀링 방식으로 접근한다.)

추가 팁
maxTotal="100" maxIdle="30" maxWaitMillis="10000"
해당 리소스를 100개를 만들어 놓는다
객체 사용 후 반환할 때, 최대 유지되는 객체는 30개이다.
최대 10초 기다려라.

(2) WEB-INFO/web.xml을 읽는다.

웹 전반의 설정들을 여기서 해준다.

(2-1)listener

우리가 만든 웹프로젝트는 하나의 어플리케이션이 된다.
ServletContextEvent는 그런 어플리케이션이 start, stop할 때마다 발생한다.
여기 listener는 ServletContextEvent에 추가해주는 것이다.
초기 세팅으로 ContextLoaderListener가 되어 있어서, 어플리케이션이 시작할 때마다
context-param을 읽어서 root-context.xml을 읽게 되는 것이다.

(2-2) /WEB-INF/spring/root-context.xml

여기에는 웹과 관련이 적은 것들을 설정해주는 파일이다.(서비스, DAO..등을 여기서 설정한다. + AOP)
이부분은 WAS가 만들어질 때, 같이 만들어 진다.

(2-3) filter

클라이언트가 요청할 때, DispatcherServlet을 가기 전에 거쳐간다. request와 response의 요청을 조작할 수 있다.

(2-4) /WEB-INF/spring/appServlet/servlet-context.xml

이 부분은 웹과 관련이 큰 것들을 설정해주는 파일이다. 사용자가 요청할 때 만들어진다.
해당 설정들은 DispatcherServlet 서블릿이 생성되며, 그 서블릿에 기능을 설정해준다.
(컨트롤러, 뷰리솔버,파일업로드,인터셉터를 여기에서 설정)

resource mapping 
(배경 지식) css,js 등은 미리 브라우저에 다 다운 받고 나서,웹 동작을 이어간다.
따라서 mapping이 중요하다. 
경로 설정을 할 경우,  여기서 설정한 경로를 탐색한다는 의미이다.
<resources mapping="/assets/**" location="/resources/assets/" />는
/assets/xxx 라는 경로를 읽을 경우, /resources/assets에 xxx가 있는 지 탐색한다.

TIP

filter는 DispatcherServlet <-> client
AOP는 Contoller <-> Service
Interceptor는 DispatcherServlet <-> Contoller

connection, ejb, thread 풀링이 있다.

추가

WAS에 javax.sql.DataSourcer를 설정했다면, 메모리에 올라왔을 것이다.
이것을 사용하기 위해서는 파일경로로 읽어올 수 없다. 메모리에 올라와 있기 때문이다.
따라서 JNDI로 읽어야 한다. comp/env 라는 경로에서 찾아야한다.(java라는 프로토콜을 사용한다.)
즉, 해당 값은 java:comp/env/xxxx 로 불러와서 사용한다. (xxx는 name으로 설정해주었을 것이다.)

이것을 DBCP라고 불린다.
DB Connection Pool
DB서버와 미리 연결을 생성해 놓고, DB서버와 통신이 필요할 때 Connection 객체를 빌려 쓰는 것을 의미한다.

profile
끊임없이 나아가는 사람이 되어볼게요.

0개의 댓글