본문 바로가기

💻Spring

전자정부 프레임워크 2일차 - 프레임워크 분석

반응형

오늘은 뭘 할까 고민하다가 전자정부 프레임워크에 대해서 분석해보았다.

 

전자정부의 큰 흐름은 

Service > ServiceImple > Dao > mapper > Dao > serviceImple > masterboard > jsp 순이다.

 

일단 컨트롤러부터 보면 컨트롤러는 egov-com-servlet.xml을 통해 자동으로 빈으로 등록해줌.

egov-com-servlet.xml

       위 그림을 보면 ,

      context:component-scan ~을 통해서 egovframework 패키지를 스캔해서

      include를 통해 Controller 어노테이션이 있으면 등록을 하고

      exclude를 통해 service와 repository를 제외시킨다. ()

cmmn, SampleService, Controller, properties 위치

Cmmn : 공통 기능들을 묶어놓은 폴더

@ , 어노테이션 : 컴퓨터가 소스코드를 읽으면서 먼저 어노테이션을 읽음,,

                               컴터에게 어떤 기능을 하는지 알려주는거

@Controller - 사용자의 요청(.do)가 진입하는 시점으로, 요청에 따라 기능들(Service)이 어떤 처리를 할 지 결정해주는 어노테이션

컨트롤러는 결정만 해주고 실질적인 처리는 Service에서 진행함. 로직이 완성되면 처리된 데이터를 포함하는 jsp를 보여줌

컨트롤러의 Service들

 

 @Resource : 어플리케이션에서 필요로 하는 자원을 자동으로 연결할때 사용하는 어노테이션

빈 객체의 name 속성을 통해 자동으로 주입됨.

       -   sampleService : 예제로 만들어진 서비스로 게시판의 글을 조회, 수정, 목록을 가져옴

       -   propertiesService : 페이지의 크기가 정의되어있는 서비스로, context-properties.xml에 정의되어있음,

       -   beanValidator : 유효성을 검증해주는 서비스

 

@Resource의 name = "sampleService"는 @Service 어노테이션의 sampleService라는 bean 객체를 스캔해와서 

변수에 넣는다.

 

여기서 bean객체는 스프링이 싱글톤 패턴을 적용시키기 때문에 Spring IoC Container내에 하나의 객체만 존재한다.

bean은 Spring 컨테이너에서 한번 생성되고 컨테이너가 사라지면 bean도 제거된다.

기본적으로 모든 bean은 scope가 명시적으로 지정되지 않으면 singletone이다.

 

@RequestMapping

글을 조회하는 함수

 컴퓨터는 사용자의 url 요청(localhost:8080/Ailiartsua_shop.do)이 들어오면, RequestMapping 이라는 어노테이션이

붙은것들만 확인해서 value값과 매칭(매핑)시켜 처리를 한다. 

그래서 아래 내리다보면 addSample,addSampleView,updateSample,updateSampleView,deleteSample등의

url이 다른걸 확인 할 수 있다.

addSample, updateSampleView의 url이 다른것을 확인 할 수 있음

따라서 기본 컨트롤러인 EgovSample Controller는

게시글의 기능, 페이지목록, 유효성을 검증하는 3가지의 서비스를 호출하고,

글 조회, 등록화면 조회, 글 수정화면 조회, 글 수정, 삭제,, 5가지의 기능을 수행하는 컨트롤러이다.  

출처 : [Spring/eGov ] #6 웹 서비스 만들기 2 / 요청 URL 파라미터 가져오기 / Debug 방법 / 디버깅 하는법 / @ModelAttribute / searchVO :: 외장하드 (tistory.com)

1. 사용자가 url 요청 

2. 해당 url에 맞는 @RequestMapping 을 확인해서 그 요청에 따른 로직을 실행

3. return값을 반환(jsp파일임)

4. WAS가 RequestMapping에서 넘어온 정보들을 jsp에 뿌려서 조립하고 그 결과를 사용자에게 보여준다..(??) 

 

VO (Value Object) : 값 객체,,  데이터를 담을 수 있는 주머니 라고 생각 하면 됨.

컨트롤러마다 필요한 공통 정보들을 VO객체 단위로 묶고 그 객체만 넘기면 된다.

 

