전자정부 표준 프레임워크

전자정부 표준 프레임워크

  • 위키피디아
  • 사이트 : http://www.egovframe.go.kr/
  • 메뉴얼
  • Mysql 설정관련
    • src/main/resources/globals.properties
      #mysql
      Globals.DriverClassName=net.sf.log4jdbc.DriverSpy
      Globals.Url=jdbc:mysql://127.0.0.1:3306/egov?useUnicode=true&characterEncoding=UTF-8
      #Globals.Url=jdbc:mysql://127.0.0.1:3306/egov
    • QnA뒤져봐도 관련 내용 없다.
      JDBC 연결 URI에서 인코딩 지정해주면 됨.
  • web.xml
    • bean 설정 XML파일 설정 부분.
      <context-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>classpath*:egovframework/spring/com/context-*.xml</param-value>
      </context-param>
      • classpath* : 모든 클래스 패스를 의미한다.
      • context-*.xml : "context-"로 시작하고 ".xml"로 끝나는 파일의 의미한다.
      • 클래스 패스속 egovframework/spring/com/ 안에 context- 로 시작하는 모든 xml파일을 넣어두면 된다.
        그러면 알아서 bean 들이 설정될 것이다.
      • 이클립스에서는 /src/main/resources 속에 egovframework/spring/com/ 라는 폴더를 의미한다.
        • 주의, 이클립스에서 해당 폴더를 Build Path에 넣어두어야 할 것이다.
    • 설정 찾는법
      • xml찾기
        • web.xml 속에서 관련 태그를 뒤져봐라.
          • <context-param>, <servlet> (이 두곳에서만 설정된다.)
          • *로 설정되어있을 수도 있다.
        • 스프링 디스패처 관련 xml 위치 : /src/main/webapp/WEB-INF/config/egovframework/springmvc
        • 그외 스프링 xml위치 : /src/main/resources/egovframework/spring/com
  • server.xml
    • 톰캣의 설정파일
    • 이클립스에서 Run as -> Run on Server -> 서버 프로젝트 선택 -> 적용할 피로젝트를 add, remove -> 이렇게하면 자동으로 server.xml이 변경된다.
      • <Context docBase="com_test" path="/com_test" reloadable="true" source="org.eclipse.jst.j2ee.server:com_test"/>
        이런 구문이 추가되어있을 것이다.
    • 이 파일의 Context로 추가되어있어야 톰캣 동작시 보인다.
  • 어노테이션
  • 스프링 프레임워크
    • 버전 2.5 이상이서는 xml로 서블릿 설정등이 필요 없다. 어노테이션으로 설정하면 됨.
    • dispatcher-servlet.xml
      <context:component-scan base-package="egovframework,temp.example">
              <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
              <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
              <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
      </context:component-scan>

      /src/main/resources/egovframework/spring/context-common.xml
      <context:component-scan base-package="egovframework,temp.example">
             <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
      </context:component-scan>

      • base-package="egovframework,temp.example"
        ,를 구분으로 기본으로 어노테이션으로 설정해서 읽어드릴 패키지를 설정한다.
        안하면 새로만든 패키지가 동작 안할 것이다. 
        톰캣 재시작해야함.
      • context-common.xml 에서 추가 안할 경우 @Service, @Repository 등이 처리 안되더라.
        그렇게 따지면 dispatcher-servlet.xml 에서 exclunde 를 빼버리는게 더 좋지 않나?(서블릿 전용이라서 뺀건가?)

      • 관련에러
        2014-02-25 14:40:05,014  WARN [org.springframework.web.servlet.PageNotFound] No mapping found for HTTP request with URI [/testP01/test/list.do] in DispatcherServlet with name 'action'
  • iBATIS
    • 설정파일
      • /testProject/src/main/resources/egovframework/egovProps/globals.properties
        • context-datasource.xml , context-sqlMap.xml 에서 사용됨.
        • ${Globals.DbType}와 같은 표현이 XML파일에서 가능하도록해서 사용함.
      • /testProject/src/main/resources/egovframework/spring/com/context-datasource.xml
        • DB소스 Bean 설정
      • /testProject/src/main/resources/egovframework/spring/com/context-sqlMap.xml
        • SQL-Map 설정
          • <property name="dataSource" ref="egov.dataSource"/>로 DB소스 설정함.(context-datasource.xml 파일 참고)
      • /src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-*.xml
        • SQL-MAP 설정. 필수는 아니다. 밑에 적힌 sql-map-*.xml 파일을 리소스로 지정한다. (egov 에서는 DB별 처리 때문에 따로 해놓은 것이다.)
      • /testProject/src/main/resources/egovframework/sqlmap/com/*/sql-map-*.xml
        • 실제 사용 SQLMAP 설정 XML
    • 쿼리 리턴값 (링크)
      • select() : resultMap
      • insert()
        • 성공 : 자동증가 PK값, 또는 null
          • DB에 따라 XML부분 수정 필요
        • 실패 : 에러발생
      • delete(), update()
        • 성공 : 적용된 ROW수 
        • 실패 : 0
  • 약어
    • VO : Value Object
      • Model, View 간의 데이터 전달용도, getter,setter 메소드 (설명링크)
    • DAO : Data Access Object
      • JSP와 DB사용의 중간 역활
      • 저장, 검색 담당. view와 비지니스 분리
  • 톰캣
    • GET방식에서 한글이 깨질 때
      • 사용 JSP에서는
        <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
        라고 적어주고.
      • server.xml 에서
        <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8"/>
        추가 부분 URIEncoding="utf-8" (JSP의 pageEncoding에 맞춰 수정 필요)
        모든 Connector  에 대해서 적어줘야할 듯
  • 기본 클래스 동작 구조
    • @Controller
      TempController
      • @Service("tempService")
        TempServiceImpl extends AbstractServiceImpl implements TempService //컨트롤에서 불러 사용, 내부적으로 TempDAO 를 호출
        • @Repository
          TempDAO extends EgovAbstractDAO //실제 DB동작
        • TempServiceImpl  와 TempDAO 를 합쳐도 되지 않을까?
      • TempVO implements Serializable //Value Object , DB 결과,검색 관련으로 사용
  • 클래스 제작 순서
    • DAO -> Service -> ServiceImpl -> Controller
    • Controller 를 맨 처음에 껍데기로만 만들어도 상관은 없다.
      하지만 DAO를 초반에 만들어 두는게 에러체크하기도 쉽고, JUnit 로 테스트하기에도 좋다.(나머지 클래스는 전부 그냥 가져다 쓰는 것 뿐이라서...)
    • 순서가 다르면 계속 수정할 때 실동작없이 만들어져서 에러잡기 힘들더라...
  • log4j
    • protected final Log logger = LogFactory.getLog(getClass()); //로그객채 선언
    • #사용법
      logger.debug(resultVO);
      logger.warn("테스트");
    • log4j.xml
      • #패키기 기준으로 설정.
        <logger name="temp.example" additivity="false">
        <level value="DEBUG" />
        <appender-ref ref="console" />
        </logger>
      • #기본 로그 설정
        <root>
        <level value="OFF" />
        <appender-ref ref="console" />
        </root>

  • JUnit4
    • 명칭법 : 클래스명 뒤에 Test를 붙인다.
      • TempDAOTest 등으로
    • //DAO를 테스트할 때 사용한 클래스 어노테이션
      @RunWith(SpringJUnit4ClassRunner.class)
      @ContextConfiguration(locations = {"classpath*:egovframework/spring/context-*.xml"}) //xml을 읽어서 BEAN 으로 처리해준다.
      @TransactionConfiguration(transactionManager = "txManager", defaultRollback = false) //뭔지 모르겠다.
      @Transactional
      //에러에서 XML위치를 못 잡는 경우가 있다. Ron Configurations 에서 Classpath부분을 손봐라. 에러에 맞춰서 보고, war등을 추가하니깐 되더라.
    • @Before
      • 유닛테스트 전 초기화 처리
    • @Test
      • 테스트로 자동으로 호출한다.
      • 문제는 @Test가 여러개일 경우 순서이 힘들다.
        Junit 버전에 따라서 방법이 조금씩 다름.
        그래서 그냥 
        @Test는 하나 지정 후 안에서 다시 순서대로 테스트 메소드 호출하도록 하였음.
    • DAO CLASS 정도에서만 사용하면 될것 같다.
    • assertTrue() 메소드를 기본으로 assertNull, assertNotNull, assertEmpty 등을 사용하면 된다.
      • 이 메소드에서 false처리가 되면 예외를 발생시키고 보여주게 된다.
  • 에러 확인
    • Console 창에 동작 내용(DEBUG,INFO)과 함께 ERROR 등을 보여준다.
      에러의 첫 문장에서 가장 끝 부분 부터 봐라.(JAVA의 에러는 가장 안쪽에서 위로 올라가면서 표현되기 때문에)
      끝에있는 내용에 따라 조취를 취하면서 하나씩 제거해 나가면 된다.
  • error.jsp
    • <%@ page isErrorPage="true" import="java.io.*"%>
      ...
    • <c:set var="exception" value="${requestScope['javax.servlet.error.exception']}"/>
    • ${exception}
    • <p>cause: ${exception.cause}  </p>
    • <p>Message: ${exception.message}  </p>
    • <!-- Stack trace -->
    • <jsp:scriptlet>
    •   exception.printStackTrace(new java.io.PrintWriter(out));
    • </jsp:scriptlet>



# 전자전부 표준 프레임 워크
게시판 부분 분석
EgovBBSManagerController.java
----=------
@Autowired(required=false) <- 자동으로 객체 생성된다. (required=false 해당 클래스가 없거나, 두개가 있거나 해도 에러 발생시키지 않느다.)
    private EgovBBSCommentService bbsCommentService; //bbsCommentService라는 객체는 EgovBBSManagerController에서 객체 만들 때 소스상에 new 부분이 없어도 만들어진다. (커플링(연결도)을 줄이위 위한거라네... 요즘 추세라네)
----=------
 @RequestMapping("/cop/bbs/selectBoardList.do") <- 스프링의 어노테이션 표현, "/cop/bbs/selectBoardList.do"라는 URL요청에 대해서 아래 메소드를 실행한다.
    public String selectBoardArticles(@ModelAttribute("searchVO") BoardVO boardVO, ModelMap model) throws Exception {}

아규먼트로 넘어오는 BoardVO boardVO 나 ModelMap model 는 selectBoardArticles 메소드를 호출할 때 자동으로 생성되어 호출된다. (아마 스프링쪽에서 해주는 것 같음(상세 조사 필요)

댓글
  • No Nickname
    No Comment
  • 권한이 없습니다.
    {{m_row.m_nick}}
    -
제목 작성자 날짜
공대여자
공대여자
mins01
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자