ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 전자정부프레임워크 (eGOVframework) - 2일차
    카테고리 없음 2023. 3. 18. 12:51

    mvc 패턴

    개발 할 때 3가지 형태로 역할을 나누어 개발하는 방법론. MVC는 다음 세개의 컴포넌트를 말하는데 그것은 Model, View, Controller 이다. 전자정부 프레임워크는 MVC 구조를 기본으로 갖추고 있다.

     

    2일차에서는 Oracle DBMS의 "scott" 계정과 연결을 하며, 이에 필요한 MVC파일을 작성할 예정이다.
    프로젝트 생성시 옵션으로 같이 생성할 수 있는 *sample*.* 파일을 상당 참고한다.

     

    컴포넌트 소개

    1. Model
      • contorller의 다음 구조로 애플리케이션의 정보, 즉 데이터 흐름을 담당하는 구조를 말한다.
      • Service 파일, DAO파일, Impl 파일이 해당된다.
    2. View
      • 사용자인터페이스(UI)를 얘기하는 것이며 출력화면 자체이다.
      • 화면 구성 파일인 JSP파일 등이 View에 해당된다.
    3. Controller
      • 흐름제어 역할을 하고 비즈니스로직과 모델의 상호동작 조정 역할을 한다.
      • 웹 주소등을 기록하는 Controller.java 파일이 해당된다.

    파일생성 [java단]

    *** 메서드는 강의중 실수로 대문자로 작성된 사항 유의해주세요

    이번 mvc패턴 실습에서는 oracle 'scott' 계정의 dept table을 연동하는 것을 목표로 진행한다.

    해당 table에는 [deptno, dname, loc] 총 3개의 컬럼이 미리 설정되어있다.

    View 부분 작성

    웹페이지에서 값을 전달받기 위해 <form> 태그에 deptno, dname, loc 3개의 input : name 을 설정한다.

    action값은 임의로 설정해도 좋으나, 기능에 맞게 deptWriteSave.do로 작성했다. 해당 값은 Controller에서 인식할 내용이다.

     

    Model(Service) 부분 작성_01 :  *VO.java

    우선 data내용에 맞게 vo객체를 생성해야한다. private으로 각 컬럼명과 동일하게 선언해준 다음, 해당하는 getter/setter 함수를 생성한다. 


    *달라도 중간과정에서 편집할 수 있겠으나, 불필요한 과정이 추가되고 이후 파라미터 전송시 혼동할 여지가 많아서 전부 통일하는것으로 한다
    *또한 자료형이 다르면 뒤에 SQL문에서 해당 변수명이 없는 것으로 취급되니 반드시 유의해서 작성한다. 

     

    이미지에서는 deptno를 String으로 작성했으나, 자료형도 DB에 맞추어서 작성하는것을 잊지말자!

     

    Model(Service) 부분 작성_02 :  *Service.java

    다음은 cotroller가 값을 받아 작업할 기능을 선언하는 부분이다. 
    실제 기능은 다음 *Impl.java 에서 진행하지만 객체 추상화를 위해 먼저 interface파일을 생성하여
    구현할 기능을 선언해둔다. 함수명은 SQL기준으로 insert/delete 등의 동작으로 작성하는것이 보통이라한다.

     

    Model(Service) 부분 작성_03 :  *DAO.java

    표현이 맞는지 모르겠지만 해당 파일은 DB와 연결하기 위해 작성하는 java단의 끝자락이라 할 수 있겠다.

    EgovAbstractDAO 클래스를 상속받아 insert("sql-id", vo) 함수를 사용할 수 있다.
    "sql-id"는 xml파일에서 sql문을 작성한뒤에 연결고리로서 작용한다.
    @Repository("*DAO")를 상단에 작성하여 DAO파일임을 명시한다.

     

    Model(Service) 부분 작성_04 :  *ServiceImpl.java

    다음은 *Service.java에서 작성한 기능의 실제 코드를 작성하는 공간으로, 해당 interface를 주입받는다.
    또한, eGOV프레임워크의 함수를 사용하기 위해 EgovAbstractServiceImpl 클래스를 상속받는다.
    이번 작업에서는 아직 해당 클래스의 함수를 사용하지는 않았다. 

     

    @Resource(name="*DAO") 어노테이션을 사용해 DeptDAO의 객체를 호출하여
    DAO클래스의 InsertDept() 메서드를 작성할 수 있다.

     

    Contoroller 부분 작성

    @Resource(name="*Service") 어노테이션으로 미리작성한 Service파일을 호출한다.

    호출하면서 생긴 객체를 통해 vo를 매개변수로 삽입해준다. 

    *참고할만한 것은 기존에 insert문은 성공한 행의 갯수를 int로 반환했던것으로 기억하는데,
    eGOV에서는 성공시 null을 return한다

     

     


    DB 설정하기 [*.xml]

    오라클 연결_01 : pom.xml 설정 (jdbc설치)

    아래 내용을 pom.xml파일의 알맞은 위치에 추가한다.

    pom.xml은 스프링 구조가 돌아갈 수 있게 온갖 설정이 세팅되어 있는 파일로, 오라클 DB를 사용하기 위해서는 

    여기에 아래의 내용을 추가한다.

     

    *버전에 따라 다르겠으나, mySQL/Oracle연결을 위한 내용이 주석처리로 미리 작성되어있을 수 있으니 사용자에 알맞게 해당 내용을 사용해도 된다.

    <!--  <repositories>  라는 태그의 하위에 아래내용을 추가한다.  -->
    <repository>
          <id>codelds</id>
          <url>https://code.lds.org/nexus/content/groups/main-repo</url> 
    </repository>
    
    <!-- <dependencies> 라는 태그의 하위에 아래의 내용을 추가한다. -->
    <dependency>
           <groupId>com.oracle</groupId>
           <artifactId>ojdbc6</artifactId>
           <version>11.2.0.3</version>
    </dependency> 
    <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
    </dependency>

     

    다운로드의 경로등 문제로 오라클에서 ojdbc를 직접 다운 받아 삽입해야할 수도 있다.  
    아래 링크에서 사용하려는 버전 다운로드 후 (보통은 6버전 사용)  WEB-INF/lib파일아래 넣어준 뒤, maven-update로 새로고침해준다.
    https://www.oracle.com/kr/database/technologies/appdev/jdbc-downloads.html

     

    설정을 완료하면 Maven Dependency경로에서 ojdbc, commons-*-* 파일 등을 확인할 수 있다.

     

    오라클 연결_02 : context-datasource.xml 설정 (계정연결)

    그다음 src/main/resources/../spring 폴더에서 context-datasource.xml 파일을 찾아 내용을 수정해야한다. 
    *파일은 ctrl+sht+R을 눌러 빠르게 조회가능하다

    해당 파일에는 hsql, Mysql, oracle 3가지 경우에 대하여 db연결용 코드가 주석처리 되어있다.

    아래 이미지 처럼 나머지는 그대로 주석으로두고 <!-- oracle --> 부분을 수정한다.

    수정할 부분은 property의 url, ursername, password 3가지이다. 각 내용은 sqldeveloper에서 접속 정보를 참고한다. 

     

    id는 유일해야함으로 다른 주석을 같이 해제하면 안된다. 또한 bean 객체의 class경로는 dbcp2 -> dbcp로 변경한다.
    필자는 SID가 ORCL로 설정되어있다.

     

    오라클 연결_03 : *_SQL.xml 작성 (sql문 작성)

    sample 중 EgovSample_Sample_SQL 파일이 있는 동일한 레벨에 *_SQL.xml 파일을 생성한다. 
    newFile에서 sqlmap을 선택하면 <?xml><!DOCTYPE><sqlMap> 태그가 자동 생성된다.


    <typeAlias>를 통해 사용할 변수들이 있는 VO파일을 연결해주고 (EgovMap은 건들이지 않는다.)

    아래 insert문을 작성한다. id는 DAO의 insert() 메서드에서 작성한 값을 그대로 사용해준다.
    sql문은 아는 그대로 사용하되, values에 넣은 변수는 #value# 로써 작성하며, VO클래스에서 선언한 변수명과 일치해야 인식 할 수 있다. 

    이외 다른 sql문이나 구조는 sample파일을 참조하며 작성할 수 있다. 
    *혹, "XML 문서 구조는 동일한 엔티티에서 시작되고 끝나야 합니다." 와 같은 에러발생시 <>태그의 열고닫힘을 확인해보도록 한다. 붙여넣기시 실수 할 수 있는 부분이다.

     

     

    오라클 연결_04 : sql-map-config.xml 작성 (sql문 파일 등록)

    마지막으로, 작성한 sql 파일은 sql-map-config.xml에서 등록해준다.
    기존 sample의 경로와 동위치에 있으므로 파일명만 바꿔 한줄 추가해주면 된다.

    해당 파일은 context-sqlMap.xml에서 위에서 작성한 dataSource(계정정보)와 configLocation(sql문)으로 합쳐서 연결된다.

    DB연결테스트 

    최종적으로, controller 및 print()를 통해 값이 전달되는지 확인해보자.
    RequestMapping의 method에는 vo객체를 매개변수로 설정한다.

     

    전달받은 name과 매개변수의 vo객체의 setter명이 일치하면 자동으로 값이 담기게 되고
    print(getter())를 통해 콘솔창에서 확인할 수 있다.

     

    입력
    콘솔창 확인
    dbms에서 확인한 내용

     

    반응형

    댓글

Designed by Tistory.