본문 바로가기
  • 소소한 개발자 이야기
Software/Spring Boot 핵심 가이드

01_스프링 부트란?

by Siwan_Min 2022. 11. 13.
728x90

01_스프링 부트란?

1.1 스프링 프레임워크

  • 자바에서 가장 많이 사용하는 프레임워크
  • 우리나라 ‘전자정부 표준 프레임워크’
  • ‘오픈소스 경량급 애플리케이션 프레임워크’
  • 자바로 애플리케이션을 개발하는 데 필요한 기능을 제공하고 쉽게 사용하도록 돕는 도구

1.1.1 제어 역전(IoC)

  • 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부에 위임
  • 외부: 스프링 컨테이너 or IoC 컨테이너
  • 객체의 관리를 컨테이너에 맡겨 제어권이 넘어간 것
  • 제어 역전을 통해 의존성 주입, 관점 지향 프로그래밍 등이 가능

1.1.2 의존성 주입(DI)

  • 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입 받아 사용하는 방식
    - 생성자를 통한 의존성 주입
    - 필드 객체 선언을 통한 의존성 주입
    - setter 메서드를 통한 의존성 주입
  • Autowired 어노테이션을 통해 의존성 주입 가능
    - 스프링 4.3 이후 버전은 생성자를 통한 의존성을 주입할 때 Autowired 생략 가능
  • 스프링 공식 문서는 생성자를 통한 의존성 주입 권장
    - why? 레퍼런스 객체 없이는 객체를 초기화할 수 없게 설계할 수 있기 때문

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

  • AOP란? 관점을 기준으로 묶어 개발하는 방식.
    - 관점? ‘핵심 기능’과 ‘부가 기능’으로 구분해 각각을 하나의 관점으로 보는 것을 의미
    - 핵심 기능: 비지니스 로직을 구현하는 과정에서 비즈니스 로직이 처리하려는 목적 기능을 말함
    - 부가 기능: 핵심 기능이 어떤 기능인지에 무고나하게 로직이 수행되기 전 또는 후에 수행되는 기능
    - 로깅, 트랜잭션 등
  • 비즈니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입하는 방식
    - 컴파일 과정에 삽입하는 방식
    - 바이트코드를 메모리에 로드하는 과정에 삽입하는 방식
    - 프락시 패턴을 이용한 방식
  • 스프링은 프락시 패턴을 통해 AOP 기능을 제공
  • 모듈화해서 재사용 가능한 구성을 만드는 것이 목적

1.2 스프링 프레임워크 vs 스프링 부트

필요한 모듈들을 추가하다 보면 설정이 복잡해지는 문제를 해결하기 위해 등장한 것이 스프링 부트 이다.

1.2.1 의존성 관리

  • spring-boot-starter 의존성 제공
  • spring-boot-starter 라이브러리
    - spring-boot-starter-web: 스프링 MVC를 사용하는 RESTful 애플리케이션을 만들기 위한 의존성. 기본으로 내장 톰캣이 포함돼 있어 jar 형식으로 실행 가능
    - spring-boot-starter-test: JUnit, Jupiter, Mockito 등의 테스트용 라이브러리 포함
    - spring-boot-starter-jdbc: HikariCP 커넥션 풀을 활용한 JDBC 기능을 제공
    - spring-boot-starter-security: 스프링 시큐리티(인증, 권한, 인가 등) 기능을 제공
    - spring-boot-starter-data-jpa: 하이버네이트를 활용한 JPA 기능을 제공
    - spring-boot-starter-cache: 스프링 프레임워크의 캐시 기능을 지원

1.2.2 자동 설정

스프링 부트는 스프링 프레임워크의 기능을 사용하기 위한 자동 설정을 지원합니다. 자동 설정은 애플리케이션에 추가된 라이브러리를 실행하는 데 필요한 환경 설정을 알아서 찾아줍니다. 즉, 애플리케이션을 개발하는 데 필요한 의존성을 추가하면 프레임워크가 이를 자동으로 관리해줍니다.

  • SpringBootApplication
    - SpringBootConfiguration
    - EnableAutoConfiguration
    - ComponentScan
  • 스프링 부트 애플리케이션이 실행되면
    - ComponentScan 어노테이션이 Component 시리즈 어노테이션이 붙은 클래스를 발견해 bean을 등록 (대표 Component 시리즈 : Controller, RestController, Service, Repository, Configuration)
    - EnableAutoConfiguration 을 통해 spring-boot-autoconfigure 패키지 안에 spring.factories 파일을 추가해 다양한 자동 설정이 일부 조건을 거쳐 적용된다.
728x90

댓글