[Spring] Spring 기본개념 (AOP, Spring boot)

1. Spring AOP (Aspect Oriented Programming)

AOP는 프로그램의 핵심인 비즈니스 로직과 분리되는 횡단관심사(cross-cutting concern)를 분리, 모둘화하여 설계하고 개발하는 방법론을 뜻한다.

 

주로 로깅이나 세션같은 기능을 개발할 때 주로 사용되는데 예를들어, 로깅에 있어 기능 별 소스코드에 로깅을 위한 코드를 함께두어 비즈니스 로직과 같이 실행되는것이 아닌 로깅을 담당하는 특정 모듈을 만들어 해당 기능이 실행될 때 이 모듈을 통해 로깅을 하는 것을 AOP라 할 수 있다.

  • 관점 지향 프로그래밍 => 어떤 로직 기준 핵심적인 관점, 부가적인 관점으로 나눠 각각 모듈화 하는 것
  • 소스 코드상에 계속 반복해서 쓰는 코드를 흩어진 관심사라 부름, 흩어진 관심사를 Aspect로 모듈화하고 비즈니스 로직에서 분리하여 재사용
  • 프록시 패턴 기반, 프록시 객체 => 접근 제어 및 부가기능을 추가하기 위해 사용
    (프록시 = 타겟을 감싸서 클라이언트의 요청을 대신 받아주는 오브젝트)
  • Spring Bean에만 AOP를 적용함
  • Spring IoC와 연동하여 복잡성에 대한 해결책을 지원하는 것이 목적

 

2. Spring boot

Spring Framework 기반 프로젝트를 복잡한 설정없이 쉽고 빠르게 만들어주는 라이브러리이다.

Spring Framework를 사용할 때 필수 설정파일(web.xml, rootContext.xml, ServletContext.xml등..)을 개발자가 직접 설정해줘야 했으나 이는 곧 생산성 저하와 비용문제로 직결됐다. 해당 문제를 해결하기 위해 만들어진 것이 Spring boot이다.

 

Spring과 Spring boot의 차이

  • Spring: 동적인 웹 사이트 개발을 위한 여러 가지 서비스 제공 (경량 컨테이너, IoC, DI, AOP)
  • Spring boot: 복작합 스프링 환경설정의 많은 부분을 자동화 해줌, 실행환경이나 의존성 관리 등의 인프라 관련해서 신경쓸 필요가 없음
  • Spring boot는 @EnableAutoConfiguration어노테이션을 선언해서 스프링에서 자주 사용했던 설정들을 자동으로 등록해줌
  • Spring boot는 Embed Tomcat을 사용해서 따로 Tomcat 설치 또는 버전관리 필요 없음
  • starter로 dependency를 자동화 해줌 <ㅡ> Spring framwork는 의존성의 호환되는 버전을 일일이 맞추어 줘야 되어서 버전 관리가 어려움. Spring boot는 Starter로 대부분의 dependency를 관리해줌
  • Spring boot는 XML설정을 하지 않아도 됨
  • Spring boot는 Jar file을 이용해 자바 옵션만으로 손쉽게 배포 가능

 

[참고]

https://gangnam-americano.tistory.com/57?category=976804 

 

[Spring] AOP(Aspect Oriented Programming)이란?

[Spring] AOP(Aspect Oriented Programming)이란? AOP란 Aspect Oriented Programming의 약자로 단어 뜻 그대로 관점지향 프로그래밍이다. AOP는 프로그램의 핵심인 비즈니스 로직과 분리되는 횡단관심사(cross-c..

gangnam-americano.tistory.com

https://cheershennah.tistory.com/194

 

Spring boot 스프링 부트란?

Spring boot 란? Spring framework 기반 프로젝트를 복잡한 설정없이 쉽꼬 빠르게 만들어주는 라이브러리. 개발자가 일일히 모든 설정을 할 필요없이 자주 사용되는 기본 설정을 알아서 해준다. 스프링

cheershennah.tistory.com

 

'ETC > Spring' 카테고리의 다른 글

[Spring] Spring 기본 개념 (IoC, DI)  (1) 2022.05.26
[Spring] 빌드 관리 도구 Maven과 Gradle에 대해서  (1) 2022.05.26