과거 자바는 정파 기술로 EJB가 존재했었음
→ 비싸고 어렵고 느림
2002년 로드 존슨이 EJB를 지적하며 스프링 핵심개념 발표
유겐휠러가 로드 존슨에게 오픈 소스 프로젝트 제안
→ 현재에도 유겐휠러가 스프링 핵심코드를 개발중
스프링의 모든 기술을 쉽게 해주는건 springboot임
스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용
스프링은 자바 언어 기반의 프레임워크
SRP: 단일 책임 원칙(single responsibility principle)
OCP: 개방-폐쇄 원칙 (Open/closed principle)
가장 중요한 원칙
소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다
인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현
다형성을 사용해도 OCP 원칙을 지킬 수 없을 때가 있으므로 이럴 때는 객체를 생성하고 연관관계를 맺어주는 별도의 조립, 설정자가 필요하다.
→ 이 설정자를 스프링이 역할해주는 것
LSP: 리스코프 치환 원칙 (Liskov substitution principle)
ISP: 인터페이스 분리 원칙 (Interface segregation principle)
DIP: 의존관계 역전 원칙 (Dependency inversion principle)
스프링은 다음 기술로 다형성 + OCP, DIP를 가능하게 지원
DI 컨테이너 - 객체들을 한 곳에 모아두고 의존 관계를 설정해주는 곳