java spring 프레임워크를 쓰기 전 우리는 왜 스프링 프레임워크를 쓰게 되었는가, 왜 만들어졌을까를 한번 고민해보자.

2000년 초반 여러 기능들이 합쳐져있는 ‘EJB’라는 프레임워크가 있었다. 이 프레임워크는 잘 구성되어있지만 사용하기가 너무 복잡하고 어렵다는 단점이 있었다. 이런 ‘EJB’를 비판하며 좀 더 쉽게 만들어낸 프레임워크가 바로 ‘스프링'이다.


그럼 스프링이란 무엇일까?

스프링은 스프링 데이터, 세션, 시큐리티 등 여러 기술들의 모음집이라고 생각하면 된다. 이런 많은 기술들을 다 지원해주지만, 설정이 어렵고 배포과정이 어려워 만들어 진것이 스프링 부트이다.

스프링 부트에서 제공해주는 편리한 기능 중 하나는 서버를 자동으로 구축해준다는 것이다. 또한, 스프링만 쓸 경우 버전이 외부 라이브러리와의 궁합이 맞는지 직접 테스트 해야하지만 스프링 부트는 이런 버전문제를 자동으로 최적화해준다.


스프링의 핵심이란?

스프링은 자바 언어 기반의 프레임워크이다. 그럼 자바의 가장 큰 특징은 무엇인가? 바로 “객체 지향 언어"라는 것이다. 우리가 스프링 프레임워크를 제대로 쓰기 위해서는 결국 ‘객체 지향 프로그래밍'에 대한 본질적인 이해가 있어야한다.


객체지향 프로그래밍

객체 지향의 핵심 키워드는 “유연성", “확장성"이라고 생각한다. 이를 프로그래밍 언어로 ‘다형성'이라고 표현하는데, 역할과 구현을 분리하여 변경과 확장을 편리하게 하는 것이다. 자바에서는

역할 ⇒ 인터페이스 / 구현 ⇒ 인터페이스를 구현한 클래스, 구현 객체

이렇게 구분되어있다. 스프링에서는 제어의 역전(IoC), 의존관계 주입(DI)등을 지원하여 다형성의 활용을 극대화시켜준다.

좋은 객체지향 설계하면 “SOLID” 원칙을 빼놓을 수 없는데, 이 원칙을 따르다 보면, 인터페이스에 의존하고 구현체에 의존하면 안된다(Dip)나와 있지만 구현클래스를 대입하면서 구현체에 의존하게 된다. 이를 스프링 프레임워크가 해결해 주는데 그것이 ‘DI 컨테이너'기술이다.

이러한 것들은 간단한 프로젝트를 만들면서 학습해보자.

일단 순수하게 자바만으로 서비스를 만든 후, 객체 지향 원리를 적용해본다음 이러한 객체 지향 원리에 해당되는 스프링 기술들을 보자.

java만으로 만들어 보기