전자정부 프레임워크 공부

전자정부 프레임워크 3.10 - selectSampleList

그랜파 개발자 2025. 5. 19. 10:31

이 메서드는 Spring MVC 기반의 컨트롤러에서 사용되는 전형적인 리스트 조회 및 페이징 처리 로직입니다.
다음은 이 메서드에 대한 한 줄 요약과 상세 설명입니다.


✅ 한 줄 요약

/egovSampleList.do 요청이 들어오면, 검색 조건에 따라 데이터를 조회하고 페이징 정보를 포함해 화면(JSP)에 전달하는 컨트롤러 메서드입니다.


📘 전체 구조

@RequestMapping(value = "/egovSampleList.do")
public String selectSampleList(@ModelAttribute("searchVO") SampleDefaultVO searchVO, ModelMap model) throws Exception {
    ...
    return "sample/egovSampleList";
}
  • URL 매핑: /egovSampleList.do로 들어오는 GET 또는 POST 요청을 처리.
  • @ModelAttribute("searchVO"): 검색 조건이나 페이지 정보를 담고 있는 SampleDefaultVO를 자동 바인딩하여 뷰에도 전달.
  • ModelMap: View(JSP)에 데이터를 전달하기 위해 사용.
  • 리턴값: /WEB-INF/jsp/egovframework/example/sample/egovSampleList.jsp 로 해석됨.

🔍 상세 처리 순서

1. 페이지 정보 설정

searchVO.setPageUnit(propertiesService.getInt("pageUnit"));
searchVO.setPageSize(propertiesService.getInt("pageSize"));
  • 설정 파일(*.properties)에서 pageUnit, pageSize 값을 가져와서 searchVO에 설정.

2. 페이징 정보 객체 생성 및 설정

PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
paginationInfo.setRecordCountPerPage(searchVO.getPageUnit());
paginationInfo.setPageSize(searchVO.getPageSize());

searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
  • PaginationInfo는 EgovFramework에서 제공하는 페이징 유틸 클래스입니다.
  • 현재 페이지 번호, 페이지 당 게시물 수, 페이지 사이즈 등을 설정.
  • 그 정보를 searchVO에 설정하여 DAO에서 사용할 수 있게 함 (예: LIMIT, OFFSET).

3. 데이터 목록 조회

List<?> sampleList = sampleService.selectSampleList(searchVO);
model.addAttribute("resultList", sampleList);
  • DB에서 검색 조건(searchVO)을 기준으로 데이터를 조회함.
  • 조회 결과를 resultList라는 이름으로 JSP에 전달.

4. 전체 데이터 수 조회 및 페이징 처리

int totCnt = sampleService.selectSampleListTotCnt(searchVO);
paginationInfo.setTotalRecordCount(totCnt);
model.addAttribute("paginationInfo", paginationInfo);
  • 전체 게시물 수를 조회하여 paginationInfo에 설정.
  • 뷰(JSP)에서 페이지 번호 네비게이션을 출력하기 위해 필요.

5. View 이름 반환

return "sample/egovSampleList";
  • 이 이름은 뷰 리졸버에 의해 JSP 경로로 매핑됩니다.
  • 예: /WEB-INF/jsp/egovframework/example/sample/egovSampleList.jsp

📦 관련 구성 요소 요약

구성 요소 설명
@RequestMapping 요청 URL과 메서드를 매핑
@ModelAttribute 폼 데이터 바인딩 + 뷰에 전달
SampleDefaultVO 검색 조건, 페이지 관련 VO
PaginationInfo 페이지 처리 유틸 클래스
sampleService 비즈니스 로직(Service Layer)
model.addAttribute JSP로 데이터 전달
return "sample/egovSampleList" 뷰 이름 반환

✅ 화면(JSP)에서는 이렇게 사용됨

<c:forEach var="item" items="${resultList}">
  <tr>
    <td>${item.title}</td>
    <td>${item.writer}</td>
  </tr>
</c:forEach>

<ui:pagination paginationInfo="${paginationInfo}" type="image"/>

 

 

나의 말:

설정 파일(*.properties) 위치는?

 

ChatGPT의 말:

Spring에서 설정 파일(*.properties)의 위치는 보통 contextConfigLocation 또는 PropertyPlaceholderConfigurer, @PropertySource 등을 통해 설정됩니다.

🔍 이 프로젝트에서는 web.xml을 보면 다음 설정이 있습니다:

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath*:egovframework/spring/context-*.xml</param-value>
</context-param>

이 설정은 다음 경로의 스프링 설정 파일들을 로드합니다:

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

 

🔧 그리고 이 설정 파일들 중 context-properties.xml 또는 context-common.xml 에서 다음과 같은 bean을 통해 .properties 파일을 로드하는 설정이 있을 수 있습니다:

<bean id="propertiesService" class="egovframework.rte.fdl.property.impl.EgovPropertyServiceImpl" >
  <property name="properties">
    <bean class="egovframework.rte.fdl.property.impl.EgovPropertyLoader">
      <property name="locations">
        <list>
          <value>classpath:/egovframework/egovProps/globals.properties</value>
        </list>
      </property>
    </bean>
  </property>
</bean>

✅ 결론

propertiesService.getInt("pageUnit") 와 같은 설정은 대부분 아래 경로의 파일에서 관리됩니다:

📁 src/main/resources/egovframework/egovProps/globals.properties

📝 예시: globals.properties

pageUnit=10
pageSize=5

이런 식으로 설정되어 있을 것입니다.

필요하면 이 설정 파일을 직접 생성하거나 수정해서 페이지 수, 경로, 업로드 용량 등의 전역 설정을 관리할 수 있습니다.

 

전자정부 프레임워크 3.10 - context-properties.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">

	<bean name="propertiesService" class="egovframework.rte.fdl.property.impl.EgovPropertyServiceImpl" destroy-method="destroy">
		<property name="properties">
	        <map>
	        	<entry key="pageUnit" value="10"/>
	        	<entry key="pageSize" value="10"/>
	        </map>
		</property>
	</bean>
	
</beans>