스프링이 제공하는 핵심 가치와 원리를 제대로 파악하고 사용한다.
2000년대 초반 EJB(enterprise java Beans) -> spring / JAP 를 짬뽕해놓은 기술이 탄생
단점
POJO - 오래된 방식의 자바 오브젝트, 그냥 이걸로 돌아가자는 말이 나올 정도였다.
두 명의 사람이 EJB에 환멸을 느끼고, 오픈소스를 만든다.
EJB 엔티티 빈 -> 하이버네이트 -> JPA(같은 사람이 거의 하이버네이트와 비슷하게 만든 JAVA표준)
JPA - 표준 인터페이스 하이버네이트 - 80% 이상의 점유율을 차지하는 JAP 구현체
책 출간 이후 '유겐 휠러', '얀 카로프'가 로드 존슨에게 오픈소스 프로젝트를 제안하여 만들어진 것이 SPRING( EBJ 겨울을 넘어 새로운 시작이라는 뜻 )
1.0 - xml 2.0 - xml 편의기능 3.0 - 자바 코드로 설정 4.0 - 자바8 boot 1.0 - 기존 스프링의 복잡한 셋팅/설정을 개선 5.0 / boot 2.0 - 리엑티브 프로그래밍 지원 ...
필수
선택
스프링을 편리하게 사용할 수 있도록 지원, 최근에는 스텐다드로 사용
단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성 -Tomcat같은 웹 서버를 내장하여 별도의 웹 서버 설치 불필요
손쉬운 빌드 구성을 위한 starter 종속성 제공
스프링과 3rd parth 라이브러리 자동 구성
메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능 제공
관례에 의한 간결한 설정
문맥에 따라 다르게 사용된다.
컴퓨터 프로그래밍을 명령어의 목록으로 보는 시각에서 벗어나, 여러개의 독립된 단위, 즉, 객체 들의 모임으로 파악하고자 하는것이다.
각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.(협력)
객체지향 프로그래밍은 유연하고 변경용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다.
운전자는 역할(인터페이스)만을 따르면 모든 자동차를 이용할 수 있다. 즉, 클라이언트에 영향을 주지 않고 새로운 기능을 구현할 수 있다.
유연하고, 변경에 용이한 것!!
ex) 정렬 알고리즘, 할인 정책 등등
- MemberService 클라이언트가 구현 클래스를 직접 선택
MemberRepository m = new MemoryMemberRepository(); //기존 코드 //DIP 위반
MemberRepository m = new JdbcMemberRepository(); //변경 코드 //DIP 위반
ex) 자동차 인터페이스의 엑셀은 앞으로 가라는 기능, 뒤로 가게 구현하면 LSP 위반
그런데 OCP에서 설명한 MemberService는 인터페이스에 의존하지만, 구현 클래스도 동시에 의존한다.
MemberService 클라이언트가 구현 클래스를 직접 선택
MemberRepository m = new MemoryMemberRepository(); //DIP 위반
그럼 인터페이스만 사용하면 구현체가 없는데 어떻게 위반을 안해?
스프링은 다음 기술로 다형성 + OCP, DIP를 가능하게 지원 DI(Dependency Injection): 의존관계, 의존성 주입 DI 컨테이너 제공
클라이언트 코드의 변경 없이 기능 확장
쉽게 부품을 교체하듯이 개발