전자정부 표준프레임워크 DB연동
DB연동을 하려면 먼저 샘플 프로젝트 생성을 하고 사전 작업을 해야 하는데, 이 글의 과정이 선행되어야 한다.
https://hyewonkim1996.tistory.com/13
*전자정부 프레임워크의 간단한 구조 파악*
스프링 프레임워크에서는 컨트롤러-서비스단(인터페이스+구현 클래스)-DAO단(인터페이스+구현 클래스)-mapper를 거쳐 쿼리가 실행된다.
전자정부에서는 컨트롤러-서비스단(인터페이스+구현 클래스)-DAO단(mapper 인터페이스)-mapper를 거쳐 쿼리가 실행된다.
자세한 내용은 캡쳐와 함께 보면 이해가 갈 것이다.
1.DB에서 샘플 테이블 생성, 데이터 삽입
DB를 연동하려면 당연히 DB에서 가져올 내용을 만들어야 할 것이다. 이 과정은 굳이 내가 만든 테이블이 아니라 여러분이 원하는 테이블로 해도 된다. insert 후 commit을 꼭 잊지 말자.
2.샘플 프로젝트에서 뷰파일 생성
위 경로에 우리가 DB에서 가져온 내용을 반영할 임시 jsp 파일을 만들도록 하자. 나는 home으로 설정했다.
home.jsp는 다음과 같이 설정했다. 저 테이블에 DB에서 가져온 데이터를 반영할 예정이다.
3.index.jsp 설정 수정
전자정부 프레임워크에서는 맨 처음 index.jsp를 확인하는데, 그 다음 index.jsp에 명시된 포워딩 페이지로 넘어가게 설정되어 있다.
노란색 표시된 부분이 처음에는 샘플 프로젝트 페이지로 되어있을 텐데, 이 부분을 여러분이 만든 jsp파일 이름으로 설정해준다.
이때 전자정부는 초기 설정에서 모든 url에 .do를 붙이도록 설정해 놓았다. 따라서 .do를 지우면 안된다!!!
(.do 지우는 방법은 추후 전자정부 RESTful API 설정 방법에서 포스팅할 예정)
4.컨트롤러에서 home.do 매핑
컨트롤러는 기존 샘플 프로젝트의 컨트롤러를 그대로 사용할 것이다. 컨트롤러에 우리의 jsp 파일을 보여줄 url을 매핑해준다.
*중간 테스트*
4번까지 수행하고 서버를 돌려 보니 첫 화면이 home으로 잘 매핑된 것이 확인되었다.
본격적으로 DB 연동 시작
이제 서비스단, DAO단, mapper를 작성하여 (정말로)(드디어) DB 데이터를 불러올 것이다.
1.mapper 작성
위 파일 경로에 MyBatis xml mapper를 생성해 준다. mapper 이름은 전자정부에서 *로 설정해 놨기 때문에 아무렇게나 해도 된다. 나는 sampleMapper라고 하겠다.
2.mapper namespace 설정, 쿼리 작성
여기서 mapper의 namespace는 DAO단 역할을 하는 인터페이스의 경로다.
예제는 select 쿼리를 실행해 보도록 하겠다. 이때 resultType은 자신이 만들 VO일 텐데,
전자정부는 sql-mapper-config.xml 파일에서 mapper에 대한 설정을 할 수 있다. mapper의 resultType에 대한 별칭을 여기서 설정하면, resultType에 VO의 경로 대신 이름만 쓸 수 있다. 이 부분은 원한다면 생략해도 된다.
3.VO 작성
select 쿼리 resultType으로 설정한 VO를 위 경로에 생성해 주도록 하자.
이름은 MyVO로 설정했다.
필드에 DB에서 생성한 샘플 테이블의 컬럼명과 똑같은 변수를 선언한 후, getter, setter를 생성해 준다.
4.DAO단(mapper 인터페이스) 작성
위 경로에 DAO단 역할을 할 인터페이스를 생성해 준다. 나는 이름을 namespace에서 설정해준 대로 myMapper로 했다.
DAO단을 만들때 아래 두 가지를 반드시 지켜야 한다.
1)Mapper 어노테이션과 DAO단의 이름 설정
2)메소드명 = mapper에 쓴 id
5.서비스단 인터페이스 생성
해당 경로에 서비스단 인터페이스를 생성한다.
이때 서비스단의 메소드명은 mapper id와 동일하지 않아도 된다.
6.서비스단 인터페이스 구현 클래스 생성
해당 경로에 서비스단 인터페이스를 구현할 클래스를 생성한다.
서비스단 구현 클래스를 만들때 아래 다섯 가지를 반드시 지켜야 한다.
1)service 어노테이션과 서비스단의 이름 설정
2)EgovAbstractServiceImpl 클래스 상속
- 전자정부 프레임워크에서 만든 서비스로, 상속하지 않으면 전자정부 프레임워크 요건에 벗어나 전자정부 프레임워크라고 할 수 없다. 만약 DAO단도 Repository로 인터페이스를 구현한다면, 마찬가지로 EgovAbstractDAO를 상속받아야 한다.
3)서비스단 인터페이스 구현(implements MyService)
4)DAO단 객체 의존성 주입
- @Resource의 name = DAO단 mapper 어노테이션에 설정한 이름과 같아야함
5)서비스단 인터페이스 메소드 오버라이드
7.컨트롤러에서 서비스단 객체 주입, DB 쿼리 실행, model 추가
1)서비스단 객체 주입
이때 @Resource name이 서비스단 어노테이션에 명시한 이름과 같아야 한다.
2)DB 쿼리 실행, model 추가
아까 home jsp 파일을 매핑한 부분에서 DB select 쿼리를 실행하고, DB에서 가져온 데이터를 jsp 파일에 반영하기 위해 model로 추가한다.
8.jsp 파일에 model 반영
jsp 문법을 사용하기 위해 taglib 설정을 해준 다음,
테이블에 model로 추가했던 DB 데이터를 jsp 반복문으로 반영해 준다.
*실행 결과*
DB 연동에 드디어 성공하였다~~~ 아유 힘들어
이 구조를 바탕으로 원하는 프로젝트를 만들면 된다.