스프링(Spring), 스프링부트(SpringBoot)/스프링부트(SpringBoot) 기초

스프링 부트 핵심 가이드(장정우 지음) - 스프링 부트 개요

개발학생 2025. 7. 10. 12:25
반응형

1. 스프링 프레임워크

  • 자바(Java) 기반 애플리케이션 프레임워크로, 엔터프라이즈급(기업 환경 대상 개발) 애플리케이션을 위한 다양한 기능 제공
    -> 오픈소스 경량급 애플리케이션 프레임워크로 불림(자바로 애플리케이션을 개발하는 데 필요한 기능을 쉽게 사용)
  • 한국 전자정부 표준 프레임워크 기반 기술로 채택되어, 공공기관 웹 서비스를 개발할 때 사용 

1) 제어 역전(IoC: Inversion of Conmtrol)

  • 객체를 생성하고 사용하는 작업을 개발자가 직접 제어하지 않고, 
    객체의 생명주기 관리를 외부(스프링 컨테이너 or IoC 컨테이너)에 위임하여 컨테이너에 제어권이 넘어간 것
  • 이를 통해 의존성 주입(DI), 관점 지향 프로그래밍(AOP) 등이 가능해짐

2) 의존성 주입(DI: Dependency Injection)

  • 제어 역전(IoC) 방법 중 하나로, 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용
  • 생성자/필드 객체 선언/setter 메서드 앞에 @Autowired 어노테이션(annotation)을 붙여 의존성 주입 가능
    -> 공식 문서에서는 생성자를 통해 의존성을 주입받는 방식 권장(레퍼런스 객체 없이 객체 초기화가 불가능하도록 설계)
// 생성자를 통해 의존성 주입
@RestController
public class DIController {
  MyService myService;
  
  @Autowired
  public DIController(MyService myService) {
    this.myService = myService;
  }
}

3) 관점 지향 프로그래밍(AOP: Aspect-Oriented Programming)

  • 관점(aspect)을 기준으로 묶어 개발하는 방식
    • 관점: 기능 구현 시 해당 기능을 '핵심 기능'과 '부가 기능'으로 구분하여 각각을 한 관점으로 보는 것 
      -> 부가 기능은 핵심 기능과 관계없이 로직이 수행되기 전/후에 수행되기만 하면 됨

AOP 방식의 애플리케이션 로직

  • 비즈니스 로직에서 반복되는 부가 기능을 한 공통 로직으로 처리하도록 모듈화해 삽입하는 방식
    -> 객체를 모듈화해서 재사용 가능한 구성을 만드는 것이 목적
  • 스프링에서는 디자인 패턴 중 하나인 프락시 패턴을 통해 제공
  • OOP(Object-Oriented Programming/객체 지향 프로그래밍)를 더욱 잘 사용하도록 도움
    • OOP 관련 포스팅 

2025.06.04 - [자바(JAVA)/미니 프로젝트 & 기초 공부] - Java 기초 또 다시 공부하기 8일차 - 객체 지향 프로그래밍(객체의 특징, 객체 간의 관계, 클래스와 인스턴스

 

Java 기초 또 다시 공부하기 8일차 - 객체 지향 프로그래밍(객체의 특징, 객체 간의 관계, 클래스와

1. 객체의 특징객체(Object): 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중, 고유 속성을 가지고 있어 식별 가능한 것-> 속성과 동작[필드(Field)와 메서드(Method)]으로 구성되어 있음현실

keep-programming-study.tistory.com

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

 

Project Modules and Dependencies :: Spring Security

This module contains core authentication and access-control classes and interfaces, remoting support, and basic provisioning APIs. It is required by any application that uses Spring Security. It supports standalone applications, remote clients, method (ser

docs.spring.io

  • 애플리케이션 개발에 필요한 모듈만 선택해서 사용하게 끔 설계(경량 컨테이너 설계)

2. 스프링 프레임워크 vs 스프링 부트

  • 스프링 프레임워크에서는 필요한 모듈들을 추가하다 보면 설정이 복잡해지는데, 이를 해결하기 위해 스프링 부트가 등장

1) 의존성 관리

  • 스프링에서는 개발에 필요한 각 모듈의 의존성을 호환되는 버전까지 명시해야 함
    -> 연관된 다른 라이브러리의 버전까지 고려해야 하는 문제 발생
  • 스프링 부트에서는 'spring-boot-starter'라는 의존성을 통해,
    각 라이브러리의 자주 사용하고 서로 호환되는 버전의 모듈 조합 제공
    -> 라이브러리 호환 문제 해결
    • 많이 사용되는 라이브러리 모음
spring-boot-starter-web: 스프링 MVC를 사용하는 RESTful 애플리케이션을 만들기 위한 의존성
-> 기본으로 톰캣(Tomcat)이 내장되어 있어 jar 형식으로 실행 가능

spring-boot-starter-test: JUnit/Jupiter/Mockito 등의 테스트용 라이브러리 포함

spring-boot-starter-jdbc: HikariCP 커넥션 풀을 활용한 JDBC 기능 제공

spring-boot-starter-security: 스프링 시큐리티(인증/권한/인가) 기능 제공

spring-boot-starter-data-jpa: 하이버네이트(Hibernate)를 활용한 JPA 기능 제공

spring-boot-starter-cache: 스프링 프레임워크의 캐시 기능 지원

2) 자동 설정(Auto Configuration)

  • 스프링 프레임워크의 기능을 사용하기 위한 자동 설정을 스프링부트에서 지원
  • 애플리케이션에 필요한 라이브러리(의존성)를 추가하면, 그를 실행하는 데 필요한 환경 설정을 프레임워크가 알아서 찾아줌
  • Maven이나 Gradle 파일에 의존성을 추가한 프로젝트를 생성하면,
    @SpringBootApplication 어노테이션이 붙은 클래스가 기본적으로 생성 
    -> DispatcherServlet, Tomcat, RequestMapping등이 자동 설정되어 별도의 설정 없이 웹 서버가 실행
  • 내부적으로 spring-boot-autoconfigure.jar에 포함된 설정 클래스들을 참조하며,
    @ConditionalOnClass, @ConditionalOnMissingBean, @ConditionalOnProperty 등의 조건을 기반으로 설정 여부를 판단
@Configuration
@ConditionalOnClass(DataSource.class)
@ConditionalOnMissingBean(DataSource.class)
public class DataSourceAutoConfiguration {
    // 자동으로 DataSource Bean을 생성
}
// 특정 자동 설정 클래스를 제외하고 싶을 때 exclude 속성을 사용
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

*윈도우 환경에 경우, cmd(명령 프롬프트)에서 다음 명령을 입력하면 적용된 자동 설정 확인 가능

java -jar myapp[애플리케이션 이름].jar --debug

3) 내장 WAS(Web Application Server)

  • 스프링 부트의 각 웹 애플리케이션에 존재 
  • 웹 애플리케이션을 개발할 때 가장 기본이 되는 의존성인 'spring-boot-starter-web'의 경우 톰캣을 기본으로 내장
    -> 필요에 따라, 톰캣 외의 다른 웹 서버(Jetty, Undertow 등)로 변경 가능

4) 모니터링

개발이 끝나고 서비스 운영 시, 해당 시스템이 사용하는 스레드/메모리/세션 등의 주요 요서들을 모니터링해야 함
-> 스프링 부트에는 스프링 부트 액추에이터(Spring Boot Actuator)라는 자체 모니터링 도구로 관리

반응형