■ Spring DI


필요한 객체의 의존을 주입하는 것이다. Bean Container에 각종 클래스들을 넣어둔다.

기존에는 의존성 관계를 갖고 있는 Controller, Service, Dao 객체들을 생성하고 관계를 맺어 줄 때 사용자가 직접 new 를 이용하여 직접 생성하는 작업을 했지만 스프링에서 DI가 그런 작업을 자동으로 해준다.

Java의 클래스 상속 혹은 interface를 이용한 추상화 기반 개발 방법을 의미한다.


■ IOC (Inversion of Control)


사용자가 아닌 스프링이 오브젝트를 제어한다.

외부에서 객체의 생성에서 소멸까지 Life Cycle을 제어한다.


Container는 스프링이 만든 객체를 생성과 소멸될까지 적재하는 개념으로  IOC와 차이가 있다.


Spring은 DI framework 혹은 IOC freamework라고 부른다.


■ Strong Coupling


A클래스는  B클래스를 멤버변수로 갖고 있다. 이 둘은 의존성 관계를 맺고 있다. 이러한 관계를

Strong Coupling이라 한다. 직역을 하자면 강한 결합이라고 한다.


SOLID 원칙에 근거해서 이러한 관계가 맺어져야 한다.

1. SRP 

2. OCP 

3. LSP 

4. ISP 

5. DIP 



■ Loosing Coupling  약한 결합


A클래스는  B인터페이스를 멤버변수로 갖고 있다. 클래스 대신 인터페이스를 갖고 있는 것을 약한 결합이라고 한다. 


■ DI - 개발자는 객체의 생성을 직접 할 필요가 없다



소스코드 영역은 인터페이스로 만들어야 한다. 약한 결합의 핵심은 인터페이스이기 때문이다.  













'Spring' 카테고리의 다른 글

JSTL  (0) 2018.08.22
MVC 패턴 & ModelAndView  (0) 2018.08.21
Dispatcher Servlet  (0) 2018.08.21
스프링 프로젝트 생성  (0) 2018.08.20
스프링 프레임워크 개요  (1) 2018.08.20

■ Maven Repository 설정






해당 5개 항목을 체크를 한다.


■ Maven Repository index 빌드하기









Maven Repository 창을 오픈한다.




Global Repository 항목에서 Full index를 빌드한다

다소 시간이 소요되며 짧게는 10분 많게는 30분까지 소요될 수 도 있다.




■ Spring 프로젝트 생성



Project Explorer 창에서 우클릭을 한다음 Web Dynamic Web Project를 생성한다.


Working Sets에서 전에 보이지 않던 스프링이 보일 것이다.






폴더를 생성해준다.








Content directory 경로를 src/main/webapp으로 지정해 준다.






■ dependency 추가




Configure >> Convert to maven Project를 클릭한다.






검색창에 spring-webmvc를 검색 한 다음 

org.springframework spring-webmvc 중에 가장 최신 버전을 선택한다. 




참고로 이 버전은 자바 9 이상버전을 지원한다.

 




Ctrl + S를 눌러서 Save를 한다. 그 다음 Dependency Hierarchy를 클릭하면 추가된 라이브러리를 확인할 수 있다. spring-webmvc를 사용하기 위하여 5개 항목이 필요로 하는데 자동으로 생성해 주니 사용자 입장에서는 매우 간편하다.




pom.xml을 확인해보니 추가된 dependency를 확인 할 수 있다.





Maven dependencies 항목도 추가 되었고 열거했을 때 필요에 의해서 의존성 있는 라이브러리들이 자동으로 생성되었음을 확인할 수 있다.


■ 다운로드 확인


C:\Users\Chang\.m2\repository\org\springframework


경로로 들어가면 다운로드된 것을 확인할 수 있다.





'Spring' 카테고리의 다른 글

JSTL  (0) 2018.08.22
MVC 패턴 & ModelAndView  (0) 2018.08.21
Dispatcher Servlet  (0) 2018.08.21
DI  (0) 2018.08.20
스프링 프레임워크 개요  (1) 2018.08.20

■ 스프링 프레임워크 개요


자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크이다. 모듈 별로 나눠서 필요한 부분만 사용하도록 개선하였다. 개발자가 복잡하고 실수하기 쉬운 로우레벨에 많이 신경쓰지 않으면서 비즈니스 로직 개발에 전념할 수 있도록 해준다. 스프링은 오픈소스의 장점을 충분히 취하면서 동시에 오픈소스 재품의 단점과 한계를 잘 극복한다.


