<aside> 💡
여러 가지 기술들의 모음
스프링 프레임 워크, 스프링 부트
모든 기술을 쉽게 사용할 수 있도록 도와주는게 스프링 부트
스프링 데이터 - CRUD를 편리하게 사용할 수 있도록 해주는 기술, Spring data JPA 많이 사용
스프링 세션 - 세션 기능 잘 사용할 수 있도록
스프링 시큐리티 - 보안과 관련된 것
스프링 Rest Docs - API 문서화를 편리하게 해주는 것
스프링 배치 - 배치 처리에 특화된 기술
스프링 클라우드 - 클라우드 기술에 특화된 기술
</aside>
<aside> ❗
스프링 DI 컨테이너, AOP, 이벤트, 기타
스프링 MVC, 스프링 WEBFlux
트랜잭션, JDBC, ORM 지원, XML 지원
캐시, 이메일, 원격접근, 스케줄링
스프링 기반 테스트 지원
코틀린, 그루비
</aside>
<aside> ❗
스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용
단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성
Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 됨
→ 빌드하고 서버 띄우는 거 편리하게 해줌 // 별도의 톰켓을 사용할 필요가 없음
손쉬운 빌드 구성을 위한 starter 종속성 제공
→ 쉽게 종속성 설정 가능 (필요한 거 알아서 가져온다.)
스프링과 써드 파티(3rd parth)(외부) 라이브러리 자동 구성
→ 스프링 프레임워크와의 외부 라이브러리 버전을 자동으로 구성
메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능 제공
→ 모니터링을 스프링 부트가 기본적으로 제공
관례에 의한 간결한 설정
**
스프링 부트는 스프링 프레임워크와 별도로 사용할 수 있는 것이 아님
→ 스프링 부트는 여러 스프링 프레임 워크 기술들을 편리하게 사용할 수 있는 기능을 제공하는 것
</aside>
<aside> ❗
스프링이라는 단어는 문맥에 따라 다르게 사용된다.
<aside> ❗
이 기술을 왜 만들었는가 ??
이 기술의 핵심 컨셉은 ??
→ 핵심 컨셉을 이해해야 내 것이 된다. !!!!
**
스프링은 객체 지향 프로그래밍을 잘 할 수 있게 도와주는 도구
EJB를 사용하면 객체 지향 특징을 살리지 못함
</aside>
<aside> ❗
여러 개의 독립된 단위인 객체들의 모임으로 파악하고자 하는 것
각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.(협력)
프로그램을 유연하고 변경이 용이하게 만든다.
</aside>
<aside> ❗
컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법을 의미
→ 재사용성, 상속, 다형성
</aside>
<aside> ❗
역할 - 인터페이스
구현 - 인터페이스를 구현한 객체
자동차가 변경되어도 운전자의 역할은 바뀌지 않는다. ( 차가 바뀌어도 운전할 수 있음 )
즉, 운전자는 **자동차 인터페이스(자동차 역할)**에만 의존적
운전자는 자동차 내부 구조 몰라도 된다.
내부가 바뀌더라도 운전자는 자동차 인터페이스에 대해서만 알면 사용하는데 문제 없음
즉, 클라이언트에 영향을 주지 않고 새로운 기능을 제공할 수 있음
→ 역할과 구현으로 세상을 구분하기 때문에 가능
→ 새로운 자동차가 나와도 클라이언트는 바뀔 필요가 없음
로미오 역할, 줄리엣 역할
배우는 대체가 가능해야 함 → 변경, 대체 가능성 생김
로미오 역할을 하는 배우는 줄리엣 역할을 누가할지 상관하지 않아도 됨
즉, 서버의 구현이 바뀐다고 해서 클라이언트의 역할이 바뀌지 않는다.
→ 유연하고 변경이 용이하다는 의미
</aside>
<aside> ❗
역할과 구현으로 구분하면 세상이 단순해지고, 유연해지며, 변경도 편리해진다.
장점
다형성을 활용하여 역할과 구현을 분리
객체를 설계할 때, 역할과 구현을 명확히 분리
객체 설계 시 역할(인터페이스)을 먼저 부여하고, 그 역할을 수행하는 구현 객체 만들기
혼자 있는 객체는 없다.
클라이언트 : 요청, 서버 : 응답
수 많은 객체 클라이언트와 객체 서버는 서로 협력 관계를 가진다.
클라이언트가 요청한 행위를 하는게 응답을 하는 것 (꼭 응답을 보내줄 필요는 없음)
</aside>
<aside> ❗
</aside>
<aside> ❗
</aside>
<aside> ❗
</aside>
<aside> ❗
</aside>
<aside> ❗
</aside>
<aside> ❗
</aside>
<aside> ❗
</aside>
<aside> ❗
</aside>