스프링부트 독학-2장 스프링부트 3 시작하기

jaegeunsong97·2023년 8월 29일
0

출처

신서영개발자님의 스프링부트 책

간단 내용 정리

스프링, 스프링부트

  • 엔터프라이즈 애플리케이션 : 대규모 복잡한 데이터를 관리하는 애플리케이션

    • 많은 사용자의 요청을 동시에 처리 -> 서비 서능과 안정성, 보안 중요!
    • 그래서 스프링 등장
  • 스프링을 더 쉽게 만드는 스프링부트 : 비즈니스 로직에만 집중해

    • WAS(Web Application Server)가 내장되어 있음 -> 독립적 실행 가능
    • Spring Boot Starter 제공 : 빌드 구성을 단순화
    • XML 설정 X : 자바코드로 모두 작성 가능
    • JAR 이용해서 자바 옵션만으로 배포 쌉가능
    • Spring Actuator 제공 : 애플리케이션의 모니터링 및 관리
  • 스프링과 스프링부트 차이

    • 스프링 : 애플리케이션 개발에 필요한 환경 수동 설치
    • 스프링 부트 : 스프링 코어, 스프링 MVC의 모든 기능을 자동 로드 + 수동으로 개발환경 구성 X
    • 내장 WAS 유뮤
      • 스프링 부트 : 내장 WAS 함유 -> jar 파일 만들면 별도로 WAS 설치 필요 없이 애플리케이션 실행 쌉가능
스프링스프링 부트
목적엔터프라이즈 애플리케이션 개발 더 쉽게스프링의 개발 더 빠르고 쉽게
설정 파일개발자 수동으로 구성자동 구성
XML일부 파일은 XML로 직접생성하고 관리사용 X
인메모리 DB 지원지원X인메모리 DB여서 자동설정 지원
서버프로젝트를 띄우는 서버를 별도로 수동 설정내장형 서버(별도 수동설정 X)

스프링 콘셉트 공부하기

  • 제어의 역전과 의존성 주입
    • IoC : Inversion of Control
      • 제어의 역전 : 다른 객체를 직접 생성 or 제어 X -> 외부에서 관리를 하는 객체를 가져와 사용하는 것
      • 스프링은 Spring Container가 객체를 관리, 제공하는 역할
    • DI : Dependency Injection
      • IoC를 구현하기 위해 사용하는 방법
      • 의존성 주입
      • 어떤 클래스가 다른 클래스에 의존
      • @Autowired -> 빈으로 등록(빈 : Spring Container가 관리하는 객체)
        - Spring Container라는 곳에서 객체를 주입 == DI

IoC 컨테이너(=Spring Container)에 Bean으로 객체를 등록해서 넣으면 스프링이 알아서 동적으로 ComponentScan해서 DI를 한다.

  • Spring Container와 Bean
    • Spring Container : Bean이 생성되고 소멸되기까지의 생명주기를 관리
    • Bean : Spring Container가 생성하고 관리하는 객체
      • Bean 등록방법 : @Component 추가
      • Bean 등록하면 MyClass를 Bean으로 등록시 -> myBean으로 Spring Container에 등록(앞글자 소문자)
  • AOP, 관점지향 프로그래밍
    • 프로그래밍에 대한 관심을 핵심관점, 부가관점으로 나누어 관심기준으로 모듈화
    • 부가관점을 분리 -> 핵심로직에 집중 == 관점 지향 프로그램ㅇ
  • 이식 가능한 서비스 추상화
    • PSA : Portable Service Abstraction
    • 스프링에서 제공하는 다양한 기술들을 추상화해 개발자가 쉽게 사용하는 인터페이스
    • 예시 : JPA, MyBatis, JDBC -> 어떤 것을 사용해도 DB 접근시에는 동일한 방식으로 DB에 접근하는 인터페이스 지원

스프링 부트 3 둘러보기

  • http://localhost:8080/test

    • localhost : IP
    • 8080 : Port
    • test : 경로
  • Spring Boot Starter : 의존성이 모여 있는 그룹

    • 형태 : spring-boot-starter-{작업유형}
    • spring-boot-starter-web : Spring MVC 사용해서 RESTful 웹 서비스를 개발할 때 필요한 의존성 모음
    • spring-boot-starter-test : 스프링 애플리케이션 테스트하기 위한 의존성 모음
    • spring-boot-starter-validation : 유효성 검사를 위해 필요한 의존성 모음
    • spring-boot-starter-actuator : 모니터링을 위해 애플리케이션에서 제공하는 다양한 정보를 제공하기 쉽게 하는 의존성 모음
    • spring-boot-starter-data-jpa : ORM을 사용하기 위한 인터페이스의 모음인 JPA를 더 쉽게 사용하기 위한 의존성 모음

  • 자동구성 : 애플리케이션이 최소한의 설정만으로도 실행되게 여러 부분을 자동으로 구성

이거 없으면 개발자가 삽질로 해줘야함 ㅋㅋ

  • 스프링 부트3와 자바 버전

    • 텍스트 블록
    String query17 = """
    		  SELECT * FROM "items"
              WHERE "status" = ON_SALE"
              ORDER BY "price";
    """;
    • formatted()메소드
    String textBlock17 = """
    {
    	"id": %d
        "name": %s, 
    }
    """.formatted(2, "juice");
    • 레코드
    record Item(String name, int price) {
    		// 파라미터가 private final로 정의
            // getter 자동으로 생성
    }
    Item juice = new Item("juice", 3000);
    juice.price(); // 3000
    • 패턴 매칭 : i 바로 사용 가능
    if (o instance Integer i) {
    }
    • 자료형에 맞는 case 처리
    static double getIntegerVvalue(Object o) {
    	return switch(o) {
      	  case Double d -> d.intValue();
          case Float f -> f.intValue();
          case String s -> Integer.parseInt(s);
          dafault -> 0d;
    	};
    }
    • Servlet, JPA의 네임 스페이스가 Jakarta로 대체
      • javax.* -> jakarta.*
    • GraalVM 기반의 스프링 네이티브 이미지 공식 지원
      • 가동시간 감소, 메모리 소모 감소

스프링 부트 3 코드 이해하기

  • @SpringBootApplication : 스프링부트의 시작점

    • @SpringBootApplication가 가지고 있는 중요한 어노테이션

      • @SpringBootConfiguration : 스프링 부트 관련 설정, @Configuration을 상속해서 만듬
      • @ComponentScan : 사용자가 등록한 Bean을 읽고 등록하는 어노테이션, 해당 어노테이션을 찾아 빈으로 등록하는 역할
      어노테이션설명
      @Configuration설정 파일 등록
      @RepositoryORM 매칭
      @Controller, @RestController라우터
      @Service비즈니스 로직
      • @EnableAutoConfiguration : 자동 구성 활성화, spring.factories에서 봤던 것들을 전부 자동으로 활성화 시킴
  • 컨트롤러 살펴보기

    • @RestController : @Controller + @ResponseBody
    • @Controller : @Component 존재
    • 따라서 @ComponentScan을 하면 Bean으로 등록되는 이유
profile
블로그 이전 : https://medium.com/@jaegeunsong97

0개의 댓글