1.3.8 Spring 최적화와 모범 사례
개선된 Spring 애플리케이션 성능과 뛰어난 코드 품질 유지는 개발 과정에 깊이 통합되어야 합니다. 여기에는 몇 가지 실용적인 예시를 포함하여 상세히 설명합니다.
애플리케이션 성능 최적화
데이터베이스 접근 최적화 예시
N+1 쿼리 문제 해결: Spring Data JPA에서 @EntityGraph
를 사용하여 연관된 엔티티를 미리 로드함으로써 N+1 문제를 해결할 수 있습니다.
@EntityGraph(attributePaths = {"author", "publisher"})
List<Book> findAll();
이 코드는 Book
엔티티를 조회할 때 author
와 publisher
를 조인하여 한 번의 쿼리로 가져옵니다.
HTTP 요청 최적화 예시
HTTP 캐싱 활용: Spring MVC에서는 WebContentInterceptor
를 사용하여 정적 리소스에 대한 HTTP 캐싱 헤더를 설정할 수 있습니다.
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
WebContentInterceptor webContentInterceptor = new WebContentInterceptor();
webContentInterceptor.setCacheSeconds(31556926); // 1년
registry.addInterceptor(webContentInterceptor);
}
}
이 설정은 브라우저가 정적 리소스를 캐시하도록 하여, 불필요한 네트워크 요청을 줄입니다.
코드 품질과 유지 관리
단위 테스트 예시
Repository 단위 테스트: Spring Boot에서는 @DataJpaTest
를 사용하여 Repository의 단위 테스트를 손쉽게 작성할 수 있습니다.
@DataJpaTest
public class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
@Test
public void testFindByUsername() {
User user = new User("username", "password");
userRepository.save(user);
Optional<User> found = userRepository.findByUsername("username");
assertTrue(found.isPresent());
assertEquals("username", found.get().getUsername());
}
}
이 예시는 UserRepository
의 findByUsername
메소드가 예상대로 동작하는지 검증합니다.
지속적 통합(CI) 예시
GitHub Actions를 사용한 CI 설정: GitHub Actions를 활용하여 Maven 기반 Spring Boot 애플리케이션의 빌드 및 테스트를 자동화할 수 있습니다.
name: Java CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Build with Maven
run: mvn clean install
이 YAML 파일은 GitHub 리포지토리에 푸시될 때마다 자바 11을 사용하여 Maven 빌드를 실행합니다.
성능 최적화와 코드 품질 관리는 Spring 애플리케이션의 성공적인 개발 및 유지 보수를 위해 중요합니다. 위의 예시들은 이러한 측면을 개선하는 구체적인 방법을 보여줍니다.
source: DevOps/1.Programming_Languages_&_Frameworks/1.3.Spring/1.3.8.md