Framework : 틀안에서 동작한다.
Framework 특징
오픈소스는 소스가 공개되어있는것으로 내부를 보고 수정할 수 있다.
IoC (inversion of controll) : 제어의 역전으로 주도권이 스프링에 있다.
개발자가 object를 직접 new해서 heap이라는 공간에 올리게 되면, 해당 주소 는 래퍼런스 변수 s로 해당 메서드 내부에서 관리하게 된다. 이렇게 되면 나중에 같은 s를 다른 메서드에서 사용하기 로직이 복잡하다.
이러한 것들을 스프링이 다양한 객체들을 읽어서 heap 메모리에 올려준다.
🔸 개발자가 직접 원하는 곳에서 new를 해서 주소를 관리했다면 이제는 스프링이 객체를 스캔하여 메모리에 올렸기 때문에 개발자가 관리하는 것이 아니라 스프링이 관리해준다.
DI (Dependency Injection) : 의존성 주입
스프링이 관리하는 객체들을 어디서든지 가져다가 사용할 수 있는것을 DI라고 한다.
어디서든지 동일한 객체를 사용할 수 있으므로 싱글톤으로 관리할 수 있다.
스프링 자체가 기본으로 가지고 있는 필터가 있다. 직접 필터 생성 가능
(filter/web.xml) 톰캣 -> (인터셉터/AOP) 스프링 컨테이너
어노테이션 (주석 + 힌트) : 컴파일러가 무시하지 않음.
ex) @Override 컴파일할때 체크하고 상위 클래스에서 메소드를 확인하게 함. (컴파일 체킹)
스프링에서는 어노테이션을 통해서 객체 생성을 한다.
ex)
@Component - 클래스 메모리에 로딩
@Autowired - 로딩되니 객체를 해당 변수에 넣기
class B{
@Autowired
A a;
}
분석(리플렉션)을 통해서 특정 클래스 내부에 있는 메서드, 필드, 어노테이션을 체킹 가능하고 IoC를 통해서 A객체가 heap에 올라왔다면 class B에 a에 DI를 통해 변수에 객체 주입.
🔸 어노테이션은 주석+힌트, 리플렉션은 클래스를 분석하는 기법으로 runtime때 분석한다.
내가 직접 converter 할 필요없이 json이 대신 해준다. 요청/응답 시 모두 동작
중간언어 : xml -> json (기본값)
ex) 자바 object <-> json <-> 파이썬 object
InputStreamReader를 BufferedReader로 감싸서 가변길이 문자로 받기.
BufferedWriter -> PrintWriter 사용(내려쓰기 가능)
@ResponseBody : Bufferdwriter 동작
@RequestBody : BufferedReader 동작
스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용