경량 프레임워크(light-weight)
예전 프레임워크는 다양한 경우를 처리할 수 있는기능을 가지도록 만들다 보니 하나의 기능을 위해서 너무 많은 구조가 필요했다. 기술이 너무 복잡하고 방대했기때문에 전체를 이해하고 개발하기에는 어려움이 많아 스프링 프레임 워크가 등장했다.
특정 기능 위주로 간단한 jar파일등을 이용해서 모든 개발이 가능하도록 구성되어있다.
- POJO기반의 구성
- 의존성 주입(DI)을 통한 객체간의 관계구성
- AOP 지원
- 편리한 MVC구조
- WAS에 종속적이지 않은 개발환경
Plain Old Java Object , 단순한 자바 오브젝트
POJO란 , 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 필요에 따라 재활용 될 수 있는 방식으로 설계된 오브젝트를 말한다.자바코드에서 일반적으로 객체를 구성하는 방식을 스프링 프레임워크에서 그대로 사용할 수 있다는 의미이다.
의존성(dependency) 이란 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것
객체간의 의존성이 존재할 경우 개발자가 직접 객체를 생성하거나 제어하는것이 아니라 제어반전에 의하여 특정 객체에 필요한 다른 객체를 프레임워크가 자동으로 연결시켜주는 것을 말한다. 개발자는 자신에게 필요한 객체를 직접 할당하지 않고, 인터페이스를 통해 선언한 객체에 스프링 프레임워크에 의해 주입받아 사용할 수 있기때문에 비지니스 로직에만 집중 할 수있다. 개발자는 객체를 선언만 할 뿐 프레임 워크에서 자동으로 이루어진다.
의존성
ⓐ→→→→→→→→→→→ⓑ
a 객체에서 b 객체를 직접 생성
의존성 주입
ⓐ→→→→→????↔↔↔↔ⓑ
a 객체는 b객체가 필요하다는 신호만 보내고, b 객체를 주입하는 것은 외부에서 이루어진다.
의존성 주입방식을 사용하기 위해서는 ????라는 존재가 필요하게 된다.
스프링 프레임워크에서는 ApplicationContext가 ???라는 존재이며,
필요한 객체들을 생성하고, 필요한 객체들을 주입해 주는 역할을 한다.
따라서 개발자들은 기존의 프로그래밍과 달리 객체와 객체를 분리해서 생성하고,
이러한 객체들을 엮는 (Wri 작업의 형태로 개발하게 된다.
ApplicationContext가 관리하는 객체들을 ' 빈(Bean)'이라 부르고,
빈과 빈 사이의 의존 관계를 처리하는 방식으로 어노테이션 , 필드주입 , 수정자주입 방식을 이용할 수 있다.
@어노테이션
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
필드주입(Field Injection)
//final 키워드를 사용할 수 없어, 순환참조가 발생할 수 있다. 권장하지 않는다.
@Autowired private final MemberService memberService;
수정자 주입( Setter Injection )
//public으로 노출이 되깅떄문에 다른곳에서 주입이 가능하다.
private MemberService MemberService;
@Autowired
public void setMember(MemberService memberService) {
this.memberService = memberService;
}
관점지향 프로그래망
좋은 개발환경에서는 개발자가 비지니스 로직에만 집중 할 수 있게한다.
스프링 프레임워크는 반복적인 코드를 제거해줌으로써 핵심 비지니스 로직에만 집중할 수 있도록 해준다.
보안이나 로그 , 트랜잭션과 같이 비지니스 로직은 아니지만 반드시 처리가 필요한 부분을 횡단관심사라고 한다. 스프링 프레임 워크는 이런한 횡단 관심사를 분리해서 제작하는것이 가능하고 , 횡단관심사를 모듈로 분리하는 프로그래밍을 AOP라고 한다. 이를통해서 3가지 이점이 생긴다.
전체 Application을 실행하지 않아도 기능별 단위 테스트가 용이하기 때문에 버그를 줄이고 개발 시간을 단축할 수 있다.