[Spring Boot - 스프링이란]

이지현·2022년 5월 16일
0

SpringBoot

목록 보기
2/2
post-thumbnail

💻1. 스프링이란?

  • 1. 스프링이란 프레임워크 이다.

  • 2. 스프링은 오픈소스 이다.

  • 3. 스프링은 IoC컨테이너 를 가진다.

💡 Ioc컨테이너란?

  • Inversion of Control 의 줄임말로 직역하면 제어의 역전 이라는 의미이다.

  • 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다.

  • 즉 , 여러 메서드안에서 객체를 생성하게 되면 서로 다른 heap 메모리에 할당되기 때문에 같은 객체라고 말할 수 없게되는데 하나의 객체를 생성하고 공유하고 싶다면 스프링이 직접 제어해주도록 하는 IoC컨테이너 를 활용하면된다.
    IoC컨테이너 란 스프링이 직접 제어를 해준다는 의미이다.

  • 4. 스프링은 DI 를 지원한다.

    💡 DI란?

    • Dependency Injection 의 줄임말로 의존성 주입 이라는 의미이다.

    • IoC컨테이너 활용으로 객체를 어느 한 heap 메모리에 할당하게 되면 그 객체를 사용하고자 하는 모든 곳에서 객체를 가져다가 사용할 수 있는데 이를 DI 라고 한다.

    • 즉, 내가 필요하고자 할 때 가져와 주입할 수 있다라는 의미이다.

  • 5. 스프링은 엄청나게 많은 필터를 가지고 있다.

    💡 필터란?

    • 문지기와 같은 역할로 권한이 있을 경우 필터를 통해 사용할 수 있게해주고
      권한이 없을 경우 필터를 통해 사용을 제한한다.

    • 필터는 스프링 에서 제공하는것을 사용해도 되고,
      또는 그많은 필터들 중에 사용되지 않고 있는 필터를 사용하겠다고 설정할 수도 있고,
      또는 내가 직접 필터를 생성해서 사용할수도 있다.

    • 필터를 사용하는것은 톰켓스프링 컨테이너 가 있는데,
      톰켓이 첫번째 필터를 거를 수 있는 곳이고 그안에 스프링 컨테이너에서 필터를 사용할 수 있다.

    • 즉 필터는 권한체크고 권한이 있으면 허용, 권한이 없으면 허용하지 않는 역할을 한다.

    • 톰켓에서 필터적용하는곳을 web.xml 이라고 하고 스프링컨테이너가 들고 있는 필터는 인터셉터 라고 한다. ( 인터셉터는 AOP 라는 개념이라고 보는데 나중에 알아보자 )

  • 6. 스프링은 엄청나게 많은 어노테이션 을 가지고 있다. [ 리플렉션, 컴파일체킹 ]

    💡 어노테이션이란?

    • 주석처럼 생겼지만 컴파일러가 읽는 주석이라고 볼 수 있다.
      일반주석은 설명하는 글을 적기위한 것 으로 컴파일러가 해당 내용은 코드가 아닌 것으로 간주하여 컴파일을 무시하는데
      어노테이션은 뭔가를 체킹할 수 있도록 힐트를 주는 주석으로 컴파일러가 무시하지 않는다.

      💡 예를들어

      • Animal 이라는 추상클래스가 있고, 그 안에는 run() 이라는 메서드가 있다고 가정하고, Dog클래스Animal 클래스 를 상송받을 때
        Dog 클래스Animal 클래스 안에 run() 메서드를 오버라이드해서 재정의를 해줘야 하는데
        이 때 , 컴파일러에게 run() 메서드는 중복이 아닌 Animal 클래스 의 메서드를 재정의한다라는 의미로 어노테이션 이라는 것을 사용한다.

      • 기존에 만들어 둔 클래스를 다른곳에서 사용하고자 할 때 기존에는 new 연산자 를 사용하여 heap 메모리에 할당했는데 이처럼 하게되면 기존것을 불러오는것이 아닌 새로이 생성하는것으로 기존것과 공유가 될 수 없다.

      • 기존것을 새로 생성하는게 아닌 연결하여 사용하고 싶을 땐 @autowired 어노테이션 을 사용함으로써 컴파일러에게 알려주게되고 컴파일러는 autowrired 된 클래스안에 어떠한 메서드와, 필드, 어노테이션이 있는지 분석하게 되는데 이 분석하는 작업을 리플렉션 이라고 한다.

  • 7. 스프링은 MessageConverter 를 가지고 있으며, 현재 기본값은 Json 이다.

    💡 MessageConverter 란

    • HTTP 요청 본문HTTP 응답 본문 을 통째로 메세지로 다루는 방식이다.

      💡 예를들어

      • ajax 통신 을 할 때 post방식 경우 httpRequest 에 내용을 실어서 보내게 되는데
        posthttpRequest 본문 에 담겨서 보내지기 때문에 요청을 받을 때에도 httpResopnse 본문 형태로 받아야한다.

      • 이 때 http 본문 내용을 MessageConverter 기능을 통해 메세지 형태로 받게 되는것이다.

      • 또 한, Json형태 로 변경하여 받기 때문에 내가 어떠한 내용을 본문에 담아 보내더라도 Json형태 로 자동변환되어 받게 된다.

      • Request 본문Response 본문 을 통째로 메세지로 받는거기 때문에 get방식 에서는 사용할 수 없고 RequestParam 이나 ModelAttribute 를 사용해야 된다.

  • 8. 스프링은 BufferedReader 와 BufferedWriter 을 쉽게 사용할 수 있다.

    💡 BufferedReader 와 BufferedWriter 란?

    • 이름처럼 버퍼를 이용해서 읽고 쓰는 함수이다.

    • 이 함수는 버퍼를 이용하기 때문에 입출력의 효율이 엄청 좋아진다.




    • 위와 같이키를 누르는 즉시 바로 전달되는 것이 빠르지 않나 라고 생각할 수 있는데
      우리의 하드디스크는 속도가 엄청 느리다

    • 그러므로 하나씩 전송하는것보다는 버퍼에 저장을 해두었다가 한번에 전송하는 것이 더 빠르고 효율적이다.

    • BufferWriterprintwriter 와 같으며 printwriter 메서드로print()println() 메서드가 있다.

    • 그럼 이러한 기능은 어떻게 사용되나?
      @ResponseBody@RequestBody 어노테이션을 이용하여 사용된다.
      ResponseBodyBufferWriter 가 동작되고, RequestBodyBufferReader가 동작한다.

출처 : 메타코딩 - 스프링부트 개념정리 with JPA 1강 - 스프링의 핵심은 무엇인가요?
출처 : 메타코딩 - 스프링부트 개념정리 with JPA 2강 - 필터란 무엇인가요?
출처 : 메타코딩 - 스프링부트 개념정리 with JPA 3강 - MessageConverter가 궁금해요!

profile
개발 공부 중인 지현이

0개의 댓글