사용자 화면에서 서버로 요청을 보낼 때 데이터를 실어보내는 방법은 여러가지가 있는데

1.URL param(PathVariable)

2. HttpServletRequest param

3. RequestParam

4. 기타 등등

 

전자정부 프레임워크에서 사용하는 @ModelAttribute 방식은 

RequestParam 방식과는 비슷하지만 자동으로 우리 VO와 매핑을 시켜준다. 

RequestParam방식은 @Requestparam("variable1") String variable1 이런식으로,,

variable1을 사용자가 보내면 String값으로 변수 하나를 담아서 이용하는건데

이러면 변수 100개를 가져와야하면

@RequestParam("variable1") String variable1

@RequestParam("variable2") String variable2

@RequestParam("variable3") String variable3

이런식으로 100까지 선언해줘야하기때문에 

출처 : [Spring/eGov ] #6 웹 서비스 만들기 2 / 요청 URL 파라미터 가져오기 / Debug 방법 / 디버깅 하는법 / @ModelAttribute / searchVO :: 외장하드 (tistory.com)

VO를 이용해서 1부터 100까지 VariableVO로 선언을 하면 된다. 

@ModelAttribute 어노테이션을 통해 사용자 페이지에서 넘어온 정보를 서버의 스프링 프로젝트(java)단에서 쓰게끔 해준다.

1번의 searchVO를 통해서 VO를 찾아 Model 객체에 자동으로 추가가되어 JSP 뷰단으로 안전하게 넘어감.

객체 이름또한 1번

2번의 SampleDefaultVO searchVO 의 클래스는 빈클래스이고, getter와 setter가 명명 규칙에 맞게 만들어져 있어야 함

저 searchVO의 setter를 통해 해당 멤버변수로 바인딩됨.

>> 2번의 객체가 모델의 객체로 추가될 때 1번의 객체이름으로 추가가 된다.

Model addAttribute(String name, Object value)

>> value 객체를 name 이름으로 추가한다. ,, 

model.addAttribute("sampleVO", new SampleVO()) 

>> sampleVO라는 형태의 key로 new SampleVO()의 값을 전달하는 키값 형태의 구조.

 

-ModelAttribute 파라미터

컨트롤러 메서드의 모델 파라미터와 @ModelAttribute로부터 모델 이름, 모델 타입정보를 가져온다. 

@SessionAttribute세션 저장 대상 모델 이름

 모델 이름과 동일한 것이 있다면 HTTP세션에 저장해둔 것이 있는지 확인. 만약 있으면 모델오브젝트 재활용한다

 

 

addSample의 메서드를 보면

sampleService의 insertSample에 sampleVO를 param으로 전달시킨다.

sampleService의 insertSample

이 sampleService는 인터페이스이기 때문에  insertSample은 인자를 받고 SampleServiceImple로 넘어가 실질적인 기능을 처리한다.

 

sampleServiceImple의 insertSample

코드를 보면

Logger는 log4j2.xml에 기술되어있다. 여러가지 레벨로 정의하는데 그 중 debug는 정상적이고 중요하지 않은 메세지를

로깅하는 함수이다. (메소드의 시작, 종료 등 ) >>  vo를 가져오며 log를 작성한다는 뜻 같아보임..(??)

 

 DAO를 통해 insertSample의 vo를 가져오게된다. 

여기서 DAO는 Data Access Object로 db와 연동하여 데이터를 가져오는 작업을 한다.

 DAO를 들어가 insertSample을 보면 insert 메서드를 실행하는데 insert는 눌러보니

루트 파일로 SQL에 접근하게 되어있는 것 같다. 그래서 그에 해당하는 SQL인 EgovSample_Sample_SQL.xml에 가보니

resultMap을 통해 SQL을 통해 리턴된 값들을 VO에 저장하는 식의 구조가 되어있다,,

거의 모든 SI 사업이 이렇게 된다고 함.

EgovSampleController의 addSample 메서드

다시 Controller단으로 가서 addSample 메서드를 보면

model.addattribute의 return값으로 sample/egovSampleRegister(.jsp)가 되어있는것을 확인 할 수 있다.

해당 jsp 파일을 보니

egovSampleRegister.jsp

 가져온 VO를 사용하는것을 확인 할 수 있다.

반응형