본문 바로가기

Study Information Technology

Spring Boot와 Hazelcast를 이용한 분산 캐시 구현

728x90
반응형

Spring Boot와 Hazelcast를 이용한 분산 캐시 구현

Overview

분산 캐시 시스템을 구현하는 것은 애플리케이션의 성능과 확장성을 높이는 데 중요한 역할을 합니다. Spring Boot와 Hazelcast를 사용하여 분산 캐시를 구현하는 과정은 다음과 같은 단계로 진행됩니다. Hazelcast는 강력하고 쉽게 통합할 수 있는 인메모리 데이터 그리드 솔루션으로, 분산 캐시와 같은 다양한 분산 데이터 구조를 지원합니다. 여기서는 Spring Boot와 Hazelcast를 통합하여 기본적인 분산 캐시를 설정하고 운영하는 방법을 자세히 설명합니다.

1. 프로젝트 설정

먼저, Spring Boot 프로젝트를 생성하고 Hazelcast를 추가합니다. Spring Initializr를 사용하면 쉽게 시작할 수 있습니다. 필요한 의존성으로는 Spring Web과 Spring Data JPA가 있을 수 있지만, 여기서는 Hazelcast 의존성만 설명하겠습니다.

  1. Spring Initializr를 사용한 프로젝트 생성:
  • Spring Initializr에 접속합니다.
  • ProjectMaven Project를 선택하고, LanguageJava를 선택합니다.
  • Spring Boot 버전은 최신 안정 버전을 선택합니다.
  • Dependencies에는 Spring Web, Hazelcast, Spring Data JPA를 추가합니다.
  • Generate 버튼을 클릭하여 프로젝트를 다운로드하고 압축을 풉니다.
  1. pom.xml에 Hazelcast 의존성 추가:
    <dependency>
    <groupId>com.hazelcast</groupId>
    <artifactId>hazelcast-spring</artifactId>
    <version>5.3.2</version> <!-- 최신 버전 확인 후 변경 -->
    </dependency>

2. Hazelcast 설정

Hazelcast를 Spring Boot 애플리케이션과 통합하기 위해서는 HazelcastConfiguration 클래스를 작성하여 Hazelcast 인스턴스를 설정합니다.

  1. HazelcastConfiguration.java 파일을 생성합니다:
    import com.hazelcast.config.Config;
    import com.hazelcast.config.MapConfig;
    import com.hazelcast.spring.cache.HazelcastCacheManager;
    import org.springframework.cache.CacheManager;
    import org.springframework.cache.annotation.EnableCaching;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    

@Configuration
@EnableCaching
public class HazelcastConfiguration {

@Bean
public Config hazelcastConfig() {
Config config = new Config();
MapConfig mapConfig = new MapConfig();
mapConfig.setName("default");
mapConfig.setTimeToLiveSeconds(3600); // 캐시 데이터의 생명 주기 설정
config.addMapConfig(mapConfig);
return config;
}

@Bean
public CacheManager cacheManager() {
return new HazelcastCacheManager(com.hazelcast.spring.cache.HazelcastCacheManager
.newHazelcastInstance(hazelcastConfig()));
}
}


2. **`application.properties` 파일에 Hazelcast 설정 추가**:
```properties
spring.cache.type=hazelcast

3. 캐시 사용

이제 Spring Boot 애플리케이션에서 Hazelcast 캐시를 사용할 수 있습니다. 캐시를 사용하려면 @Cacheable, @CachePut, @CacheEvict와 같은 Spring 캐시 애너테이션을 활용할 수 있습니다.

  1. 예제 서비스 클래스:
    import org.springframework.cache.annotation.Cacheable;
    import org.springframework.stereotype.Service;
    

@Service
public class MyService {

@Cacheable(value = "default", key = "#id")
public String getDataById(String id) {
// 데이터베이스나 다른 소스에서 데이터를 조회하는 로직
return "Data for " + id;
}
}


2. **캐시 결과를 검증하기 위한 테스트**:
```java
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class MyServiceTest {

@Autowired
private MyService myService;

@Test
public void testCache() {
String id = "123";
// 캐시가 비어 있는 상태에서 호출
String result1 = myService.getDataById(id);
// 동일한 id로 호출하여 캐시된 결과를 확인
String result2 = myService.getDataById(id);
assertEquals(result1, result2, "캐시된 결과가 일치해야 합니다.");
}
}

4. 에러 처리 및 문제 해결

분산 캐시를 설정할 때 발생할 수 있는 몇 가지 에러와 그 해결 방법을 소개합니다.

  1. 연결 오류:
  • 문제: Hazelcast 클러스터에 연결할 수 없다는 에러 발생.
  • 해결책: hazelcastConfig 메서드에서 클러스터 설정을 확인하거나, application.properties 파일의 네트워크 설정을 검토합니다.
@Bean
public Config hazelcastConfig() {
Config config = new Config();
NetworkConfig networkConfig = config.getNetworkConfig();
networkConfig.setJoin(joinConfig());
return config;
}

private JoinConfig joinConfig() {
JoinConfig joinConfig = new JoinConfig();
joinConfig.getMulticastConfig().setEnabled(false);
joinConfig.getTcpIpConfig().setEnabled(true).addMember("localhost");
return joinConfig;
}
  1. 캐시 데이터가 갱신되지 않음:
  • 문제: 데이터가 캐시에서 제대로 갱신되지 않음.
  • 해결책: @CachePut 애너테이션을 사용하여 캐시 데이터를 강제로 갱신하도록 설정합니다.
@CachePut(value = "default", key = "#id")
public String updateData(String id, String newData) {
// 데이터베이스나 다른 소스에서 데이터를 업데이트하는 로직
return newData;
}

참고문서

이 설명을 바탕으로 Spring Boot와 Hazelcast를 이용한 분산 캐시 시스템을 설정하고 운영하는 데 필요한 지식을 제공하였습니다. 각 단계에 맞춰 설정을 확인하고 적용해보시기 바랍니다.

728x90
반응형