Development/Code

알아두면 좋은 Spring Boot 기능 10가지

Danny Seo 2024. 6. 28. 14:42

알아두면 좋은 Spring Boot 기능 10가지

Spring Boot는 자바 기반 웹 애플리케이션 및 마이크로서비스를 구축하기 위한 강력한 프레임워크로, 설정보다 관례를 중시하는 접근 방식으로 개발 작업을 간소화하여 널리 인정받고 있습니다. 그러나 잘 알려진 기능 외에도 개발 경험을 크게 향상시킬 수 있는 숨겨진 보석 같은 기능들이 있습니다. 이번 글에서는 잘 알려지지 않은 Spring Boot의 10가지 기능을 깊이 있게 살펴보고, 이들을 프로젝트에 통합하여 개발 워크플로를 어떻게 향상시킬 수 있는지 보여드리겠습니다.

1. Custom Banner (사용자 정의 배너)

목적: 애플리케이션 시작 경험을 개인화하여 사용자 정의 배너를 만듭니다.
이점: 브랜드 정체성을 강화하고, 필수 정보를 표시하거나, 창의성을 더해 시작 프로세스를 더욱 기억에 남고 유익하게 만듭니다.

spring.banner.location=classpath:custom-banner.txt

 

아래와 같은 배너 생성기로 독창적인 배너를 생성하실 수 있습니다.

https://springhow.com/spring-boot-banner-generator/

 

Spring Boot banner Generator | Create banner.txt online

Spring Boot Banner Generator, Generate ASCII banner.txt online using 288 figlet fonts. This tool works for generating ASCII Art as well.

springhow.com

 

배너 적용 결과 :

Spring Boot Custom Banners (스프링 부트 커스텀 배너)

2. Spring Boot Actuator (스프링 부트 액추에이터)

목적: 내장된 프로덕션 준비 기능을 사용하여 애플리케이션을 쉽게 모니터링하고 관리합니다.
이점: 애플리케이션의 상태, 메트릭 및 런타임 동작에 대한 통찰력을 얻어 더 나은 의사결정과 사전 문제 해결을 촉진합니다.

management.endpoints.web.exposure.include=*

3. Dynamic Property Configuration (동적 속성 구성)

목적: 애플리케이션 속성을 재시작 없이 수정하여 런타임 구성 조정을 제공합니다.
이점: 구성 요소를 동적으로 미세 조정하여 다운타임을 줄이고 변경 요구사항에 따라 원활하게 조정할 수 있습니다.

@RefreshScope
@RestController
public class ConfigController {
    @Value("${custom.property}")
    private String customProperty;
    // 나머지 컨트롤러 코드
}

4. Spring Boot Profiles (프로필)

목적: 개발, 테스트 및 프로덕션을 위한 환경별 구성을 생성합니다.
이점: 구성 관리를 간소화하여 다른 환경에서 최적의 성능 및 자원 활용을 보장합니다.

application-dev.properties
application-prod.properties

 

프로필 사용 방법은 아래 글을 참고하세요 :

https://lordofkangs.tistory.com/320

 

[SpringBoot] Profile 사용하기

app.jar가 있다. 개발환경에서는 app.jar는 dev 설정파일이 필요하다. 운영환경에서는 app.jar는 prd 설정파일이 필요하다. 환경에 따라 올바른 설정파일을 읽도록 유도하는 것을 'Profile'이라 부른다. Spr

lordofkangs.tistory.com

5. Application Events (스프링 이벤트)

목적: 사용자 정의 이벤트 리스너를 생성하여 애플리케이션 생명주기 이벤트에 대응합니다.
이점: 애플리케이션 생명주기의 중요한 지점에서 특정 작업을 실행하여 더 나은 제어 및 사용자 정의를 제공합니다.

@EventListener(ApplicationReadyEvent.class)
public void onApplicationReady() {
    // 애플리케이션 준비 시 사용자 정의 로직
}

6. Spring Boot DevTools (데브툴)

목적: 자동 애플리케이션 재시작 및 추가 개발 친화적 기능을 통해 더 빠른 개발을 지원합니다.
이점: 수동 재시작의 필요성을 최소화하고 유용한 개발 도구를 통합하여 생산성을 높입니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
</dependency>

 

7. Spring Boot Testing Slices (슬라이스 테스트)

목적: 특정 계층에 초점을 맞춘 테스트를 수행할 수 있도록 테스트 슬라이스를 제공합니다.
이점: 관련 구성 요소에 대한 테스트를 격리하여 효율성을 높이고, 타겟팅된 효과적인 테스트를 보장합니다.

@RunWith(SpringRunner.class)
@WebMvcTest(UserController.class)
public class UserControllerTests {
    // 웹 계층에 대한 테스트 코드
}

8. Custom Annotations with meta-annotations (커스텀 어노테이션, 메타 어노테이션)

목적: 메타 애노테이션을 사용하여 사용자 정의 애노테이션을 생성하여 구성을 간소화합니다.
이점: 구성 코드를 중앙 집중화하고 간소화하여 유지보수성과 가독성을 향상시킵니다.

@Transactional
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface CustomTransaction {
    // 추가 애노테이션 속성
}

 

9. Spring Boot Conditional Annotations (컨디셔널 어노테이션)

목적: 환경 또는 기타 조건에 따라 구성을 조건부로 활성화하거나 비활성화합니다.
이점: 기능 및 구성을 선택적으로 활성화하여 보다 유연하고 적응력 있는 애플리케이션을 구현합니다.

@ConditionalOnProperty(name = "feature.toggle", havingValue = "true")
@Configuration
public class FeatureConfig {
    // 구성 코드
}

10. Logging Customization (커스텀 로깅)

목적: 애플리케이션의 로깅 구성을 특정 요구사항에 맞게 조정합니다.
이점: 로그 가독성을 향상시키고, 관련 정보를 필터링하며, 로그 출력 형식을 사용자 정의하여 분석 및 디버깅을 용이하게 합니다.

logging.level.root=INFO
logging.pattern.console=%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n

결론

이러한 자주 간과되는 Spring Boot 기능을 개발 도구에 통합하면, 프로세스를 간소화하는 새로운 방법을 발견하고 더 깊은 통찰력을 얻으며 궁극적으로 전체 개발 경험을 향상시킬 수 있습니다. 이 도구들을 실험해 보고, 프로젝트 요구 사항에 맞게 조정하여 Spring Boot의 잠재력을 최대한 활용해 보세요.

 

끝까지 읽어주셔서 정말 감사합니다 (_ _) !! 

즐거운 하루 되세요 ㅎㅎ.