본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
강의 요약
오늘 강의에서는 Spring Data Cassandra를 활용한 NoSQL 데이터 접근 계층 구성 방법을 학습했다. Cassandra는 분산 데이터베이스로서 대규모 데이터 처리와 높은 가용성이 필요한 시스템에서 활용된다. 스프링에서 사용하는 방법과 마찬가지로 테스트 관련 내용을 알아보자.
Spring Data Cassandra 설정
Spring Data Cassandra는 두 가지 설정 방식을 제공한다.
Java Config 방식
AbstractCassandraConfiguration을 상속받아 설정 클래스를 작성한다.
@Configuration
public class CassandraConfig extends AbstractCassandraConfiguration {
@Override
protected String getKeyspaceName() {
return "testKeySpace";
}
@Bean
public CassandraClusterFactoryBean cluster() {
CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean();
cluster.setContactPoints("127.0.0.1");
cluster.setPort(9142);
return cluster;
}
}
Spring Boot 방식
application.properties를 통해 간결하게 설정한다.
spring.data.cassandra.keyspace-name=testKeySpace
spring.data.cassandra.port=9142
spring.data.cassandra.contact-points=127.0.0.1
- 필수 설정 항목으로는 contactPoints(서버 호스트명), port(요청 수신 포트), keyspaceName(데이터 복제를 정의하는 네임스페이스)이 있다.
Entity 매핑과 Primary Key
@Table
public class Book {
@PrimaryKeyColumn(name = "isbn", ordinal = 2,
type = PrimaryKeyType.CLUSTERED, ordering = Ordering.DESCENDING)
private UUID id;
@PrimaryKeyColumn(name = "title", ordinal = 0,
type = PrimaryKeyType.PARTITIONED)
private String title;
@PrimaryKeyColumn(name = "publisher", ordinal = 1,
type = PrimaryKeyType.PARTITIONED)
private String publisher;
@Column
private Set<String> tags = new HashSet<>();
}
| 타입 | 역할 |
| PARTITIONED | 데이터가 저장될 노드를 결정하는 파티션 키 |
| CLUSTERED | 파티션 내에서 데이터 정렬 순서를 결정하는 클러스터링 키 |
@DataCassandraTest 슬라이스 테스트
슬라이스 테스트의 필요성
- @SpringBootTest는 전체 애플리케이션 컨텍스트를 로드하므로 테스트 시간이 길어질 수 있다.
- 특정 계층만 테스트할 때는 해당 계층에 필요한 컴포넌트만 로드하는 것이 효율적이다.
@DataCassandraTest가 로드하는 컴포넌트
- CassandraAutoConfiguration, CassandraDataAutoConfiguration
- CassandraRepositoriesAutoConfiguration
- CassandraReactiveDataAutoConfiguration, CassandraReactiveRepositoriesAutoConfiguration
- CacheAutoConfiguration
스캔 대상: @Table 엔티티, @Repository 인터페이스
스캔 제외: 일반 @Component, @ConfigurationProperties 빈
테스트 클래스 구성
@RunWith(SpringRunner.class)
@DataCassandraTest
@Import(CassandraConfig.class)
public class InventoryServiceIntegrationTest {
@Autowired
private InventoryRepository repository;
@Test
public void givenVehiclesInDBInitially_whenRetrieved_thenReturnAllVehiclesFromDB() {
List<Vehicle> vehicles = repository.findAllVehicles();
assertThat(vehicles).isNotNull();
assertThat(vehicles).isNotEmpty();
}
}
Testcontainers를 활용한 테스트 환경
public class InventoryServiceLiveTest {
public static DockerComposeContainer container =
new DockerComposeContainer(new File("src/test/resources/compose-test.yml"));
@BeforeAll
static void beforeAll() { container.start(); }
@AfterAll
static void afterAll() { container.stop(); }
}
참고 출처
- https://www.baeldung.com/spring-data-cassandra-tutorial
- https://www.baeldung.com/spring-boot-datacassandratest



