Spring Framework와 Spring Boot 비교

패스트캠퍼스 Spring Boot 강의 정리

Spring 핵심 기능

The IoC Container

  • 제어의 역전
  • 라이브러리를 사용할 때는 내 코드가 라이브러리 호출
  • 프레임워크를 사용할 때는 프레임워크가 내 코드를 호출
@SpringBootTest
class HelloServiceTest {
  
  // 프레임워크가 코드를 호출하여 HelloService를 주입해준다
  @Autowired
  private HelloService helloService;
  
  @Test
  void test() {
    String name = "Tom";
    
    String result = helloService.hello(name);
    
    // 코드에서 라이브러리를 호출한다
    Assertions.assertEquals("hello Tom", result);
  }
}

Resources

  • low-level resource에 접근할 수 있는 기능 제공
  • UrlResource
  • ClassPathResource
  • FileSystemResource
  • PathResource
  • ServletContextResource
  • InputStreamResource
  • ByteArrayResource

Validation, Data Binding and Type Conversion

  • 데이터 검증
  • 데이터를 인식하고 자료형에 할당
  • 데이터 자료형 변환
// 데이터 검증
public class Person {
  @NotNull
  @Size(min=2, max=30)
  privage String name;
}

// 데이터 인식 & 자로형 할당
@GetMapping("/employees/{id}")
public String getEmployeeById(@PathVariable String id) {
  return "ID: " + id;
}

// 데이터 자료형 변환
package org.springframework.core.convert.support;

final class StringToInteger implements Converter<String, Integer> {
  public Integer convert(String source) {
    return Integer.valueOf(source);
  }
}

Spring Expressoin Language(SpEL)

  • 스프링 애플리케이션의 런타임에 다양한 데이터에 접근하기 위한 언어
  • 스프링에 특화되어 더 다양한 기능 제공
@Value("${value.from.file}")
privatge String valueFromFile;

Aspect Oriented Programming with Spring

  • AOP(관점 지향 프로그래밍): 공통 기능을 코드 밖에서 필요한 시점에 적용 가능
  • 스프링은 AOP를 적극적으로 사용 & 지원
  • Proxy, Aspect, Join Point, Advice, Pointcut, Weaving
  • CGLib, AspectJ
  • AOP를 사용하지 않거나 몰라도 프레임워크를 사용할 수 있음
// 트랜잭션을 보장해준다
@Transactional
public boolean update(int age) {
  return userService.updateAge(age);
}

Null-safety

  • null-safe한 코드를 작성할 수 있는 방법 지원
  • @Nullable, @NonNull, @NonNullApi, @NonNullFields

Logging

  • 별도 설정 없이 로깅 구현체 사용 가능
  • SLF4J + Logback
  • Log4j 2
  • JUL(java.util.logging)

Spring Boot 주요 기능

  • stand-alone 스프링 애플리케이션
  • 임베디드 톰캣 내장 (WAR 배포 필요없음)
  • 빌드 설정을 단순화해주는 기초 세팅과 의존성
  • 스프링 및 서드 파티 라이브러리 자동 설정
  • 제품 레벨로 사용할 수 있는 기능
  • XML 설정 필요 없음