Web/Kotlin & Spring

    [ Kotlin & Spring ] - 스프링 WebFlux의 코루틴 지원과 코루틴 원리

    [ Kotlin & Spring ] - 스프링 WebFlux의 코루틴 지원과 코루틴 원리

    1. 스프링 WebFLux의 코루틴 지원 프로젝트 리액터 기반의 리액티브 프로그래밍은 비동기-논블로킹의 단점인 콜백 헬 문제를 순차적으로 동작하는 연산자를 통해 해결합니다. 하지만 함수형 패러다임에 익숙하거나 리액터의 다양한 연산자에 부담이 없다면 이도 상관없지만, 매우 러닝커브가 높은 편입니다. 이로 인해 최근 안드로이드도 최근엔 RxJava에서 코루틴 기반으로 작성하는 코드가 늘어나고 있고 서버 측에서도 코루틴을 도입하는 사례도 많아지고 있습니다. 1-1. 코루틴 코루틴(Coroutine)은 코틀린에서 비동기-논블로킹 프로그래밍을 명령형 스타일로 작성할 수 있도록 도와주는 라이브러리 입니다. 이는 멀티 플랫폼을 지원하며 코틀린을 사용하는 안드로이드, 서버 등 여러 환경에서 사용할 수 있습니다. 또한 ..

    [ Kotlin & Spring ] - 스프링 WebFlux

    [ Kotlin & Spring ] - 스프링 WebFlux

    1. 프로젝트 리액터 프로젝트 리액터(Project Reactor)는 리액티브 스트림의 구현체 중 하나로서 스프링의 에코시스템 범주에 포함된 프레임워크 입니다. 리액티브 스트림 사양을 구현하고 있으므로 리액티브 스트림에서 사용하는 용어와 규칙을 그대로 사용하면 됩니다. 이를 사용해서 애플리케이션에 리액티브 프로그래밍을 적용할 수도, 비동기-논블로킹을 적용할 수 있습니다. 또한, 함수형 프로그래밍의 접근방식을 통해 비동기-논블로킹 코드의 난해함을 어느정도 해결합니다. 뿐만 아니라 백프레셔(Backpressure)를 사용해 시스템의 부하를 효율적으로 조절할 수 있습니다. 1-1. 모노와 플럭스 리액터는 리액티브 스트림의 Publisher 인터페이스를 구현하는 모노(Mono)와 플럭스(Flux)라는 두 가지 ..

    [ Kotlin & Spring ] - 리액티브 프로그래밍 (옵저버 패턴, 이터레이터 패턴,  리액티브 스트림)

    [ Kotlin & Spring ] - 리액티브 프로그래밍 (옵저버 패턴, 이터레이터 패턴, 리액티브 스트림)

    1. 비동기 프로그래밍? 비동기 프로그래밍은 그냥 실행 중인 작업이 끝나는 것을 기다리지 않고 바로 반환하는 것을 말합니다. 만약 작업이 끝나면 콜백등으로 다시 쓰레드가 해당 작업을 처리하는 것처럼 말이죠. 사실 저는 프론트앤드 기발을 많이 해봐서 비동기(Asynchronous) 프로그래밍에 매우 익숙합니다. 왜냐하면 FE에서는 UI 애플리케이션의 경우 특정 이벤트가 발생할 경우에 반응하는 동작을 구현해야 하는데 이럴 떄 필수적으로 비동기 프로그래밍을 사용하게 되기 때문입니다. const button = document.querySelector('button'); button.addEventListener('click', event => { button.innerHTML = '~' }); 이런식으로 말이..

    [Kotlin & Spring] - TODO 서비스에 코틀린 도입해서 리팩토링 하기 + Test Double

    [Kotlin & Spring] - TODO 서비스에 코틀린 도입해서 리팩토링 하기 + Test Double

    https://github.com/digimon1740/fastcampus-todo-java GitHub - digimon1740/fastcampus-todo-java Contribute to digimon1740/fastcampus-todo-java development by creating an account on GitHub. github.com 저는 강의에서 제공하는 위 깃허브를 참고해서 코틀린으로 마이그래이션 작업을 시작했습니다. 1. Kotlin DSL을 사용해 빌드 스크립트 마이그레이션 build.gradle.kts import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("org.springframework.boot") ver..