[Spring Boot] 2. 스프링 부트3 시작하기

김민경·2024년 7월 1일
post-thumbnail

'스프링 부트3 백엔드 개발자 되기' 책을 참고하며 작성 중 입니다.


스프링 vs 스프링 부트?

Before..

앤터프라이즈 애플리케이션

  • 대규모의 복잡한 데이터를 관리하는 애플리케이션
    • 서버 성능, 안전성, 보안을 신경쓰면서 비즈니스 로직까지 개발하기가 어려워지기 시작

스프링

앞서 언급한 서버 성능, 안정성, 보안을 매우 높은 수준으로 제공하여 개발에만 집중할 수 있게 도와주는 프레임워크

  • 하지만 매우 복잡하다는 단점

-> 스프링 부트

스프링 프레임워크를 더 쉽고 빠르게 이용할 수 있도록 만들어주는 도구

  • 빠르게 스프링 프로젝트를 설정할 수 있고, 의존성 세트라고 불리는 스타터를 사용해 간편하게 의존성을 사용하거나 관리
  • 개발자가 좀 더 비즈니스 로직 개발에만 집중할 수 있도록 만들어주는 도구

차이? (스프링 / 스프링부트)

  1. 구성

    개발에 필요한 환경 수동 설정 / 자동 설정

  2. 내장 WAS 유무
    WAS (Web Application Server)

    별도로 수동 설정 / 내장형 서버를 제공하여 설정 X


스프링 콘셉트

  • Bean : 스프링 컨테이너가 생성하고 관리하는 객체
    • @Component 애너테이션을 붙여 Bean에 등록
  • 스프링 컨테이너 : Bean을 생성, 관리
  • IoC (Inversion of Control) : 제어의 역전

    • 객체의 생성과 관리를 개발자가 하는 것이 아닌 프레임워크가 대신하는 것
    • 스프링 컨테이너가 객체를 관리하고 제공
  • DI (Dependency Injection) : 의존성 주입

    • 직접 객체를 생성하는 것이 아닌, 외부에서 객체를 주입받아 사용
    • 스프링 컨테이너에 있는 Bean이라는 것을 주입
  • AOP (Aspect Oriented Programming) : 관점 지향 프로그래밍

    • 관점을 핵심 관점, 부가 관점으로 나누어 관점 기준 모듈화
  • PSA (Portable Service Abstraction) : 이식 가능한 서비스 추상화

    • 어떤 기술을 사용하든 일관된 방식으로 처리하도록 하는 것

스타터

의존성이 모여 있는 그룹
필요한 기능을 간편하게 설정 가능

spring-boot-starter-{작업유형} 

자동 구성

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

META-INF 에 있는 spring.factories 파일

JAVA 17

  1. 텍스트 블록 """ 지원

  2. formatted() 메서드

  3. 레코드
    상속을 할 수 없고 private final로 파라미터 정의
    Getter 정의를 하지 않아도 된다.

    record Item(String name, int price){
    //파라미터가 private final로 정의된다.
    }
    Item juice = new Item("juice", 3000);
    juice.price(); //3000
  4. 패턴 매칭

  5. 자료형에 맞는 case 처리

Spring Boot 3

  1. 패키지 이름 변경
    • javax. -> jakarta.
  2. GraalVM 기반의 스프링 네이티브 공식 지원

SpringBootApplication

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication //스프링 부트 사용에 필요한 기본 설정
public class SpringBootDeveloperApplication {
  public static void main(String[] args){
      SpringApplication.run(SpringBootDeveloperApplication.class, args);
//메인 클래스로 사용할 클래스 , args -> 커맨드 라인의 인수들 전달
  }
}

@SpringBootApplication

...
@SpringBootConfiguration //: 스프링 부트 관련 설정
@EnableAutoConfiguration 
//: 스프링 부트의 메타 파일을 읽고 정의된 설정들을 자동으로 구성
@ComponentScan
(excludeFilters = 
{ @Filter(type = FilterType.CUSTOM, 
classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, 
classes = AutoConfigurationExcludeFilter.class) })
//@ComponentScan : 사용자가 등록한 빈을 읽고 등록하는 애너테이션
//@Component를 가진 클래스들을 찾아 빈으로 등록
public @interface SpringBootApplication {
...

@Component?

해당 애너테이션을 가진 클래스들은 모두 빈으로 등록

@Controller, @RestController, @Configuration, @Repository, @Service 모두 @Component 애너테이션을 가지고 있음

profile
뭐든 기록할 수 있도록

0개의 댓글