스프링의 탄생

수달·2021년 2월 22일
0

스프링

목록 보기
1/4
post-thumbnail

EJB 프레임 워크

2000대 초반, EJB라는 기술이 있었다.
정파의 기술로 사용되었다. 금융권 등등!

당시에 설정에 의한 트렌젝션 관리 , 분산기술(서비스, dao 같은) 을 사용하는게 장점이었다.

orm 기술은 자바 객체를 디비에 저장하기 편하게 만들었다.

단점

복잡하고 어려운데 느렸다.

컨테이너 한번 돌리는데 진짜 오래 걸렸다.

오죽 힘들었으면,
POJO - plan old java object 라는 말도 나왔다.

아래 불타는 사람들은 선배 개발자들..

이렇게는 안되겠어, EJB에 빡친 개발자들


2002년에 로드 존슨이라는 사람이 책을 출간.

EJB없이도 충분히 고품질의 확장 가능한 애플리케이션을 개발할 수 있음을 보여준다.
예제를 30,000라인 이상으로 작업했다..

그러자 다른 개발자들이 예제를 실제 자기 서비스에 도입해서 쓴다.
그래서 이 상황을 봤던 유겐 휠러, 얀 카로프 라는 사람이 존슨에게 오픈 소스 프로젝트를 제안했다.

스프링 이름은 전통적인 J2EE 겨울을 넘어 새로운 시작이라는 뜻으로 지었다.

위의 두 개발자는 회사도 나와서 새로 회사를 만들고 이 프로젝트를 했다고 전해진다.


저녁에 퇴근하고 와서 사용하기 쉽게 하이버네이트를 만들었다.

그 이후에 EJB 회사에서 자신들의 기술보다 하이버 네이트가 더 많이 사용된다는 것을 인정하고
하이버 네이트를 만든 개발자들 데려와서 거의 하이버 네이트를 복붙하듯 만든 기술이
바로 jpa 이다.

스프링 역사

스프링은 서버를 톰캣을 다운받아서~ 따로 띄워줘야 하는데 그것들이 어려웠다.
농담으로 예전에 스프링은 설정이 절반이다라는 말이 있었다 .

스프링 생태계

스프링은 여러가지 기술의 모음이다.

스프링 데이터 : crud 를 편리하게 관리하게 해준다.
스프링 rest docs : api 문서화를 편리하게 해준다.

스프링 프레임워크

핵심 기술 : 스프링 DI 컨테이너, AOP, 이벤트, 기타
웹 기술 : 스프링 mvc, 스프링 webFlux
데이터 접근 기술 : 트랜잭션, jdbc, orm xml 지원
기술 통합 : 캐시, 이메일, 원격접근, 스케줄링
테스트 : 스프링 기반 테스트 지원
언어 : 코틀린, 그루비
최근에는 스프링 부트를 통해서 스프링 프레임 워크의 기술들을 편리하게 사용한다.

스프링 부트

스프링을 편리하게 사용할 수 있도록 지원한다. 최근에는 기본으로 사용한다.

  • 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성한다.
    톰캣 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 된다.
    예전에는 스프링 가지고 프로젝트를 하려면 빌드하고, 톰캣 서버를 별도로 설치하고, 특정 위치에
    넣고, 띄우고 아주 복잡했는데 스프링 부트가 빌드하고 서버 띄워주는 것 까지 다 해준다.
  • 손쉬운 빌드 구성을 위한 starter 종속성을 제공한다.
    여러 라이브러리를 써야했는데, 라이브러리를 여러개 한꺼번에 가져와준다.
  • 스프링과 3rd parth 라이브러리 자동 구성
    라이브 러리들과 스프링의 버전을 관리 해준다.
  • 메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능 제공
    운영환경에서 제일 중요한 건 모니터링. 모니터링 기능을 제공해준다.
  • 관례에 의한 간결한 설정
    디폴트 설정 값이 있고, 필요한 부분만 수정하면 된다.

스프링 단어

  • 스프링이라는 단어는 문맥에 따라 다르게 사용된다.

  • 스프링 DI 컨테이너 기술

  • 스프링 프레임 워크

  • 스피링 부트, 스프링 프레임워크 등을 모두 포함한 스프링 생태계

스프링을 왜 만들었는가?

이 기술의 핵심 컨셉은 무엇인가

  • 자반 언어 기반의 프레임 워크이다.
    자바 큰 특징 : 객체 지향 언어
    스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임 워크
    스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임 워크이다!!!

객체 지향의 특징

  • 추상화

  • 캡슐화

  • 상속화

  • 객체들의 모임으로 파악하고자 함. 객체는 메세지를 주고받고 데이터를 처리할 수 있다.

  • 객체 지향 프로그래밍은 프록램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다.

유연하고 변경이 용이하다?

마치 키보드 마우스를 바꾸듯이. 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법이다.

다형성

세상을 역할과 구현으로 구분한다면

운전자와 자동차의 역할을 나누고, 자동차를 아반떼 테슬라 k3같이 다른 모델로 구현했다고 하자

자동차가 바뀌었다고 해서 운전자에게 영향이 있나? 아니다
운전면허가 있으면 할 수 있다.

그럼 자동차는 왜 여러 형태로 구현되었는가 바로 운전자 때문이다.
클라이언트에 영향을 주지 않고 새로운 기능을 제공할 수 있다.

객체를 설계할 때 역할과 구현을 분명하게 나눈다.
역할 : 인터페이스
구현 : 인터페이스를 구현한 클래스, 구현 객체

구현보다 인터페이스가 먼저이다.

객체를 협력이라는 관계부터 생각한다.

혼자 있는 객체는 없다.
클라이언트 : 요청
서버 : 응답
수 많은 객체 클라이언트와 객체 서버는 서로 협력 관계를 가진다.

멤버 서비스는 멤버 리포지토리에 의존한다(알고있다)
그런데 멤버 리포지토리에 메모리 랑 jdbc 레포지토리를 할당한다.

다형성의 본질

  • 인터페이스를 구현한 객체 인스턴스를 실행 시점에서 유연하게 변경할 수 있다.
  • 클라이언트를 변경하지 않고, 서버의 기능을 유연하게 변경할 수 있다.

인터페이스를 안정적으로 설계하는게 중요하다.

인터페이스(역할) 자체가 변하면 클라이언트, 서버 모두 큰 변경이 발생한다.
자동차를 비행기로 변경해야 한다면,? 연극을 하는데 대본 자체가 바뀐다면?
다시 처음부터 설계 해야한다.

스프링과 객체 지향

  • 다형성이 가장 중요하다.
  • 스프링은 다형성을 극대화해서 이용할 수 있게 도와준다.
  • 스프링에서 이야기하는 제어의 역전IoC, 의존관계 주입 DI은 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있도록 지원한다.

스프링을 사용하면 마치 레고 블럭을 조립하던지, 연극에 배우를 변경하듯이. 사용할 수 있게 된다.

profile
짜장면 쟁이

1개의 댓글

comment-user-thumbnail
2023년 4월 6일

인프런에서 강의하고 계시는 김영한님 스프링 강의 강의자료인데 PPT 내용을 그대로 복사해서 붙여넣으셔서 자료 출처에 대한 것들을 남기시는게 좋을 것 같습니다.

답글 달기