스프링부트/정리

[SpringBoot] 스프링부트 개념정리 with JPA - 스프링 개념잡기

092 2024. 9. 13. 15:20
Springboot 강좌 - 개념정리 [1 ~ 3강] 요약
  • 스프링 이란?
    • 프레임워크
    • 오픈소스
    • IoC 컨테이너를 가짐
    • DI를 지원함
    • 엄청나게 많은 필터를 가지고있음
    • 엄청나게 많은 어노테이션을 가지고있음(리프렉션, 컴파일체킹)
    • MessageConverter(Jackson)를 가지고 있음, 기본은 JSON 타입으로 변환 (요청 / 응답 모두 해당)
    • BufferdReader와 BufferedWriter를 쉽게 사용할 수 있음
    • 스프링은 계속 발전 중임

전체 내용
  •  스프링
    • 프레임워크
      • 틀, 뼈대 라는 의미
      • 기능을 미리 클래스나 인터페이스 등으로 만들어 제공하는 반제품
      • 일정 형식에 따라 개발하는 환경
      • 개발 후 유지보수 확장이 쉬움
      • 개발 틀이 제공되기 때문에 잘못된 코딩으로 가는것 방지(특히 신입)
    • 오픈소스
      • 코드가 모두 공개되어있어 내부 코드를수정해서 기여도 가능함
    • IoC 컨테이너를 가짐
      • Inversion of Controll(제어의 역전)
      • 주도권이 스프링에 있음
      • class(abstract 포함) - 설계도 / object - 실체화 가능한 것(가구 class는 X, 의자 class는 O) / instance - 실체화 된 것
      • 스프링이 object 스캔해서 heap 메모리에 올려놔줌, 스프링이 해당 object 주소 관리함
      •  
        IoC 설명 그림
    • DI를 지원함
      • Dependency Injection(의존성 주입)
      • 스프링이 heap 메모리에 올려둔 object를 다른 클래스의 메소드에서도 사용 가능(싱글톤 관리, 한가지 의자 공유해서 사용)
    • 엄청나게 많은 필터를 가지고있음
      • 필터 : 문지기
      • 스프링 내 만들어져있는 필터를 바로 사용할수도 있고, 사용안함 설정 되있는 필터를 사용하도록 전환할수도있고, 필터를 만들어 사용할 수도 있음
      • 톰캣 내 filter : web.xml
      • 스프링 컨테이너의 filter : 인터셉터(AOP)
      • filter 설명 그림
    • 엄청나게 많은 어노테이션을 가지고있음(리프렉션, 컴파일체킹)
      • 어노테이션
        • 주석 + 힌트 (컴파일러에게 컴파일 시 체크할 수 있도록 힌트를 주는 주석)
      • 스프링 내 어노테이션으로는 컴파일 체킹 외 객체 생성도 가능
        • 예) @Component : 클래스를 메모리에 로딩하라
        • @Autowired : 로딩된 객체를 해당 변수에 주입하라
      • 리플렉션(Reflection)
        • 분석하는 기법 → 런타임 시 분석함
        • 예) 런타임 시 클래스 스캔하다가 @Autowired 발견 : 같은 타입의 object 가 heap 메모리에 등록되어있으면 그 object를 주입
        • 힙 영역에 로드된 Class 타입의 객체를 통해, 원하는 클래스의 인스턴스를 생성할 수 있도록 지원하고, 인스턴스의 필드와 메소드를 접근 제어자와 상관 없이 사용할 수 있도록 지원하는 API
    • MessageConverter(Jackson)를 가지고 있음, 기본은 JSON 타입으로 변환 (요청 / 응답 모두 해당)
      • 다른 프로그래밍 언어와 메세지 주고받을때 중간 언어(JSON)로 변환해서 보내는것
      • 예) 자바 프로그램 -> JSON -> 파이썬 프로그램 / 반대로 파이썬에서 온 JSON 메세지도 변환해서 가져옴
    • BufferdReader와 BufferedWriter를 쉽게 사용할 수 있음
      • 통신선을 Byte Stream 이라고 부름, 1Byte =  8 bit
      • 자바에서는 Input Stream으로 읽음, 1 Byte 단위로 읽음, 하나씩 문자(char)로 변형하기 복잡함
      • InputStreamReader를 사용하면 1바이트를 문자 하나로 반환해줌, 배열로 받을 수도 있음
        => 읽을 최대 글자수를 정해놓는데, 짧은 메세지 받을때는 낭비되서 이제 사용 안함
      • BufferdReader : 가변 길이의 문자열을 받게해주는 클래스
      • BufferedReader, BufferedWirter 를 사용해서 문자열을 입력받고, 출력할 수 있음
      • 결론
        • @ResponseBody 어노테이션 붙이면 BufferedWirter 동작함
        • @RequestBody 어노테이션 붙이면 BufferedReader 동작함
    • 스프링은 계속 발전 중임

 

유튜브 메타코딩 강의
 

Springboot 강좌 - 개념정리

떨어지는 낙엽에도 흔들리는 니 마음 - 넌 낙엽덩이

www.youtube.com