김영한님의 스프링 핵심 원리 수업을 듣고 정리한 내용입니다.
✔️ EJB(Enterprise Java Beans)는 자바 서버 모델 중 하나이다. 스프링 등장 이전 사용되고 있던 자바의 공식적인 프레임 워크이다.
하지만 단점이 너무 많았다
- 가장 큰 문제로 지적되는것이 실행 속도가 느리다는것이다. 이는 분산환경을 지원하기 위해 객체를 직렬화하는 과정 때문에 실행 속도의 저하가 발생한다.
- 복잡한 프로그래밍 모델
- 특정환경, 특정기술에 종속적인 코드
- 자동화된 테스트가 매우 어렵거나 불가능
개발자들 사이에서 순수 자바 코드로 돌아가자는 운동이 있었을 만큼 어려웠고 복잡했다.
✔️ Rod Johnson의 등장
책을 하나 내는데 거기에는 EJB를 대체할 수 있는 3만 라인 이상의 코드를 예제를 들어 서술했다. 이게 스프링 프레임워크의 시초이다.
여기에 유겔 휠러, 얀 카로프가 같이 합세해서 같이 스프링 프레임워크를 본격적으로 만듦
✔️ 하버네이트의 등장
EJB 엔티티빈 기술을 대체
EJB 매우 허술...
하버네이트 오픈소스를 다듬어서 JPA인 자바 표준을 만든다.
스프링 프레임워크
스프링 프레임워크는 50%이상이 설정이라는 말이 나올 정도로 설정에 긴 시간 할애 -> 이를 해결해 준 것이 스프링 부트
스프링 부트는 어쩌면 껍데기
알멩이는 스프링 프레임워크
스프링을 편리하게 사용할 수 있도록 지원, 최근 기본으로 사용
스프링은
객체 지향의 특징
객체 지향 프로그래밍이란?
컴퓨터 프로그래밍 ≠ 명령어의 목록
컴퓨터 프로그래밍 = 여러 개의 독립된 단위인 객체들의 모임
이 객체들은 서로 메세지를 주고 받고, 데이터를 처리
-> 유연하고 변경에 용이
마치 조립식 스마트폰처럼
다형성
역할과 구현으로 세상을 구분
운전자는 자동차 면허증을 딸 때 아반떼, K3, 테슬라모델3 처럼
차종을 알 필요가 없다 그냥 자동차 면허를 따면 차종 상관없이 운전을 할 수 있다. 운전자는 자동차에 대한 인터페이스만 알지만 자동차 세상을 무한히 확장할 수 있다.
이는 코딩과 비교하면 클라이언트에 영향 없이 새로운 기능으로 변경이 가능하다는 것이다.
역할 : 인터페이스
구현 : 인터페이스를 구현한 클래스, 구현 객체
클라이언트(객체)---요청--->인터페이스A(역할)---->를 구현한 객체a, 클래스a
클라이언트(객체)---요청--->인터페이스A(역할)---->를 구현한 객체b, 클래스b
인터페이스를 안정적으로 잘 설계하는게 엄청 중요하다.
클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리
이 클라이언트 코드의 일부
다형성은 만족하나
OCP, DIP 를 지킬 수 없다 -> 객체 지향이 아니다
이를 해결해 주는 것은 스프링이다..🙂
스프링은 무엇인가? 왜 필요한가? 무엇을 가능하게 했는가?
이 물음의 답은 객체 지향 설계를 가능하게 했다는 것!
다형성+ OCP, DIP를 가능하게 지원
어떻게?
DI 컨테이너를 제공한다. 이는 자바 객체를 이 컨테이너 안에 넣고 거기 안에서 의존관계를 형성하도록 하는 것이다! 코드가 아닌!
즉, 클라이언트 코드의 변경 없이 기능 확장이 가능한 것이다.