전자정부 프레임워크 구조 샘플 프로젝트 구조(Service 및 Dao)(4)

 

지난번 샘플 프로젝트 구조(Controller) 편에 이어 서비스 객체에 대하여 설명하도록 하겠습니다.
샘플 프로젝트의 "src/main/java/egovframework.example.sample.web.EgovSampleController.java" 파일을 열어 보면 다음과 같은 소스가 있습니다.

 /** EgovSampleService */
 @Resource(name = "sampleService")
 private EgovSampleService sampleService;

컨트롤러 클래스가 인스턴스화(메모리 적재)되면 EgovSampleService 인터페이스 클래스가 sampleService 변수명으로 생성됩니다.
EgovSampleService.java 파일을 열어보면 다음처럼 구현부가 없이 메소드 정의만 되어 있습니다.
파일을 쉽게 찾아서 여는 방법은 "Ctrl+Alt+R"키를 눌려 "Open resource" 창에서 파일명을 적거나 "*Service.java"와 같이 패턴으로 찾으면 됩니다.

 public interface EgovSampleService {

 /**
  * 글을 등록한다.
  * @param vo - 등록할 정보가 담긴 SampleVO
  * @return 등록 결과
  * @exception Exception
  */
    String insertSample(SampleVO vo) throws Exception;

    /**
  * 글을 수정한다.
  * @param vo - 수정할 정보가 담긴 SampleVO
  * @return void형
  * @exception Exception
  */
    void updateSample(SampleVO vo) throws Exception;

서비스 클래스는 인터페이스인데 어떻게 sampleService로 생성이 가능한 걸까?

그건 @Resource 어노테이션이 있기 때문에 가능합니다. 이클립스 메뉴에서 "Search > File"로 "sampleService"을 "*Service*.java" 패턴으로 검색을 하면  "egovframework.example.sample.service.EgovSampleServiceImpl.java" 파일이 검색되어 집니다.
또는 Controller 자바에서 메소드 위에 마우스키를 올리고 Ctrl 키를 눌려 클릭하여 "Open Implementation"을 누르면 메소드를 구현한 파일로 이동합니다.

EgovSampleServerImpl 자바 파일로 이동해보면 @Service("sampleService") 어노테이션이 지정되어 있는 것을 확인 할 수 있습니다.

 @Service("sampleService")
public class EgovSampleServiceImpl extends EgovAbstractServiceImpl implements EgovSampleService {
    /** SampleDAO */
    // TODO ibatis 사용
    @Resource(name="sampleDAO")
    private SampleDAO sampleDAO;
    // TODO mybatis 사용
    //    @Resource(name="sampleMapper")
   // private SampleMapper sampleDAO;

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

   ....
    /**
  * 글 목록을 조회한다.
  * @param searchVO - 조회할 정보가 담긴 VO
  * @return 글 목록
  * @exception Exception
  */
    public List<?> selectSampleList(SampleDefaultVO searchVO) throws Exception {
        return sampleDAO.selectSampleList(searchVO);
    }
}

위에 보면 "List<?>"으로 리턴 받도록 설정되어 있는데 이렇게 사용하면 안됩니다. 에러는 아니지만 컴파일시에 경고 표시가 되고 시큐어 코딩에 걸립니다. "?"는 모든 Type을 받겠다는 의미인데 "List<EgovMap>"으로 해주어야 합니다. Dao를 추적하여 Sql Id를 찾아가 보면 리턴 클래스가 EgovMap입니다. EgovMap는 Map을 상속 받은 것이니 "Map"으로 해도 됩니다.
DAO의 selectSampleList 함수가 리턴하는 type도 List<EgovMap>로 해주어야 하겠죠?

DAO 부분을 보면 TODO ibatis 사용이라는 부분과 아래에 mybatis 사용이라는 부분이 있습니다. mybatis는 ibatis의 최신 버전입니다. 그런데 왜 이름이 바뀌였을까요?
원래 아파치 프로젝트팀이였는데 google code로 가면서 명칭을 바뀌어 버렸습니다.
그럼 mybatis를 사용안하고 왜 ibatis를 사용할까? 자세한 것은 검색해서 확인해봐야겠지만 몇몇 문제가 있어 다운그레이드해서 ibatis를 사용하는 것으로 알고 있습니다. mybatis의 문제일 수도 있고 전자정부프레임워크와의 호환성 문제일 수도 있겠죠.

 SampleDAO.selectSampleList는 다음과 같이 되어 있습니다. 리턴 타입은 List<?>으로 되어 있네요. List<EgovMap>로 수정할 것을 권장합니다.

 @Repository("sampleDAO")
public class SampleDAO extends EgovAbstractDAO {
     ....
    /**
  * 글 목록을 조회한다.
  * @param searchMap - 조회할 정보가 담긴 Map
  * @return 글 목록
  * @exception Exception
  */
    public List<?> selectSampleList(SampleDefaultVO searchVO) throws Exception {
        return list("sampleDAO.selectSampleList", searchVO);
    }
    ....
}

"list"라는 함수를 사용하여 데이터를 조회합니다. 파라미터 첫번째는 Sql ID이고 두번째는 Sql이 받을 파라미터입니다. list를 DAO에서 아무리 찾아도 선언이 없는데 "EgovAbstractDAO"에서 구현되어 있는 메소드입니다.
File 찾기로 "sampleDAO.selectSampleList"를 찾으면 아래 그럼처럼 검색되어 집니다. 검색된 부분을 클릭해서 파일을 열면 아래 그림과 다르게 표시되어 질겁니다. "EgovSample_sample_SQL.xml" 클릭하면 그럼처럼 출력됩니다.

parameterClass는 "searchVO"로 되어 있고 resultClass는 "egovMap"로 되어 있는데 SQL XML 파일 맨 윗 부분으로 올라가 보면
 <typeAlias  alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>
 <typeAlias  alias="searchVO" type="egovframework.example.sample.service.SampleDefaultVO"/>
와 같이 얼라이어스를 준 것을 확인 할 수 있습니다.

조회된 컬럼은 "ID, NAME, DESCRIPTION, USE_YN, REG_USER" 이렇게 되어 있는데 "egovSampleList.jsp"에는 "${result.useYn}"과 같이 카멜 표기법으로 되어 있는 것을 주의해주세요. ibatis에서 EgovMap로 결과가 리턴 될 때 낙타표기법으로 변환됩니다.
jsp에서 ${result. ...} result는 어디서 나왔을까요?
Controller java 파일을 보게 되면 다음과 같이 model에 "resultList"라는 이름으로 add하고 있습니다. 

List<?> sampleList = sampleService.selectSampleList(searchVO);
  model.addAttribute("resultList", sampleList);



출처: http://mystarlight.tistory.com/127 [커피향처럼]

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
66 스프링(Spring) 개발 - (6) 프로젝트 생성 및 개발 시작 file 졸리운_곰 2018.01.17 61
65 스프링(Spring) 개발 - (5) 스프링 기본 프로젝트 분석 file 졸리운_곰 2018.01.17 75
64 스프링(Spring) 개발 - (4) 스프링 프로젝트 생성하기 file 졸리운_곰 2018.01.17 70
63 스프링(Spring) 개발 - (3) 개발환경 구성하기 - 이클립스 플러그인 설치(3/3) file 졸리운_곰 2018.01.17 95
62 스프링(Spring) 개발 - (2) 개발환경 구성하기 [Eclipse+Maven+SVN] (2/3) file 졸리운_곰 2018.01.17 49
61 스프링(Spring) 개발 - (1) 개발환경 구성하기 [Eclipse+Maven+SVN] (1/3) file 졸리운_곰 2018.01.17 69
60 Spring에서 파라미터 전송 file 졸리운_곰 2018.01.17 101
59 View 데이터의 Controller 전달 방법 졸리운_곰 2018.01.17 52
58 전자정부프레임워크(Spring) 값 주고 받는 3가지 방법 졸리운_곰 2018.01.17 59
57 iBatis 와 MyBatis 차이점 iBatis -> MyBatis 졸리운_곰 2018.01.16 288
» 전자정부 프레임워크 구조 샘플 프로젝트 구조(Service 및 Dao)(4) file 졸리운_곰 2018.01.12 124
55 전자정부 프레임워크 구조 샘플 프로젝트 구조(Controller)(3) file 졸리운_곰 2018.01.12 275
54  전자정부 프레임워크(eGovframe) 동적 웹프로젝트 시작하기(2) file 졸리운_곰 2018.01.12 73
53 전자정부 프레임워크(egov framework) 설치하기(1) file 졸리운_곰 2018.01.12 165
52 01. 전자정부 표준 프레임워크는 무엇? file 졸리운_곰 2018.01.12 125
51 전자정부 표준프레임워크 eGov : 실행환경 템플릿 및 예제 테이블정의서 file 졸리운_곰 2018.01.11 260
50 전자정부표준 프레임워크 eGov 공통 콤퍼넌트 설명 (산출물) file 졸리운_곰 2018.01.11 225
49 전자정부프레임워크 eGov : 로그인 분석 졸리운_곰 2018.01.11 261
48 전자정부표준프레임워크 eGov : Sample예제 기본적인 흐름 분석하기. 졸리운_곰 2018.01.11 182
47 전자정부표준 프레임워크 eGov 테이블 설명서 : 공통컴포넌트 3.5.0 ERD 파일 file 졸리운_곰 2018.01.11 258
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED