[스프링/Spring] 스프링(Spring)은 왜 만들어졌는가?

kindof

·

2021. 8. 2. 16:59

🏃 0. 들어가면서

정말 많은 기업에서 스프링을 쓰고 있습니다. 그리고 저도 스프링을 공부하고 있습니다.

 

스프링이 무엇이길래, 어떤 점이 좋기에 개발 생태계에서 정말 중요한 프레임워크로 자리매김했을까요?

 

이번 글에서는 스프링은 왜 만들어졌고, 어떤 가치관이 그 안에 있는지 정리해보려고 합니다.

 

🌼 1. 스프링의 탄생

2002년, 스프링은 말그대로 '봄'이라는 메시지를 개발자들에게 전하며 찾아왔습니다.

 

스프링이 등장하기 이전에는 EJB(Enterprise Java Bean)가 기업 환경의 시스템을 구현하기 위한 컴포넌트로 역할을 해왔는데, 당시에는 일반적으로 JAVA EE의 API로 사용자가 볼 수 있는 Front 로직은 JSP가, Back 로직은 EJB가 구현하는 구조로 구성되었습니다.

 

그리고 EJB를 구성하기 위해서는 Enterprise Bean과 그 안에 Session Bean, Entity Bean이 존재했고, Container, EJB Server, Client Application이 존재했죠.

 

어쨌든, EJB는 과거 각각의 어플리케이션 서버에서 독자의 API가 제공되고 각 기업의 API를 사용해서 작성한 어플리케이션들이 유연성과 확장성이 저조했던 현실을 개선해나가는 역할을 했습니다.

 

하지만, EJB는 너무 구조가 복잡하여 객체지향적이지 않았고 개발자들이 사용하기 까다로웠습니다(저도 EJB에 대해 구글링을 좀 해보았는데, 좀 복잡해서 쓱 읽기만 했습니다).

 

그리고 이 때, 스프링은 자바 언어의 핵심인 객체 지향의 특성을 살려 자바 개발 생태계에 '봄'처럼 등장했습니다.

 

여기서 스프링이 '어떻게 객체 지향의 특성을 살렸는가'에 대해서는 IoC, DI 컨테이너 등을 배우면서 이야기하기로 하고, 스프링의 핵심 가치가 '객체 지향'이라는 것을 기억하면 좋겠습니다.

 

 

💻 2. 객체 지향 프로그래밍(OOP)이 뭔데?

그렇다면 객체 지향 프로그래밍은 무엇일까요? 

 

자바 = 객체 지향 프로그래밍?

인터페이스와 클래스로 쪼개는 것?

오버라이딩, 상속, 추상화?

 

객체 지향 프로그래밍을 한 문장으로 정의하자면, "컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있도록 하는 방법"이라고 할 수 있습니다. 물론 이게 100% 정답은 아닙니다.

 

그리고 객체 지향적인 프로그램을 위해 위해 다형성(Polymorphism)이라는 핵심 개념이 등장했고, '컴포넌트를 쉽고 유연하게 변경하기' 인터페이스를 만들고 추상화를 하고, 클래스를 상속하고, 오버라이딩을 하는 등의 작업이 따라오게 된 것으로 생각합니다.

 

 

📃 3. 스프링과 객체 지향 프로그래밍

지금까지 말했던 내용을 네 가지 흐름으로 정리하면 아래와 같습니다.

 

1) 객체 지향 프로그래밍은 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있도록 한다.

2) EJB는 객체 지향적이지 못했기 때문에 컴포넌트를 쉽고 유연하게 변경할 수 없었다.

3) 객체 지향 프로그래밍은 다형성을 기반으로 한다.

4) 스프링은 다형성을 극대화해서 객체 지향 프로그래밍을 가능하게 해준다.


그러면 앞으로 스프링이 어떻게 객체 지향 프로그래밍을 잘 할 수 있도록 만들어주는지 공부해보겠습니다.