BE/Spring & Spring Boot

[Spring] Spring 과 Spring Boot

baek-dev 2024. 12. 13. 23:27

1. Spring 프레임워크

1.1. Spring이란

  • Spring은 효율적으로 개발할 수 있도록 지원하는 경량 오픈소스 프레임워크
  • 기존의 복잡한 Java EE 기반 개발의 단점을 보완하여 등장
  • POJO(Plain Old Java Object) 프로그래밍과 의존성 주입(DI, Dependency Injection)관점 지향 프로그래밍(AOP, Aspect-Oriented Programming) 같은 기능을 중심으로 설계됨

1.2. Spring의 핵심 개념

1.2.1. IoC (Inversion of Control)

  • 객체의 생성과 생명 주기를 개발자가 관리하지 않고, spring컨테이너가 관리
  • 주로 의존성 주입(DI) 으로 구현됨
    예 : `@Autowired` 를 통한 주입

1.2.2. AOP (Aspect-Oriented Programming)

  • 로깅, 트랜잭션, 보안 등 공통 관심사를 핵심 비즈니스 로직과 분리
  • 어노테이션이나 XML로 정의 가능
    예 : `@Aspect`, `@Before`, `@After`

1.2.3. POJO 기반 개발

  • Spring 은 표준 Java 객체(POJO)를 이용하고 간단하고 가벼운 코딩 스타일을 지향

1.2.4. Declarative Programming

  • 설정 파일(XML) 또는 애너테이션 기반으로 많은 작업을 선언적으로 처리

1.2.5. 트랜잭션 관리

  • Spring은 선언적 트랜잭션 관리(Declarative Transaction Management)를 지원

1.3 Spring 의 주요 모듈

1.3.1. Core Container

  • IoC와 DI를 제공
  • `BeanFactory`, `ApplicationContext` 포함

1.3.2. AOP

  • 횡단 관심사를 처리

1.3.3. Data Access

  • 데이터베이스 연동 (JDBC, ORM 등)

1.3.4. Web

  • MVC 아키텍처를 지원
  • DispatcherServlet, ViewResolver 등 제공

1.3.5. Security

  • 인증 및 권한 부여
  • `Spring Security` 모듈

1.3.6. Test

  • JUNIT 및 Mock 객체 테스트를 지원

1.4. Spring의 장단점

장점

  • 모듈화 및 유연성: 필요한 모듈만 선택적으로 사용 가능
  • 플랫폼 독립성: Java 기반으로 다양한 환경에서 실행 가능
  • 강력한 커뮤니티: 오랜 역사와 대규모 커뮤니티
  • 확장 가능성: 다양한 서드파티 라이브러리 및 스프링 프로젝트(Spring Security, Spring Data 등)와 연동 가능

단점

  • 설정 복잡성: XML 및 자바 설정 파일이 많아질 수 있음.
  • 초기 설정 부담: 프로젝트 시작 시 많은 설정이 필요.

2. Spring Boot

2.1. Spring Boot란

  • Spring 기반 애플리케이션 개발을 더욱 간편하게 만들어주는 Spring 프레임워크의 확장판
  • Convention over Configuration (설정보다 관례중시) 원칙을 따름
  • Spring 애플리케이션 개발 시 필요한 설정을 자동화하고 간소화하여 더 빠르게 개발할 수 있도록 지원

2.2. Spring Boot 의 핵심 특징

2.2.1. 자동 설정

  • `@EnableAutoConfiguration` 또는 `@SpringBootApplication`어노테이션을 통해 Spring 설정을 자동화

2.2.2. 임베디드 서버 지원

  • Tomcat, Jetty 같은 서버를 내장하여 애플리케이션을 실행 파일로 쉽게 실행 가능
  • 별도의 WAS(웹 어플리케이션 서버) 설치가 필요 없음

2.2.3. 의존성 관리

  • starter 패키지를 통해 필요한 의존성을 손쉽게 추가 가능
    예 : `spring-boot-starter-web`, `spring-boot-starter-data-jpa`

2.2.4. 애플리케이션 실행

  • `main()`메서드와 함께 `SpringApplication.run()`을 사용하여 실행

2.2.5. Actuator

  • 애플리케이션의 상태를 모니터링하고 관리할 수 있는 엔드포인트 제공

2.3. Spring Boot의 주요 모듈

2.3.1. Spring Boot Starter

  • 다양한 의존성을 패키지로 제공

2.3.2. Spring Boot CLI

  • 커맨드라인 도구로 간단한 애플리케이션을 빠르게 작성 가능

2.3.3. Spring Boot Actuator

  • 애플리케이션 상태를 모니터링하고 관리

2.3.4. Spring Boot DevTools

  • 개발 편의를 위한 도구 (Hot Reload 등)

2.4. Spring Boot의 장단점

장점

  • 빠른 개발: 설정이 자동화되어 초기 개발 시간이 단축
  • 내장 서버: 실행 파일로 패키징 가능하여 배포가 용이
  • 간편한 설정: XML 설정을 거의 제거하고 애너테이션으로 대체
  • 테스트 용이성: 내장 도구와 간단한 설정으로 테스트 가능

단점

  • 자동 설정의 불투명성: 복잡한 프로젝트에서는 자동 설정이 어떻게 동작하는지 파악하기 어려울 수 있음
  • 비교적 높은 메모리 사용량: 내장 서버와 자동 설정으로 인해 메모리 소비가 증가

3. Spring vs Spring Boot

특징 Spring Spring Boot
설정 방식 수동 설정(XML, Java Config)필요 설정 자동화(`@SpringBootApplication`)
내장 서버 제공되지 않음 제공됨(Tomcat, Jetty등)
시작 속도 초기 설정 시간이 비교적 길다 빠른 프로젝트 시작 가능
의존성 관리 수동 관리 Starter 프로젝트로 의존성 간소화
운영 및 모니터링 별도 설정 필요 Actuator로 간단히 관리 가능

4. Spring과 Spring Boot의 연관성

 

 

  • Spring Boot는 Spring 프레임워크를 기반으로 동작하며, Spring을 더 쉽게 사용할 수 있도록 돕는 도구다
  • Spring Boot를 통해 Spring 프레임워크의 기능을 최소한의 설정으로 사용할 수 있다

5. Spring Boot 사용 예제

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

@RestController
@RequestMapping("/api")
public class HelloController {
    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, Spring Boot!";
    }
}
  • 위 코드는 최소한의 설정으로 간단한 RESTful API를 구현한 예제임
  • 내장 Tomcat 서버를 통해 실행 가능

 

 


 

 

 

출처 : ChatGPT

'BE > Spring & Spring Boot' 카테고리의 다른 글

[Spring Boot] 빈이란  (1) 2024.12.15
[Spring Boot] ApplicationRunner  (0) 2024.12.14
[Spring Boot] ORM, @Query  (1) 2024.12.14
[Spring Boot] 어노테이션  (0) 2024.12.11
[Sping Boot] Spring Initializr, 프로젝트 구조  (0) 2024.12.10