당니의 개발자 스토리
이야기 - 자바 진영의 추운 겨울과 스프링의 탄생 본문
옛날 옛적에 2000년대 초반에는 자바 진영의 어떤 표준 기술 중에서 최고봉인 EJB 라는게 있었다. 자바당의 정파 기술인 거다. 그 당시에 오픈소스 이런 것들이 약간 사파 기술이라고 했다.
EJB는 표준적으로 전환한 기술인데, 구현하는 회사들이 여러 군데에서 표준기술을 구현해서 그걸 가지고 서버 같은 걸 팔았다.
그리고 이게 완전 종합 선물 세트인 이유가 당시에 이제 엔티티 빈이라는 기술이 있었다.
소위 말하는 JPA라는 게 ORM 기술인데, ORM 기술은 DB에서 쿼리 없이 자바 객체를 편하게 저장하고 꺼내는 기술이다. 근데 이 EJB는 Entity bean 이라는 ORM 기술도 가지고 있었다. 하지만 너무 비쌌다.
당시에 한 대당 막 수천만원씩 했다. 이론은 너무 좋으나, 실제 써보면 너무 복잡하고 진짜 느렸다.
어떻게 해야 되냐면, EJB가 제공하는 인터페이스를 구현하고, EJB를 의존적으로 개발해야 되는거다. 그러니까 코드도 지저분해지고 이게 어떻게 라이프 사이클로 돌아가는지도 모르겠고, 당시에 네트워크를 가지고 통신하고 이렇게 해야 되니까, 분산을 하는데 이게 지옥이었던 거다.
근데 그중에서도 특히, 당시에 ORM 표준이라고 할 수 있는 EJB가 제공하는 ORM 기술인 Entity Bean은 진짜 기술 수준 자체가 낮았다. hello world 수준이었다.
EJB 지옥불에 타죽기 직전이던 두 명의 개발자가 오픈소스를 들고왔다.

미래의 스프링이 됐다.

Hibernate. 근데 이 Hibernate가 나중에 EJB에서 제공하는 Entity Bean이라는 기술을 사람들이 안 쓰고 당시에 ORM 기술을 쓰면 다 Hibernate를 썼다. 그래서 이제 EJB(Entity Bean)도 장사가 안되고 거의 망하니까 망했다는걸 인정하고, 하이버네이터를 만들었던 개빈킹을 데리고 온다.
그래서 하이버네이터를 가지고 거의 복붙해서 만든 자바 표준인 JPA를 만들어낸 거다.

JPA라는 표준 기술은 인터페이스만 있고, 구현체는 따로 만들어야 된다.

그래서 지금은 JPA라는 표준 인터페이스를 만들고, JPA에 대한 구현체로 Hibernate나 EclipseLink나 다른 벤더들이 만든 기술들이 있다. 대부분 JPA는 표준 Hibernate를 쓰신다고 보면 된다.
이 JPA는 자바 표준 기술이긴 하지만 되게 안착을 잘한다. 그래서 결과적으로는 지금 자바 진영의 ORM 시장은 다 JPA가 먹고 있다. 그리고 그 구현체로는 80% 이상 하이버네이터가 먹고 있다.
그런데 하이버네이터 같은 오픈소스는 약간 단점이 뭐가 있냐면, 좀 약간 특화된 것들이 있다. 정제됨이 별로 없다.
근데 어쨌든 하이버네이터를 가지고 JPA를 표준으로 정제해서 만들어냈다. 그래서 실무 개발자들이 만족할 만한 실용성과 표준이라는 점에서 안정성이 합쳐져서 JPA가 나온거다.
자 그러면 본격적으로 스프링의 역사에 대해서 말씀드릴게요.
제가 굳이 스프링과 JPA를 둘 다 얘기하는 이유는 뭐냐면, 지금 시대에 여러분들이 자바 진영에 있는 어떤 기술을 쓸 때 제일 중요한 건 사실, 스프링과 JPA, 이 두 가지가 모두 중요하기 때문에 그래요. 이 두 가지가 가장 큰 메인 기술이에요.

