Oasis' story

[Spring] 개론 본문

Program Note/JAVA

[Spring] 개론

oasispapa 2014. 11. 15. 10:21

1. Spring 프레임워크의 특징

1.1 DI(Dependency Injection) / Ioc(제어역행) :

기존의 프로그램은 객체를 소스에서 정의하고 생성한다.

객체를 소스에서 직접 생성하지 않고, 스프링 프레임웍이 객체를 생성후 나중에 객체를 전달해준다. 개발자가 설정파일에 필요한 객체에 대한 정보를 주고 프로그램 내에서는 인터페이스로 객체를 접근할 수 있도록 해주면 스프링 프레임웍이 설정파일을 읽어 객체를 생성후 인터페이스를 통해 객체를 전달해준다.

 

<기존 코딩방식>

Class A

{          ……

           B b = new B();

}

 

<스프링 사용한 코딩>

Class A

{

           IB b = 스프링팩토리

           스프링에게 객체를 달라고 요청한다.

}

 

스프링은 설정파일(xml)를 읽어서 객체를 만들어서 전달한다. 자동적으로 Single tone으로 객체를 생성하게 되어있어서 보통은 일을 하는 클래스의 경우만 DI로 만든다. (인터페이스를 꼭 만들어줘야한다.)

 

Xml 형태의 설정 -> annotation 형식(@Override: 특별한 형태의 주석)으로 변경한다. (예전 스프링 2.0에서는 xml에 모두 기술해야하던걸, 자바의 annotation 버전이 업되면서 스프링도 3.0으로 업데이트되며 xml에서 기술할 필요가 없게됨)

 

1.2 AOP(Aspect Oriented Programming)

- 관점 지향 프로그래밍

- 핵심 비즈니스 로직과 그 외의 로직 (예를 들어 로그, 트랜젝션, 성능 테스트 등)을 분리시켜 개발자는 핵심 비즈니스 로직만 프로그램하고, 나중에 따로 필요한 부분을 분리시켜서 코딩을 끼워넣는 방식이다.

 

*Annotation : 주석의 일종인데 컴파일러한테 뭔가 지시사항을 부여할 수 있다.

 비슷한 예로 C언어 조건부 컴파일로 #ifndef~~~ #pragma

 C#에서는 Attribute 로 부르며 자바는 0부터 도입되어 @로 표기한다.

 

모델 – DAO, DTO

– JSP, JSTL, 벨로시티

컨트롤러 스프링, 뷰하고 모델단 연계시키는 부분

 

*DispatcherServlet : 웹상의 모든 요청을 받도록 web.xml 에 설정한다.

  

*HandlerMapping – url 과 실제호출될 컨트롤러 클래스를 찾아준다.

 

*Controller – Controller 라는 클래스를 상속받아서 별도의 클래스를 만든다. HandlerMapping 객체가 url을 보고 이 객체를 호출해준다. (사용자가 만들어야 한다)

 

*ModelAndView 객체를 만들어서 반환하면 ViewResolver 클래스 객체가 ModelAndView객체에 저장된 내용을 해석해서 적당한 jsp 파일을 호출한다. ModelAndView객체에 값을 저장하면 jsp에서 request.getAttribute 로 값을 접근할 수 있다.

 

*스프링 웹에서의 모든 요청은 컨트롤러가 받는다.

2.0 미만 버전의 스프링에서는 컨트롤러라는 별도의 클래스가 존재했다. 따라서 무조건 컨트롤러 클래스를 상속받아서 BoardController 라는 식으로 컨트롤러를 만들었음.

2.0 이상에서는 POJO(Plain Old and Java) 일반 클래스 만들고 대신에 @Controller 라는 annotation 을 클래스 위에 반드시 붙여야 한다. (없으면 컨트롤러로 인식을 하지 못한다.)

 

*클라이언트가 웹을 통해 요청하면, DispatcherServlet 클래스가 요청을 모두 받아서 HandlerMapping 이라는 객체를 통해 웹 URL과 컨트롤러를 연결한다.

기존 버전에서는 설정파일에 name 속성을 사용해서 url 을 설정해줬는데 현재버전에서는 컨트롤러의 @RequestMapping(value=”/main”)이런 식으로 URL을 만들어준다.


*DB에 데이타 읽고 쓰기 - Service 객체를 통해서 -> Dao 객체를 호출 하나의 서비스가 여러개의 Dao를 가질 수 있도록 되어있다. 

서비스는 반드시 인터페이스가 있어야 하고 클래스에는 @Service 라는 annotation을 붙여야한다. 


*컨트롤러에서 서비스를 연결하려면 

@Autowired 인터페이스 서비스 변수명; 

으로 해야한다. 

ex) 

@AutoWired

IMemberService memberService;


*Dao 를 만들어서 DB에 데이타 읽고 쓰기 (반드시 서비스 단에서 호출하여 컨트롤러와의 거리를 둬 유연성을 유지한다.)

@Repository

@AutoWired

IMemberDao memberDao;


*ViewResolver 클래스가 ModelAndView 객체를 통해 던진 jsp url 을 실제 jsp 경로로 수정해서 찾아준다. 


요청 -> DispatcherServlet -> HandlerMapping -> Controller -> Service -> Dao -> Service ->Controller -> ViewResolve -> Jsp