스프링을 쓰기 전에는 개발자가 프로그램의 흐름을 제어하는 주체였다.
스프링에서는 프로그램의 흐름을 프레임워크가가 주도하게 된다.
그래서 IoC라는 개념을 쓴다.
객체간의 의존성을 내가 아닌 외부에서 주입하는 개념이다.
클래스 내에 필요한 다른 객체를 직접 생성해주면 코드를 수정하려고할때 그 클래스와 또 그 객체를 직접 수정해줘여한다.
예를 들어서, 요리사는 조리하기 위해서 칼이 필요하다.
요리사는 칼을 가지고 있다.
근데 이 칼을 장미칼로 바꿔주고싶다.
장미칼로 바꾸고 싶을뿐인다 요리사 클래스를 직접수정해줘여한다.
프로젝트가 어마무지하게 커진다면 이런 예제와는 비교도 안될만큼 복잡한 일이 될 수 있다.
그래서 우리는 Setter 나 생성자에 파라미터를 knife를 주고 knife를 외부에서 선택할 수 있도록한다.
스프링을 사용하면 이런 것들을 XML파일이나 어노테이션을 사용해서 knife를 선택할 수 있도록 할 수 있다.
아직 잘은 모르겠지만, 웹어플리케이션이라면 웹을 사용하는 사용자가 요리사에게 원하는 knife를 쥐어줄수 있도록 할 수 있다는 뜻인거 같기도하다.
이렇게 개발자가 프로그램의 흐름을 제어하는게아니라 프레임워크가 주도하게 된다. 이것을 위에서 말했듯이 Inversion of Control 이라고 한다.
스프링에서는 객체를 Bean 이라고 부른다.
스프링은 특정한 하나가 아니라 여러가지 기술의 모음집.
스프링의 핵심인 스프링 프레임워크
스프링의 여러 기술을 편리하게 사용할수있도록 도와주는 스프링 부트
스프링 데이터, 세션 시큐리티, rest docs, 배치, 클라우드가 있다
스프링 데이터란
스프링 데이터베이스 관ㄱ형데이터베이스 NoSQL, MongoDB 등 기본적인 CRUD 기술은 비슷하다.
이런것들을 편리하게 사용할수있도록 도와주는게 스프링데이터라는 기술이고 제일많이쓰는 건 스프링JPA를 많이 쓴다
스프링 세션이란
세션기능을 편리하게 사용할ㄴ순있도록 도와주는거
스프링 배치
실무에서 천만명의 데이터를 한번에 업데이트는 실시간으로 하기 어렵다 천만건 중에 몇건씩몇거닜ㄱ 저장하고 배치처리라고 하는데 배치처리에 특화된것
이외에도 많은 기술들이 있다
핵심은 스프링 프레임워크이다
모든 기술을 편리하도록 도와주는게 부트이다.
이것도 하나로이뤄진게 아니다
핵심기술 스프링 DI 컨테이너, AOP, 이벤트 등이 있다
웹 기술 스프링 MVC 스프링 WebFlux 등
ㅔ
스프링부트는 스프링을 편리하게 사용할수이또록 지원하는거지만 최근엔 기본으로 사용한다
단독으로 실행할수있는 스플링 애플리케이션을 쉽게 생성한다
톰캣서버같은걸 별도로 설치안해도 된다