본문 바로가기
개인공부/스프링 부트 3 백엔드 개발자 되기

스프링 부트 - 2장_3_스프링부트3 둘러보기

by 응가1414 2023. 6. 25.

스프링 부트 3 둘러보기

스프링 부트 스타터 살펴보기

  1. 스프링 부트 스타터는 의존성이 모여 있는 그룹입니다.
  2. 스타터는 spring-boot-starter-{작업유형}이라는 명명규칙이 있습니다.
  3. 저의 깃허브를 가면 사용방법과 키워드를 통해 검색을 하시는 것이 좋을 것입니다.

자주 사용하는 스타터들의 모음은

스타터설명

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를 더 쉽게 사용하기 위한 의존성 모음

* ORM : 객체와 관계형 데이터 베이스의 데이터를 자동으로 매핑하는 것

* JPA : ORM을 사용하기 위한 기술표준 인터페이스

스프링 부트3와 자바 버전

스프링 부트2 -> Java 8버전

스프링 부트3 -> Java 17버전 이상을 사용해야한다.

자바 17의 주요 변화인 텍스트 블록, 레코드, 패턴 매칭을 보겠습니다.

텍스트 블록

이전에는 여러 줄의 텍스트를 작성하여면 \n를 추가해야 했지만 이제는 """ 로 감싼 텍스트를 사용해 여러줄의 텍스트를 표현할 수 있습니다.

String query11 = "SELECT * FROM \"items\"\n" +
  "WHERE \"status\" = \"ON_SALE\"\m" +
  "ORDER BY \"price\";\n";
​
String query17 = """
  SELECT * FROM "itmes"
  WHERE "status" = "ON_SALE"
  ORDER BY "price";
  """;

Formatted()메서드

자버 17 버전을 사용할 여러분들은 여기를 몰라도 상관없지만

이 기능이 없었을 때는 매우 불편한 방법으로 값을 파싱했다.

String textBlock17 = """
{
  "id" : %d
   "name" : %s,
}
""".formatted(2, "juice"); // 17버전

레코드 // 클래스 빠르게 만드는 방법 -> 파라미터는 private final -> getter는 자동

  1. 레코드는 데이터 전달을 목적으로 하는 객체를 더 빠르고 간편하게 만들기 위한 기능
  2. 레코드는 상속을 할 수 없고
  3. 파라미터에 정의한 필드는 private finnal로 전의
  4. 게터getter를 자동으로 만들기 때문에 애너테이션이나 메서드로 게터를 정의하지 않아도 된다.
  record Item(String name, int price){
    // 이렇게 하면 파라미터가 private finalfh 정의 된다.
  }
Item juice = new Item("juice", 3000); // name, price
juice.price(); // 3000 return

패턴 매칭

  1. 패턴 매칭은 타입 확인을 위해 사용하던 instanceof 키워드를 쉽게 해준다.
  2. 이전에는 instanceof 키워드와 형변환 코드를 조합해야 했지만
  3. 바로 형변환을 한 다음 사용가능
// 11 버전
if (o instanceof Integer){
  Integer i = (Integer) o;
}
​
// 17 버전
// instanceof + 형변환 함께 해준다.
if (o instanceof Integer i){
  
}

자료형에 맞는 case 처리

switch-case문으로 자료형에 맞게 case 처리 가능

static double getIntegerValue(Object o){
  return switch (q){
      case Duble d -> d.intValue();
      case Float f -> f.intValue();
      case String s -> Integer.parseInt(s);
      defalut -> 0d;
  };
}

Servlet, JPA의 네임 스페이스가 Jakarta 로 대체

스프링 부트 2버전을 사용하고 있다면 패키지의 이름을 javax에서 jakarta를 사용하게 변경

GraalVM 기반의 스프링 네이티브 공식 지원

  1. 스프링 애플리케이션을 네이티브 이미지로 컴파일때 JVM에 구동되는 애플리케이션에 비해
  2. 시간과 메모리 오버 헤드를 줄일 GraalVM 개반의 스프링 네이티브를 공식 지원

@SpringBootApplication 애너테이션 확인

  1. Spring-boot 에서 main() 메서드와 같은 역할을 하는
  2. SpringApplication.run() 메서드는 애플리케이션을 실행한다.
@SpringBootApplication// java의 main 메서드와 같은 시작 메소드를 지정한다.
public class SpringBootDeveloperApplication {
  public static void main (String[] args){
    SpringApplication.run(SpringBootDeveloperApplication.class, args); // main으로 사용할 클래스, 커맨드라인의 인수
  }
}
  1. @SpringBootApplication 애터테이션을 추가하면 스프링 부트 사용에 필요한 기본 설정을 해준다.
  2. SpringApplication.run() 메서드는 애플리케이션을 실행
  3. 첫 번째 인수는 스프링 부트 3 애플리케이션의 메인 클래스로 사용한 클래스
  4. 두 번째 인수는 커맨드 라인의 인수들을 전달

@SpringBootApplication과 연관된 애너테이션, 설정관련 애너테이션

@SpringBootConfiguration

  1. tm프링 부트 관련 설정을 나타내는 애너테이션
  2. 스프링의 @Configuration을 상속해서 만든 애너테이션이다.

@ComponentScan

  1. 사용자가 등록한 빈을 읽고 등록하는 애너테이션
  2. @Component라는 애너테이션을 가진 클래스들을 찾아 빈으로 등록하는 역할
  3. @Component do너테이션 보다는 용도에 따른 애너테이션을 사용하므로 한번식 컨트롤 + 클릭으로 보고오자

애너테이션명설명

@Configuration 설정 파일 등록
@Repository ORM 매핑
@Controller, @RestController 라우터
@Service 비즈니스 로직

* ORM : 객체와 관계형 데이터 베이스의 데이터를 자동으로 매핑

@EnableAutoConfiguration // 자동 구성을 활성화 하는 애너테이션

  1. 스프링 부트에서 자동 구성을 활성화하는 애너테이션
  2. 스프링 부트 서버가 실행 될 때 스프링 부트의 메타 파일을 읽고 정된 설정들을 자동으로 구성하는 역할
  3. spring.factories의 파일에 있는 클래스들이 모두 @EnableAutoConfiguration을 사용할 때 자동 설정한다.

테스트 컨트롤러 살펴보기

@RestController // 라우터 역할
public class TestController {
  @GetMapping("/test") // /test GET 요청이 오면 test() 메서드 실행
  public String test(){
    return "Hello, world!";
  }
}
  1. @RestControllers는 라우터 역할을 하는 애너테이션
    1. 라우터란 HTTP 요청과 메서드를 연결하는 장치
  2. 이 애너테이션이 있어야 클라이언트의 요청에 맞는 메서드를 실행 가능
  3. 지금의 경우 TestController를 라우터를 지정해 /test 라는 GET 요청이 왔을 때 test() 메서드를 실행하도록 구성
  1. @RestController을 보면 @Component 애너테이션을 발견가능하다.
  2. @RestControllers -> @Controller -> @Component 애너테이션을 가진다.

앞서 설명한 @Repository, @Service, @RestControllers 모두 @Component를 가지고 있다.

핵심 요약

  1. 스프링은 엔터프라이즈 애플리케이션을 쉽게 개발할 수 있도록 도와주는 프레임워크
  2. IoC는 제어의 역전, DI는 의존성 주입을 뜻한다.
  3. 스프링 부트는 스프링을 더 빠르고 쉽게 사용하기 위한 도구로서 스타터와 자동 구성을 제공한다.
  4. 애너테이션은 자바 소스코드에 추가하는 표식 보통 @ 기호를 앞에 붙여서 사용
    1. JDK 1.5 버전부터 사용할 수 있다.
    2. 메타 데이터(데이터에 대한 설명을 담고 있는 데이터)의 비중이 가장 크다.
  5. @SpringBootApplication은 스프링 부트 관련된 설정을 하는 @SpringBootConfiguration,
    1. 사용자가 등록한 빈을 읽고 등록하는 @ComponentScan
    2. 자동 설정으로 등록되는 빈을 읽고 등록하는 @EnableAutoConfiguration으로 만들어짐
  6. @Component 애너테이션이 있는 클래스는 빈으로 등록
    1. @Controller, @RestController, @Configuration, @Repository, @Service 모두
    2. @Component 애너테이션을 가지고 있다.

https://github.com/dmdrk1414/spring_practice