🎉
Spring Framework 정리
April 26, 2021
-
Spring Framework란?
- Spring Framework란 Java 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크입니다.
- 애플리케이션 프레임워크 : 특정 분야에 국한 되지 않고 전 영역을 포괄하는 범용적인 프레임워크를 말한다.
- 경량급 프레임워크 : 단순한 웹컨테이너에서도 엔터프라이즈 개발의 고급기술을 대부분 사용할 수 있다.
- 엔터프라이즈 개발 : 개발자가 복잡하고 실수하기 쉬운 low level에 많이 신경쓰지 않으면서, Business Logic 개발에 전념할 수 있도록 해줍니다.
- Spring Framework의 특징
- 컨테이너 역할 : Spring 컨테이너는 Java 객체의 생명주기를 관리하며, Spring 컨테이너로부터 필요한 객체를 가져와서 사용할 수 있다.
- DI (의존성 주입) : Spring은 설정파일이나 어노테이션을 통해서 객체간의 의존관계를 설정할 수 있도록 한다.
- AOP 지원 : 트랜잭션이나 로깅, 보안과 같이 공통적으로 필요로하는 모듈들을 실제 핵심모듈에서 분리해서 적용할 수 있다.
- POJO 지원: Spring 컨테이너에 저장되는 Java 객체는 특정한 인터페이스를 구현하거나, 특정 클래스를 상속받지 않아도 된다.
- 트랜잭션 처리를 위한 일관된 방법을 지원 : JDBC 등 어떤 트랜잭션을 사용하던 설정을 통해 정보를 관리하므로 트랜잭션 구현에 상관없이 동일한 코드 사용 가능 (선언적)
- 영속성(Persistence)과 관련된 다양한 API지원 : Mybatis, Hibernate등 데이터베이스 처리를 위한 ORM 프레임워크들과 연동 지원
- Spring Framework 기능 요소
- Spring Core : Spring Framework의 기본 기능 제공. 이 모듈에 있는 Bean Factory는 Spring의 기본 컨테이너면서 스프링 DI의 기반이다.
- Context : Context모듈은 BeanFactory의 개념을 확장한 것으로 국제화 메시지, 애플리케이션 생명주기 이벤트, 유효성 검증등을 지원한다.
- DAO : DAO 패키지는 JDBC에 대한 추상화 계층으로 JDBC 코딩이나 예외처리하는 부분을 간편화 시켰으며, AOP 모듈을 이용해 트랜잭션 관리 서비스도 제공한다.
- ORM : 널리 사용되는 ORM 프레임워크와의 연결고리를 제공한다. ORM제품들을 Spring의 기능과 조합해서 사용할 수 있도록 해준다.
- AOP : AOP모듈을 통해 Aspect 지향 프로그래밍을 지원한다.
- Spring Framework란 Java 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크입니다.
-
AOP란 무엇인가요?
관점지향 프로그래밍이라는 뜻으로, 핵심적인 기능에서 부가적인 기능을 분리하는 것입니다. 분리한 부가기능을 애스팩트라는 모듈형태로 만들어서 설계하고 개발하는 방법입니다.
핵심기능에서 부가기능을 분리함으로 써, 핵심기능을 구현할 때 객체지향적인 가치를 지킬 수 있도록 도와주는 개념입니다.
-
그럼 애스팩트란 무엇인가요?
부가기능(=공통기능)을 정의한 코드인 어드바이스와 어드바이스를 어디에 적용할 지 결정하는 포인트컷을 합친 개념이다.
Target을 호출하는 이벤트 발생 시, Advice type에 따라 시기에 맞추어 Runtime을 가로채서 Advice가 실행되도록 한다.
-
AOP 용어
- 타겟 (Target) : 핵심기능을 담고 있는 모듈로, 타겟은 부가기능을 부여할 대상이된다.
- 어드바이스(advice) : 어드바이스는 타겟에 제공할 부가기능을 담고 있는 모듈이다.
- 조인포인트(join point) : 어드바이스가 적용될 수 있는 위치를 말한다. 타겟이 구현한 인터페이스의 모든 메소드는 조인포인트가 된다.
- 포인트컷 (Point Cut): 어드바이스를 적용할 타겟의 메서드를 선별하는 정규표현식이다.
- 애스팩트 (Aspact) : AOP의 기본 모듈이다. (어드바이스+포인트컷), 싱글톤 형태
- 어드바이저 (Advisor) : 어드바이저 = 애스팩트, 스프링AOP에서만 사용되는 용어
- 위빙(Weaving) : 포인트컷에 의해서 결정된 타겟의 조인포인트에 부가기능을 삽입하는 과정, 핵심기능(타겟)에 영향을 주지 않으면서 필요한 부가기능을 추가할 수 있도록 해주는 핵심적인 처리과정이다.
-
AOP 특징
- Spring은 프록시 기반 AOP를 지원한다.
- Spring은 타겟 객체에 대한 프록시를 만들어 제공한다.
- 타겟을 감싸는 프록시는 실행시간(Runtime)에 생성된다.
- 프록시는 어드바이스를 타겟 객체에 적용하면서 생성되는 객체이다.
- 프록시가 호출을 가로챈다. (Intercept)
- 프록시는 타겟 객체에 대한 호출을 가로챈 다음 어드바이스 타입(before, after, after throwing, after returning, after around)에 맞게 부가기능 로직 수행 후 핵심기능 로직을 호출한다.
- Spring AOP는 메서드 조인포인트만 지원한다.
- Spring은 동적 프록시를 기반으로 AOP를 구현하므로 메서드 조인 포인트만 지원한다. (런타임 시점에만 지원한다) 그런데 AspectJ와 같은 고급 AOP프레임워크를 사용하면 다양한 작업에 부가기능을 사용할 수 있다. (객체의 생성, 필드값의 조회와 조작 등)
- Spring은 프록시 기반 AOP를 지원한다.
-
구현방식
-
XML 기반의 POJO 클래스를 이용한 AOP 구현
Advice 클래스 작성 후, xml설정파일에 <aop:config> 로 애스펙트 설정
-
@Aspect 어노테이션을 이용한 AOP 구현
- Advice 종류
- Around : Join point 앞 뒤로 실행
- Before : Join point 이전 시점 , After : Join point 이후 시점
- After Returning : Join point 메서드 호출이 정상적으로 종료된 뒤에 실행되는 Advice
- After Throwing : Join point호출 후 Exception이 발생할 때 실행되는 Advice
- Advice 종류
-
Join point 인터페이스 (Advice 클래스)
- Around 어드바이스는 join point의 하위 클래스인 ProceedingJoinPoint 타입의 파라미터를 필수적으로 선언해야한다.
-
Point cut 표현식 문법 대표적인 사용은 excecution()이다.
excecution([접근제한자 패턴(생략가능)] 리턴타입패턴 [타입패턴.] 이름패턴 (타입패턴| "..",..) [throws 예외패턴]) 예시) excecution(* myspring.user.service.UserServiceImpl.*(..))
-
-
스프링 트랜잭션
- 선언적 트랜잭션 : 어노테이션(Xml로 설정) AOP를 이용한 선언적 방식
-
MVC 패턴
- MVC는 Business logic과 presentation logic을 분리하여 적용하는 패턴이다.
- 모델 : 비즈니스 로직 및 데이터 처리 담당 (DAO, Service)
- 뷰 : 모델이 처리한 데이터나 작업결과를 출력하는 화면(Html, jsp)
- 컨트롤러 : 클라이언트 요청을 받았으때 그 요청에 대해 실제 업무를 수행하는 모델 컴포넌트를 호출함 (Servlet , JSP)
-
모델1 : Controller 역할을 JSP가 담당함
-
모델2 : Controller 역할을 Servlet에서 담당함
-
Front Controller 패턴 : 클라이언트가 보낸 요청을 받아서 공통적인 작업을 먼저 수행 (인증 or 권한체크) - Dispatcher Servlet
-
흐름 : Dispatcher Servlet → Handler Mapping → Controller → ModelAndView → View Resolver → View
-