본문 바로가기

Web Sever 개발과 CS 기초/스프링

스프링 POJO 기반 구성

POJO란

프링의 본질은 엔터프라이즈 서비스 기능을 POJO에 제공하는 것이다

- Professional Spring Framework, 2005

스프링 프레임 워크 핵심 구현 목표인 POJO에 대해서 알아보자.

POJO는 Plain Old Java Object, 단순한 자바 오브젝트을 의미한다. 다른 클래스나 인터페이스를 상속 받아 메소드가 추가된 클래스가 아닌 getter, setter 등 기본적인 기능만 가진 자바객체이다.

스프링 프레임 워크가 탄생하기 전 서버 개발 프레임 워크 EJB가 있었다. 이론적으로 좋은 기능들이 많이 포함되어 초기에는 인기가 많았지만, 코드가 너무 복잡하고 EJB에 종속된 코드로 자바의 객체 지향 스타일 장점을 전혀 활용하지 못했다.

그래서 자바의 객체 지향 코딩의 장점을 최대한 살려 개발할 수 있게 도와주는 스프링 프레임 워크가 탄생했다. Spring은 POJO 방식을 기반으로 한 웹 프레임워크이고, IoC와 DI, AOP 등 Spring의 주요 기술을 활용해 POJO 기반의 구성을 이루게 되었다.

아래 예시는 POJO 기반으로 작성되 spring 코드이다.

@RestController라는 어노테이션 하나로 TimeController class에게 controller기능을 부여 했다.

클래스나 인터페이스를 상속하여 기능을 구현한다면, 훨씬 더 복잡한 소스코드가 되었을 것이다.

→하지만 단점도 존재하는 객체 정의 방식이다. 공통적으로 쓰는 기능 같은 것을 제공하기가 어려움이 있다. 그래서 다른 프레임워크에선 스프링의 POJO 방식을 적용하지 않는 추세이다.

POJO의 조건

1. 특정 규약에 종속되지 않는다.

자바 언어와 반드시 필요한 API이외에는 종속되지 말아야 한다. 특정 클래스를 상속하는 객체는 단일 상속 제한 때문에 더 이상 객체 지향 설계 기법을 적용하기 어려워진다.

2. 특정 환경에 종속되지 않는다.

특정 기업의 프레임 워크나 서버에서만 동작 가능한 코드는 POJO라고 할 수 없다. POJO는 환경에 독립적이어야 한다. 예를 들어 비지니스 로직을 담고 있는 POJO 클래스는 웹 컨트롤러와의 연결됨이 분명해도, 웹 환경 API에 의존해서는 안 된다. 그렇게 되면 웹 이외의 환경에서 비지니스 로직을 사용하지 못하기 때문이다.

3. 객체 지향 원리에 충실해야 한다.

POJO는 자바의 객체 지향 원리를 지켜 설계 되어야 한다. 모든 기능을 한 클래스에 모아두거나, 다형성과 상속 적용이 아닌 if, switch문을 남발하는 것은 POJO 라고 할 수 없다.


Reference

https://yoo11052.tistory.com/133

https://doing7.tistory.com/81