BackEnd/Spring WebFlux

Spring MVC vs Spring WebFlux 시리즈 (2) - 콘텐츠 리스트를 WebFlux로 반환하는 방법

Raconer 2025. 4. 28. 23:24
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 체이닝 고급 패턴을 다룰 예정이다.

 

참고

https://github.com/Raconer/SpringWebFlux

728x90