728x90
WebFlux에서는 데이터가 여러 건일 때 어떻게 처리할까? 이 글에서는 콘텐츠 리스트를 WebFlux 방식으로 반환하는 실질적인 방법을 정리한다.
1. 기본 상황 정리
콘텐츠 리스트 (예: 게시글 목록, 동영상 목록 등)
= 여러 건의 데이터 반환
= WebFlux에서는 Flux로 처리한다.
2. 핵심 포인트
항목 | 설명 |
---|---|
반환 타입 | Flux<Content> (0개 ~ N개) |
컨트롤러 어노테이션 | @RestController , @GetMapping (Annotation 기반) |
데이터 준비 | 비동기 방식 (Reactive Repository 또는 Service) |
DB 연동 | R2DBC (Reactive DB 드라이버) 사용 추천 |
3. 예제 코드 (Spring WebFlux)
3.1 Content 모델 예시
data class Content(
val id: Long,
val title: String,
val description: String
)
3.2 ContentService 예시
@Service
class ContentService {
fun getAllContents(): Flux<Content> {
val contents = listOf(
Content(1, "첫 번째 콘텐츠", "설명 1"),
Content(2, "두 번째 콘텐츠", "설명 2"),
Content(3, "세 번째 콘텐츠", "설명 3")
)
return Flux.fromIterable(contents)
}
}
3.3 ContentController 예시
@RestController
@RequestMapping("/contents")
class ContentController(
private val contentService: ContentService
) {
@GetMapping
fun listContents(): Flux<Content> {
return contentService.getAllContents()
}
}
4. 흐름 요약
Client 요청 → WebFilter (optional) → DispatcherHandler → Controller → Service → Flux<Content> 반환 → 응답 스트리밍
- WebFlux는 데이터를 모두 모은 후 한 번에 반환하는 것이 아니라,
- 준비되는 대로 하나씩 스트리밍 방식으로 클라이언트에 보낼 수 있다.
5. 실제 JSON 응답 예시
[
{
"id": 1,
"title": "첫 번째 콘텐츠",
"description": "설명 1"
},
{
"id": 2,
"title": "두 번째 콘텐츠",
"description": "설명 2"
},
{
"id": 3,
"title": "세 번째 콘텐츠",
"description": "설명 3"
}
]
6. 정리
콘텐츠 리스트를 WebFlux로 반환할 때는 Flux<Content>
를 사용해 스트리밍 방식으로 데이터를 전달한다. 이는 비동기 환경에서 자원 효율성과 응답 속도를 동시에 향상시킬 수 있는 방법이다.
다음 글에서는 Flux에서 페이징 처리하는 방법이나 Flux와 Mono 체이닝 고급 패턴을 다룰 예정이다.
참고
728x90
'BackEnd > Spring WebFlux' 카테고리의 다른 글
Spring WebFlux에서 MySQL을 사용하는 방법: JDBC vs R2DBC 완전 정리 (0) | 2025.04.28 |
---|---|
부록 - Spring Boot MVC vs Spring WebFlux 비교 (0) | 2025.04.28 |
Spring WebFlux 심화 시리즈 (4) - WebClient를 활용한 대용량 데이터 처리 (0) | 2025.04.28 |
Spring WebFlux 심화 시리즈 (3) - Flux로 페이징 처리하는 방법 (0) | 2025.04.28 |
Spring MVC vs Spring WebFlux 시리즈 (1) - 왜 WebFlux를 선택하는가? (0) | 2025.04.28 |