[cs - spring] Spring에서의 POJO란

링딩·2023년 5월 2일
0

Computer Science

목록 보기
45/49

Q.

POJO란 무엇인가요? Spring Framework에서 POJO는 무엇이 될 수 있을까요?


이 글을 참고하여 작성하였습니다.

이 글을 참고하여 작성하였습니다.

A.

진정한 POJO란 토비의 스프링에서는 진정한 POJO를 아래와 같이 정의했다고 합니다.
그럼 특정 기술규약과 환경에 종속되지 않으면 모두 POJO라고 말할 수 있는가?
많은 개발자가 크게 오해하는 것 중의 하나가 바로 이것이다. . .(중략). .

" 진정한 POJO란 ¹객체지향적인 원리에 충실하면서, ²환경과 기술에 종속되지 않고
필요에 따라 ³재활용될 수 있는 방식으로 설계된 오브젝트를 말한다.
"


POJO란 개념에 대해서 먼저 말해보자

1. POJO(Plain Old Java Object)가 탄생하게 된 이유

위키백과에서는 이를 이렇게 정의한다.

Plain Old Java Object, 간단히 POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어이다.

이렇게 된 자바 코드는 과연 가독성이 좋을까?
당연히 아니다. 가독성이 떨어지고 유지보수성도 좋지 않고 물론 확장성 또한 떨어진다.

그래서 POJO라는 개념이 생겼다고 한다.

public class MyPojo {
    private String name;
    private int age;
    
    public String getName() {
    	return name;
    }
    public String getAge() {
    	return age;
    }
    public void setName(String name) {
    	this.name = name;
    }
    public void setAge(int age) {
    	this.age = age;
    }
}
  • 위와 같이 가장 기본적인 형태의 Java 객체를 POJO라 한다.

이게 무슨 말일까?? 🤔

EJB 등에서 사용되는 Java Bean이 아닌 Getter, Setter로 구성된 가장 기본이 되는 순수한 형태의 기본 클래스를 POJO라고 한다.

그러나 여기서도 문제가 있었다.

스프링이 등장하기 이전에는 EJB가 자바 엔터프라이즈 애플리케이션 개발 시장을 독점하고 있었다. 하지만 EJB에는 치명적인 단점이 있었으니....

" EJB(Enterprise Java Beans)란 자바 개발에 있어 로우개발에 신경을 안쓰고 어플리케이션을 쉽게 만들어 준 기술이다. 그러나 EJB는 객체지향성을 감소시키는 단점을 가지고 있었다."

즉, import 선언문부터 implenets, 인스턴스 변수까지 코드가 EJB에 완전히 종속되는 것을 볼 수 있었다.


EJB를 사용과 규모가 큰 프로그램이 많아지면서 특정 기술과 환경에 종속되어 자바 코드는 가독성도 유지보수성도 떨어졌고, 특정 기술의 클래스를 상속받거나 혹은 직접 의존을 하게 되면서 객체지향성을 잃어갔다.
그래서 순수한 객체지향성이 짙었던 이전으로 돌아가자는 취지로 POJO를 개발하게 되었다.



2. POJO 프레임워크

POJO 프레임워크 = POJO를 사용하는 장점 + EJB에서 제공하는 엔터프라이즈 서비스와 기술
ex) 하이버네이트, 스프링


2-1. 하이버네이트?

  • Persistence 기술과 오브젝트-관계형 DB 매핑을 순수한 POJO를 이용해 사용할 수 있게 하는 POJO 기반의 Persistence 프레임워크.
    -> JDBC API를 직접 사용해 개발하는 것 못지않은 성능복잡한 퍼시스턴스 로직을 개발 가능하게 해주었다
  • 하이버네이트가 사용하는 POJO 엔티티들은 객체지향적인 다양한 설계와 구현이 가능하다

Q. 특정 기술에 종속적인 것은 POJO가 아니지 않나요?

A. 스프링에서 하이버이트를 사용하지 않나?
라고 생각할텐데 어떻게 새로운 엔터프라이즈 기수를 도입하면서도 POJO를 이용한 것일까??

바로 스프링에서 ORM이라는 기술을 사용하기 위해 JPA라는 표준 인터페이스를 정했기 때문이다.

  • 그래서 ORM 프레임워크들은 이 JPA라는 표준 인터페이스 아래에서 안전적으로 구현되어 돌아가고 있다!
    => 이런 방법을 스프링의 PSA라고 한다.

2-2. 스프링

  • 엔터프라이즈 서비스를 POJO 기반으로 만든 비즈니스 오브젝트에서 사용할 수 있게 한다.

  • IoC 컨테이너를 제공하여 인스턴스들의 라이프 사이클을 관리
  • 특정 인터페이스를 구현하거나 상속할 필요가 없고 라이브러리를 지원하기에 용이 및 객체 또한 가벼운 것이 특징
  • 스프링의 주요 기술인 Ioc/DI, AOP, PSA는 애플리케이션을 POJO로 개발할 수 있게 해주는 가능하게 한다.

AOP??

AOP(Aspect-Oriented Programming)는 핵심 로직과 부가 기능을 분리하여 애플리케이션 전체에 걸쳐 사용되는 부가 기능을 모듈화하여 재사용할 수 있도록 지원하는 것

  • AOP는 공통된 기능을 재사용하는 기법 입니다.
    -> 기존의 OOP에서는 공통된 기능들을 재사용하기 위해 상속이나 위임을 썼다 😥
    ex) 모니터링 및 로깅, 동기화, 오류 검사 및 처리, 성능 최적화(캐싱) 등




3. POJO 프로그래밍의 가치

POJO 기반의 코드인지를 확인하는 두 가지 기준

1. 객체지향적으로 설계 되었는가?

  • 반복적인 템플릿 코드와 테스트하기 힘든 구조인가
    -> 확장 및 재활용의 어려움이 남아있다면 EJB의 문제점을 여전히 안고 있는 것

2. 테스트가 용이한가?

  • 자동화된 테스트 코드 작성이 편리해야 한다.
    -> 코드 작성이 편리하면 좀 더 꼼꼼하게 만들게 되고, 코드 검증과 품질 향상에 좋다.




profile
초짜 백엔드 개린이

0개의 댓글