01 스프링의 역사

자바 진영은 오래전 아주 길고 긴 암흑기를 겪었다. 그 암흑기를 시작한 것은 서버 어플리케이션 EJB였다. EJB는 자바에서 정식 인증한 표준으로서 영업에 성공해서 많은 개발자들이 이용했지만, 객채지향 프로그래밍에 맞지 않는 표준으로 설계난이도가 너무 어렵고 난해해서 선배 개발자들은 지옥불에 빠진듯하게 코딩을 했어야 했다. SOLID 표준에 맞는 코딩이 너무나 어려웠고 심지어는 플레인 자바로 돌아가자는 운동까지 이어졌다. 프레임 워크를 사용하는 것보다 그냥 쌩으로 코딩하는것이 편하다는 이야기였다. 개발자의 편의를 위해 개발된 툴이 오히려 개발자의 발목을 잡는 암흑기가 있었다는 것이다. 난세에 영웅이 나오듯이 자바 진영에는 로드 존슨이라는 영웅이 나타나 세상을 평정하게 된다. 로드 존슨은 J2EE Design and Development라는 책을 출간하게 되고 이 책을 읽은 개발자들은 EJB대신 책에 나온 코드를 프레임 워크로 사용해서 개발하기 시작했다. 이 책에는 스프링의 핵심코드들이 수록 되어있었다. 책을 출간한 후에 유겐 휠러, 카로프가 오픈소스 프로젝트를 제안하게되고 EJB라는 겨울에서 벗어나 자바진영의 봄이 왔다는 뜻으로 Spring이라는 이름으로 오픈소스 프로젝트를 시작한다. 이것이 스프링의 시작이다. 하이버네이트도 이것과 같은 이유로 개발되었고 새로운 ORM의 표준(JPA)이된다.

02 스프링 생태계

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/45d1c046-f621-49cb-9f88-fe2e18e16f52/Untitled.png

스프링은 스프링 프레임워크나 스프링 부트 외에도 다양한 어플리케이션들이 존재한다. 이러한 스프링 생태계를 전부 이해하는 것은 불가능하지만 어떠한 어플리케이션들이 있는지 정도는 알고 있는게 중요하다. 이러한 어플리케이션들이 유기적으로 움직이는 것이 스프링의 생태계이다.

스프링 부트는 이러한 기술들을 편리하게 관리해주고 이어주는 역할을 한다. 버전끼리의 호환성을 알아서 관리해주고 설정해준다.

03 왜 스프링?

스프링이 개발된 이유는 단 하나다. 자바의 객채지향의 이점을 완벽하게 활용하기 위해서이다. 나머지 편리한 기능들, 웹 어플리케이션 만들기, DB접근 관리, 전자정부 프레임워크 등등은 객채지향의 산물이라고 생각한다. 그럼 그냥 자바를 사용하지 왜? 스프링을 사용하는 것인가? 그리고 객채지향이 왜 좋은것인가? 라는 의문이 생긴다.

01) 플레인 자바의 한계점

객채지향에서 플레인 자바의 한계점은 없다. 다만, 위에서 말한 로드 존슨의 핵심코드(약 3만 줄)의 코드를 SOLID에 맞는 어플리케이션 개발할 때 마다 계속쳐야 한다는 것이다. 그 3만 줄의 코드 중에 가장 중요한것은 무엇인가?

02) 스프링의 핵심

DI(dependency injection)이다. DI보다 중요한 개념은 스프링에서 없다. DI를 함으로써 우리는 추상화에만 의존하여서 구현 할 수 있고, 또, 추상화 개념들만 맞춰주면 런타임에서 객채를 끼웠다 뺐다 할 수 있는것이다. 이것은 엄청난 이점이다. 결국, SOLID의 이점을 전부 챙길 수 있는것이다.

03) 객채지향의 이점, SOLID의 이점

객채지향을 잘 구현하려면 객채의 책임을 기준으로 객채간의 관계를 우선으로 지정하고 구현과 책임을 분리하여 코딩하면 유연하고 변경이 용이하며 확장 가능한 설계를 할 수 있다. 따라서, 인터페이스를 안정적으로 설계하는게 중요하고 그럴려면 SOLID를 잘 이해하고 있어야한다.