888 단어
4 분
Spring
2025-02-03

Spring#

스프링의 탄생 배경#

2000년 초반에는 자바 진영의 표준 기술인 EJB가 있었다. 당시에는 컨테이너나 트랙잭션 기능 등의 고급 기능들을 편하게 지원했다. 거기에 EJB는 엔티티 빈이라는 ORM 기술도 가지고 있었다. 그러나 이런 엔티티 빈은 실제로 실무에서 사용하기에는 수준이 너무 낮았다.

EJB는 너무 어려웠고 복잡하며 느렸다. 심지어 EJB가 지원하는 인터페이스를 구현하고 의존적으로 개발을 해야했다. 게다가 코드 지저분하고 EJB의 분산 기술을 사용하기 때문에 라이프 사이클을 이해하는데도 힘들었다. 너무 EJB에 의존적으로 코드를 작성하다 보니 옛날 방식의 순수 자바로 돌아가자(POJO)라는 말이 나오게 되었다.

EJB보다 더 좋은 방법으로 개발할 수 있다고 EJB에 진절머리가 난 개발자가 책을 내게 되었는데 이게 지금의 스프링의 시초가 되었다. 마찬가지로 엔티티 빈을 대신하기 위해서 다른 사람이 오픈 소스로 개발 했는데, 그것이 하이버네이트이다. 하이버네이트를 기반으로 만든 표준 ORM을 만드는데 그것이 JPA이다. 지금은 JPA를 표준 인터페이스를 두고 그 아래 구현체로 하이버네이트가 있는 형식이다.

로드 존슨이 위의 EJB들의 문제점을 비판하면서 EJB를 사용하지 않아도 좋은 개발을 할 수 있다는 것을 예제 코드를 포함한 책을 내게 된다. 이때의 책 내용에는 BeanFactory, ApplicationConText, POJO, IoC, DI과 같은 지금의 스프링 핵심 개념과 기반 코드들이 들어있다.

이 책을 기반으로 유겐 휠러와, 얀 카로프와 함께 오픈 소스 프로젝트를 시작하게 되었고, 기존의 EJB라는 겨울에서 넘어가 새로운 시작인 봄(Spring)을 맞이하자는 의미로 스프링이 태어났다.

IoC와 DI, 컨테이너#

지금까지의 프로그램은 클라이언트 객체가 스스로 필요한 서버의 객체를 생성하고 조작하고 사용했다. 이것은 어찌보면 자연스러운 행동이라고 할 수 있다. 하지만 스프링 컨테이너는 위의 방식이 아니라 스프링 컨테이너가 객체를 생성하고 조작하는 역할을 수행하게 되고, 실제 클라이언트 객체는 주어진 역할을 수행하기만 하게 되었다.

이렇게 객체의 대한 제어의 흐름이 기존의 방식에서 컨테이너로 옮겨가며 밖에서 안으로 제어하는 형식을 바뀌게 되었는데, 이것은 바로 **IoC(제어의 역전)**이다.

다시 말해 Spring Framework는 개발자가 작성한 코드가 있으면 스프링 컨테이너가 대신 객체를 생성하고 조작하며 실행하게 된다.

프레임워크와 반대되는 개념으로 라이브러리가 있다. 라이브러리는 개발자가 직접 객체를 생성하고 조작을 하며 제어의 흐름을 직접 조작하게 된다면 이것은 라이브러리이다.

Spring
https://realits.me/posts/spring/
저자
realitsyourman
게시일
2025-02-03
라이선스
CC BY-NC-SA 4.0