Framework
하나의 큰 뼈대(틀)을 말한다.
소프트웨어의 구체적인 부분 설계와 구현을 재사용이 용이하게끔 만들어 줌.
Framework 과 Library 의 차이
Framework은 개발자가 애플리케이션의 핵심 로직을 개발하는 것에만 집중할 수 있게 한다.
Library는 애플리케이션 흐름의 주도권이 개발자에게 있지만, Framework은 애플리케이션 흐름의 주도권이 Framework에게 있다.
Spring Framework
Spring Framework의 장점
이제 하나씩 알아보자.
POJO(Plain Old Java Object)
POJO란 순수한 Java 객체를 의미한다.
POJO 프로그래밍이란 순수 Java 객체가 다른 기술이나 환경에 종속되지 않도록 하기 위한 프로그래밍 기법이다.
Spring Framework은 POJO 프로그래밍을 지향하기 위해 IoC/DI, AOP, PSA 라는 기술을 제공한다.
Java나 Java의 스펙(사양)에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 한다.
특정 환경에 종속적이지 않아야 한다.
객체지향 설계원칙
SRP(Single Responsibility Principle, 단일 책임의 원칙)
OCP(Open Close Principle, 개방폐쇄의 원칙)
LSP(The Liskov Substitution Principle, 리스코브 치환의 원칙)
ISP(Interface Segregation Principle, 인터페이스 분리의 원칙)
DIP(Dependency Inversion Principle, 의존성 역전의 원칙)
IoC(Inversion of Control)
애플리케이션 흐름의 주도권을 사용자가 아닌 Spring이 갖는다.
애플리케이션 흐름의 주도권이 뒤바뀐 것을 바로 IoC(Inversion of Control) 라고 한다.
DI(Dependency Injection)
객체간의 의존성 주입.
A클래스가 B클래스의 기능을 사용할때 A클래스에서 B클래스를 호출하게 되는데
이것을 A클래스가 B클래스에게 도움을 요청한다. 의지한다. 의존한다. 라고 보면 된다.
생성자를 통해서 어떤 클래스의 객체를 전달 받는 것을 ‘의존성 주입’ 이라고 한다.
의존성 주입(DI)은 클래스들 간의 강한 결합을 느슨한 결합으로 만들어준다.
Spring에서는 애플리케이션 코드에서 이루어지는 의존성 주입(DI)을 Spring에서 대신 해준다.
AOP(Aspect Oriented Programming)
AOP(Aspect Oriented Programming)는 관심 지향 프로그래밍이다.
AOP에서 의미하는 Aspect는 애플리케이션의 공통 관심사를 의미한다.
AOP라는 것은 애플리케이션의 핵심 업무 로직에서 로깅이나 보안, 트랜잭션 같은 공통 기능 로직들을 분리하는 것
AOP를 활용하면 애플리케이션에 전반에 걸쳐 적용되는 공통 기능(트랜잭션, 로깅, 보안, 트레이싱, 모니터링) 등을 비즈니스 로직에서 깔끔하게 분리하여 재사용 가능한 모듈로 사용할 수 있다.
PSA(Portable Service Abstraction)
추상화 된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하는 것이 바로 일관된 서비스 추상화(PSA)의 기본 개념이다.
애플리케이션에서 특정 서비스를 이용할 때, 서비스의 기능을 접근하는 방식 자체를 일관되게 유지하면서 기술 자체를 유연하게 사용할 수 있도록 하는 것을 PSA(일관된 서비스 추상화) 라고 한다.
어떤 서비스를 이용하기 위한 접근 방식을 일관된 방식으로 유지함으로써 애플리케이션에서 사용하는 기술이 변경되더라도 최소한의 변경만으로 변경된 요구 사항을 반영하기 위함이다.
pring에서 PSA가 적용된 분야로는 트랜잭션 서비스, 메일 서비스, Spring Data 서비스 등이 있다.