Spring
스프링 컨테이너라고 불리는 스프링 런타임 엔진을 제공한다.
설정정보를 참고하여 어플리케이션을 구성하는 오브젝트를 생성하고 관리한다.
보통 웹 모듈에서 동작하는 서비스나 서블릿으로 등록해서 사용한다.
기술 API
엔터프라이즈용 Java 어플리케이션 개발을 편하게 할 수 있게 해준다.
특징
POJO 프로그래밍을 지향한다.
POJO는 Plain Old Java Object, 즉 순수 java만을 통해 생성한 객체를 의미한다. 따라서 Java 및 Java의 스펙에 정의된 기술만 사용한다.
만약 POJO가 아닌 외부 라이브러리를 import하여 서비스를 유지하다가 해당 객체가 사용하고 있는 기술이 Deprecated(앞으로 지원되지 않을것이므로 사용을 자제 해달라는 의미)되거나 개선된 기술의 적용이 필요하다면 이 객체와 관련된 모든 코드를 수정해야하는 일이 발생한다. 이러한 문제를 방지하기 위해 POJO프로그래밍을 지향한다.
이를 위해 IoC/DI, PSA, AOP 세가지 핵심 프로그래밍 모델을 지원한다.
IoC / DI (Inversion of Control / Dependency Injection, 제어의 역전 / 의존성 주입)
개발자가 객체를 생성하고 관계를 맺어주는 것이 아니라 어플리케이션이 작동할 때 Spring이 그 역할을 대신한다. (제어의 역전)
의존성 객체를 개발자가 생성하지 않고 클래스를 Bean으로 등록해놓으면 등록된 객체를 Spring이 찾아서 알아서 주입해준다.
의존성
객체 지향 프로그래밍에서 클래스나 모듈 간의 관계를 의미한다.
한 클래스가 다른 클래스에 의존한다는 것은 해당 클래스가 드른 클래스의 인스턴스나 메서드를 사용한다는 것이다.
의존하는 객체를 직접 생성하거나 관리하지 않고 외부에 의해 결정된다.
AOP (Aspect Oriented Programming, 관심 지향 프로그래밍)
어플리케이션을 개발할 때에 구현해야 하는 기능은 크게 ‘공통 관심 사항’, ‘핵심 관심 사항’으로 분류된다.
핵심 관심 사항
어플리케이션의 핵심 기능과 관련되 사항 (ex. 메뉴 등록하기, 주문하기, 주문 변경하기 등)
공통 관심 사항
모든 ‘핵심 관심 사항’에 공통적으로 적용되는 관심 사항
(ex. 메뉴등록하기, 주문하기, 주문 변경하기에는 로깅이나 보안과 같은 기능이 공통적으로 적용되어야함)
만약 개발할 때 각각의 클래스에 공통관심사항과 핵심관심사항이 같이 존재하면 공통관심사항이 모든 클래스마다 들어있게 되므로 중복이 일어난다. 그 핵심관심사항에 수정사항이 발생하면 모든 클래스에 존재하는 중복되는 부분을 건드려야한다.
따라서 공통 관심 사항과 핵심 관심 사항은 따로 분리하고 각 객체가 공통 관심사항을 메서드를 통해 실행시킬 수 있도록 하는 편이 좋다.
이 비즈니스 로직을 AOP(Aspect Oriented Programming, 관심 지향 프로그래밍)라고 한다.
PSA (Portable Service Abstraction, 일관된 서비스 추상화)
백엔드는 DB와 소통을 주로 함에 있어 각각 다른 DB를 사용하는데 편리함을 제공한다.
만약 mySql로 설계한 DB를 Maria DB로 변경해야하는데 둘의 사용방법이 다르면 코드를 새로 작성하거나 많은 수정이 필요하게 될것이다.
하지만 Spring은 DB 서비스를 추상화한 인터페이스를 제공해주기 때문에 사용방법을 유지하며 DB를 교체할 수 있다.
Java를 사용하여 DB에 접근하는 방법을 규정한 인터페이스 = JDBC(Java DataVase Connectivity)라고 한다.
각 DB 개발사들은 본사의 DB에 접근하는 드라이버를 Java 코드의 형태로 배포한다. 그 드라이버에 해당하는 Java 코드의 클래스가 JDBC를 구현한다. 따라서 JDBC로 DB에 접근하는 코드를 구성하면 이후 DB가 교체되어도 기존에 작성한 코드 그대로 DB에 접근할 수 있게 된다.
이러한 특정 기술과 관련되 서비스를 추상화하여 일관된 방식으로 사용할 수 있게 한것을 PSA(Portable Service Abstraction, 일관된 서비스 추상화)라고 한다.
Spring Boot
spring으로 어플리케이션을 만들 때 필요한 설정을 간편하게 처리해주는 별도의 프레임워크.
자체적인 웹 서버를 내장하고 있어 별도의 외장 서버가 필요없다.
독립적으로 실행 가능한 jar 파일로 프로젝트를 빌드할 수 있어 기존처럼 war 파일로 빌드하여 배포할 필요가 없다.
클라우드 서비스 및 도커와 같은 가상환경에 빠르게 배포가능.
'백엔드 > 개념or이론' 카테고리의 다른 글
Spring Bean (스프링 빈) (0) | 2024.06.18 |
---|---|
프레임워크와 라이브러리 (0) | 2024.06.11 |
서버사이드 & 클라이언트 사이드 (0) | 2024.06.11 |
MVC 패턴에 대해서 (0) | 2024.06.11 |