[Spring] 4. POJO Java
1. POJO Java 란?
POJO(Plain Old Java Object) 란, 단어 뜻 그대로 순수한 자바 오브젝트를 의미한다. 스프링이 등장하기 이전의 Java 를 사용한 개발에서는 EJB 가 인기를 끌었고, 이로 인해 종속적인 부분으로 개발을 진행하다보니, 객체 자체는 무거워지고, 모듈의 교체, 시스템 업그레이드 시 종속성으로 인하여 불편함이 발생하였다. 뿐만 아니라 특정 기술의 클래스를 상속 받거나, 직접 의존하는 등 객체 지향으로서의 설계가 갖는 장점을 잃어버리게 되었다.
위와 같은 문제점들에 대해 반발하고자 “객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고, 필요에 따라 재활용할 수 있는 방식” 의 설계를 하게 되었으며, 이러한 설계의 결과물이 POJO 인 것이다.
1) POJO 의 특징
(1) 특정 규약에 종속되지 않는다.
이는 특정 라이브러리나 모듈에서 정의된 클래스를 상속 받아서 구현하지 않아도 된다는 것을 의미한다. 앞서 언급한 것처럼 POJO 가 되기 위해서는 외부의 의존성을 두지 않고 순수하게 Java 로 구성이 가능해야한다.
(2) 특정 환경에 종속되지 않는다.
만약 특정 비즈니스 로직을 처리하는 과정에서 외부 종속적인 것(http request, session 등)을 사용하는 것은 POJO를 위반했다고 간주한다. 또한 현재 스프링에서도 사용하고 있는 어노테이션(@Annotation) 기반으로 설정하는 부분도 엄연하게는 POJO라고 볼 수는 없다.
2. POJO 프레임워크
그렇다면 POJO 를 지향하는 프레임워크에는 어떤 것이 있는지 알아보자. 대표적으로는 현재 우리가 사용 중 Spring 이 있고, 그 외에 Hibernate 가 있다.
일반적으로 하나의 서비스를 개발하기 위해서는 서비스가 동작하는 시스템의 복잡함, 구현해야될 비즈니스 로직의 복잡함 등 다양한 어려움에 직면할 수 있다. 예를 들어, 대출 시스템을 개발한다고 하면, 사용자의 신용도나 이용 한도 등 비즈니스 로직을 챙기는 동시에, 시스템이 원할하게 동작하는 지도 체크해야된다는 것이다. 이는 오른쪽을 보면서, 동시에 왼쪽을 보라는 말과도 같다. 이를 극복하기 위해서 우리는 프레임워크(Framework) 라는 것을 사용하게 된다.
그 중에서도 Spring 과 Hibernate 는 모두 객체지향적인 설계를 하고 있으며, POJO 를 지향하고 있다. 결과적으로 개발자가 서비스 로직에 좀 더 집중할 수 있고, 이를 POJO로 쉽게 개발하도록 지원해주고 있다.
그렇다면, 어떻게 특정 기술에 종속적이면서 동시에 POJO를 지향할 수 있을까? 해답은 스프링에서 정한 표준 인터페이스가 있기 때문이다. 스프링 개발자들이 ORM 이라는 기술을 사용하기 위해서 “JPA” 라는 표준 라이브러리를 생성했으며, 이 후 여러 종류의 ORM 프레임워크들은 JPA 에 기반하여, 구현되고 실행된다. JPA 에 대한 설명은 이후에 자세하게 할 예정이므로 우선 넘어가도록 하자.
댓글남기기