💡 Ioc컨테이너란?
Inversion of Control
의 줄임말로 직역하면제어의 역전
이라는 의미이다.
- 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다.
- 즉 , 여러 메서드안에서 객체를 생성하게 되면 서로 다른
heap
메모리에 할당되기 때문에 같은 객체라고 말할 수 없게되는데 하나의 객체를 생성하고 공유하고 싶다면 스프링이 직접 제어해주도록 하는IoC컨테이너
를 활용하면된다.
IoC컨테이너
란 스프링이 직접 제어를 해준다는 의미이다.
💡 DI란?
Dependency Injection
의 줄임말로의존성 주입
이라는 의미이다.
IoC컨테이너
활용으로 객체를 어느 한heap
메모리에 할당하게 되면 그 객체를 사용하고자 하는 모든 곳에서 객체를 가져다가 사용할 수 있는데 이를DI
라고 한다.
- 즉, 내가 필요하고자 할 때 가져와 주입할 수 있다라는 의미이다.
💡 필터란?
- 문지기와 같은 역할로 권한이 있을 경우 필터를 통해 사용할 수 있게해주고
권한이 없을 경우 필터를 통해 사용을 제한한다.
- 필터는
스프링
에서 제공하는것을 사용해도 되고,
또는 그많은 필터들 중에 사용되지 않고 있는 필터를 사용하겠다고 설정할 수도 있고,
또는 내가 직접 필터를 생성해서 사용할수도 있다.
- 필터를 사용하는것은
톰켓
과스프링 컨테이너
가 있는데,
톰켓이 첫번째 필터를 거를 수 있는 곳이고 그안에 스프링 컨테이너에서 필터를 사용할 수 있다.
- 즉 필터는 권한체크고 권한이 있으면 허용, 권한이 없으면 허용하지 않는 역할을 한다.
- 톰켓에서 필터적용하는곳을
web.xml
이라고 하고 스프링컨테이너가 들고 있는 필터는인터셉터
라고 한다. ( 인터셉터는AOP
라는 개념이라고 보는데 나중에 알아보자 )
💡 어노테이션이란?
- 주석처럼 생겼지만 컴파일러가 읽는 주석이라고 볼 수 있다.
일반주석은 설명하는 글을 적기위한 것 으로 컴파일러가 해당 내용은 코드가 아닌 것으로 간주하여 컴파일을 무시하는데
어노테이션은 뭔가를 체킹할 수 있도록 힐트를 주는 주석으로 컴파일러가 무시하지 않는다.💡 예를들어
Animal
이라는 추상클래스가 있고, 그 안에는run()
이라는 메서드가 있다고 가정하고,Dog클래스
가Animal 클래스
를 상송받을 때
Dog 클래스
는Animal 클래스
안에run()
메서드를 오버라이드해서 재정의를 해줘야 하는데
이 때 , 컴파일러에게run()
메서드는 중복이 아닌Animal 클래스
의 메서드를 재정의한다라는 의미로어노테이션
이라는 것을 사용한다.
- 기존에 만들어 둔 클래스를 다른곳에서 사용하고자 할 때 기존에는
new 연산자
를 사용하여 heap 메모리에 할당했는데 이처럼 하게되면 기존것을 불러오는것이 아닌 새로이 생성하는것으로 기존것과 공유가 될 수 없다.
- 기존것을 새로 생성하는게 아닌 연결하여 사용하고 싶을 땐
@autowired 어노테이션
을 사용함으로써 컴파일러에게 알려주게되고 컴파일러는autowrired
된 클래스안에 어떠한 메서드와, 필드, 어노테이션이 있는지 분석하게 되는데 이 분석하는 작업을리플렉션
이라고 한다.
💡 MessageConverter 란
HTTP 요청 본문
과HTTP 응답 본문
을 통째로 메세지로 다루는 방식이다.💡 예를들어
ajax 통신
을 할 때post방식
경우httpRequest
에 내용을 실어서 보내게 되는데
post
는httpRequest 본문
에 담겨서 보내지기 때문에 요청을 받을 때에도httpResopnse 본문
형태로 받아야한다.
- 이 때
http 본문
내용을MessageConverter
기능을 통해 메세지 형태로 받게 되는것이다.
- 또 한,
Json형태
로 변경하여 받기 때문에 내가 어떠한 내용을 본문에 담아 보내더라도Json형태
로 자동변환되어 받게 된다.
Request 본문
과Response 본문
을 통째로 메세지로 받는거기 때문에get방식
에서는 사용할 수 없고RequestParam
이나ModelAttribute
를 사용해야 된다.
💡 BufferedReader 와 BufferedWriter 란?
- 이름처럼 버퍼를 이용해서 읽고 쓰는 함수이다.
- 이 함수는 버퍼를 이용하기 때문에 입출력의 효율이 엄청 좋아진다.
- 위와 같이키를 누르는 즉시 바로 전달되는 것이 빠르지 않나 라고 생각할 수 있는데
우리의 하드디스크는 속도가 엄청 느리다
- 그러므로 하나씩 전송하는것보다는 버퍼에 저장을 해두었다가 한번에 전송하는 것이 더 빠르고 효율적이다.
BufferWriter
은printwriter
와 같으며printwriter 메서드로
는print()
와println()
메서드가 있다.
- 그럼 이러한 기능은 어떻게 사용되나?
@ResponseBody
와@RequestBody
어노테이션을 이용하여 사용된다.
ResponseBody
는BufferWriter
가 동작되고,RequestBody
는BufferReader
가 동작한다.
출처 : 메타코딩 - 스프링부트 개념정리 with JPA 1강 - 스프링의 핵심은 무엇인가요?
출처 : 메타코딩 - 스프링부트 개념정리 with JPA 2강 - 필터란 무엇인가요?
출처 : 메타코딩 - 스프링부트 개념정리 with JPA 3강 - MessageConverter가 궁금해요!