Search

Spring 3대 요소

생성일
2024/08/12 11:01
태그
Java
spring
상태
Done

POJO

POJO란?

특정 기술과 환경에 종속되어 의존하게 된 자바 코드(EJB, Enterprise JavaBeans)나 Java EE와 같은 중량 프레임워크는 유지보수가 어렵고 확장성과 가독성이 떨어진다. 이는 객체지향 언어인 자바의 장점들을 살리기 어렵기 때문에, 자바 진영에서 POJO라는 개념을 도입하게 되었다.
POJO는 Plain Olid Java Object의 약자로, 순수한 자바 코드로만 이루어진 객체를 의미한다. 이는 객체지향의 원리에 충실하면서 환경과 기술에 종속되지 않고, 필요에 따라 재활용 될 수 있는 방식으로 설계된 객체를 말한다. POJO는 Java 스펙에 정의된 것 외에는 다른 기술이나 규약에 의존하지 않아야한다.
또한 POJO는 특정 환경에 종속적이지 않아야한다. 순수한 Java 스펙에만 의존하기 때문에 어떠한 환경에서도 독립적으로 실행될 수 있어야한다. 웹 기반의 환경 정보나 웹 기술을 담고 있는 클래스 혹은 인터페이스를 사용하면 안된다.

POJO 프로그래밍

public class User { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
Java
복사
이와 같이 POJO에 애플리케이션의 핵심 로직과 기능을 담아서 설계하고 개발하는 방법이 POJO 프로그래밍이라고 한다. Java 스펙에 getter와 setter 정도만을 사용하는 방식이다.
POJO 프로그래밍을 하는 이유는 특정 환경이나 기술에 종속적이지 않기 때문에, 객체지향의 장점을 살려 재사용이 가능하고 확장 가능한 유연한 코드를 작성할 수 있다. 또한 테스트가 단순해지고 디버깅도 더 쉬워진다.

Spring 3대 요소

POJO와 Spring

Sping은 POJO의 장점을 살리면서 EJB에서 제공하는 엔터프라이즈 서비스와 기술을 그대로 사용할 수 있도록 도와주는 POJO 프레임워크이다. Spring은 POJO 프로그래밍을 지향하는 프레임워크로, POJO 프로그래밍을 하기 위해 Spring이 지원하는 기능과 개념이이 IoC/DI, AOP, PSA이다.

IoC/DI

IoC(제어 역전, Inversion of Control)는 상위 객체에서 구현체를 선택하는 것처럼 개발자가 제어하는 것이 아니라 프레임워크인 Spring에 맡기는 것을 의미한다.
이는 Spring 뿐만 아니라 모든 프로그래밍에서 사용될 수 있는 범용적인 개념으로, IoC는 컴포넌트 의존관계(Component dependency), 설정(Configuration), 생명주기(Lifecycle)을 제 3자(프레임워크)에게 맡겨 처리하는 방식을 말한다.
Spring의 경우 스프링 컨테이너를 통해 IoC를 구현하는데, 객체를 컨테이너에 스프링 빈으로 등록하고 이후 컨테이너에서 해당 객체의 생명주기와 의존성을 제어하는 방식으로 이루어진다. 때문에 스프링 컨테이너는 IoC 컨테이너라고도 불리며, 컨테이너에서 객체를 할당하여 의존 관계를 설정해주는 것을 DI(의존성 주입, Dependency Injection)이라 한다.
객체의 관리 주체가 스프링 프레임워크(제어의 역전)이기 때문에 개발자는 비즈니스 로직에 더 집중할 수 있게 된다.
제어의 주체에 따른 구분 프레임워크와 라이브러리의 구분도 제어의 주체에 따라 내가 작성한 코드를 제어하고 대신 실행한다면 프레임워크, 내가 작성한 코드가 직접 제어의 흐름을 담당한다면 라이브러리이다.

AOP

AOP(관점지향 프로그래밍, Aspect Oriented Programming)는 여러 객체에 공통으로 적용할 수 있는 관심사를 분리하여, 재사용성과 유지보수성을 높이는 프로그래밍 기법이다.
AOP를 통해 핵심 기능과 공통 기능의 구현을 분리하여 모듈화함으로써, 핵심 기능의 수정 없이 공통 기능을 수정하거나 수정된 공통 기능을 한 번에 일괄적용할 수 있게 만들어준다. AOP는 객체지향의 장점을 살려 POJO 프로그래밍을 잘 할 수 있도록 도와준다.
Spring에서는 스프링 빈을 등록하는 과정에서 이를 프록시 패턴을 적용하여 AOP 기술을 사용한다. @Transactional 애노테이션이 대표적인 AOP 기술을 사용한 Spring의 라이브러리이다.

PSA

PSA(서비스 추상화 Portable Service Abstraction)는 환경의 변화와 관계없이 일관된 방식의 기술 접근 환경을 제공하는 추상화 구조를 말한다. POJO 원칙을 따른 Spring의 기능으로 Spring의 라이브러리들은 PSA 형태의 추상화가 되어있다.
대표적인 예시로 많이 사용하는 JPA-Hibernate, JDBC를 통해 여러 DB를 일괄적으로 접근할 수 있는 것이 추상화 구조를 통해 사용성을 개선한 Spring의 라이브러리 덕분이다.

참고