[Spring 개념] 1. Spring 개념

deannn.Park·2021년 4월 11일
0

Spring 개념

목록 보기
1/4
post-thumbnail

1. 스프링이란?

스프링은 프레임워크다

Frame : 틀
Work : 동작하다

즉, 프레임워크는 '틀 안에서 동작한다' 라는 뜻으로, '개발을 쉽게 할 수 있게 만든 틀' 이라는 뜻이다.
스프링도 마찬가지이다.

 

스프링은 오픈소스이다.

스프링의 소스코드는 오픈되어 있고, 무료이다.
따라서 수정할 수 있다.

 

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

class -> 설계도
object -> 실체화가 가능한 것 (추상클래스가 아닌 것)
instance -> 실체화 된 것.

ex)
(개념적으로) 가구 : 추상적, 의자 : object, 침대 : object
(현실에 존재) (내가 앉아있는)의자 : instance

IoC : Inversion of Control (제어의 역전)

  • 스프링은 클래스로 만들어놓은 것들을 스캔해서 객체들을 heap 메모리 공간에 올려놓는다.
  • 이 것들은 스프링이 알아서 관리한다.

스프링은 DI 를 지원한다.

DI : Dependency Injection (의존성 주입)

  • IoC로 인해 만들어진 객체는 어디서든지 사용이 가능하고, 모두 한개의 객체 즉 싱글톤이므로 공유가 된다.
  • 이렇게 객체를 공유하는 것을 DI라 한다.

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

  • Fliter : 검열/문지기의 기능. 특정한 권한만 가진 경우에만 통과하게 하는 역할.

톰캣 안에 스프링 컨테이너가 있고, 둘 다 필터 역할을 하는 기능이 있다.
톰캣에서는 똑같이 filter라는 이름을 가지고 있고, 스프링 컨테이너에서는 인터셉터(AOP)라는 이름을 가지고 있다.

스프링은 엄청나게 많은 어노테이션을 가지고 있다.

컴파일 체킹 : 컴파일하면서 어노테이션을 확인
어노테이션 : 주석 + 힌트. 컴파일러가 무시 X
            ex) 추상 클래스의 객체에서 메소드 만들 때 "@override"와 같은 것

  • 활용되는 방법

@Component : 클래스 메모리에 로딩
@Autowired : 로딩된 객체를 해당 변수에 집어넣음

이라고 정의 했을 때,

@Component 
Class A {
}

Class B {
  @Autowired
  A a;
 }

이런식으로 사용한다.

컴파일러가 클래스 B를 분석(리플렉션)할 때, 내부의 객체 a는 IoC, 또는 어노테이션 @Component로 인해 메모리에 로딩된 객체 A가 연결된다.
메모리에서 찾을 때에는 같은 타입을 찾고, 만약 같은 타입이 없을 경우에는 null이 들어간다.

  • 리플렉션 : 안에 어떤 메소드, 변수를 가지고 있는지 분석하는 기법. 런타임시 사용됨.

 

스프링은 MessageConverter를 가지고 있다. 기본값은 현재 Json이다.

서로 다른 두 언어 사이에 데이터를 주고받기 위해서는 언어를 바꿔 줘야 하는데, 이를 보완하기 위해서 중간데이터를 사용해서 데이터를 주고받는다. 예를 들어서 자바에서 파이썬으로 데이터를 보내야 할 때, 자바에서 파이썬 형태로 바꿔서 보내는 방법, 자바에서는 그냥 자바 데이터를 보내지만 파이썬, 받는 측에서 자기에 맞는 데이터로 바꾸는 방법이 있지만 둘 다 언어에 따라 방법도 달라지고 불편하다. 따라서 사용하는 것이 중간데이터인데, 자바에서 중간데이터로 변경하여 보내면, 받는 입장에서도 어느 언어에서 보낸 데이터인지에 상관없이 데이터를 읽어 들일 수 있다. 중간데이터는 모든 언어가 읽어들일 수 있는것이 좋으므로, (예전에는 xml을 많이 사용했지만) 지금은 중간언어로 Json을 사용한다.

 

  • MessageConveter란, 데이터를 보낼 때 중간데이터로 바꿔주고 받을 때는 중간데이터에서 사용하는 언어의 object로 바꿔주는 것을 말한다.

예로 든 자바와 파이썬이 데이터를 주고 받는 순서는 아래와 같다

 MessageConverter:Jackson

자바 프로그램 request -----------------> JSON -----------------> 파이썬 프로그램

자바 프로그램 response <----------------- JSON <----------------- 파이썬 프로그램

 MessageConverter

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

8bit는 한개의 문자(영어 기준)을 표현할 수 있는 최소 단위이다. 따라서 이를 하나의 단위로 지정하고, 8bit가 1byte가 되고 1byte는 통신의 기본 단위이다. 영어는 1byte로 모든 문자를 표현할 수 있지만, 한글은 2byte, 중국어는 3byte가 필요하다. 따라서 유니코드에서 정한 세계적으로 사용할 표준 캐릭터 인코딩 방식은 UTF-8이고 3byte를 사용한다.

통신을 할 때는 모두 1과 0으로 이루어진 데이터로 통신이 되고, 자바에서 이를 InputStream으로 받게 되면 해당 데이터를 1과 0 그래도 보여준다. 그럼 문자를 하나하나 캐스팅하여 char형식으로 바꿔줘야 하기 때문에 나온것이 InputStreamReader이다. InputStreamReader는 1과 0으로 이루어진 데이터를 char형식으로 바로 캐스팅하여 보여주고, 이 데이터를 배열로 만들면 문자열로 만들 수 있다. 하지만, 문자열은 크기를 미리 정해놓아야 하기 때문에, 작게 만들면 데이터가 누락이 될 수도 있고, 크게 만들면 낭비가 된다. 따라서 이를 보완하기 위해 나온 것이 BufferedReader이다. BufferedReader는 가변 길이의 문자를 받을 수 있다.

따라서 한마디로 말하자면, BufferedReader와 BufferedWriter는 문자열을 가변길이로 통신할수 있게 해주는 것이고, 스프링은 이 것을 직접 구현하지 않고 어노테이션을 통해서 편하게 사용할 수 있다.

@ResponseBody -> BufferedWriter

@RequestBody -> BufferedReader

 

스프링은 계속 발전중이다.

현재 최신 버전은 Spring 5.0이다.

 
 
 
 
 

출처 : youtu.be/-5r52dt2HcU

profile
컴퓨터 관련 여러 분야 공부중

0개의 댓글