Spring/스프링 핵심 원리 - 기본편

1. 자바 진영의 추운 겨울과 스프링의 탄생 → 스프링이란?

DEV-HJ 2023. 3. 12. 14:36
반응형

스프링이 왜 탄생했는지 시대적 배경을 알아보자 

 

2000년 초반에 자바 진영의 표준 기술 중 최고가 EJB(Enterprise Java Beans)라는 기술이였다.

지금으로 따지면 스프링이랑 JPA 다 합쳐논 종합선물세트 같은거였다. 자바 진영 표준 기술이였기 때문에 도입이 많이 되어 있었다.

 

지옥불에 타고있는 사람 = 선배 개발자

 

EJB 는 어렵고 복잡하고 느렸다. 이론만 좋았다.

 

EJB가 제공하는 인터페이스 다 구현하고 EJB에 의존적이게 개발해야 하는점

그러다보면 코드도 더럽고 어떻게 라이프사이클로 돌아가는지도 모르겠고, 그당시에 네트워크 가지고 통신해야하고 그래야되다보니 지옥이였다.

개발자는 단순하고 편해야 되는데 이건 복잡하고 어려운데 느렸다.

 

컨테이너 하나 띄우는데 시간 엄청 오래걸리고 오죽하면 어떤말까지 나왔냐면 순수한 자바로 (POJO)로 돌아가잔 얘기까지 나왔다.

POJO (Plain Old Java Object) - 오래된 방식의 간단한 자바 오브젝트를 쓰자

근데 그중에서도 ORM 표준이라할수있는 EJB가 제공하는 ORM 엔티티피는 진짜 기술 수준 자체가 낮았다 못쓸정도로.

 

그래서 두명의 개발자가 (하이버네이트를 만든 게빈 킹, 지금의 스프링부트를 만든 로드 존슨) 이  오픈소스를 만들었다.

로드 존슨

EJB 비판하며 책을 씀. EJB 보다 훨씬 단순하면서 좋은 방법으로 개발할수 있단 주제로 책쓰고 책에 3만 코드를 풀어논게 미래의 스프링이 된다.

 

게빈 킹

EJB의 엔티티빈 쓰다가 내가 개발해도 이거보다 낫겠다. 싶어서 퇴근하고 나서 오픈소스 만든게 하이버네이트.

이렇게 만든 하이버네이트가 나중에 엄청떳다.

 

엔티티빈이 망하니까 자바 표준 논의하는곳에서 고민하다가 EJB는 버리고 하이버네이트를 만든 게빈 킹 데리고와서

하이버네이트 가지고 자바 표준인 JPA를 만들었다.

 

 

그래서 지금은 JPA라는 표준 인터페이스가 있고 구현체로 하이버네이트나 EclipseLink 등이있다.

대부분 JPA표준 하이버네이트를 쓴다보면된다

 

JPA는 자바 표준 기술이긴 하지만 디게 잘 안착한다.

결과적으로 지금 자바 ORM 시장은 다 JPA가 점유하고 있다

 

구현체로는 80% 이상 하이버네이트(실무 개발자들이 답답해서 만든거) 이다.

진짜 필드 개발자들이 좋다생각하는거 가지고 만든거라 유용하다.

 

실제 개발자들이 사용하는 기술에다가 표준이 들어오면 정제하고 필요없는 용어 덜어내서

실무 개발자들이 좋아하는 실용성과 표준에서 나오는 안정감이 합쳐져서 JPA가 나오고 지금 성공적으로 사용중이다.

 

 

지금 시대 자바 진영에서 기술을 쓸때 스프링과 JPA가 가장 큰 메인 기술이 됐다.

 

2002년에 로드 존슨이 책을 출간하면서 시작된거다.

EJB보다 나은 코드가 있다고 책에 3만 라인 코드를 풀었고 이 코드안에 지금의 스프링 핵심 다 들어가있다.

 

이 책은 나오자마자 히트..

출간 이후 유겐휠러, 얀 카로프가 로드 존슨에게 오픈소스 프로젝트 제안했다.

지금도 스프링 핵심 코드 상당수는 유겐 휠러가 개발하고있다. (스프링 코드 열어보면 진짜 메인과 중요한건 유겐휠러가 다 들어가있음)

 

왜 퇴사하고 회사차려서 스프링을 만들었을까?

왜 개발자들이 열광했을까?

Why??? 

맨 처음으로 돌아가서 봐야함 !...이건 좀 더 밑에 글에서..

 

 

리엑티브 프로그래밍 - 자바에서도 비동기 넘블로킹으로 개발하느것. 쉽게말해 노드 js처럼 개발할수 있는것.

 

