프로그래밍/JAVA Spring

[Spring 스프링] POJO란?

hectick 2023. 4. 23. 00:31

 

우테코 레벨1때, 도메인에다가 DB를 연결하는 로직을 집어넣어서 다음과 같은 리뷰을 받았던 적이 있다.

 

이 때는 POJO를 외부 기술을 적용하지 않는 순수한 자바 오브젝트 라고 한문장으로만 이해하고 남어갔다.

이번에 스프링을 공부하면서 POJO라는 단어가 꽤 나오길래 이번에 토비의 스프링을 읽으면서 한번 정리해보았다.

 

 

POJO

 

POJO(Plain Old Java Object)란?

 

객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트

 

매우 쉽게 말하면, 간단한 자바 오브젝트를 사용하는 것이다. 하지만 단지 자바의 문법을 지키고, 순수하게 Java API만을 사용했다고 해서 그 코드를 POJO라고 할 순 없다. 위의 정의에서 볼 수 있듯이 객체지향이 잘 적용되어 있어야 한다.

 

POJO는 사용한다면, 특정 기술과 환경에 종속되지 않은 오브젝트이기 때문에 코드가 깔끔해지고, 유지보수하기에 좋아진다. 또, 종속될 제약이 없기 때문에 자유롭게 객체지향설계를 적용할 수 있고, 자동화된 테스트에 유리하다는 장점도 있다.

 

POJO 라는 용어가 나타난 배경은 다음 마틴 파울러의 대사에서 알 수 있다.

"We wondered why people were so against using regular objects in their systems and concluded that it was because simple objects lacked a fancy name. So we gave them one, and it's caught on very nicely." - Martin Fowler

 

마틴 파울러는 다른 개발자들이 왜 자바의 단순한 오브젝트를 사용해서 애플리케이션의 비즈니스 로직을 구현하는 것을 꺼려하고, 다른 복잡한 기술들을 쓰는지 궁금해 했다. 그가 내린 결론은 "간단한 자바 오브젝트를 사용하는데요" 라고 말하면 간지가 안나기 때문이었다. 그래서 POJO 라는 용어를 만들어서, "POJO 방식의 기술을 사용합니다" 라고 말하면 마치 첨단 기술을 쓰는 것 같은 느낌을 주고자 했다.

 

 

POJO의 조건

 

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

 

POJO는 자바 언어와, 꼭 필요한 API 외에는 종속되지 않아야 한다. 만약 규약이 적용된 환경에 종속적이게 된다면, 다른 환경으로 이전이 힘들어지기 때문이다. 특정 규약을 따르도록 하는 경우는 대부분 규약에서 제시하는 특정 클래스를 상속하도록 요구하는데, 이때 자바의 단일 상속 제한 때문에 객체지향적인 설계 기법을 적용하기 어려워진다고 한다. 특정 규약에 종속되지 않아야, 오브젝트에 객체지향 설계를 자유롭게 적용할 수 있다.

 

 

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

 

특정 환경이 없을 때에도, 그대로 사용할 수 있어야 한다. 특히, 비즈니스 로직을 담고 있는 POJO 클래스는 웹이라는 환경 정보, 또는 웹 기술을 담고 있는 클래스나 인터페이스를 사용하면 안된다. 웹 외의 클라이언트가 해당 비즈니스 로직을 사용하지 못하게 될 뿐더러, 웹 서버에 올리지 않고 독립적으로 테스트하기도 힘들어지기 때문이다.

 

어노테이션을 사용했을 경우에는 POJO일 수도 있고 아닐 수도 있다. 어노테이션이 단지 코드로 표현하기는 적절하지 않은 부가적인 정보를 담고 있을 뿐이고, 특정 기술과 환경에 종속되지만 않는다면 POJO라고 할 수 있다. 반면에, 어노테이션이나 엘리먼트 값에 특정 기술과 환경에 종속적인 정보를 담고 있다면 그때는 POJO가 아니다.

 

 

POJO 프로그래밍

 

POJO에 애플리케이션의 핵심 로직과 기능을 담아 설계하고 개발하는 방법

 

 

POJO 프레임워크

 

POJO 프로그래밍이 가능하도록 기술적인 기반을 제공하는 프레임워크

 

스프링 프레임워크가 POJO 프레임워크에 해당한다. 스프링을 이용하면 엔터프라이즈 애플리케이션의 핵심 비즈니스 로직을 POJO를 기반으로 깔끔하게 구현 가능하다. 동시에, 엔터프라이즈 환경의 각종 서비스와 기술적인 필요들을 POJO 방식으로 만들어진 코드에 적용할 수 있다. 즉, 비즈니스 로직과 엔터프라이즈 기술을 분리해서 다룰 수 있도록 도와준다. 스프링이 POJO 방식의 개발이 가능하도록 지원하는 핵심 기술에는 IoC/DI, AOP, PSA가 있다.

 

*엔터프라이즈 애플리케이션(Enterprise Application, EA)

- 일반적으로 비즈니스나 정부와 같은 기업 환경에서 작동하도록 설계된 대규모 소프트웨어 시스템 플랫폼