전정프 - 13장 스프링

topics 300-백엔드개발 301 Spring
types 이론 학습
contexts 학교
tags

스프링 프레임워크 특징
스프링 부트
IoC, DI, AOP
실습 13.2, 13.3

스프링 프레임워크

특징

  • 경량 컨테이너
    • 생명주기를 관리
  • 제어의 역전 지원
    • 제어권이 프레임워크에 있음, 필요에 따라 사용자 코드 호출
  • 의존성 주입 지원
  • 관점지향 프로그래밍 지원

제어의 역행(IOC)

  • 기존
    • 프로그램 시작되는 곳 필요한 객체 생성
    • 생성된 객체의 메서드 호출
  • 스프링
    • 컨테이너가 객체를 관리, 제공
    • 코드에서 객체 생성 ㄴㄴ
특징
  • 객체 생성 선택에 관여하지 않고 어떻게 사용되는 지 알 수없음
  • 제어권한을 위임받은 객체(=컨테이너)에 의해 만들어지고 사용됨

의존성 주입(DI)

IoC 구현 방법으로 DI와 DL이 있음

  • DI : 의존 관계를 Bean설정에 기반으로 컨테이너가 자동으로 연결해줌
    • @Autowired 이용해서 빈 주입
  • DL : 컨테이너에서 제공하는 API를 이용하여 직접 Bean을 찾음
    • 의존성 커지고 코드 많아져서 ㄴㄴ

관점지향 프로그래밍(AOP)

  • 횡단 관심사 분리를 허용함으로써 모듈성을 증가시키는 것이 목적
  • Advise로 정의 : 반복되는 추가 동작을 정의
  • Pointcut : 어떤위치에 수행할 것인지 정의

스프링 부트

  • 스프링을 빠르고 간편하게 실행할 수있게해줌
  • 별도 설치없이 웹어플리케이션 구동 가능

스프링 vs 스프링부트

../../daily/assets/스크린샷 2023-12-19 오전 10.31.45.png

구조

  • 리액티브 스택
    • 비동기 논블로킹 I/O 구조 사용
    • 리액티브 프로그래밍
      • 비동기 I/O 기반
      • 데이터 흐름과 변화 전파에 중점을 둔 프로그래밍
  • 서블릿 스택
    • 동기 블로킹 I/O 구조 사용
      • 하나의 요청 하나의 스레드.

WebMVC

  • 모델과 뷰는 코드 그대로 사용가능할 정도로 유연한 구조
    • 모델은 Spring Data JPA 사용하면 편함
    • 뷰는 JSP에 대한 종속 없음.
  • MVC 기반 웹개발과 구조적으로 동일
  • 컨트롤러
    • 직접구현 ㄴㄴ 특정 요청에 대한 처리 메서드만 작성하면 됨
    • @Controller : 동작할 클래스 의미
    • @RequetMapping : 요청 매핑
    • get /web/hello에 동작하는 메서드../../daily/assets/스크린샷 2023-12-19 오전 10.54.00.png

RestController

  • REST API 구현하기 위해 사용하는 모듈
  • JAX-RS 보다 간결함
  • 리턴 타입으로 사용하면 자동으로 json변환(JAX-RX도 같음)
  • hello( ) 메서드: /api/hello?msg=Welcome
    hello2( ) 메서드: /api/hello/Welcome../../daily/assets/스크린샷 2023-12-19 오전 10.58.47.png

실습

MVC 컨트롤러 구현

  • 컨트롤러
    @ResponseBody : 별도의 뷰가 아닌 리턴값을 직접 HTTP 응답 보디에 출력함../../daily/assets/스크린샷 2023-12-19 오전 11.03.34.png 데이터를 포함한뷰 포워딩을 위해 Model객체추가 ../../daily/assets/스크린샷 2023-12-19 오전 11.05.22.png
  • ../../daily/assets/스크린샷 2023-12-19 오전 11.06.22.png

RestController구현

../../daily/assets/스크린샷 2023-12-19 오전 11.06.59.png ../../daily/assets/스크린샷 2023-12-19 오전 11.07.30.png