과거에는 현재의 스프링부트+지원하는 내장톰캣처럼 서버를 돌릴려해도 수천만원의 비용이 들었다.
이러한 현상으로 화가 상당히 많이 난 두명 개발자가 있었다😶 로드존슨 이 현재 스프링이 되는 책을 내고 개빈킹 이라는 사람이 현재 JPA에 시초이자 구현체인 Hibernate 책을 냄
- 스프링 데이터 -> 기본적인 CRUD를 사용하기위한 것
- 스프링 세션 -> 세션 기능을 좀 더 편리하게 사용하기위한 것
- 스프링 시큐리티 -> 보안관련
- 스프링 Rest Docs -> API문서를 편리하게 만들기 위한 것
- 스프링 배치 -> 실무에서 많은양의 데이터를 쪼개서 업데이트를 하고 저장하기 위한 것
3.1 스프링프레임워크 vs 스프링부트 ( 가장 큰 차이 )
(1) 내장 톰캣을 활용해 웹서버를 따로 설치하지 않아도 웹어플리케이션을 실행 가능
(2) 개발자를 위한 간결한 설정
- 스프링은 자바 기반의 프레임워크 -> 자바의 가장 큰 특징인 객체지향의 강력한 특징을 강화
- 결국 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있도록 도와주는 프레임워크
- 스프링의 본질을 알자 ★★★★★★
결국 유연하고 변경이 용이한 것
1. 다형성의 예시 : 운전자가 자동차를 운전할 수 있다면 차의 종류가 바뀌어도 운전이 가능하다.
-> 운전자가 자동차의 인터페이스를 이해하고 있기 때문에 가능
-> 결국 새로운 자동차가 나와도 운전자는 운전이 가능하다.
-> 역할과 기능으로 구분한다면 세상이 단순해지고, 유연해지면 변경도 수월해진다 ✔
-> 역시 오버라이딩과 오버로딩을 예로 드는게 가장 쉽다! ( 메소드에 대한 재사용과 재정의 )
-> 결국 다형성 / 상속 / 추상화 / 캡슐화 중 다형성이 가장 중요하다 ✔
- 한 클래스는 하나의 책임만 가져야한다. ( 하지만 하나의 책임이라는 것이 모호 )
- 유지보수 시 많은 책임을 가진다면 너무나도 힘든 경우가 생김
- 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
- 다형성을 사용했지만 OCP 원칙을 지킬 수 없는 경우가 있다.
-> 이때 스프링 컨테이너의 역할이 필요하다.
- 자동차의 엑셀을 밟으면 앞으로 가라는 기능이 있지만 뒤로 갈 수도 있다.
-> 단순히 컴파일에 성공하는 것을 넘어서 LSP 위반을 통해 뒤로 갈 수도 있게 함
- 운전 인터페이스, 정비 인터페이스로 분리
-> 특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다.
- 프로그래머는 추상화에 의존해야한다. 절대 구체화에 의존하면 안된다.
-> 결국 역할에 의존해야지 구현에 의존하면 안된다 ✔
-> 하지만 클라이언트의 코드를 수정하며 DIP를 위반하는 경우가 생김