스프링 프레임 워크란?
간단히 말해 자바 플랫폼을 위한 프레임워크입니다.
대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자 정부 표준프레임워크의 기반 기술로써 쓰이고 있습니다.
특징
- 경량 컨테이너로서 자바 객체를 직접 관리합니다.
- 의존성 주입(DI : Dependency Injection). 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜줍니다.
- POJO(Plain Old Java Object): Java 코드를 이용해서 프로그래밍이 가능 기존 JAVA EE 프레임워크에 비해 구현을 위해 특정한 인터페이스를 구현하거나 상속받을 필요가 없어 기존에 존재 한느 라이브러리 등을 지원하기에 용이하고 객체가 가볍다.
- 관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)을 지원한다. 따라서 트랙잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다. 이러한 방식은 유지보수가 수월하며 각각의 관점에 최적화된 프로그래밍이 가능해집니다.
- 확장성이 높습니다. 스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하기 때문에 수많은 라이브러리가 이미 스프링에서 지원되고 있고 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이합니다.
AOP가 등장한 이유?
바로 기존에 OOP의 한계가 있기 때문입니다. 객체 지향 프로그래밍은 애플리케이션을 설계 시 책임과 관심사에 따라 클래스를 분리합니다. 클래스가 단일 책임을 가지도록 분리함으로써 각 모듈의 응집도는 높아지고 결합도는 낮아집니다. 클래스를 변경하는 이유는 오직 한 가지이며, 애플리케이션의 한 부분에서 변경이 발생했을 때 그 파급효과가 시스템의 전체로 퍼져나가는 정도가 낮아집니다.
그러나 전통적인 객체지향 설계 방식을 충실히 따르더라도 한 가지 아쉬운 점이 존재합니다. 위 사진처럼, 여러 클래스에 로깅이나 보안 및 트랜잭션 등 공통된 기능들이 흩어져 존재한다는 점입니다. 이렇게 어플리케이션 전반에 걸쳐 흩어져있는 공통되는 부가 기능들을 관심사라고 합니다.
AOP 기능을 제공하는 프레임워크나 라이브러리를 사용하면, 번거로운 프록시 클래스 작성 없이 UserService 비즈니스 로직에서 트랜잭션이라는 부가 기능 관심사를 간편하게 분리할 수 있습니다. 더불어 다양한 클래스가 Aspect를 재활용하며 공통 사용할 수 있습니다.
Aspect 구성
Aspect는 부가될 기능을 정의한 Advice와, 해당 Advice를 어디에 적용할지를 결정하는 Pointcut 정보를 가지고 있습니다.
AOP 조언 유형
조언의 실행 전략에 따라 다음과 같은 유형이 있습니다.
- Before Advice : 이러한 Advice는 조인 포인트 메소드가 실행되기 전에 실행됩니다. 어노테이션을 사용 @Before하여 어드바이스 유형을 Before 어드바이스로 표시할 수 있습니다.
- After (finally) Advice : 조인 포인트 메소드 실행이 완료된 후 정상적으로 실행되거나 예외가 발생하여 실행되는 조언입니다. @After어노테이션 을 사용하여 애프터 어드바이스를 생성할 수 있습니다 .
- After Returning Advice : 때때로 우리는 조인 포인트 메소드가 정상적으로 실행될 때만 어드바이스 메소드가 실행되기를 원합니다. 어노테이션을 사용 @AfterReturning하여 어드바이스를 반환한 후로 메소드를 표시할 수 있습니다.
- After Throwing Advice : 이 어드바이스는 조인 포인트 메서드가 예외를 throw할 때만 실행되며, 이를 사용하여 트랜잭션을 선언적으로 롤백할 수 있습니다. 우리는 @AfterThrowing이러한 유형의 조언에 주석을 사용합니다.
- Around Advice: 가장 중요하고 강력한 어드바이스입니다. 이 조언은 조인 포인트 방법을 둘러싸고 있으며 우리는 또한 조인 포인트 방법을 실행할지 여부를 선택할 수 있습니다. 조인 포인트 메소드 실행 전후에 실행되는 어드바이스 코드를 작성할 수 있습니다. 조인 포인트 메소드를 호출하고 메소드가 무언가를 리턴하는 경우 값을 리턴하는 것은 어라운드 어드바이스의 책임입니다. 우리는 @Around어드바이스 메소드를 생성하기 위해 어노테이션을 사용합니다.
느낀 점:
아직까지 AOP를 왜 사용하는지 랑 사실 아직까지 자바 개념에 너무 익숙해져있다 보니 스프링 프레임워크의 필요성을 못 느끼는데 프로젝트를 하면서 몸으로 느껴야 할 것 같습니다
'Spring' 카테고리의 다른 글
| [SpringSecurity] CSRF란?Restapi에서 CSRF 해제 가능? (0) | 2023.09.22 |
|---|---|
| [SPRING]JDBC 템플릿사용 DAO 변경해보기 (0) | 2022.11.08 |
| Spring mvc2 패턴 (0) | 2022.11.01 |
댓글