본문 바로가기

IT/eGovFramework

[1] Sample예제 기본적인 흐름 분석하기.

먼저 알아둘 것 !

- web.xml : src/main/webapp/WEB-INF/web.xml

Filter : encodingFilter, HTMLTagFilter

Context-config : contextConfigLocation (classpath*:egovframework/spring/context-*.xml)

src/main/resources/egovframework/spring/context-*.xml

Servlet : action (추가로 아래와 같은 xml파일을 contextConfigFile로 참조하고있음)

/WEB-INF/config/egovframework/springmvc/dispatcher-servlet.xml

/WEB-INF/config/egovframework/springmvc/urlfilename-servlet.xml

Welcom-file-list : index.jsp

src/main/webapp/WEB-INF/index.jsp

Error-page : java.lang.Throwable, 404, 500



1. src/main/webapp/WEB-INF/web.xml : <welcome-file-list>에서 설정한 index.jsp로 이동.


2. /sample/egovSampleList.do로 포워딩.


3. egovframework.rte.sampel.web.EgovSampleController.java - selectSampleList가 /sample/egovSampleList.do로 매핑되어있음.

searchVo는 무엇인가?

egovframework.rte.sample.service.SampleDefaultVo 객체, 검색조건, keyword, 검색여부,

현재 페이지, 페이지 갯수, 페이지 사이즈, 최초/최종 인덱스, 페이지 당 게시글 숫자 등

검색 및 페이징 처리에 요구되는 인자들을 담은 객체.

최초 selectSampleList()에 요청이 들어올 때는 기본적인 정보(pageIndex = 1 등)만 가지고 들어옴.

propertiesService는 무엇인가?

아직까지 정확히 모르겠음. pageUnit과 pageSize를 받아서 searchVO 객체에 담는것으로 봐선

사용자 설정에 저장된 수치를 불러와서 실제 결과를 불러오는 데에 반영하는 것이 아닌가 함.

PaginationInfo 객체를 생성, searchVO 객체에 페이징 관련 정보를 담은 후 Model에 추가.

egovSampleList.jsp 뷰페이지의 <ui:pagination> 태그에서 객체를 받아 페이징 구현하는듯.

또한, PaginationInfo 클래스는 getFirst/LastPageNo(), getFirstRecordIndex() 등

페이징에 요구되는 추가정보를 추출하는 메서드를 내장하고 있음.

※ searchVO 객체와 paginationInfo 객체가 서로 정보를 주고받으며 데이터 출력에 대한 정보를 완성한 후,

    searchVO 객체를 DAO 객체에 넘겨줌으로써 원하는 데이터를 추출하는데에 활용함.

알고보니 VO객체 또한 기본 오브젝트였다; VO, DAO, DTO 객체와 관련된 정보 (재혁님 블로그)

searchVO 객체를 EgovSampleService 객체에 넘겨 화면에 출력할 데이터(List<Sample>)을 리턴받음.

정확히 모르겠음. EgovSampleService 인터페이스 객체로 생성했는데 EgovSampleServiceImpl 객체로 들어간다.

아무래도 @Resource 어노테이션과 관계가 있는 것 같은데, '의존하는 빈 객체를 전달' 한다고 한다. 나중에 따로 참고할 것.


4. egovframework.rte.sample.service.impl.EgovSampleServiceImpl.java - selectSampleList(SampleDefaultVO searchVO)

요청으로부터 데이터 추출에 필요한 조건이 담긴 searchVO 객체를 넘겨받아 SampleDAO 객체의 selectSampleList()에 넘겨준다.


5. egovframework.rte.sample.service.impl.SampleDAO.java - selectSampleList(SampleDefaultVO searchVO)

상동. 특이한건  SampleDAO클래스 내에서 queryForList 등의 메서드를 호출하는게 아닌, DAO클래스마저도 EgovAbstractDAO클래스를 

상속받아 출력할 글 목록을 가져오는 작업을 단순하게 list()라는 메서드로 수행한다는 것. 물론 SQL Query 아이디와 searchVO는 전달함.

이 위론 한참 복잡하다. SqlMapClientDaoSupport상속, DaoSupport상속 등.. 더 자세히는 나중에 또 살펴봐야겠다.


6. 다시 EgovSampleController로 돌아와서.. (작업종료 : 뷰페이지로 리턴)

넘겨받은 글목록 List를 변수명 'resultList'로 모델에 더해주고, 글목록 꺼낼때와 같은 방법으로 총 글숫자를 리턴받아

paginationInfo 객체에 저장한 후, 변수명 'paginationInfo'로 모델에 더해준 뒤 '/sample/egovSampleList'로 리턴된다.


7. src/main/webapp/WEB-INF/jsp/egovframework/rte/sample/egovSampleList.jsp

Sample 출력을 위한 뷰페이지. 전체적인 css 속성은 외부파일을 참고하며, 대부분 inline과 embedded 스타일로 적혀있음.

페이지 이동, 게시글 등록 등 뷰페이지 내의 이벤트를 실행시키기 위한 javascript 코드는 embedded 스타일로 구현되어있음.

페이지 전체가 listForm이라는 폼으로 싸여있으며, 이벤트가 발생할 경우 필요한 정보를 가지고 각각의 매핑으로 요청을 보내게 구현되어있음.

예)  글 등록 : 아무 정보 없이 /sample/addSampleView.do로 요청 보냄.

글 수정 : Sample의 ID 정보값을 가지고 /sample/updateSampleView.do로 요청 보냄.

페이지 이동 : 해당 페이지 번호를 가지고 /sample/egovSampleList.do로 요청 보냄.




기본적인 흐름은 얼추 정리한 것 같다. 세부적으로 파고들려면 아직 파악해야할 것이 산더미 같겠지만;


Sample 데이터베이스가 아닌 내 ERD에 맞춰 생성한 내 데이터베이스와 ibatis SQL 쿼리문에서의 매핑만 해결한다면

비슷하게 본 떠 내 임의의 컴포넌트 셋팅이 가능할 것이라고 본다. 물론 복붙으로 끝나는게 아니라 이렇게 기록하며 이해하는 것이 중요하겠지만.