소프트웨어를 만드는 데 기본이 되는 골격 코드 반제품 완전한 애플리케이션 소프트웨어가 아니다. 문제 영역(도메인)을 해결하기 위한 잘 설계된 재사용 가능한 모듈 확장하여 비즈니스 요구사항에 맞는 완전한 애플리케이션으로 완성이 요구된다.
스프링을 이용하여 웹을 만들면 Spring MVC를 사용 DB어플리케이션 프레임 워크는 MyBatis,Spring DAO가 존재 기타(지원) 프레임워크로는 로깅(Log4J), 빌드/배포(Ant), 단위테스트(JUnit)가 존재
객체에 대한 의존성,생성,소멸 등에 대한 것을 스프링 컨테이너에게 넘긴다. 이로 인해 개발자는 비즈니스만 잘 만들면 된다. 이로인해 생산성이 향상된다.
EJB
Enterprise Java Bean의 약자. 자바 빈즈 스펙에 맞게 구현된 자바코드를 웹에서 쉽게 이용하기 위해 JSP 표준액션 태그 지원 인터페이스 구현 등 불편한 점이 많았다.
POJO(Plain Old Java Object)
EJB를 대체하여 특정클래스를 상속하거나 인터페이스를 구현하지 않는 평범한 자바 클래스(느슨한 Java Bean, Spring Bean)를 이용하며 단순하지만 EJB에서 제공하는 고급 기술을 제공한다. -자바 언어와 꼭 필요한 API외에는 특정 규약에 종속되지 않는다. -특정 환경에 종속되지 않는다. (기술과 비즈니스 분리)(서블릿은 서블릿 컨테이너에 종속적이였음) -스프링에서는 스프링에 특화된 인터페이스 구현을 요구하지 않음 -스프링 자체에 의존성이 높은 클래스 확장을 거의 요구 하지 않음
Spring
1.POJO를 이용한 가볍고(lightweight) 비침투적(non-invasive) 개발 2.DI와 인터페이스 지향을 통한 느슨한 결합도(loose coupling) 3.Aspect와 공통 규약을 통한 선언적(declarative) 프로그래밍 4.Aspect와 템플릿(template)을 통한 반복적이고 상투적인(boilerplate) 코드 제거
AOP는 OOP를 더 OOP답게 쓰는것
3.1 IoC( 제어역전 ,Inverse of Control (Object) ) 과 DI( 의존관계 주입)
Spring Container = IoC(DI) Container = Bean Container = Application Context new를 하지 않아도 컨테이너가 알아서 만들고 소멸해주고 다한다!!
AOP (Aspect Oriented Programming)
클래스의 관심에 따라 클래스를 구성하게되는데(ex:DAO는 DB접근에 관심)
횡단관심: 여러곳에서 공통으로 필요한 모듈 횡단관심은 클래스로 빼내서 모듈로 만든다. 관심의 분리 ( Separation of Concern ) 횡단 관심( Crosscutting Concern )과 핵심관심( Core Concern ) 핵심관심 모듈과 횡단 관심 모듈이 긴밀하게 결합 ( 핵심 모듈이 필요한 시점에..) OOP 문제점 : 중복코드, 지저분한 코드, 생산성 저하, 재활용성의 문제점 필요한 시점에 횡단 관심 모듈을 삽입하여 동작하게 하는 기술.
EJB AOP, JDK Dynamic Proxy, AspectJ, Spring AOP
실습
다이나믹 웹 프로젝트를 생성해서 메이븐으로 바꿔줄것이다.
1.dynamic web project - next - src를 remove 하고 src/main/java 추가 -next - directory를 webapp로 변경하고 체크하고 finish 2.프로젝트 우클릭 configure- convert to maven project -그룹 id에 com.bigdata2017입력 작업이 끝나고 나면 프로젝트 옆 이미지에 m이 생긴다.
<dependencies> <!-- Spring Core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${org.springframework-version}</version> </dependency>
<!-- Spring Web --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${org.springframework-version}</version> </dependency>
<!-- Spring MVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${org.springframework-version}</version> </dependency>