programming/전자정부프레임워크

전자정부 프레임워크) eGovFrame 게시판 만들기 2탄 ( v3.10.0 )

코딩하는 핑가 2021. 10. 5. 15:52
반응형

* 전자정부 프레임워크 v3.10.0의 게시판 만들기 전 프로젝트에 tibero6 DB연동 및 JUnit Test입니다.

* 오탈자 및 잘못된 정보는 댓글로 알려주시기 바랍니다.

* 본 포스팅을 무단 복제하시거나 배포하지 마시기 바랍니다.

( 게시글 최상단에 본 블로그 출처를 밝히시면 포스팅은 가능합니다. )

 

* 실습 환경

- 개발 OS : Windows 10 64bit

- 실행 OS : Ubuntu 18.04.5 LTS

- DB : Tibero6

- Java : JDK 1.8.0_271 (JDK 1.6 이상 권장)

- IDE : Eclipse IDE - eGovFrameDev 3.10 64bit

- Tomcat : Apache Tomcat v8.0

- Maven : Maven 3.10

- mybatis : mybatis-3.5.3

 

* 실습 환경 설치 및 환경 설정은 기초 단계를 참고하시기 바랍니다.

https://ss-o.tistory.com/notice/147

 

0탄 - eGovFrame 게시판 만들기 0탄 - 예제 프로젝트 삭제 후 jsp 생성 및 페이지 연결

1탄 - eGovFrame 게시판 만들기 1탄 - 예제 프로젝트 tomcat 서버 연동

2탄 - eGovFrame 게시판 만들기 2탄 - tibero DB 연동 및 관련 파일 수정

 

* 본 포스팅의 코드가 필요하신 분은 댓글남겨주세요.


0. 간단한 구상

포스팅을 시작할 때 욕심으로는 가장 기본이라고 생각드는 관리자페이지, 로그인페이지, 권한관리 페이지, 게시판 페이지(등록, 수정) 를 다 만들고 싶지만 세미나 준비 기간이 짧기 때문에 공지사항 페이지에 페이징과 검색 기능만 구현할 예정이다.

세미나 이후 시간적 여건이 된다면, tomcat server에 연동시켜놨던 프로젝트를 AWS에 연동시키고 소스 또한 추가할 계획이다.

 

1. DB 테이블 생성 및 데이터 삽입

포스팅 전 기본 실습 때 가장 큰 실수를 했던 부분이다.

DB 테이블 생성 후 데이터 삽입 부분에서 insert 후 commit을 해주지 않아 해당 에러를 찾는데 오랜 시간이 걸렸다.

 

* 사전 필수 작업

- DB 계정 생성 및 권한 주기

 

아래의 DDL, DML을 DB 계정에 생성해준다. ( DB : tibero6 )

DROP TABLE BOARD_MAIN CASCADE CONSTRAINTS;
CREATE TABLE BOARD_MAIN(
    BOARD_ID VARCHAR2(255) NOT NULL,
    TITLE VARCHAR(300) NOT NULL,
    CONTENTS CLOB,
    HIT_CNT  NUMBER(10) DEFAULT 0,
 	CREATOR_ID VARCHAR2(20) DEFAULT NULL,
 	CREATED_NM VARCHAR2(20) DEFAULT NULL,
 	PASSWORD VARCHAR2(200) DEFAULT NULL,
 	ATCH_FILE_ID CHAR(20) DEFAULT NULL,
    FRST_REGIST_PNTTM TIMESTAMP DEFAULT SYSDATE,
    FRST_REGISTER_ID VARCHAR(50) DEFAULT NULL,
    LAST_UPDT_PNTTM TIMESTAMP DEFAULT SYSDATE,
    LAST_UPDUSR_ID VARCHAR(50) DEFAULT NULL,
    DELETED_YN CHAR(11) DEFAULT 'N',
    CONSTRAINT BOARD_MAIN_PK PRIMARY KEY (BOARD_ID)
);

COMMENT ON column BOARD_MAIN.BOARD_ID 			IS '게시물 번호';
COMMENT ON column BOARD_MAIN.TITLE  			IS '게시물 제목';
COMMENT ON column BOARD_MAIN.CONTENTS  			IS '게시물 내용';
COMMENT ON column BOARD_MAIN.HIT_CNT  			IS '조회수';
COMMENT ON column BOARD_MAIN.CREATOR_ID  		IS '게시자ID';
COMMENT ON column BOARD_MAIN.CREATED_NM  		IS '게시자명';
COMMENT ON column BOARD_MAIN.PASSWORD  			IS '비밀번호';
COMMENT ON column BOARD_MAIN.ATCH_FILE_ID  		IS '첨부파일 ID';
COMMENT ON column BOARD_MAIN.FRST_REGIST_PNTTM 	IS '최초 등록 시점';
COMMENT ON column BOARD_MAIN.FRST_REGISTER_ID 	IS '최초 등록자 ID';
COMMENT ON column BOARD_MAIN.LAST_UPDT_PNTTM  	IS '최종 수정 시점';
COMMENT ON column BOARD_MAIN.LAST_UPDUSR_ID 	IS '최종 수정자 ID';
COMMENT ON column BOARD_MAIN.DELETED_YN  		IS '삭제 여부';

