스프링 핵심
- 스프링은 프레임 워크이다.
- 오픈소스이다.
- IoC컨테이너를 가진다.
- IoC(Inversion of Control): 제어의 역전
- Class: 설계도
- Object: 실체화가 가능한 것
롤 게임을 예로 들면 가렌이라는 캐릭터는 클래스가 실제 게임에서 실체화된 것이다.
하지만 챔피언은 추상적인 의미, 실체화가 될 수 없다.
- 인스턴스: 실체화된 오브젝트
- new 생성자를 통해 오브젝트를 힙 메모리공간에 올리게 되면( 실체화) 참조변수가 메모리 주소값을 가리키게 된다.
- 이 인스턴스를 다른곳에서 사용하기 위해서 똑같은 생성자를 통해 생성하더라도 이전에 생성된 인스턴스 새로 생성한 인스턴스 다른 메모리 주소를 레퍼런스 하고 있는 다른 인스턴스라고 할 수 있다.
- 이러한 인스턴스를 사용하기 위해서 스프링은 컴포넌트로 등록한 오브젝트를 스캔하여 IoC 컨테이너에(메모리 영역) 올려주고, 인스턴스들을 관리한다.
- DI를 지원한다.
- DI(Dependency Injection) : 의존성 주입
- IoC 컨테이너에서 관리되는 모든 인스턴스들을 다른 클래스, 메서드에서 가져와서 사용할 수 있음
- 즉 필요한 오브젝트를 IoC컨테이너로부터 가져와서 사용하는것을 의존성 주입이라고 할 수 있다.
- 스프링은 엄청나게 많은 필터를 가지고 있다.
- 스프링은 많은 어노테이션을 가지고 있다.(리플렉션, 컴파일 체킹)
- 어노테이션 :
- 코드 문법 에러 체크
- 코드 자동 생성 정보 제공
- 런타임시 특정 기능을 실행하는 정보 제공
- 리플렉션 : 런타임시 리플렉션이란 객체를 통해 클래스의 정보를 분석해 내는 프로그램 기법
- @Componet → 클래스 메모리에 로딩
- @Autowired → 로딩된 객체를 해당 변수에 주입
@Component
Class A{
}
Class B{
@Autowired
private A a;
}
B 클래스 내부에 어떤 요소들이 있는지 (메소드, 필드, 어노테이션)을 분석하고(리플렉션), 특정 기능을 하도록 설정함(어노테이션)
위 경우는 B 리플렉션 과정을 통해 @Autowired 를 체킹하고 IoC 컨테이너로부터 A 인스턴스가 있는지 확인하고 있으면 Bclass로 주입
- 스프링은 MessageConverter를 가지고 있다. (기본값은 Json)
가령 자바 애플리케이션, 파이썬 애플리케이션이 있다고 하고, 서로 통신을 한다고 하면, 자바의 오브젝트와 파이썬의 오브젝트는 다를 것이다.
이때 MessageConverter는 통해 중간데이터인 Json으로 객체를 변환시켜주거나 응답데이터를 자바 오브젝트로 변환하는 역할을 할 것이다.
- 스프링은 BufferedReader와 BufferedWriter를 쉽게 사용할 수 있다.
- 통신은 바이트단위로 이루어짐 이때 바이트로 받은 데이터를 char로 캐스팅하기에는 매우 번거롭고, InputStreamReader는 바이트 크기를 정하고 사용하기 때문에 데이터 손실 및 낭비의 문제가 있음, 이때 BefferedReader를 사용하여 가변길이의 문자를 받을 수 있다.
- 마찬가지로 BufferedWriter는 가변길이의 문자열을 쓸 수 있도록 해주는 클래스
- @RequestBody → BufferedReader 동작
- @ResponstBody → BufferedWriter 동작
'Spring' 카테고리의 다른 글
Spring Security + JWT 회원가입, 로그인 기능 구현 (7) | 2023.01.17 |
---|---|
빈의 생명주기 (1) | 2023.01.03 |
컴포넌트 스캔과 의존 관계 자동 주입 (3) | 2023.01.02 |
스프링 컨테이너와 스프링 빈 (3) | 2023.01.01 |
Spring Boot 동작 원리 (4) | 2022.12.24 |