2000대 초반, EJB라는 기술이 있었다.
정파의 기술로 사용되었다. 금융권 등등!
당시에 설정에 의한 트렌젝션 관리 , 분산기술(서비스, dao 같은) 을 사용하는게 장점이었다.
orm 기술은 자바 객체를 디비에 저장하기 편하게 만들었다.
복잡하고 어려운데 느렸다.
컨테이너 한번 돌리는데 진짜 오래 걸렸다.
오죽 힘들었으면,
POJO - plan old java object 라는 말도 나왔다.
아래 불타는 사람들은 선배 개발자들..
2002년에 로드 존슨이라는 사람이 책을 출간.
EJB없이도 충분히 고품질의 확장 가능한 애플리케이션을 개발할 수 있음을 보여준다.
예제를 30,000라인 이상으로 작업했다..
그러자 다른 개발자들이 예제를 실제 자기 서비스에 도입해서 쓴다.
그래서 이 상황을 봤던 유겐 휠러, 얀 카로프 라는 사람이 존슨에게 오픈 소스 프로젝트를 제안했다.
스프링 이름은 전통적인 J2EE 겨울을 넘어 새로운 시작이라는 뜻으로 지었다.
위의 두 개발자는 회사도 나와서 새로 회사를 만들고 이 프로젝트를 했다고 전해진다.
저녁에 퇴근하고 와서 사용하기 쉽게 하이버네이트를 만들었다.
그 이후에 EJB 회사에서 자신들의 기술보다 하이버 네이트가 더 많이 사용된다는 것을 인정하고
하이버 네이트를 만든 개발자들 데려와서 거의 하이버 네이트를 복붙하듯 만든 기술이
바로 jpa 이다.
스프링은 서버를 톰캣을 다운받아서~ 따로 띄워줘야 하는데 그것들이 어려웠다.
농담으로 예전에 스프링은 설정이 절반이다라는 말이 있었다 .
스프링은 여러가지 기술의 모음이다.
스프링 데이터 : crud 를 편리하게 관리하게 해준다.
스프링 rest docs : api 문서화를 편리하게 해준다.
핵심 기술 : 스프링 DI 컨테이너, AOP, 이벤트, 기타
웹 기술 : 스프링 mvc, 스프링 webFlux
데이터 접근 기술 : 트랜잭션, jdbc, orm xml 지원
기술 통합 : 캐시, 이메일, 원격접근, 스케줄링
테스트 : 스프링 기반 테스트 지원
언어 : 코틀린, 그루비
최근에는 스프링 부트를 통해서 스프링 프레임 워크의 기술들을 편리하게 사용한다.
스프링을 편리하게 사용할 수 있도록 지원한다. 최근에는 기본으로 사용한다.
스프링이라는 단어는 문맥에 따라 다르게 사용된다.
스프링 DI 컨테이너 기술
스프링 프레임 워크
스피링 부트, 스프링 프레임워크 등을 모두 포함한 스프링 생태계
이 기술의 핵심 컨셉은 무엇인가
추상화
캡슐화
상속화
객체들의 모임으로 파악하고자 함. 객체는 메세지를 주고받고 데이터를 처리할 수 있다.
객체 지향 프로그래밍은 프록램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다.
마치 키보드 마우스를 바꾸듯이. 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법이다.
세상을 역할과 구현으로 구분한다면
운전자와 자동차의 역할을 나누고, 자동차를 아반떼 테슬라 k3같이 다른 모델로 구현했다고 하자
자동차가 바뀌었다고 해서 운전자에게 영향이 있나? 아니다
운전면허가 있으면 할 수 있다.
그럼 자동차는 왜 여러 형태로 구현되었는가 바로 운전자 때문이다.
클라이언트에 영향을 주지 않고 새로운 기능을 제공할 수 있다.
객체를 설계할 때 역할과 구현을 분명하게 나눈다.
역할 : 인터페이스
구현 : 인터페이스를 구현한 클래스, 구현 객체
구현보다 인터페이스가 먼저이다.
혼자 있는 객체는 없다.
클라이언트 : 요청
서버 : 응답
수 많은 객체 클라이언트와 객체 서버는 서로 협력 관계를 가진다.
멤버 서비스는 멤버 리포지토리에 의존한다(알고있다)
그런데 멤버 리포지토리에 메모리 랑 jdbc 레포지토리를 할당한다.
인터페이스(역할) 자체가 변하면 클라이언트, 서버 모두 큰 변경이 발생한다.
자동차를 비행기로 변경해야 한다면,? 연극을 하는데 대본 자체가 바뀐다면?
다시 처음부터 설계 해야한다.
스프링을 사용하면 마치 레고 블럭을 조립하던지, 연극에 배우를 변경하듯이. 사용할 수 있게 된다.
인프런에서 강의하고 계시는 김영한님 스프링 강의 강의자료인데 PPT 내용을 그대로 복사해서 붙여넣으셔서 자료 출처에 대한 것들을 남기시는게 좋을 것 같습니다.