경량급 애플리케이션 - 다소 가벼운 애플리케이션을 의미한다. 엔터프라이즈 개발을 굉장히 무겁다. WAS 같은 무거운 애플리케이션에서만 개발이 가능했지만 스프링은 웹 컨테이너 처럼 다소 작은 것에도 동작이 가능하다


로우레벨 - 레벨이 낮을 수록 하드웨어랑 가까워진다. 서블릿을 만들지 않고 url 맵핑을 자유롭게 할 수 있다. 애플레케이션이 담당하는 업무에 집중하고 그 외적인 것은 스프링이 대신해준다. 


오픈소스 - 스프링은 사용자 마음대로 사용할 수 있는 라이선스 기반이다. 오픈소스를 수정을 하든 상업적 목적으로 사용하든 비용이 발생하지 않는다. 누구나 참여 가능하고 자유롭게 쓸 수 있다.



EJB


Enterprise Java Bean 프레임워크를 사용해서 개발을 했던 당시에 불편한 점들을 해소하기 위하여 2002년 로드존슨이 출한 도서 Expert One-on-One J2EE Design and Delvelopment 도서를 출판하게 되었고 이것이 스프링 프레임워크 탄생의 초석이 되었다.



■ 스프링 역할


1. 컨테이너 역할 - 자바 객체를 담는 컨테이너 역할을 한다. 자바 객체가 생성이 되고 소멸 될 때까지 모든 Life-Cycle을 관리해준다. 컨테이너에는 메모리를 갖고 있는 객체들이 있다. 사용자가 원하는 객체를 사용하고 싶을 때 스프링은 사용자에게 메모리 주소를 할당한다.


2. DI (Dependency Injection) 지원 - Dependency 의존이란 A라는 클래스에 B라는 클래스가 멤버변수로 정의 되어 있다고 하는 관계를 의존관계라고 설명하는데 이러한 관계를 스프링이 사용자 대신하여 만들어 준다. 컨트롤러는 DAO에게 의존하고 DAO는 DTO에게 의존한 관계


3. AOP - 관점지향 프로그램 어떤 상황이 발생했을 때 제 3자의 눈으로 바라보는 것을 관점이라 한다. 관점은 전체, 에러, 실행전, 실행후, 트랜잭션 이러한 관점으로 상황에 집중하여 트랜잭션이나 로깅, 보안과 같이 공통적으로 필요로 하는 모듈들을 실제 핵심 모듈에서 분리해서 적용할 수 있다. 


4. POJO 지원 - 스프링 컨테이너에 저장되어 있는 자바 객체는 인터페이스를 구현하거나, 상속받지 않아도 되게끔 순수한 자바 객체만으로 사용할 수 있게끔 지원한다.


5. 트랜잭션 처리를 위한 일관된 방법을 지원 -  어떤 쿼리가 실행 되었을 때 commit을 할지 rollback을 할지 결정해야 한다. oracle, mySql이든 jdbc, jta 든지 문제없이 일관된 트랜잭션 처리를 자동으로 해주기 때문에 사용자는 개발에만 집중할 수 있다.


6.  영속성관 관련된 다양한 API지원 - 스프링은 myBatis. Hibernate, Spring Jdbc 등 데이터베이스 처리를 위한  ORM 프르엠워크들과의 연동을 자동으로 지원해 준다. 



스프링 프레임워크 모듈


이 모든 모듈들을 다 사용하지 않고 필요한 것들만 골라서 사용할 수 있다. 그렇기 때문에 무거운 프레임워크는 맞지만 경량급 프레임워크라고 말하는 것이다.



■ Maven


스프링의 의존 라이브러리를 간편하게 추가할 수 있도록 의존성 주입을 제공한다. 필요한 모듈을 사용할 때 그것에 의존성을 갖고 있는 모든 라이브러리들을 자동으로 빌드해 주는 것을 의미한다. 

1. 빌드를 통해서 배포를 위한 파일 생성

2. 라이브러리를 자동으로 구성함





'Spring' 카테고리의 다른 글

JSTL  (0) 2018.08.22
MVC 패턴 & ModelAndView  (0) 2018.08.21
Dispatcher Servlet  (0) 2018.08.21
DI  (0) 2018.08.20
스프링 프로젝트 생성  (0) 2018.08.20

+ Recent posts