- IOC란 ...
Inversior of Controll => 제어의 역전
자바에서는 new를 썻는데 새로운 공간을 계속 만들고 싶지않아!!
원래는 A객체에서 B객체에 있는 메소드를 사용하고 싶으면 B객체를 직접 A객체 내애서 생성하고 메소드를 호출한다. 하지만 IOC가 적용된 경우, 객체의 생성을 특별한 관리 위임 주체에게 맡긴다. (짬때리기) 이 경우 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤하는 주체는 다른 주체가 된다.
클래스 내부의 객체 생성 -> 의존성 객체의 메소드 호출에서
스프링에게 제어를 위임하여 스프링이 만든 객체를 주입 -> 의존성 객체의 메소드 호출
- DI란...
Dependency injection => 의존성 주입
- 필터란 ...
- 권한이 있으면 들어보네주고 없으면 안돼!
스프링 컨테이너 --> 인터셉터(AOP)
컴파일 체킹이란 ...
어노테이션(주석 + 힌트) <- 컴파일러가 무시하지 않음
@overiding이 되어있으면 컴파일러가 부모 클래스에 맞는 메소드가 있는지 확인 없으면 에러 --> 컴파일 체킹
ex)
@component -> 클래스/ 메모리에 로딩 (IOC 스캔해서 heap메모리에 올림)
@Autowired -> 로딩된 객체/ 해당 변수에 집어넣어
힙 메모리에 object를 쭉 읽다가 같은 오브젝트가 있다면 DI!
클래스를 스캔(읽어들일때)할 때 분석(리플렉션)을 한다. 이때 메서드 , 필드, 어노테이션의 유무를 체킹하는데 그 후 있다면 '무엇'인가를 해라 라고 설정 할 수도 있다.
리플렉션은 런타임시 분석
자바 프로그램 -> JSON -> 파이썬 프로그램
Byte Stream(1byte:8bit)으로 통신을 할 때 문자열로 가변길이의 문자를 받을 수 있다.
@RequestBody --> BufferedReader
@ResponseBody --> BufferedWriter
그외...
Spring Bean
Spring에서는 직접 new를 이용하여 생성한 객체가 아니라 Spring에 의하여 관리당하는 자바 객체를 사용한다. 이렇게 Spring에 의하여 생성되고 관리되는 자바 객체를 Bean이라고 한다.
Spring Bean을 Spring IOC Container에 등록하는 방법
@Controller
public class HelloController {
// Http Get method 의 /hello 경로로 요청이 들어올 때 처리할 Method를 아래와 같이 @GetMapping Annotation을 사용하여 Mapping을 사용할 수 있습니다.
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("data", "This is data!!");
return "hello";
}
}
@Configuration
public class HelloConfiguration {
@Bean
public HelloController sampleController() {
return new SampleController;
}
}
DAO(Data Access Object) : 데이터베이스의 data에 접근하기 위한 객체
DTO(Data Transfer Object) : 계층 간 데이터 교환을 하기 위해 사용하는 객체
VO(Value Object) 값 오브젝트
REST API : http에 요청을 보낼때 어떤 uri를 사용할지 어떤 메소드를 사용할지에 대한 약속, 규칙, 형식
Annotation : 메타-테이터(Meta-Data) -> 데이터를 위한 데이터를 의미하며, 풀어 이야기하면 한 데이터에 대한 설명을 의미하는 데이터. (자신의 정보를 담고 있는 데이터)
"이 속성을 어떤 용도로 사용할까, 이 클래스에게 어떤 역할을 줄까?"를 결정해서 붙여준다고 볼 수 있습니다.
이 기능을 잘 활용한다면, 비즈니스 로직과는 별로도 시스템 설정과 관련된 부가적인 사항들은 @(어노테이션)에게 위임하고 개발자는 비즈니스 로직 구현에 집중할 수 있습니다.