[Spring] 스프링 프레임워크 (Spring Framework)와 스프링 부트(Spring Boot)

rekv·2025년 2월 4일

Spring

목록 보기
1/15

스프링 프레임워크와 스프링 부트는 구분되어야 한다.

스프링 프레임워크

프레임워크란?

  • 개발자들이 생산하는 코드 품질 및 개발 속도를 상향 평준화시키기 위해 고안된 규약이자 표준 개발 방법을 제공해주는 어플리케이션
  • 쉽게 생각하면 일종의 공정
  • 공장에서 어떤 제품을 생산할 때 공정을 지키면서 물건을 생산하면 예상된 시간과 품질이 보장되는 것과 같은 의미

스프링이란?

  • 자바 기반의 엔터프라이즈 애플리케이션 개발을 위한 프레임워크
  • 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공(여러가지 모듈로 이뤄져 있어서 내가 필요한 모듈만 뽑아서 사용 가능)
  • IoC(제어의 역전), DI(의존성 주입), AOP(관점 지향 프로그래밍) 등의 기능을 제공
  • 흔히 스프링이라고 부름
  • XML 설정, 복잡한 환경 구성 등이 필요했음

스프링 부트

스프링 부트란?

  • 스프링 부트는 스프링 프레임워크의 확장판
  • 스프링에서는 설정할 내용도 굉장히 많고, XML 파일로 설정해야 할 경우가 많아, 이러한 수많은 설정과 복잡함을 최소화하고 개발자의 생산성을 향상 시키기 위해 개발됨
  • 스프링을 쉽게 사용하도록 "자동 구성(Auto Configuration)"과 "내장 서버(Embedded Tomcat)" 등을 제공, 설정을 최소화하고 빠른 개발 환경을 지원

스프링 부트의 장점

내장 서버: WAR 파일을 배포할 필요 없이 내장된 Tomcat, Netty, Unertow 를 이용해 실행할 수 있음
간단한 라이브러리 관리: 많이 사용하는 라이브러리를 모아놓은 스타터 (Starter) POM 파일로 메이븐 설정이 쉬워짐
자동 설정: 더 이상 XML 설정이 필요하지 않음

즉, 스프링 부트는 스프링 프레임워크 위에서 돌아가는 것

스프링 핵심 기능

제어의 역전 (Inversion of Control)

  • 자바에서 클래스에 작성한 코드를 사용하려면 클래스로 객체를 생성하고 객체 안에 있는 변수 또는 메소드를 사용, 그러나 스프링 부트에서는 이러한 제어권한이 사람(개발자)이 아닌 스프링에 넘어가서 제어의 역전(IoC)이라고 함
  • 스프링에서는 특정 Annotation 사용하면 알아서 클래스의 객체를 스프링 컨테이너라는 곳에 생성
  • 스프링 부트는 ~~Application 클래스가 있는 패키지 안에 있는 클래스들을 스캔 => 컴포넌트 스캔
  • 컴포넌트 스캔으로 객체가 생성되는 어노테이션 : @Controller, @RestController, @Service, @Repository, @Configuration, @Bean
  • 컴포넌트 스캔으로 객체가 생성되면 생성된 객체를 Bean이라고 부름
@SpringBootApplication // 자동으로 @ComponentScan 포함
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}
  • @SpringBootApplication은 내부적으로 @ComponentScan을 포함
  • 기본적으로 MyApplication 클래스가 있는 패키지와 그 하위 패키지의 클래스들만 스캔 -> 이 스캔 범위 내에서 @Controller, @Service, @Repository, @Component 같은 애노테이션이 붙은 클래스들이 자동으로 빈(Bean)으로 등록

의존 주입 (Dependency Injection)

스프링 컨테이너에서 생성된 객체(Bean)를 가져오는 것

  • @Autowired를 이용
  • 매개변수를 이용
  • setter를 이용
  • 생성자를 이용(가장 추천)
@RestController
@RequestMapping("/test01")
public class Test01Controller {

    private final Test01Service test01Service;

    // ⭐ 생성자 주입 방식 (가장 추천됨)
    public Test01Controller(Test01Service test01Service) {
        this.test01Service = test01Service;
    }
}

@Autowired 없이도 생성자에 파라미터가 하나뿐이면 스프링이 자동으로 주입
불변성(immutability)을 유지하고, 테스트하기 쉽다

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

스프링 MVC 패턴

mvc 패턴 참고

JDBC, JPA 지원

https://spring.io/projects 참고

스프링 부트 프로젝트

스프링 부트 프로젝트 생성

제너레이터에서 Spring Boot를 선택, 필요에 따라 언어나 타입 등을 선택해서 골라주면 된다.

스프링 부트 프로젝트 구조

빨간 네모는 건들일 필요가 없으며 건드려서는 안 되는 파일

  1. src/main/java
    클래스 파일을 모아 둔 곳
  2. src/main/resources
    xml, properties를 저장하는 곳
    (1) static
    css , js , 그림 등의 파일을 저장하는 곳
    (2) templates
    타임리프(thymeleaf) 형식 템플릿 파일(jsp 아님)을 저장하는 곳
    스프링 부트에서는 jsp 파일이 아닌 thymeleaf 템플릿 엔진 사용을 권장(jsp를 이용할 수는 있지만, 따로 설정 필요)
    (3) application.properties
    application.properties 파일은 스프링 부트 전체 프로젝트의 설정을 저장하는 곳
    이 파일에 설정되어져 있는 정보를 최우선적으로 따름
    (자바 파일에 설정되어져 있어도 이 application.properties 파일에 다른 설정이 저장되어져 있으면 의미가 없음)
  3. src/test/java
    JUnit 등 테스트 케이스의 자바 클래스 파일들을 저장하는 곳

외부 라이브러리를 살펴보면, 톰캣을 포함한 필요한 라이브러리가 기본적으로 포함되어있는 걸 확인할 수 있음

0개의 댓글