관리 메뉴

웹개발 블로그

[SpringBoot] 스프링부트 개념정리 - 스프링 핵심(1,2,3강) 본문

◆ SPRING BOOT/정리

[SpringBoot] 스프링부트 개념정리 - 스프링 핵심(1,2,3강)

쿠키린 2023. 2. 11. 19:48

1. Framework : 틀 

=> 틀에 맞춰서 개발해라~

 

 

2. 오픈 소스

- 소스코드 공개

  ㄴ 즉, 내부를 뜯어 고칠 수 있다.

  ㄴ 소스가 공개되어 있어 고칠 수 있다.

 

3. IoC 컨테이너를 가진다.

- Inversion Of Control

- 제어를 역전한다? 주도권을 스프링에게 빼앗겼다!

 ㄴ Class : 설계도

 ㄴ Object(객체) : 실체화가 가능한 것 (ex) 누누 캐릭터 생성

 ㄴ Instance : 실체화가 된것 (ex) 캐릭터가 이제 전쟁에서 싸우는거

=> class와 abstact class

class a {
   변수;
   변수;
}
=> a 객체를 만들 수 있는 설계도
 abstact class 캐릭터 {
 	추상적인 의미;
 }

(ex)

가구 - 의자 : Object

        - 침대 : Object

=> 가구는 Object가 아니다. 추상적이다.

 

 

다시 돌아와서 Ioc를 설명하겠다.

 

ex)

public void make(){
    의자 c = new 의자(); 
}

-> 개발자 직접 new하면 heap공간에 올리는 거지?

-> Object를 new해서 실체화 시켰지

-> 하지만 다른 메서드에서는 의자를 사용할려면 다시 의자 c = new 의자(); 이렇게 heap메모리에 올리겠지?

   ㄴ 공유하기가 어려워져 ㅠㅠㅠ

 

스프링이 직접 

객체를 읽어서 heap메모리에 올려주고 관리하게 되면?

공유가 가능해져!

 

 

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

- Dependency Injection

- 스프링이 스캔해서 메모리에 띄었지?(IoC) 그럼 이제 공유가 가능해져

- 싱글톤이라 불리는데 즉, 같은 자원을 공유해

- 어디에서든 사용가능하게 되는데 그게 DI

 

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

B나라와 A나라 전쟁중인 상황

- B나라가 A나라에 들어올 수 있을까? 

- 또 A나라 국민들이 A왕의 성에 들어갈 수 있을까?

필터 : 문지기!

스프링자체

- 기본 필터 사용

- 많은 필터 중 필터를 골라 사용할 수도 있고

- 혹은 직접 필터를 생성해서 사용할 수도 있고

톰캣에 필터는 web.xml

스프링 필터는 - AOP

 

 

스프링에 어노테이션?

-> 어노테이션 객체 생성

@Component : 클래스 메모리에 로딩

@Bean

@Controller

@Autowired : 로딩된 객체를 해당 변수에 집어 넣어라

이렇든 어노테이션을 붙여 역할을 약속 한다.

 

EX

@Componet
class A{
}

스프링이 스캔해 읽어서

HEAP 메모리에 A를 올린다(IoC)

 

그럼

메모리에 뜬 A객체를 사용하려면??

# 자바에서 사용하던 방식
class B{

   A a = new A(); //새로운 공간에 A객체를 만드는 거지?
}

===================================================================================

# 스프링에서 사용하는 방식
class B{

    @Autowired  //분석(리플렉션) : 메서드, 필드, 어노테이션이 있다면 설정할 수 있다.
    A a;
    
}

스프링은 쭉 읽어 들어서

해당 타입에 데이터가 있다면 넣어주고

없으면 null이 들어간다.

=> 이것을 DI라고 불린다.

 

 

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

- 각 나라에 언어가 있지?

- 중간 언어라고 보면돼

Jackson라이브러리를 사용하면 JSON을 사용해 주고 받을 수 있다.

{"num:10, "name":"사자"}

 

 

7. 스프링은 BufferdReader와 BufferdWriter를 쉽게 사용할 수 있다.

- 데이터를 통신 할때 전기선(전류)을 통해 인동하는데

- BIT단위로 통신(0,1,0,1)  , 0은 전기가 흐르지 않고, 1은 흐르는 걸 의미

 

- 통신은 영어권 국가에서 발전된거라

- 영어 한 문자 - 8bit = 2^8 = 256

- 256가지 문자 전송!

 

- 한글 한문자 - 8bit 통신 불가해,  최소 16bit 필요(2byte)

 

8bit로 보낼건데 너네가 8bit씩 끊어 읽어

 ㄴ 한문자씩 받을 수 있을거야

 ㄴ 1byte = 8bit를 논리적인 단위로 읽는거임(물리적인 단위x)

 

1byte = 통신 단위

ㄴ 하나의 문자를 풀어낼 수 있다는 거(영어권 국가에서 발견했기에)

ㄴ 만약에 대한민국에서 통신이 시작됐다 1Byte는 16bit였겠지? 하지만 영어권 국가에서 먼저 생겼기에 8bit

 ㄴ 중국어는 10만개나 되는데 3byte가 필요하다.

 

 

다만

나라에 맞춰서 인코딩하게 된다면?

미국 - 1byte

우리나라 - 2byte

중국 - 3byte

 

각 나라에만 맞춰서 한다면

전세계적으로 데이터 통신하는 게 불가능하겠지?

 

그래서 유니코드에서 정한게

UTF-8 charter encoding

ㄴ 3BYTE 

ㄴ 요새는 이 인코딩으로 사용한다.

 

통신 : Byte Stream = 1byte : 8bit

 

자바에서 읽을 때 InputStream으로 읽는데

byte로 읽어오기에 char(문자)로 캐스팅을 해야한다.

 

그래서

InputSreamReader를 사용하는데

문자하나 또는 배열로 여러개 문자를 받는데

배열은 길이가 정해져야하는데... 몇글자가 넘어오는지 모르는 상태라면? 

ㄴ만약 20byte로 정해놨는데 그 보다 적게 사용하거나 많이 사용하면?

🔽

그래서 통신할때 BufferdReader,BufferdWriter로 사용하게 된다.

BufferdReader,BufferdWriter로 감싸게 되면?

ㄴ가변 길이의 문자를 받을 수 있다.

스프링에서 지원하는 어노테이션 중

@ResponseBody를 사용하면 BufferdWriter가 동작한다.

@ReqeustBody를 사용하면 BufferdReader가 동작한다.

 

 

 

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


참고 : 스프링부트 개념정리 - 최주호 강사님(인프런)

1,2,3강