스프링이란?

  • 스프링은 프레임워크(Framework)이다.
    frame: 틀, work: 동작하다 => 틀 안에서 동작한다. 틀을 벗어나지 못하게 한다. 틀에 맞춰서 개발하도록 한다.
  • 스프링은 오픈소스이다.
    소스 코드가 공개되어 있다. 내부를 뜯어고칠 수 있다.
  • 스프링은 IoC 컨테이너(Inversion of Control)를 가진다.
    Inversion of Control: 제어의 역전
    주도권을 스프링에게 빼앗긴다. 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 스프링에게 넘어간다.
    • Class: 설계도
    • Object: 실체화가 가능한 것 ex) 의자, 침대 (cf. 가구는 추상적인 개념)
    • Instance: 실체화된 것 ex) 내 방에 있는 의자, 내 방에 있는 침대
      java에서는 내가 Object를 만들면 heap에 올라가는 반면, 스프링은 Object들을 스캔해서 객체들을 heap 메모리에 직접 올려준다.

[java]

public void makeChair(){
	의자 s = new 의자(); //x001
}

public void useChair(){
	의자 s = new 의자(); //x002
}

메서드마다 의자 Object가 새로 생성되고, 각각 가리키는 주소값이 다르다. 즉, 의자 Object가 2개 생성된다.

 

[Spring]

스프링에서는 의자 Object가 메모리에 고유적으로 1개 생성된다.


  • 스프링은 DI(Dependency Injection)를 지원한다.
    Dependency Injection: 의존성 주입 - 객체간의 의존 관계를 내부에서 결정하는 것이 아니라 객체 외부에서, 런타임 시점에 결정하는 방식
    스프링이 관리하는 객체를 내가 원하는 모든 곳에서 사용할 수 있다. => SingleTon
  • 스프링은 엄청나게 많은 필터(Filter)를 가지고 있다.
    • 필터: 문지기 - 임무를 부여
      A나라 성의 문지기 - A나라 사람은 들여보내고, B나라 사람은 내쫓아. 그리고 A나라 사람 중에서도 특정한 권한이 있는 사람들만 왕의 집으로 들여보내라는 임무 부여
    • 스프링 자체가 기본적으로 가지고 있는 필터 중에 사용하고 싶은 필터와 사용하고 싶지 않은 필터 설정 가능
    • 직접 필터를 생성해서 사용할 수도 있음


  • 스프링은 엄청나게 많은 어노테이션을 가지고 있다. (리플렉션, 컴파일체킹)
    • 어노테이션: 컴파일러가 무시하지 않는 주석으로, 컴파일러가 체킹할 수 있게 힌트를 준다.
      스프링은 어노테이션을 통해 객체를 생성한다.
      @Component: 클래스를 메모리(heap)에 로딩해라
      @Autowired: 로딩된 객체를 해당 변수에 집어 넣어라
      → 어노테이션 = 주석 + 힌트
    • 리플렉션: 해당 클래스가 어떤 필드, 메서드, 어노테이션을 들고 있는지 분석하는 기법 → 런타임 시 분석
  • 스프링은 MessageConverter를 가지고 있다. 기본값은 JSON이다.
    중간언어: 모든 나라의 사람들이 이해하기 쉬운 언어
    자바 프로그램 JSON → 파이썬 프로그램
    MessageConverter는 데이터를 중간언어로 convert해서 전송한다.
  • 스프링은 BufferedReaderBufferedWriter를 쉽게 사용할 수 있다.
    → 가변길이의 문자를 받을 수 있다.
    @ResponseBody: BufferedWriter 동작
    @RequestBody: BufferedReader 동작
  • 스프링은 계속 발전 중이다.

 


출처: Youtube 메타코딩

https://www.youtube.com/channel/UCVrhnbfe78ODeQglXtT1Elw

+ Recent posts