스프링은 2002년에 로드 존슨이라는 개발자가 이 책을 출간하면서 전설이 시작이 됩니다. EJB의 문제점을 쫙 지적을 하면서, EJB가 없어도 충분히 고품질의 확장 가능한 애플리케이션을 개발할 수 있는 것을 보여줘요.
그걸 어떻게 보여줬냐면, 3만 라인이 이상의 기반 기술을 예제코드로 풉니다. 이 예제코드 안에 지금 스프링의 핵심 개념과 기반 코드가 다 들어가 있는 거예요.
빈 팩토리, 애플리케이션 컨텍스트, 포조(POJO)라는 개념, 그리고 제어의 역전, 의존관계 주입 등등의 개념이 다 들어가 있어요.
이 책이 딱 나오자마자 바로 히트를 치고, 이제 어떤 개발자들은 이 책의 예제코드를 자기 프로젝트에다가 써요. 지금의 스프링 프레임워크랑 오픈소스가 아니라, 지금으로 따지면 책의 예제코드를 가져다 쓴 게 스프링 프레임워크를 쓴 게 된거죠. 오픈소스를 복붙해서 쓴거죠.

이때 책이 딱 출간되고 나서, 유겐 휠러라는 개발자와 얀 카로프라는 두 명의 개발자가 로드 존슨에게 '오픈소스 프로젝트 하자! 이거 너무 아깝다' 라고 제안을 합니다. 스프링의 핵심 코드는 지금도 유겐 휠러가 상당수 개발하고 있어요.
우리의 강의의 시작은 바로 저 처음으로 갈 거예요.
'왜 로드 존슨이 스프링 같은 저런 코드를 만들었을까?', '왜 저 3만 라인 이상의 예제 코드를 만들었을까?', '근데 그 예제 코드가 도대체 뭐였길래 뭐가 매력적이었을까?'
예제 코드라고 해서 그냥 뭐 대단한 게 아니라 순수한 자바 코드란 말이에요. 그게 뭐 얼마나 대단하길래 유겐 휠러랑 얀 카로프 같은 개발자들이 그걸 오픈소스 하자 하고, 정말 자기들 회사 다 그만두고, 새로운 회사를 차려서 스프링이랑 오픈소스만 몰두하고 그랬을까요? 어떤 이유가 있었을 거잖아요.
그래서 처음으로 가는 겁니다. 왜 그렇게 열광을 했고, 왜 스프링을 오늘날 쓰게 되는 건지, 사실 여러가지 개념이 있는데 그거를 말로 설명해서는 안 와닿아요.
그래서 예제 코드로 그냥 쭉 짜다가 이러이러하면, 결국 여러분들은 스프링과 비슷한 코드를 짜게 되고 결국 이렇게 이렇게 해서 만들면, 저 로드 존슨이 처음에 만들었던 그 3만 줄의 코드가 결국 만들어지게 되는 걸 보여줄 겁니다. 결국엔 그게 스프링 프레임 워크가 되는 겁니다. 라는 결론으로 한 단계, 한 단계 보여드릴 거에요.
역시 좀 올드하긴 하지만 역사는 설명을 해야 되겠네요.

옛날에는 반 농담 반 진담으로 스프링은 설정이 절반이다. 라는 말도 있었는데, 지금은 스프링 부트가 나오고나서 얘가 설정을 거의 다 해주기 때문에 정말 편합니다.
자 이렇게 스프링의 과거에 대해서 알아봤구요.
이제 다음 시간부터는 본격적으로 스프링이 뭔지, 스프링의 생태계, 스프링 프레임워크, 스프링 부트 등의 차이에 대해서 쭉 설명을 해드리겠습니다.
'스프링 > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
| 프로젝트 생성 (0) | 2024.01.16 |
|---|---|
| 객체 지향 설계와 스프링 (0) | 2024.01.16 |
| 좋은 객체 지향 설계의 5가지 원칙(SOLID) (0) | 2024.01.16 |
| 좋은 객체 지향 프로그래밍이란? (0) | 2024.01.16 |
| 스프링이란? (0) | 2024.01.15 |