저번시간에 EJB로 인한 비효율성이 있어 POJO로 바꾸게 되었다고 했는데 이에 대해서 이어서 설명하도록 하겠습니다.
EJB는 대규모 분산 객체 시스템을 구축하기 위한 기술입니다. 그렇다면 분산 객체 시스템이란 무엇일까요?
분산 객체 시스템을 이해하기 위해서는 먼저 분산 컴퓨팅과, 분산 객체에 대한 이해가 필요합니다.
분산 컴퓨팅은 여러 개의 컴퓨터 또는 서버에 걸쳐 작업을 나누어 병렬로 처리하는 것을 의미합니다. 즉 하나의 컴퓨터에 존재하는 Application이나 프로세스에서 혼자 수행하기 어려운 작업을 다중 프로세서나 컴퓨터에 분산 시키는 것입니다.
분산 객체는 분산 컴퓨팅 환경에서 물리적으로 떨어져 있는 객체들이 네트워크를 통해 서로 상호작용할 수 있는 구조를 의미합니다. 여기서 객체는 소프트웨어 내에서 특정 기능을 수행하는 모듈을 뜻하며, 서로 다른 서버에 위치해 있어도 마치 로컬 객체처럼 원격에서 호출할 수 있도록 만들어집니다.
분산 컴퓨팅은 시스템의 자원(컴퓨팅 파워, 스토리지 등)을 여러 곳에 분산하여 작업을 효율적으로 수행하기 위한 개념이라면, 분산 객체는 이러한 환경에서 객체 간의 상호작용을 관리하는 방법입니다. 즉, 분산 객체는 분산 컴퓨팅을 구성하는 요소 중 하나로, 특정 기능을 네트워크상에서 원격으로 호출하고 공유할 수 있도록 하여 분산된 컴퓨팅 환경에서 로직을 구현하게 해줍니다.
ejb는 크게 enterprise bean , container, server 로 구성되어 있습니다.
Enterprise Bean은 분산객체의 핵심 구현체로 Session Bean, Entity Bean을 통해 분산 환경에 필요한 객체를 제공합니다. 컨테이너는 분산 객체의 생명주기와 리소스를 관리하여 원격 호출, 보안, 트랜잭션, 풀링 등 분산 환경에서 필요한 서비스를 제공합니다.
결국 EJB는 분산 환경에서 발생할 수 있는 복잡한 비즈니스 로직을 분산 객체를 통해 구현해내는 기술이라고 정리할 수 있습니다. 특히, EJB는 비즈니스 객체들을 관리하는 컨테이너 기술, 설정에 의한 트랜잭션 기술 등이 담겨 있었습니다. 여기서 컨테이너 기술은 혁신적이자 동시에" EJB를 정말 사용하기 어렵게 만들어버린 주범"입니다.
개발을 하다보면 많은 객체를 만들게 되는데, 컨테이너 기술이란 이러한 비즈니스 객체들을 관리하는 컨테이너를 만들어서 필요할 때마다 컨테이너로 부터 객체를 받는 기술입니다. 객체를 그때그때 생성한다면 동시접속자 수가 많을 때 상당히 오래걸리고 부하도 크고 트랜잭션 처리도 어려울 것입니다.
그래서 EJB 컨테이너는 다양한 방식으로 객체들을 효율적으로 관리하여 이 문제를 처리하였습니다.
대표적으로
이 있습니다.
이렇듯 취지는 좋았으나, EJB의 다양한 기술들을 사용하기 위해서는 반드시 EJB 스펙을 사용해야 했고, EJB 컨테이너를 사용하기 위해 상투적인 코드(상속 and 구현 해야하는 클래스)가 많았습니다.
또한, 벤더 사마다 EJB 컨테이너를 구현한 내용이 다르기 때문에 다른 벤더 사의 컨테이너로 변경에 어려움이 있었고, 초기 EJB 버전(특히 EJB 2.x)에서는 XML 설정 파일이 많고 복잡하여, 이를 이해하고 관리하는 데 오랜 시간이 걸렸습니다.
거기다 도구없이는 디버깅이 까다롭고 컨테이너 환경에서 동작하도록 설계되었기 때문에, 로컬에서 단독으로 테스트하기가 어려웠습니다.
이러한 ejb의 종속성과 복잡성으로 인해 개발자들은 다른 방법을 모색하게 되었습니디.
이러한 EJB의 복잡성을 해결하기 위해 2003년 Rod Johnson이 Spring Framework를 개발하게 되었습니다. BeanFactory, ApplicationContext, POJO, (IoC)제어의 역전, (DI)의존관계 주입 등 많은 기술들이 녹아있는 프레임워크가 탄생한 것입니다.
따라서 스프링은 특정한 '하나'가 아니라 '여러 기술'들의 모음이라고 하는게 더 정확한 표현입니다. 이러한 스프링(Spring)의 철학은 확고합니다.
특정 기술에 종속되지 않고(기술 비침투적) 객체를 관리할 수 있는 컨테이너를 제공하는 것
지금까지 3편에 걸쳐서 spring의 탄생배경에 대해서 알아보았습니다. 결국, 완벽한 기술은 없었고 spring 또한 마찬가지 인 듯합니다. 그러나, 그 철학만큼은 계속되서 살아남아 후대로 넘어왔다는 생각이 드네요. 기술은 바뀌었지만 핵심적인 부분은 그대로인 것처럼 결국 근본적인 부분에 집중해야 한다는 것을 느낄 수 있었던 시간이었습니다.
https://jhyonhyon.tistory.com/28?category=867755
https://ddil-ddil.tistory.com/5
https://parankiho.tistory.com/entry/%EA%B8%B0%EC%88%A0%EC%A7%80%EC%9B%90%EC%9D%84-%ED%95%98%EB%A9%B4%EC%84%9C-%EB%8A%90%EB%82%80-EJB-Architecture-%EC%9D%98-%EB%8B%A8%EC%A0%90
https://woongsin94.tistory.com/357
https://rainbow97.tistory.com/entry/JAVA-EJBEnterprise-JavaBeans