일정한 형태의 틀, 부품을 가지고 다양한 형태의 결과물을 만드는 것
프로그램의 기초를 기축할 수 있는 코드의 집합
특정 프로그램을 개발하기 위한 여러 요소들과 메뉴얼인 룰을 제공하는 프로그램
자바 플랫폼을 위한 오픈 소스 애플리케이션
자바를 기반으로 한 프레임워크
스프링은 내부적을 별도의 API를 사용하지 않고, 일반적인 Java 코드를 이용하여 객체를 구성하는 방식을 사용
코드를 개발할 때, 개발자가 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않음을 뜻한다.
DB를 연동하여 사용할 때 사용할 때 반드시 신경써야하는 부분
스프링에서는 이런 트랜잭션의 관리를 어노테이션이나 XML로 설정할 수 있기에 개발자는 매번 상황에 맞는 코드를 작성할 필요가 없다
💡 트랜잭션(transaction)?
하나의 작업을 수행하기 위해 필요한 데이터베이스의 연산들을 모아놓은 것으로, 데이터베이스에서 논리적인 작업의 단위
스프링에서는 'ApplicationContext'라는 존재가 필요한 객체들을 생성하고, 필요한 객체들을 주입하는 역할을 해 주는 구조
스프링을 사용하면 객체와 객체를 분리해서 생성하고, 이런 객체들을 엮는 작업하게 된다.
객체지향프로그램(OOP)으로 독립적 분리가 어려운 부가 기능을 모듈화하는 방식
관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것
트랜잭션 관리와 같은 부분이 바로 부가 기능 모듈이며, 이를 Aspect
라고 한다.
핵심 비즈니스 로직을 담고 있지는 않지만, 어플리케이션에 부가됨으로써 의미를 갖는 특별한 모듈로 AOP는 핵심 비즈니스 로직과 부가 기능 Aspect를 분리하는 등 OOP를 보완하는 역할
💡 모듈화란?
여기서 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것
📌 AOP, 왜 사용할까요?
- 개발자는 핵심 비즈니스 로직에만 집중하여 코드를 개발할 수 있음
- 각 프로젝트마다 다른 관심사를 적용할 때 코드의 수정을 최소화 할 수 있음
- 원하는 관심사의 유지보수가 수월한 코드를 구성할 수 있음
장점
프레임워크이기 때문에, 개발자의 수준과 실력에 상관없이 일정 수준의 품질을 기대할 수 있다.
담당자 혹은 개발자가 도중에 바뀌더라도, 유지보수에 관한 리스크를 줄일 수 있다.
단점
많은 기능을 제공하고 탑재하고 있으므로, 그만큼 무겁다.
기능을 익히기 위해 많은 노력과 시간이 필요하다.