[springboot] 스프링이란?
스프링이란?
-
스프링은 프레임워크다(Fram 틀 + work 동작한다)
- 이 틀을 벗어나지마라 (많은대로 개발하지말고 이 틀을 제공할테니까 이 틀에서 개발해! 그럼 나처럼 좋은 걸 만들어낼 수 있을 거야)
-
스프링은 오픈소스다
- 소스코드가 공개되어 있다. 즉 내부를 볼수 있다. = 뜯어 고칠수 있다!
-
스프링은 IoC 컨테이너를 가진다
-
IoC(Inversion of Controll = 제어의 역전)는 스프링의 핵심!
-
주도권이 스프링이 가지고있다.
-
EX) Class -> 설계도, Object -> 실체화가 가능한 것, Instance -> 실체화 된것
abstract class 캐릭터, 가구{ 추상적; } //실체화가 불가능 class 누누, 의자, 침대{ 변수; 변수; } // 실체화가 가능한거 (Object) 누누가 게임에서 돌아다녀 (Instance = 실체화된것)
-
스프링이 알아서 heap메모리에 알아서 띄워준다.
-
예전에서 내가 객체를 new로 생성해서 주소를 관리했다면 이젠 스프링이 스캔해서 오브젝트를 메모리에 띄움(이것을 IOC(=제어의 역전이라고한다))
-
-
-
스프링은 DI를 지원한다.
- dependency Injection(의존성 주입)
- 스프링이 관리하는 이 객체(위에서 말한 스프링이 스캔한 오브젝트)를 내가 원하는 모든 곳(=class의 메소드)에서 가지고와서 사용할 수 있음
- 싱글톤으로 관리된다!
- 즉 이렇게 필요해서 쓰는 것을 DI라고 한다!
- dependency Injection(의존성 주입)
-
스프링은 엄청나게 많은 필터를 가지고 있다.
- 필터는 검열의 기능해준다.
- 즉 문지기처럼 특정권한이 없으면 걸른다는 거임
- 톰켓의 필터 - filter (web.xml)
- 스프링 컨테이너의 필터 - interceptor(AOP)
-
스프링은 엄청나게 많은 에노테이션을 가지고있다.(컴파일 체킹, 리플렉션)
-
컴파일체킹
-
주석 = 컴파일러가 무시하는것
-
어노테이션 (주석 + 힌트) = 컴파일러가 무시x
Animal{ run(); } Dog 상속 Animal{ @Override // 컴파일때 확인 run(); }
-
스프링에서의 어노테이션을 통해서 주로 객체를 생성한다.
@Component -> 클래스 메모리에 로딩해 @Component class A{ } <---- 스프링이 해당클래스를 스캔해서 자기가 들고 있은 heap메모리 공간에 A라는 클래스를 로드한다.(이게 IoC이고 기법이 어노테이션기법을 사용함) @Autowired -> 로딩된 객체를 해당변수에 집어 넣어 class B{ @Autowired A a; } <------ B클래스를 스캔할때 B내부안에 어떤 얘가 있는 지 분석(리플렉션이라고함 :메소드, :필드, :어노테이션 --> checking함)통해서 A와 동일한 타입의 객체를 집어 넣음. 없으면 null을 집어넣음(이것을 DI라고한다.)
-
-
-
리플렉션(분석하는 기법 -> 런타임시에 분석한다)
-
스프링은 MessageConverter를 가지고 있다. 기본값은 현재 Json이다.
- 중간언어 XML에서 JSON으로 바뀜
- ex) Java Object -> JSON -> Python Object
- (요청 -> JSON), (JSON -> 응답)할 때 JSON으로 하는 변환해주는게 MessageConverter(=Jackson)로 해준다.
-
스프링은 BufferedReader와 BufferedWriter를 쉽게 사용할 수 있다.
- 1바이트= 8비트 (통신단위) 256가지의 문자전송!
- 유니코드 = UTF-8 (3바이트통신)
- BufferedReader = 가변길이의 문자를 받을 수 있다. 통신시 좋음
- 요청(데이터를 줄때) JSP : request.getReader() = BufferedReader
- 응답(데이터를 쓸때) printWirter(println(), print()) =BufferedWiter (out내장객체)
- 즉 문자열 가변길이데이터를 쓸수 있는 클래스들이다. 이걸로 통신함
- @ResponseBody 어노테이션 -> BufferedWriter가 동작함
- @RequestBody 어노테이션 ->BufferedReader가 동작함
참고
https://www.youtube.com/playlist?list=PL93mKxaRDidG_OIfRQ4nztPQ13y74lCYg 1 ~ 3강