스프링이란?
- 스프링은 프레임워크(Framework)이다.
frame: 틀, work: 동작하다 => 틀 안에서 동작한다. 틀을 벗어나지 못하게 한다. 틀에 맞춰서 개발하도록 한다. - 스프링은 오픈소스이다.
소스 코드가 공개되어 있다. 내부를 뜯어고칠 수 있다. - 스프링은 IoC 컨테이너(Inversion of Control)를 가진다.
Inversion of Control: 제어의 역전
주도권을 스프링에게 빼앗긴다. 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 스프링에게 넘어간다.- Class: 설계도
- Object: 실체화가 가능한 것 ex) 의자, 침대 (cf. 가구는 추상적인 개념)
- Instance: 실체화된 것 ex) 내 방에 있는 의자, 내 방에 있는 침대
java에서는 내가 Object를 만들면 heap에 올라가는 반면, 스프링은 Object들을 스캔해서 객체들을 heap 메모리에 직접 올려준다.
[java]
public void makeChair(){
의자 s = new 의자(); //x001
}
public void useChair(){
의자 s = new 의자(); //x002
}
메서드마다 의자 Object가 새로 생성되고, 각각 가리키는 주소값이 다르다. 즉, 의자 Object가 2개 생성된다.
[Spring]
스프링에서는 의자 Object가 메모리에 고유적으로 1개 생성된다.
- 스프링은 DI(Dependency Injection)를 지원한다.
Dependency Injection: 의존성 주입 - 객체간의 의존 관계를 내부에서 결정하는 것이 아니라 객체 외부에서, 런타임 시점에 결정하는 방식
스프링이 관리하는 객체를 내가 원하는 모든 곳에서 사용할 수 있다. => SingleTon - 스프링은 엄청나게 많은 필터(Filter)를 가지고 있다.
- 필터: 문지기 - 임무를 부여
A나라 성의 문지기 - A나라 사람은 들여보내고, B나라 사람은 내쫓아. 그리고 A나라 사람 중에서도 특정한 권한이 있는 사람들만 왕의 집으로 들여보내라는 임무 부여 - 스프링 자체가 기본적으로 가지고 있는 필터 중에 사용하고 싶은 필터와 사용하고 싶지 않은 필터 설정 가능
- 직접 필터를 생성해서 사용할 수도 있음
- 필터: 문지기 - 임무를 부여

- 스프링은 엄청나게 많은 어노테이션을 가지고 있다. (리플렉션, 컴파일체킹)
- 어노테이션: 컴파일러가 무시하지 않는 주석으로, 컴파일러가 체킹할 수 있게 힌트를 준다.
스프링은 어노테이션을 통해 객체를 생성한다.
@Component: 클래스를 메모리(heap)에 로딩해라
@Autowired: 로딩된 객체를 해당 변수에 집어 넣어라
→ 어노테이션 = 주석 + 힌트 - 리플렉션: 해당 클래스가 어떤 필드, 메서드, 어노테이션을 들고 있는지 분석하는 기법 → 런타임 시 분석
- 어노테이션: 컴파일러가 무시하지 않는 주석으로, 컴파일러가 체킹할 수 있게 힌트를 준다.
- 스프링은 MessageConverter를 가지고 있다. 기본값은 JSON이다.
중간언어: 모든 나라의 사람들이 이해하기 쉬운 언어
자바 프로그램 → JSON → 파이썬 프로그램
MessageConverter는 데이터를 중간언어로 convert해서 전송한다. - 스프링은 BufferedReader와 BufferedWriter를 쉽게 사용할 수 있다.
→ 가변길이의 문자를 받을 수 있다.
@ResponseBody: BufferedWriter 동작
@RequestBody: BufferedReader 동작 - 스프링은 계속 발전 중이다.
출처: Youtube 메타코딩