[Spring Boot] Chapter.1 스프링 부트란?

굿거리·2023년 5월 21일
0

본 포스팅은 스프링 부트 핵심 가이드 - 장정우의 내용을 정리했습니다.


1.1 스프링 프레임워크

스프링 프레임워크는 자바에서 가장 많이 사용하는 프레임워크로, 현재 우리나라의 전자정부 표즘 프레임워크의 기반 기술로 채택되어 공공기관 웹 서비스를 개발할 때도 사용된다.

'오픈소스 경량급 애플리케이션 프레임워크' 로 불리며, 애플리케이션을 개발하는 데 필요한 기능을 제공하괴 쉽게 사용하도록 돕는 도구이다.

  • 스프링의 핵심 가치

애플리케이션 개발에 필요한 기능을 제공해서 개발자가 비즈니스 로직 구현에만 집중할 수 있게끔 하는 것

1.1.1 제어 역전(Inversion of Control)

일반적인 자바 개발의 경우 객체를 사용하기 위해

@RestController
public class NoDIController {

	private MyService service = new MyServiceImpl(); // 직접 개체 생성
    
    @GetMapping("/no-di/hello")
    public String getHello() {
    	return service.getHello();
    }

위와 같이 사용하고자 하는 객체를 해당 클래스에서 직접 생성한다.
하지만 IoC를 적용한 스프링 환경에서는 객체를 직접 생성하는 대신 객체의 생명주기 관리를 외부에 위임한다. 이 때 외부는 스프링 컨테이너(Spring Container) 혹은 IoC 컨테이너(IoC 컨테이너)를 의미한다.

  • 제어 역전
    객체의 관리를 컨테이너에 맡겨 제어권이 넘어간 상태

제어 역전을 통해 의존성 주입(DI : Dependency Injection), 관점 지향 프로그래밍(AOP : Aspet-Oriented Programming) 등이 가능해진다. 이를 통해 개발자는 비즈니스 로직을 작성하는 데에 더 집중할 수 있다.

1.1.2 의존성 주입(Dependency Injection)

의존성 주입이란 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식을 의미한다.

🧡 스프링 의존성을 주입하는 3가지 방식 - 정리글

  • 생성자 주입
  • 필드 주입
  • setter(수정자) 주입

스프링에서 권장하는 주입 방식은 생성자 주입이다. 자세한 내용은 위의 링크에 서술해놓았다.

1.1.3 관점 지향 프로그래밍(Aspect-Oriented Prgramming)

AOP는 관점을 기준으로 묶어 개발하는 방식을 의미한다. 관점이란 어떤 기능을 구현할 때 그 기능을 '핵심 기능'과 '부가 기능'으로 구분해 각각을 하나의 관점으로 보는 것을 의미한다.

  • 핵심 기능
    비즈니스 로직을 구현하는 과정에서 그 로직이 처리하려는 목적 기능

  • 부가 기능
    로깅, 트랜잭션 등 핵심 기능이 어떤 기능인지에 무관하게 핵심기능이 수행되기 전 후에 수행되는 특정 기능들

여러 비즈니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입하는 방식을 AOP라고 한다.

💛 AOP를 구현하는 방법 3가지

  • 컴파일 과정에 삽입하는 방식
  • 바이트코드를 메모리에 로드하는 과정에 삽입하는 방식
  • 프록시 패턴을 이용한 방식

스프링은 프락시 패턴을 통해 AOP 기능을 제공 중이다.

스프링 AOP의 목적은 OOP와 마찬가지로 모듈화해서 재사용 가능한 구성을 만드는 것이고, 모듈화된 객체를 편하게 적용할 수 있게 하여 개발자가 비즈니스 로직을 구현하는 데만 집중할 수 있게 한다.

❓모듈화란?

모듈이란 관련된 데이터와 함수를 하나로 묶은 단위를 의미한다. 하나의 파일에 여러가지
기능과 데이터를 섞지 않고 기능별로 분리해 모듈로 만드는 것을 모듈화라고 한다.

1.1.4 스프링 프레임워크의 다양한 모듈


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 자동 설정

스프링 부트는 스프링 프레임워크의 기능을 사용하기 위한 자동 설정(Auto Configuration)을 지원한다. 이는 애플리케이션에 추가된 라이브러리를 실행하는 데 필요한 환경 설정을 알아서 찾아준다.

부트 프로젝트를 생성하면 @SpringBootApplication이라는 어노테이션이 달린 같은 이름의 자바 파일이 있는데, 이는 다음 세 개의 어노테이션을 합친 구성이다.

  • @SpringBootConfiguration
  • @EnableAuoConfiguration
  • @ComponentScan

1.2.3 내장 WAS

위에서 간단히 언급한 spring-boot-starter-web 의존성이 톰캣을 내장하고 있다. 또한 자동 설정 기능이 톰캣에도 적용되므로 특별한 설정 없이 톰캣을 실행할 수 있다. 또한 톰캣이 아닌 다른 서버로 대체할 수 있다.

1.2.4 모니터링

개발이 끝나고 서비스를 운영하는 시기에 스프링 부트 액추에이터(Spring Boot Actuator)라는 자체 모니터링 도구로 해당 시스템이 사용하는 스레드, 메모리, 세션 등 주요 요소들을 모니터링할 수 있다.

profile
개발자를 향해

0개의 댓글

관련 채용 정보