본문 바로가기

Spring

[Spring 은 무엇일까]Spring 공부 시작

지금까지 Spring 으로 몇 번의 간단한 웹 어플리케이션과 API를 개발했었다. 하지만 다시 처음부터 Spring을 공부하면서 단순히 웹 어플리케이션 프레임워크 라고 정의하기에는 너무 많은 구성요소들이 존재한다고 느껴졌다.

 

당장 Spring의 공식 페이지에서는 Spring Framework, Boot, Data, Security, Session, HATEOAS 등 20가지가 넘는 프로젝트들이 존재한다.(프로젝트들는 프레임워크, 라이브러리, API 등 다양하다.) 내가 지금까지 사용해봤던 Express.js, React, 안드로이드 등의 프레임워크들은 조금 사용해보면 벡 엔드, 프론트엔드, 안드로이드 프론트를 위한 프레임워크라는 것을 알 수 있었다. 그러나 Spring 에서는 현재 서비스는중단 됐지만 안드로이드 개발을 위한 프로젝트까지 제공했을 정도로 매우 광범위하다.

 

Spring에서 제공했었던 Android 개발을 위한 프로젝트

위키피디아에서는 다음과 같이 스프링 프레임 워크에 대해서 정의하고 있다.

 

스프링 프레임워크(영어: Spring Framework)는 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크로서 간단히 스프링(Spring)이라고도 한다. 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다. 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로서 쓰이고 있다.

 

지금까지 개발하면서 등장한 용어들의 이러한 사전적인 정의들를 보면 항상 이해가 잘 되지않았는데, 강의를 보고 집중적으로 공부를 하다보니 이해가 된다!

 

스프링 프레임워크는 "자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크" 라는 말은 결국 자바 언어로 어떤 어플리케이션을 개발하는 일을 돕기 위한 프레임 워크라는 말이다. 그렇다면은 Spring은 도대체 어떤 것을 돕는 것일까?

 

과거에 EJB(Enterprise JavaBeans)라는 것이 있었다. EJB는 자바 진영에서 사용되는 서버 비지니스 어플리케이션 컴포넌트 모델로, JSP가 웹 시스템에서 화면 로직을 처리한다면, EJB를 통해 업무 로직을 처리하는 역할을 했다고 한다.

 

어쨌든 EJB를 통해 과거에 수많은 기업에서 서버 어플리케이션을 개발 했지만 문제가 있었다. 어플리케이션이 지나치게 EJB 의존적으로 개발되어 객체지향 개발을 힘들게 한다는 것 이었다.

 

객체지향 언어로 설계된 자바를 통해 객체지향에 반하는 개발을 하는 것은 생산성을 낮추고 프로그램을 복잡하게 만들었다.(이 때문에 POJO 라는 용어도 생겨났다고 한다.)

 

이러한 이유 때문에 로드 존슨이라는 개발자가 2002년에 출판한 저서인 Expert One-on-One J2EE Design and Development에서 소스코드를 선보였고 이 코드가 자바언어의 객체지향성을 유지하면서 의존적인 무거운 객체를 만들지 않을 수 있도록 하는 Spring의 시초가 되었다고 한다.

 

정리하면 기존의 서버 어플리케이션 개발에 사용되던 EJB 가 EJB에 과도하게 의존적이고, 객체지향을 파괴하고, 코드를 복잡하고 무겁게 하자 객체지향을 잘 지키면서 어플리케이션을 개발할 수 있도록 하기위해 만들어진 프레임워크가 바로 스프링이다.

 

즉, Spring은 Java를 통해 좋은 객체지향 어플리케이션을 개발할 수 있도록 도와주는 프레임워크라는 것이다.

 

그렇다면 Spring 의 무엇이 어떻게 객체지향적으로 개발할 수 있게 도와줄까?

 

바로 IoC(Inversion of Control) 와 DI(Dependency Injection) 이다. Spring의 공식페이지에서도 이 두가지가 스프링 프레임워크의 핵심이라는 것을 설명하고 있다.

Spring 공식 페이지 설명

IoC 와 DI 가 정확히 무엇인지에 대해서는 공부를 진행하면서 다음글에서 차차 정리해보려고 한다.

 

그리고 스프링이 제공하는 다양한 프로젝트들에 대해 지금은 무지하지만 열심히 해서 그 부분들도 빨리 공부해보고싶다!!


※ 김영한님의 스프링 핵심 원리 - 기본편강의를 참고

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8