본문 바로가기

Programming/Java & JSP & Spring

POJO 란?

POJO 란?


Plain Old Java Object의 약자로 직역을 하자면 평범한 구식 자바 오브젝트이다.

무거운 EJB와는 반대로 경량의 자바 객체를 강조하는 의미로 사용했다.


이렇게 정의만 봐서는 무슨 말인지 이해하기가 힘들다.

먼저 EJB를 대체해서 나왔다고하니 EJB가 무엇인지 알아보자.


EJB?

EJB란 Enterprise JavaBean의 약자로 자바의 기술 중 하나다.


IT시스템이 점점 증대되고 그에 따라 점점 복잡한 기술이 요구되었으며 자바의 기초적인 JDK만으로는

그것을 충족시킬 수 없었다. 서버 기반의 자바 기술인 J2EE가 등장했지만 Servlet, JSP 레벨의 최소한의

서버 프로그래밍 인터페이스만 가지고는 복잡한 애플리케이션을 제작하는 것은 쉽지 않았다.


이런 것을 보안하기 위해 나온 것이 바로 sun사에서 만든 EJB이다.

EJB를 사용함으로서 개발자는 비즈니스 로직에만 집중할 수 있게 되었다.


하지만 이것은 배보다 큰 배꼽을 사용하는 것과 비슷했다.

현실에서 1% 미만의 애플리케이션을 위해 나머지 99% 애플리케이션도 무거운 기능을 사용해야했다.

또한, EJB의 혜택을 모두 얻기 위해서는 모든 기능이 다 필요하지도 않은 WAS를 구입해야 했고,

고급 IDE도움 없이는 복잡한 설정에 허우적대야 했다.


결국 EJB와 같은 잘못된 기술을 피하고, 객체지향 원리에 따라 만들어진 자바 언어의 기본에 충실하게

비즈니스 로직을 구현하는 일명 POJO방식으로 돌아서야 한다는 목소리가 높아졌다.


그렇다면 POJO는 무엇인가?

POJO의 특징을 살펴보자면 다음과 같다.

  • 특정 규약에 종속되지 않는다.
  • 특정 환경에 종속되지 않는다.
  • 객체지향원리에 충실해야 한다.
이렇게 특징만 봐서는 도통 무슨 소리인지 잘 모르겠다. 
쉽게 POJO를 얘기하자면 별도로 종속되지 않는 자바 객체를 통칭한다고 볼 수 있다.

EJB의 경우에는 implements, extends 를 사용하는 코드들이 많다. 그럴 경우에 빈 하나를 만들기위해
다양한 부모클래스를 알아야했고, 클래스 간의 의존도가 높아질 수 밖에 없다.

POJO는 이러한 복잡한 것을 버리고, 간단한 자바 객체만을 가지고 일을 처리하자는 철학을 가지고 있다.

POJO는 어떻게 쓰일까?
POJO가 어떻게 쓰이고 있는지 알게되면 좀 더 이해하기 수월할 수 있다.

  • 자바빈 (JavaBean)
POJO의 대표적인 예로 JavaBean을 들 수 있다. JavaBean은 기본 생성자와 멤버 필드에 접근할 수 있는
getter/setter 메소드를 가진 단순 자바 오브젝트이다.

  • POJO 프레임워크
POJO를 이용한 디자인이 널리 쓰임에 따라 POJO 기반의 프레임워크들이 탄생하게되었다.

그중에서 가장 대표적인 것을 꼽자면 하이버네이트와 스프링을 들 수 있다.

하이버네이트 :
관계형DB 매핑 기술을 순수한 POJO를 이용해 사용할 수 있게 하는 persistence 프레임워크이다.

스프링 :
세션빈이 제공하던 중요한 엔터프라이즈 서비스들을 POJO기반으로 만든 비즈니스 오브젝트에서
사용할 수 있게 한다. 대표적인 것이 선언적인 트랜잭션 서비스와 보안이다.

POJO 프로그래밍을 손쉽게 할 수 있도록 지원하는 세가지 가능 기술
  • IoC / DI
IoC / DI 는 스프링의 가장 기본이 되는 기술이자 스프링의 핵심 개발원칙이다. 

  • AOP
핵심 관리사를 분리하여 프로그램의 모듈화를 향상시키는 프로그래밍 스타일이다.

  • PSA
인터페이스가 다른 다양한 구현을 같은 방식으로 사용하도록 중간에 인터페이스 어댑터 역할을 해주는
레이어를 추가하는 방법이다.










참조 :

http://isstory83.tistory.com/94

http://bsnippet.tistory.com/17

https://m.blog.naver.com/PostView.nhn?blogId=writer0713&logNo=220700687650&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F