commit;

 

2. DB 관련 파일 수정

0. web.xml

DB 관련 파일을 내 환경에 맞게 수정하기 전,

src/main/webapp/WEB-INF 하위에 존재하는 web.xml의 <context-param> 태그를 살펴본다.

설정 파일은 context-*.xml 로 되어있는데 파일 위치가 classpath*:egovframework/spring/~으로 되어있는걸 확인할 수 있다.

이런식으로 contextConfigLocation이 설정되어 있으면 외부의 설정 파일을 사용하겠다는 의미이다.

1. pom.xml

tibero를 사용하기 위해 pom.xml에 의존성을 추가해줘야한다.

(tibero는 mySQL이나 oracle처럼 추가하면 안됨)

2. context-datasource.xml

[소스경로]

src/main/resources/egovframework/spring/

DB에 접근할 수 있는 connection을 마련해주는 파일로 본인의 환경에 맞게 설정한다.

2-1. datasource JUnit Test

- 추가 예정

 

3. context-mapper.xml

[소스경로]

src/main/resources/egovframework/spring

 

[소스 살펴보기]

* sqlSession :

sql문을 실제로 호출해주는 객체

- 핵심 : SqlSessionTemplate

myBatis Spring 연동 모듈의 핵심으로 sqlSessionTemplate은 sqlSession을 구현하고 코드에서 sqlSession을 대체하는 역할을 한다.

getMapper()에 의해 return된 mapper가 가진 메서드를 포함해서 SQL을 처리하는 myBatis 메서드를 호출할 때 sqlSessionTemplate은 sqlSession이 현재의 스프링 트랜잭션에서 사용될 수 있도록 보장한다.

sqlSessionTemplate은 생성자 인자로 sqlSessionFactory를 사용해서 생성한다.

 

* sqlSessionFactory :

sqlSession을 만드는 역할을 담당

 

* sqlSession을 bean 등록하는 이유 - 재정리 필요

( 참고 - https://iotsw.tistory.com/82?category=717332 )

bean 등록 전 sqlSession은 thread가 안전하지 않기 때문에 한개의 session만 open해놨다가 사용 완료 후 close를 해줘야하는 번거로움이 있다.

하지만, bean 등록 후 기존에 DAO가 멤버로 유지하던 sqlSessionFactory를 스프링 컨테이너에 등록해두고 사용한다.

여기서 sqlSessionFactory는 DB 연결 정보, model alias, mapper 파일 위치 정보를 만들 수 있고,

spring에 연동되고 나서는 적절히 sqlSession 객체를 관리해주기 때문에 Factory가 아닌 session을 그냥 쓸 수 있게 됐다.

 

3. VO 작성 및 객체 mapping

2번의 DB 관련 파일 수정에서 VO 객체를 mapping하는 mybatis를 설정해야하는데 그 전에 DB에 생성해놓은 테이블을 보고 MainVO.java를 작성해줘야한다. ( getter, setter 까지 작성하기 )

package egovframework.example.main.model;

public class MainVO {

	private String BOARD_ID;
	private String TITLE;
	private String CONTENTS;
	private int HIT_CNT;
	private String CREATOR_ID;
	private String CREATED_NM;
	private String PASSWORD;
	private String ATCH_FILE_ID;
	private String FRST_REGIST_PNTTM;
	private String FRST_REGISTER_ID;
	private String LAST_UPDT_PNTTM;
	private String LAST_UPDUSR_ID;
	private String DELETED_YN;

}

VO 작성 시 DB명과 달라 에러가 발생하는 경우가 많으니 DDL문을 복붙한 뒤 자료형만 붙여주는 방식으로 하는게 편하다.

1. sql-mapper-config.xml 

[소스경로]

src/main/resources/egovframework/sqlmapp/example

작성한 VO를 특정 이름으로 사용 가능하도록 별칭을 붙여준다.

2. *Mapper.xml

[소스 생성 경로]

context-mapper.xml 에 설정해놨던 src/main/resources/egovframework/sqlmap/mappers에 BoardMapper.xml을 생성해준다.

<mapper> 태그 하위에 sql문을 작성할 수 있다.

 

mapper.xml 까지 작성하고 나면 이후 포스팅에서는 springframework, egovframework를 활용하여 mvc 로직을 짠 뒤 tomcat 서버로 실행시켜볼 예정이다.

 

반응형