고급 Spring Boot 기능: Spring Boot의 덜 알려졌거나 고급 기능을 탐색

 

Spring Boot는 간편한 설정과 자동 구성으로 인해 빠르게 개발을 시작할 수 있다는 장점이 있습니다. 하지만 Spring Boot는 이러한 기본 기능 외에도 다양한 고급 기능을 제공하고 있습니다. 이번 글에서는 Spring Boot의 덜 알려졌거나 고급 기능들을 살펴보도록 하겠습니다.

1. 외부 설정(Externalized Configuration)

Spring Boot는 다양한 외부 설정 소스를 지원하여 유연한 설정 관리를 할 수 있습니다. application.propertiesapplication.yml 파일뿐만 아니라 환경 변수, 커맨드 라인 인수, 외부 설정 서버 등을 통해 설정 값을 주입받을 수 있습니다.

프로파일(Profile)

프로파일을 사용하면 환경별로 다른 설정 값을 적용할 수 있습니다. application-{profile}.properties 형식으로 프로파일 관련 설정 파일을 작성하고, spring.profiles.active 속성을 통해 활성화할 프로파일을 지정합니다.

타입-세이프 프로퍼티(Type-safe Properties)

@ConfigurationProperties 어노테이션을 사용하여 설정 값을 타입-세이프하게 바인딩할 수 있습니다. 설정 값이 변경되면 자동으로 재바인딩되며, IDE의 자동 완성 및 유효성 검사 기능을 활용할 수 있습니다.

1
2
3
4
5
6
@ConfigurationProperties(prefix = “myapp”)
public class MyAppProperties {
    private String apiUrl;
    private int maxConnections;
    // getters and setters
}
cs

2. 독립 실행형 JAR와 도커라이징

Spring Boot는 독립 실행형 JAR(Executable JAR)를 생성하여 쉽게 배포할 수 있습니다. spring-boot-maven-plugin이나 spring-boot-gradle-plugin을 사용하면 실행 가능한 JAR 파일을 빌드할 수 있습니다.

도커(Docker)를 사용하여 Spring Boot 애플리케이션을 컨테이너화할 수도 있습니다. Dockerfile을 작성하고 docker build 명령어로 도커 이미지를 생성할 수 있습니다.

1
2
3
FROM openjdk:11jreslim
COPY target/myapp.jar app.jar
ENTRYPOINT [“java”,“-jar”,“/app.jar”]
cs

3. 액추에이터(Actuator)

Spring Boot Actuator는 애플리케이션의 모니터링과 관리를 위한 기능을 제공합니다. Actuator 엔드포인트를 통해 애플리케이션의 상태를 확인하고, 메트릭을 수집하며, 로그 레벨을 변경하는 등의 작업을 할 수 있습니다.

/health 엔드포인트를 통해 애플리케이션의 상태를 확인할 수 있고, /metrics 엔드포인트를 통해 다양한 메트릭 정보를 얻을 수 있습니다. 또한 /loggers 엔드포인트로 로그 레벨을 실시간으로 변경할 수 있습니다. Actuator는 Micrometer와 통합되어 다양한 모니터링 시스템(Prometheus, Datadog 등)과 연동될 수 있습니다.


4. 테스트 유틸리티

Spring Boot는 애플리케이션 테스트를 위한 다양한 유틸리티를 제공합니다.

@SpringBootTest

@SpringBootTest 어노테이션을 사용하여 통합 테스트를 작성할 수 있습니다. 이 어노테이션은 전체 애플리케이션 컨텍스트를 로드하여 테스트 환경을 구성합니다.

1
2
3
4
5
6
7
8
9
10
@SpringBootTest
class MyApplicationTest {
    @Autowired
    private MyService myService;
    @Test
    void testMyService() {
        // test code
    }
}
cs

 

@WebMvcTest

@WebMvcTest 어노테이션을 사용하면 MVC 컨트롤러 계층만 테스트할 수 있습니다. MockMvc를 자동으로 설정해주므로 컨트롤러 테스트를 쉽게 작성할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
@WebMvcTest(MyController.class)
class MyControllerTest {
    @Autowired
    private MockMvc mockMvc;
    @Test
    void testMyEndpoint() throws Exception {
        mockMvc.perform(get(“/myendpoint”))
               .andExpect(status().isOk())
               .andExpect(content().string(“Hello, World!”));
    }
}
cs

 

@DataJpaTest

@DataJpaTest 어노테이션은 JPA 관련 테스트를 위한 어노테이션입니다. 내장 데이터베이스를 설정하고 테스트에 필요한 JPA 관련 빈들만 로드합니다.

1
2
3
4
5
6
7
8
9
10
@DataJpaTest
class MyRepositoryTest {
    @Autowired
    private MyRepository myRepository;
    @Test
    void testMyRepository() {
        // test code
    }
}
cs

5. 개발자 도구

Spring Boot는 개발 생산성을 높이기 위한 개발자 도구를 제공합니다.

spring-boot-devtools

spring-boot-devtools 모듈은 코드 변경 시 자동으로 애플리케이션을 재시작해주는 기능을 제공합니다. 클래스패스에 있는 파일이 변경되면 자동으로 감지하여 애플리케이션을 다시 시작합니다.

라이브 릴로드(Live Reload)

