일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- BindingResult
- 설정
- StringUtils.hasText
- Intellij
- 프로젝트 클린
- 자바스크립트 인라인
- 스프링부트
- 룸북
- 타임리프와 스프링
- 추천 프로그램
- select
- 명령어
- #{..}
- JSON
- 추천 사이트
- linux
- cmd
- Test 룸북 사용하기
- Java
- 개발시작전 자세
- 시퀀스 조회
- it
- 함수 인자값 id
- 하모니카 OS 5
- 비밀번호 변경 명령어
- 타임리프
- 다른사람 프로젝트 수정전 가져야할 자세
- 순서 보장
- 리눅스
- js
- Today
- Total
웹개발 블로그
[SpringBoot] 스프링부트 개념정리 - 스프링 핵심(1,2,3강) 본문
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이다.
- 각 나라에 언어가 있지?
- 중간 언어라고 보면돼
{"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강
'◆ SPRING BOOT > 정리' 카테고리의 다른 글
ORM (0) | 2023.02.12 |
---|---|
[SpringBoot] JPA 개념 잡기 - 4강 (0) | 2023.02.12 |
[SpringBoot] message 파일 위치 + 메시지 소스 설정 (0) | 2023.02.08 |
[SpringBoot] 메시지&국제화 + 스프링 지원 (0) | 2023.02.08 |
[SpringBoot] 국제화 - 인식 방법 (0) | 2023.02.08 |