옛날에는 스프링 반농담 진담으로 설정이 절반이다 라는 말이있었다. 지금 boot가 나와서 설정을 다 해주니 정말 편함


스프링이란?

 

 

스프링 생태계에 대해 말하면 스프링은 어떤 특정한 하나가 아니라 여러가지 기술의 모음이다.

 

먼저 가장 스프링의 핵심이 되는 스프링 프레임워크 

여러 스프링 기술들을 편리하게 사용하게 도와주는 스프링부트

 

스프링 데이터

기본적인 CRUD 편리하게 사용할수 잇도록 도와주는것 - JPA

 

스프링세션

세션관련한 기술을 편리하게 사용하도록 도와주는것

 

스프링 시큐리티

보안과 관련된것

 

스프링 Rest Docs

API문서랑 테스트를 편하게 엮어서 API문서를 편리하게 해주는것 

 

스프링 배치

배치 처리에 특화된 기술

 

스프링 클라우드

클라우드에 특화된 기술

 

이거 왜에도 spring.io에 들어가면 많은 기술들이 있다.

그중 제일 핵심은 스프링 프레임워크. 이 모든 기술을 편리하게 쓰도록 도와주는게 스프링 부트

스프링 프레임워크는 하나로 이뤄진게 아닌 여러개가 모인것 !

 

스프링 부트를 통해서 스프링 프레임워크를 사용한다. 최근엔 스프링부트를 기본으로 사용한다.

 

tomcat 웹 서버를 내장해서 별도의 웹 서버 설치할 필요없음. 지금은 빌드하고 서버 띄우는거까지 몇줄 치면 끝.

 

손쉬운 빌드구성을 위한 starter 종속성 제공.

라이브러리 하나 쓸때 관련된 여러개 라이브러리 묶어서 땡겨야하는데 하나만 땡길수있도록 구성

(하나만 땡기면 스프링이 알아서 관련된거 땡겨옴)

 

스프링 외부 라이브러리와 버전이 맞는지 스프링부트가 알아서 테스트 후 제공

라이브러리 버전 최적화. 엣날엔 사람이 직접 맞추는게 정말 힘들었음 

 

라이브러리 버전도 최적화해주고 매트릭 모니터링 같은것도 지원해주고 여러 기능들 지원해주고..

 

오해금지

스프링부트는 스프링프레임워크와 별도로 사용할수 잇는게 아니라

여러가지 스프링 프레임워크를 중간에서 편리하게 사용할수 잇는 기능을 제공하는것이다.

스프링부트는 꼭 스프링 프레임워크를 사용하는 기술이다. 스프링 부트 쓰면 자동으로 스프링 프레임워크 땡기고 그럼

 

 

사실 스프링이란 단어는 애매하다..

 

문맥에 따라 다르게 사용되서 

스프링 빈을 관리하는 핵심 DI 컨테이너 기술이라 하기도하고

스프링 프레임워크를 칭하기도 하고..앞 뒤 문맥에 맞게 알아듣자

 

아무리 복잡한 기술도 기술의 핵심 컨셉은 정말 단순하다.

여러 개발자들이 열광해서 오픈소스 프로젝트로 스프링을 만든이유!

결정적인 핵심 컨셉은 객체지향 프로그래밍 이다.

 

스프링의 진짜 핵심

- 스프링은 자바 언어 기반의 프레임워크다.

- 자바 언어의 가장 큰 특징은 객체지향 언어.

- 스프링은 객체지향 언어가 가진 강력한 특징을 살려내는 프레임워크

- 좋은 객체지향 언어를 개발할수 잇도록 개발자를 도와주는 언어

- 당시 많은 개발자들이 스프링에 열광한 이유는 EJB를 상속받고 의존적이고 더럽게 개발할때

  객체지향 장점들을 다 잃어버렸다. 그래서 순수한 자바로 돌아가자고 POJO란 단어도 이때 나왔음..

- 그런데 그 핵심이 바로 스프링이 가진 DI 컨테이너에 그걸 가능하게 하는것이 있었다.

- 스프링은 그냥 객체 지향 프로그래밍을 잘할수 있게 도와주는 도구.

 

진짜 핵심은 스프링이 객체 지향 프로그래밍을 잘할수있게 도와주는 도구란것이다.

좋은 객체지향 프로그래밍이 뭘까를 이해해야 스프링을 이해할수있다.


https://velog.io/@devel_sujin/%EC%8A%A4%ED%94%84%EB%A7%81%EC%9D%98-%ED%83%84%EC%83%9D

 

반응형