📁 스프링 프레임워크
자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크
제어 반전 IoC
- Inversion of Control
컨트롤 제어권은 개발자가 아닌 프레임워크에 있다.
객체의 생성과 생명주기 관리는 프레임워크의 주도 하에 이루어진다.
개발자는 객체를 직접 생성하지 않고, 프레임워크가 만들어둔 자원을 호출해 사용한다.
의존성 주입 DI
- Dependency Injection
설정 파일이나 어노테이션을 통해 객체 간 의존관계를 설정한다.
개발자는 직접 의존하는 객체를 생성하지 않는다.
단지 변수를 만들어 프레임워크가 미리 만들어둔 객체에 삽입하는 의존 설정을 한다.
POJO
- Plain Old Java Object
Java가 객체지향 프로그래밍 언어로서 갖고 있는 장점인 유연한 설계, 재사용성을 활용해 비즈니스의 복잡성과 변화를 상대한다.
관점 지향 프로그래밍 AOP
- Aspect Oriented Programming
모듈성을 높일 목적으로 서로 다른 관심사를 분리하는 프로그래밍 패러다임.
트랜잭션, 로깅, 보안 등 여러 계층에서 공통으로 필요로 하는 기능을 분리하여 관리한다.
기존의 자바 개발환경에서 데이터베이스를 연동할 때에는 DB 쿼리를 실행하는 것 외에 커넥션의 생성과 종료, 트랜잭션을 직접 해주어야 했다.
그러나 스프링에서는 쿼리문을 작성하는 것 외에 개발자가 신경써야 할 부분이 없다😲
AOP 계층에서 필요한 코드를 필요할 때마다 첨부해주기 때문이다.
PSA
- Potable Service Abstraction
하나의 추상화로 여러 서비스를 묶어둔 것.
개발환경과 세부 기술의 변화와 무관하게 일관된 방식으로 기술에 접근 가능하게 해주는 기능이다.
추상화 계층을 사용해 로우 레벨의 구현 환경과 실제 구현부를 분리하기 때문에 개발자는 모듈에 의존하지 않고 프로그램에 집중할 수 있다.
스프링에서 동작하는 라이브러리들은 POJO 원칙을 지키게끔 PSA 형태의 추상화가 되어있다.
예를 들어 JPA를 사용하여 관계형 데이터베이스를 연동할 경우, Spring JPA로 추상화한다.
따라서 실제 구현에 Hibernate를 사용하든 EclipseLink를 사용하든 같은 방법으로 기능을 구현할 수 있다.
Spring JDBC
MyBatis, Hibernate 등 데이터베이스를 처리하는 영속성 프레임워크와 연결할 수 있는 인터페이스를 제공한다.
모든 저수준 처리를 프레임워크에 위임해 객체 생성 자원 반환, 예외처리, 트랜잭션 등 반복되는 코드를 작성할 필요가 없다.
Spring MVC
스프링은 서블릿 기반의 웹개발을 위한 프레임워크를 제공한다.
모델2 아키텍처와 Front Controller 패턴을 프레임워크 차원에서 제공하는 것.
DI 컨테이너는 모델-뷰-컨트롤러의 의존 관계를 설정하고 객체들을 관리한다.