그럼 어떤 부분이 경량화되었다고 하는 것인가?
과거 Java EE의 *EJB(Enterprise Java Beans)를 사용하면서 해당 플랫폼에 종속되어 무거운 객체를 생성하는 방식을 많이 사용했었다.
스프링은 이에 반해 EJB를 사용하지 않고 POJO(Plain Old Java Object) 방식을 활용해 순수한 자바 객체로 플랫폼 종속성을 줄이면서 가벼운 애플리케이션을 만들 수 있다.
EJB(Enterprise Jave Bean)?
기업의 시스템을 구현하기 위한 서버측 컴포넌트 모델로, 애플리케이션의 업무 로직을 가지고 있는 서버 애플리케이션이라고 한다.
EJB는 비지니스 로직이 점차 복잡해짐에 따라 "개발자가 로우 레벨의 기술에 신경을 줄이고 오직 비지니스 로직에만 집중하게 하도록 하자"는 취지로 만들어졌다.
의존성 주입, DI(Dependency Injection)
의존성 주입(DI)란 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴으로, 인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않도록 히고 런타임 시에 해당 관계가 유연하게 주입.
이를 통해 유연성을 확보하고 의존성을 낮출 수 있다
제어의 역전, IoC(Inversion of Control)
스프링 컨테이너가 필요에 따라 개발자 대신 Bean들을 관리해주는 것으로, 개발자가 직접 객체를 관리하는 것이 아닌 도구인 컨테이너가 생성된 객체를 관리해 주면서 의존성을 맺어주는 등 "제어가 역전되었다"라는 의미이다.
DI와 IoC는 스프링에서 중요한 개념으로 다시 한 번 정리!