
필수
스프링 프레임워크
스프링 부트
선택
스프링 데이터 : CRUD를 편리하게 도와주는 기술 -> 제일 많이 쓰는 건 Spring data JPA
스프링 세션 : 세션 기능을 편리하게 사용할 수 있게 도와줌
스프링 시큐리티 : 보안
스프링 Rest Docs : API 문서화를 편리하게 도와줌
스프링 배치 : 배치처리에 특화된 기술
스프링 클라우드 : 클라우드 처리에 특화된 기술
스프링 사이트로 이동하면 다양한 스프링 관련 기술을 확인할 수 있다.
핵심 기술 : 스프링 DI 컨테이너, AOP, 이벤트, 기타
웹 기술 : 스프링 MVC, 스프링 WebFlux
데이터 접근 기술 : 트랜잭션 , JDBC, ORM 지원, XML 지원
기술 통합 & 테스트 & 언어
최근에는 스프링 부트를 통해 스프링 프레임워크의 기술들을 편리하게 사용한다.
스프링을 편리하게 사용할 수 있도록 지원하고 최근에는 기본으로 사용한다.
장점
- 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성
- Tomcat 같은 웹 서버를 내장하고 있음. 과거에는 별도로 설치함.
- starter 종속성 제공 -> starter가 포함하는 라이브러리까지 한 번에
- 스프링과 외부 라이브러리 자동 구성 -> 외부 라이브러리 버전까지 신경쓰지 않아도 됨.
- 메트릭, 상태 확인,외부 구성과 같은 프로덕션 준비 기능 제공 -> 중요한 모니터링에 도움
- 관례에 의한 간결한 설정
⛓️스프링부트와 스프링 프레임워크
스프링부트는 스프링 프레임워크와 별개로 사용할 수 없다.
스프링부트는 스프링 프레임워크를 편리하게 사용하기 위해 중간에서 기능을 제공하는 것이다.
문맥에 따라 다르게 사용된다.
- 스프링 DI 컨테이너 기술
- 스프링 프레임워크
- 스프링 부트, 스프링 프레임워크 등을 모두 포함한 스프링 생태계
스프링을 왜 만들었을까?
✏️스프링의 핵심 개념
자바 언어 기반의 프레임워크
자바 언어의 가장 큰 특징 -> 객체 지향 언어
객체 지향 언어가 가진 특징을 가장 잘 살려내는 프레임워크
즉 , 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크
자바 언어의 다형성을 활용
역할 = 인터페이스
구현 = 인터페이스를 구현한 클래스, 구현 객체
객체는 협력 관계
클라이언트 : 요청
서버 : 응답
수많은 클라이언트와 객체 서버는 서로 협력 관계를 가짐
자바 언어의 다형성
다형성의 본질
인터페이스를 구현한 객체 인스턴스의 실행 시점에 유연하게 변경할 수 있다.
협력이라는 객체 사이의 관계에서 시작해야 함.
클라이언트를 변경하지 않고 서버의 구현 기능을 유연하게 변경할 수 있다.
스프링과 객체 지향
다형성이 가장 중요하다 !!
스프링은 다형성을 극대화해서 이용할 수 있게 도와준다
제어의 역전(IoC), 의존관계 주입(DI)은 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있도록 지원한다.
스프링을 사용하면 마치 레고 블럭 조립하듯이, 공연 무대의 배우를 선택하듯이 구현을 편리하게 관리할 수 있다.
로버트 마틴이 정리한 원칙
- SRP 단일책임 원칙
한 클래스는 하나의 책임만 가진다.
중요한 기준은 변경 -> 변경 후 파급 효과가 적으면 단일 책임 원칙을 잘 따르는 것
- OCP 개방-폐쇄 원칙
확장에는 열리고 변경에는 닫혀 있어야 한다.
다형성을 활용하면 이를 가능케 할 수 있다.
- LSP 리스코프 치환 원칙
하위 클래스는 인터페이스 규약을 다 지켜야 한다.
- ISP 인터페이스 분리 원칙
특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 나음
- DIP 의존관계 역전 원칙
구현 클래스에 의존하지 말고 인터페이스에 의존해라.