전자정부 표준 프레임워크

전자정부 표준 프레임워크

  • 위키피디아
  • 사이트 : 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}}
    -
목록형 📷 갤러리형
제목
[기본형] HTML (with 부트스트랩5.3 , jquery 3.7, vue.js)
유용한 리눅스(LINUX) 명령어
[공지] 기술 게시판
3.31
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.10
4.11
4.12
4.13
4.14
4.15
4.16
4.18
4.19
4.20
4.21
4.22
4.23
4.24
4.25
4.26
4.27
4.28
4.29
4.30
5.1
5.2
5.3
5.4