ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring에 비해 SpringBoot 가 가지는 특징
    Spring 2022. 7. 3. 00:42

    TL;DR

    1. 자주 사용되는 라이브러리들의 버전 관리 자동화
      • spring-boot-starter : 관련 있는 모듈들의 모음을 제공해준다.
      • spring-boot-starter-parent: 각 모듈의 현재 Spring Boot 버전에 가장 적합한 버전을 제공해준다.
    2. AutoConfig로 복잡한 설정 자동화
      • @EnableAutoConfiguration
    3. 내장 웹서버 제공
      • Embedded WAS
      • Tomcat, jetty, undertow 모두 가능
    4. 모니터링
      • Actuator
    1. 그외
      • 애플리케이션 자동 재시작과 리로딩(사용자 코드 변화를 감지하고 애플리케이션 재시작함), 라이브 리로드(HTML 이나 JS 등의 파일이 변경 되어도 다시 실행하지 않아도 됨) 를 지원하는 dev-tools 가 있다.
      • 스프링 부트는 서블릿 컨텍스트까지 관리할 수 있어서 DelegatingFilterProxy 없이도 필터를 등록할 수 있다.

    과거의 Spring

    • Spring 3.1 이후부터 Java 로 설정을 할 수 있었지만 이전에는 XML 로 설정을 직접 해야했습니다.
    • 외장 톰캣에 war 파일을 만들어 배포를 해야했고, 이에 대한 추가 설정을 구성해줘야 하는 번거로움이 많았습니다.

    현재의 Spring Boot

    자주 사용되는 라이브러리들의 버전 관리 자동화

    • Spring Boot 로 웹 개발을 하다보면 여러 라이브러리나 프레임워크를 추가로 사용하게 됩니다.
    • 하지만 이때 Spring Boot 버전과 라이브러리, 프레임워크 버전을 맞춰 주지 않으면 여러 오류가 발생할 수 있습니다.
    • 이를 해결 하기 위해 Spring Boot 는 버전별로 자주 사용되는 라이브러리의 버전들을 관리해줍니다.
    • 그 결과 maven 이나 gradle 에 버전을 명시하지 않아도 적합한 라이브러리 버전을 찾아서 가져와줍니다.
    dependencies {
    // ...
    ​
        implementation 'org.springframework.boot:spring-boot-starter-web'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
        implementation 'org.springframework.boot:spring-boot-starter-validation'
        implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
        
        implementation 'com.google.code.gson:gson'
        compileOnly 'org.projectlombok:lombok'
        annotationProcessor 'org.projectlombok:lombok'
        implementation 'com.h2database:h2'
    }

    AutoConfig 로 복잡한 설정 자동화

    개발을 진행하다보면 json 메시지 변환, 프로퍼티 설정 등 다양한 공통적인 설정들이 필요합니다. 스프링 부트는 개발을 위해 필요한 공통적인 부분들을 자동으로 구성해줍니다. 그래서 스프링 부트 프로젝트를 만들면 별도의 설정없이 서버를 바로 띄울 수 있습니다. 또한 ElasticSearch, H2, Redis, Gson 등과 같은 자주 사용되는 외부 라이브러리들 역시도 자동 설정을 제공하고 있습니다.

    내장 WAS

    Spring 을 통해 웹 애플리케이션을 개발 하고 난 후 배포하려면 다음과 같은 프로세스를 따라야합니다.

    1. 서버에 올릴 애플리케이션을 WAR 로 패키징 합니다.
    2. WAS 를 인스턴스에 설치합니다.
    3. WAS에 WAR 파일을 올립니다.

    Spring boot 는 개발자가 편하게 WAS 가 내장되어 있습니다. 따라서 배포할 때 war 파일이 아닌 jar 파일로 패키징 하여 빠르게 배포할 수 있습니다. 물론 외장 WAS 를 사용하고 싶다면 WAR 파일로 패키징 할 수 있습니다. 따라서 Boot 를 사용하면 WAR 나 JAR 둘다 사용할 수 있으니 선택지가 넓어집니다.

    모니터링

    Spring Boot 의 모듈 중 하나인 "Actuator" 는 애플리케이션의 관리 및 모니터링을 지원해줍니다.

    Actuator 는 사용 서비스 수준에서 필요로 할 모니터링 기능을 엔드포인트로 미리 만들어서 제공해줍니다.

    대표적인 end point 들은 다음과 같습니다.

    • /health
      • 애플리케이션의 상태정보
    • /metircs/{name}
      • 애플리케이션의 metric 정보(system.cpu.usage, process files.open 등)
    • /beans
      • 어떤 빈이 등록되어 있는지
    • /loggers/{name}
      • 애플리케이션의 로거 구성

    하지만 actuator 가 서버 관리자 말고 다른 사용자들도 보면 안됩니다. 따라서 운영시에는 Spring Security 등을 이용하여 보안에 신경써줘야합니다.

    또한 actuator의 데이터를 영구 저장소에 저장해주지 않으면 없어집니다. actuator의 정보는 메모리에 저장되기 때문에 tomcat 을 재시작하면 데이터가 날라갑니다. 영구적으로 저장하기 위해선 별도의 logging 이나 DB가 필요합니다.

     

    ## 정리

    Spring Boot 는 약간의 설정만으로 Spring 애플리케이션을 만들 수 있게 해줍니다.

    Spring Boot 는 Spring 프로젝트 중 하나로 Spring Framework 를 쉽게 사용하게 해주는 도구이지, Spring Framework 와 별개로 사용할 수 있는 것이 아닙니다.

    참고

    'Spring' 카테고리의 다른 글

    Kotlin 에서 Spring 으로 테스트할 때 주의사항  (0) 2023.02.14
    Spring Bean  (0) 2022.07.25
    Filter 와 Interceptor 의 차이  (0) 2022.06.26
    @Transaction(readOnly = True)  (0) 2022.05.08
    Spring Cloud Sleuth(1)  (0) 2022.01.29

    댓글