라이브 릴로드 기능을 사용하면 정적 리소스(HTML, CSS, JS)가 변경되었을 때 자동으로 브라우저를 리프레시합니다. 브라우저 확장 플러그인과 함께 사용하면 변경 사항을 즉시 확인할 수 있어 개발 효율성을 높일 수 있습니다.

글로벌 설정(Global Settings)

spring-boot-devtools 모듈은 캐시 비활성화, 템플릿 캐시 비활성화 등 개발 시 유용한 글로벌 설정을 자동으로 적용해줍니다. 개발 단계에서는 이러한 설정들이 자동으로 활성화되어 편리하게 개발할 수 있습니다.


6. 그레이들 플러그인

Spring Boot는 메이븐뿐만 아니라 그레이들도 잘 지원합니다. org.springframework.boot 그레이들 플러그인을 사용하면 다음과 같은 기능을 사용할 수 있습니다.

  • bootRun 태스크를 통한 Spring Boot 애플리케이션 실행
  • bootJar 태스크를 통한 실행 가능한 JAR 파일 생성
  • bootBuildInfo 태스크를 통한 빌드 정보 생성
  • 의존성 관리와 버전 관리 자동화
1
2
3
4
5
6
7
plugins {
    id ‘org.springframework.boot’ version ‘2.5.0’
}
bootJar {
    archiveFileName = ‘myapp.jar’
}
cs

7. 보안

Spring Boot는 Spring Security와 잘 통합되어 있어 간편하게 보안 설정을 할 수 있습니다.

자동 구성

Spring Security 의존성을 추가하면 기본적인 보안 설정이 자동으로 이루어집니다. 이를 통해 모든 엔드포인트에 인증이 필요하도록 설정되며, 기본 로그인 폼이 제공됩니다.

OAuth2와 JWT

Spring Boot는 OAuth2와 JWT를 사용한 인증 및 인가를 간편하게 구현할 수 있습니다. spring-boot-starter-oauth2-client를 사용하여 OAuth2 로그인을 구현할 수 있고, spring-boot-starter-oauth2-resource-server를 사용하여 JWT 기반의 리소스 서버를 구현할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .anyRequest().authenticated()
                .and()
            .oauth2Login();
    }
}
cs

8. 배치 처리

Spring Boot는 Spring Batch와 통합되어 배치 처리를 쉽게 구현할 수 있습니다. @EnableBatchProcessing 어노테이션을 사용하여 배치 기능을 활성화하고, JobStep을 정의하여 배치 작업을 구성합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Configuration
@EnableBatchProcessing
public class BatchConfig {
    @Bean
    public Job myJob(JobBuilderFactory jobBuilderFactory, Step myStep) {
        return jobBuilderFactory.get(“myJob”)
                .start(myStep)
                .build();
    }
    @Bean
    public Step myStep(StepBuilderFactory stepBuilderFactory) {
        return stepBuilderFactory.get(“myStep”)
                .<Input, Output>chunk(10)
                .reader(myReader())
                .processor(myProcessor())
                .writer(myWriter())
                .build();
    }
}
cs

9. 트랜잭션 관리

Spring Boot는 선언적 트랜잭션 관리를 지원하여 트랜잭션 처리를 간편하게 할 수 있습니다. @Transactional 어노테이션을 사용하여 메서드나 클래스에 트랜잭션 경계를 지정할 수 있습니다.

1
2
3
4
5
6
7
@Service
public class MyService {
    @Transactional
    public void doSomething() {
        // 트랜잭션 경계 내에서 실행되는 코드
    }
}
cs

10. 캐시

Spring Boot는 캐시 추상화를 제공하여 다양한 캐시 구현체를 쉽게 사용할 수 있습니다. @EnableCaching 어노테이션을 사용하여 캐시 기능을 활성화하고, @Cacheable, @CachePut, @CacheEvict 등의 어노테이션을 사용하여 캐시 동작을 제어할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Configuration
@EnableCaching
public class CacheConfig {
    @Bean
    public CacheManager cacheManager() {
        return new ConcurrentMapCacheManager(“myCache”);
    }
}
@Service
public class MyService {
    @Cacheable(“myCache”)
    public String getData(String key) {
        // 캐시에서 데이터를 조회하거나 생성하는 로직
    }
}
cs

 

지금까지 Spring Boot의 덜 알려졌거나 고급 기능들에 대해 살펴보았습니다. 외부 설정, 독립 실행형 JAR와 도커라이징, Actuator, 테스트 유틸리티, 개발자 도구, 그레이들 플러그인, 보안, 배치 처리, 트랜잭션 관리, 캐시 등 다양한 기능들을 활용하여 더욱 강력하고 효율적인 Spring Boot 애플리케이션을 개발할 수 있습니다.

이러한 기능들을 잘 활용한다면 개발 생산성을 높이고, 애플리케이션의 안정성과 확장성을 향상시킬 수 있을 것입니다. 프로젝트의 요구사항과 특성에 맞게 적절한 기능들을 선택하여 적용해보시기 바랍니다.

Spring Boot는 계속해서 발전하고 있으며, 새로운 기능들이 지속적으로 추가되고 있습니다. 공식 문서와 레퍼런스를 참고하여 최신 트렌드와 베스트 프랙티스를 학습하는 것도 중요합니다.

 

참고 자료

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다