2017 - 10 - 17 (화)
기본사항 정리
1 .. Spring MVC navigator
참고 : https://github.com/shj7242/practice_Spring
▶ 패키지 나누기 : 패키지 분류법칙.
패키지들이 왜 org.zerock.web / org.zerock.domain 과 같이 구성되어있을까 고민해봤다.
우선 이런식으로 나누는것은 일종의 규칙 같은것이다.
보통 첫번째에는 org, net, com 처럼 그룹의 성격을 정한다. org의 경우 조직,기구 단체를 뜻한다.
두번째에는 회사의 명칭이 보통들어가며, 세번째에는 domain에는 VO /web 에는 컨트롤러 안에 들어갈 클래스 또는 인터페이스의 용도에 따라 나누게 된다.
▶pom.xml : 어플리케이션에서 필요한 라이브러리를 저장하는 용도로 사용한다. Dependecy managing (maven이 관리해준다.)
▶web.xml : 모든 servlet들과 공유될수 있는 root-context.xml(컨테이너)를 생성해주며, Client가 request를 하였을 때 들어오는 모든 요청을 dispatcher-servlet(Client Controller) 로 보내주도록 설정하는 역할을 한다.
▶appServlet - dispatcher-servlet의 형태이다.
▶servlet-context.xml : 웹관련설정 (DispatcherServlet으로 설정된 서블릿의 요청을 정의한다.
▶Mapper.xml : 기능별로 매퍼를 분류해주며 Mapper 별로 DAO에서 사용할 SQL을 작성해준다.
▶DataSource : 아파치에서 제공하는 일정량의 DBCP(Database Connection pool)을 활용하여 생성한다.
▶MyBatis : SQL Mapper를 위한 프레임워크 SQL 구문 => 외부 xml파일로 분리
▶connection pool : DB에 미리 연결을 해 놓은 후 필요할 때마다 Pool에서 연결을 빌려와서 사용한다. (연결을 끊지 않는다.)
pool을 너무 크게해놓으면 메모리소모가 크며 너무 적으면 대기시간이 길어진다.
▶DAO : DB에 접근하기 위한 인터페이스이다. DAOImpl 이라는 명칭으로 DAO 인터페이스를 구현한다.
▶Service : 비즈니스 로직을 실행하기위해 생성한 인터페이스이다. ServiceImpl 에의해 구현된다.
전체적인 플로우 : 클라이언트가 요청하고 응답 받기 까지의 과정 (아직 완전히 정리하지 못함 계속 수정하면서 이해)
client의 요청이 들어오면 모든 요청을 web.xml에서 받아 필터를해준다. Context가 로드되면 전체설정을 잡아주는 root-context.xml 가 로드된다.
appServlet 을 1순위로 매핑하여 servlet-context.xml 를 통해 web관련 매핑을 실행한다. DataSource(커넥션 풀 이용을 위한) 생성, sqlsession(connection 객체)생성, 즉 특정 Controller의 메서드에 매핑하여 Client의 request에 따른 처리를 해준다.
Controller 는 필요한 데이터를 DB에서 가져오기위해 요청한 Service의 종류에 따른 Service인터페이스를 구현한다.
DAO를통해 DB에 접근한다. DAO에서 DB에 SQL 을 보내기위해 SQL 을 Mapper.xml에 생성하고 이것을 불러다 사용한다.
>>MVC2 모델 정리