1. 스프링 특징

hyuun01·2023년 1월 26일
0

스프링부트

목록 보기
1/3
post-custom-banner

1) 프레임워크

2) 오픈소스

3) IoC 컨테이너

  • IoC(Inversion of Control) 컨테이너 : 주도권이 스프링에게로!
  • 스프링은 class를 스캔 -> 객체들을 스프링이 heap 메모리에 올림
    	class(설계도)
    	Object(실체화가 가능한 것) <-- abstract class XXX
      Instance(실체화 된 것)
      
      ex)
      의자 s = new 의자(); 
      // s는 heap에 존재
      // 위 문장이 실행된 메소드에서 그 heap 공간 관리

4) DI(Dependency Injection, 의존성 주입)

  • 스프링이 스캔해서 객체 관리
    -> DI 가능 (원하는 모든 곳에서 객체 가져와서 사용 가능)

5) 필터

  • 검열 기능 : 권한 가진 것들만 통과시킴
  • 스프링 자체 필터 사용
    - 필터 사용
    - 사용되지 않는 필터를 사용하겠다고 설정
    - 직접 필터 생성해 사용
  • 톰캣 거쳐서 스프링컨테이너로 들어감
    - 톰캣이 가진 필터 : filter : web xml
    - 스프링컨테이너가 가진 필터 : 인터셉터 : AOP

6) 어노테이션(주석+힌트)

  • 컴파일러가 무시X(일반 주석과의 차이점)
  • 컴파일 체킹
  • 스프링에서는 어노테이션 객체 생성
    ex)
    @override
    @Component : 클래스 메모리에 로딩
    @Autowired : 로딩된 객체를 해당 변수에 집어넣어라 (IoC)

7) 리플렉션

  • 클래스 내부에 어떤 것들이 있는지 런타임 시 분석하는 것
  • 메소드, 필드, 어노테이션 있는지 체크 & 무엇인지 설정 가능
    ex)
    @Autowired 어노테이션을 리플렉션으로 체크 후 그 객체를 heap에서 탐색
    -> 있다면 그 객체를, 없으면 null을 dependency injection
        
   	Animal
    	run()
    
    Dog 상속 Animal
    	@override // Animal에서 fly() 있는지 체크, 상속받을 것 없으면 컴파일에러
        fly()
@Component	// heap 공간에 A 객체 로딩(이후 다른 곳에서 @Autowired하면 이 객체 이용 가능)
Class A{

}

class B{
		@Autowired	
		A a;	// a는 heap 공간의 A 객체(@Component로 로딩된)
}

8) 메시지 컨버터

  • 중간데이터: xml(과거), json(요즘), ...
  • 자바 Object를 파이썬 프로그램으로 전송(request) 어떻게?
    : 자바 object <-> json (MessageConverter : Jackson 가 수행)

c.f. jackson은 스프링의 MessageConverter의 한 종류, java<->json 수행

 ```java
 // 자바
 class Animal{
 	int num = 10;
    String name = "사자";
 }
 ```
 
 ```
 {
 	"num": 10,
    "name": "사자"
 }
 ```

9) BufferedReader, BufferedWriter

  • 8 bit = 1 byte : 통신 단위(영어 한 문자 단위)
    - 영어 한 문자 당 8 bit로 (256가지 영어 문자 전송 가능)
    - 한글 한 문자 당 16 bit로
    - 한자 한 문자 당 3 byte로
    -> 유니코드 : UTF-8 (3 Byte 단위 통신)

  • 스프링은 Byte Stream (1byte 단위 전송) 이용
    - InputStream : 바이트로 읽음

    • InputStreamReader : 문자(char)로 읽음
      -> 배열(고정된 크기의 여러개 문자)로 읽을 수 있음
    • BufferedReader : 가변길이의 문자열 읽음
      : request.getReader()
  • BufferedWriter, PrintWriter : 가변길이의 문자열 씀

  • @ResponseBody : BufferedWriter 됨

  • @RequestBody : BufferedReader 됨


출처 : 인프런 "스프링부트 개념정리(이론)" 1~3강
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC/dashboard

post-custom-banner

0개의 댓글