스프링 프레임워크
자바에서 가장 많이 사용하는 프레임워크이다. 애플리케이션에서 여러 가지 빈(클래스 객체)을 개발자가 아닌 스프링이 권한을 가지고 직접 관리한다. 스프링 이전에 사용되던 프레임워크로 EJB(Enterprise JavaBeans)라는 것이 있는데, EJB는 실행 시 무거워 여러 가지 문제를 일으키는 단점이 있다고 한다. 스프링은 이런 EJB의 단점은 개선하고 좋은 점은 더 발전시켜서 탄생한 프레임워크라고 한다.
- 스프링의 특징
- EJB보다 가볍고 배우기도 쉬우며 경량 컨테이너의 기능을 수행한다.
- 제어 역행(IoC, Inversion of Control) 기술을 이용해 애플리케이션 간의 느슨한 결합을 제어한다.
- 의존성 주입(DI, Dependency Injection) 기능을 지원한다.
- 관점 지향(AOP, Aspect-Oriented Programming) 기능을 이용해 자원 관리를 한다.
- 영속성(Persistence)과 관련된 다양한 서비스를 지원한다.
- 수 많은 라이브러리와의 연동 기능을 지원한다.
스프링 프레임워크의 특징
- 의존성 주입(DI): 클래스 객체를 개발자가 코드에서 생성하지 않고 프레임워크가 생성하여 사용하는 방법
- 제어 역행(IoC): 서블릿이나 빈 등을 개발자가 코드에서 생성하지 않고 프레임워크가 직접 수행하는 방법
- 관점 지향(AOP): 핵심 기능 외 부수 기능등을 분리 구현함으로써 모듈성을 증가시키는 방법
스프링 프레임워크의 주요 기능
스프링 기능 | 설명 |
---|---|
Core | 다른 기능과 설정을 분리하기 위한 IoC 기능을 제공한다. |
Context | 스프링의 기본 기능으로서 애플리케이션의 각 기능을 하는 빈(Bean)에 대한 접근 방법을 제공한다. |
DAO | JDBC 기능을 좀 더 편리하게 사용할 수 있도록 한다. |
ORM | 하이버네이트나 마이바티스 같은 영속성 관련 프레임워크와 연동된 기능을 제공한다. |
AOP | 관점 지향 기능을 제공한다. |
Web | 웹 애플리케이션 개발에 필요한 기능을 제공한다. |
WebMVC | 스프링에서 MVC 구현에 관련된 기능을 제공한다. |
의존성 주입(DI)
지금까지 우리가 프로그래밍을 할 때는 어떤 한 클래스가 다른 클래스의 기능을 사용하려면 당연히 개발자가 직접 코드에서 사용할 클래스의 생성자를 호출해서 사용했다.
즉, 사용할 클래스와 사용될 클래스의 관계는 개발자에 의해 직접 코드에서 부여됐다.
그러나 스프링 프레임워크에서는 의존성 주입(Dependency Injection) 을 통해 이런 연관 관계를 개발자가 직접 코딩을 통해 컴포넌트(클래스)에 부여하는 것이 아니라 컨테이너가 연관 관계를 직접 규정해준다.
결과적으로 코드에서 직접적인 연관 관계가 발생하지 않으므로 각 클래스들의 변경이 자유로워진다.(loosely coupled, 약한 결합)
관련이 있는 기능들은 강하게 결합(tightly coupled)하고, 관련이 없는 기능들은 약하게 결합(loosely coupled)해야 좋은 프로그램이다.
관점 지향 프로그래밍(AOP)
AOP는 메서드 안의 주기능과 보조 기능을 분리한 후 선택적으로 메서드에 적용해서 사용한다는 개념이다.
AOP를 사용하면 전체 코드에 흩어져 있는 보조 기능을 하나의 장소에 모아서 관리할 수 있다.
또 보조 기능을 자신이 원하는 주기능에 선택적으로 적용할 수 있어 코드가 단순해지고 가독성도 향상된다.
여러 가지 AOP 관련 용어
용어 | 설명 |
---|---|
aspect | 구현하고자 하는 보조 기능을 의미한다. |
advice | aspect의 실제 구현체(클래스)를 의미한다. 메서드 호출을 기준으로 여러 지점에서 실행된다. |
joinpoint | advice를 적용하는 지점을 의미한다. 스프링은 method 결합점만 제공한다. |
pointcut | advice가 적용되는 대상을 지정한다. 패키지이름/클래스이름/메서드이름을 정규식으로 지정하여 사용한다. |
target | advice가 적용되는 클래스를 의미한다. |
weaving | advice를 주 기능에 적용하는 것을 의미한다. |
AOP 기능을 구현하는 과정
- 타깃(Target) 클래스를 지정한다.
- 어드바이스(Advice) 클래스를 지정한다.
- 설정 파일에서 포인트컷(Pointcut)을 설정한다.
- 설정 파일에서 어드바이스와 포인트컷을 결합하는 어드바이저를 설정한다.
- 설정 파일에서 스프링의 ProxyFactoryBean 클래스를 이용해 타깃에 어드바이스를 설정한다.
- getBean() 메서드로 빈 객체에 접근해 사용한다.
참고: 자바 웹을 다루는 기술