[SpringBoot]기본개념 1강 스프링이란?
스프링은 프레임워크이다.
개발자들에게 개발틀을 제공하여 개발 패턴을 일정하게 만드는 것으로 개발을 보다 쉽게 할 수 있다.
스프링은 오픈소스이다.
오픈 소스란 소스 코드를 공개하는 것으로 스프링 내부 코드를 나에게 맞게 변경할 수도 있다.
스프링은 IoC 컨테이너를 가진다.
IoC(Inversion Of Control) : 제어권의 역전
스프링의 주도하에 스캔된 데이터를 메모리에 띄운 것.
주도권이 스프링에게 있다는 것은?
보통 메서드 내부에서 오브젝트를 직접 생성(new)하여 메모리(heap)에 띄워주는데 이는 생성할 때마다 새로운 오브젝트가 생성된다. 이는 같은 오브젝트를 여러번 생성하게 되기 때문에 메모리 공간이 낭비된다. 그래서 스프링은 메모리에 띄우는 오브젝트를 일괄 관리하여 같은 메서드를 재활용할 수 있게 만든다. 스프링이 오브젝트를 한번 스캔하여 이를 IoC 컨테이너에 띄워준다. 이를 재활용하여 사용하는 것으로 메모리 공간 낭비를 막을 수 있다. 한번 메모리에 띄우는 것을 싱글톤이라고 한다.
클래스(Class) : 설계도, 가구 제작 설계도
오브젝트(Object) : 실체화가 가능한 것, 의자, 침대(가구 – 추상적인 것, 실체화 불가능)
인스턴스(Instance) : 실체화된 것
스프링은 DI 를 지원한다.
Dependency Injection : 의존성 주입
IoC 컨테이너에 띄워둔 데이터를 각 클래스에서 사용할 수 있게 만드는 것.
스프링은 엄청나게 많은 필터를 가지고 있다.
사용자이 권한을 체크하여 필터링하는 것. 스프링은 기본적으로 가지고 있는 필터는 물론 내가 직접 만들어 필터를 사용할 수 있다.
톰캣이 들고 있는 필터 : web.xml
스프링 컨테이너가 들고 있는 필터 : 인터셉터(AOP)
스프링은 엄청나게 많은 어노테이션을 가지고 있다.
어노테이션이란 컴파일러가 읽고 지나가는 주석이다. 스프링에서는 주로 객체생성을 하기 위해 사용된다.
각각의 어노테이션에 역활을 부여되어 있다.
@Component : 클래스를 스캔하여 메모리 공간에 띄운다.
@Autowired : 로딩된 객체를 해당 변수에 집어 넣는다.
리플렉션 : 스캔시 클래스 내부에 어떤 메서드, 필드, 어노테이션을 가지고 있는지 런타임시에 체킹하고 해당 경우 작업을 설정할 수도 있다.
스프링은 MessageConverter를 가지고 있다.
메시지 컴버터는 요청 및 응답 시에 프로그래밍 언어를 공용어로 바꿔주는 역할을 한다.
현재 Jackson이라는 메시지 컴버터가 사용되고 있다.
공용어는 과거에는 xml을 주로 사용하였지만 현재는 json을 사용하고 있다.
스프링은 BufferedReader와 BufferedWriter를 쉽게 사용할 수 있다.
BufferedReader와 BufferedWriter은 가변 길이의 문자를 받을 수 있게 하는데 스프링에서는 이를 어노테이션으로 제공하여 쉽게 사용할 수 있게 한다.
@ResponseBody -> BufferedWriter
@RequestBody -> BufferedReader