본문 바로가기
반응형

분류 전체보기338

[Coroutines] 코루틴과 공유 상태 코루틴 스터디를 하며 정리 중인 시리즈 글왜 코루틴을 써야할까?[Coroutines] 코루틴 빌더, 코루틴 컨텍스트[Coroutines] 구조화된 동시성[Coroutines] 코루틴 스코프 함수[Coroutines] 디스패처[Coroutines] 코루틴과 공유상태 코루틴 코루틴의 이름에는 아래와 같은 뜻이 담겨있다.co: 함께, 협력하는routine: 특정한 일을 처리하기 위한 일련의 명령coroutine: 함께 실행되는 루틴. 서로 간에 스레드 사용을 양보하며 함께 실행됨 코루틴은 항상 하나의 스레드 위에서 동작하지는 않는다. 코루틴 디스패처와 스레드풀의 연관 관계는 '[Coroutine] 디스패처' 포스트를 참고하길 바란다. 코루틴은 일시 중단이 일어나면 다른 코루틴에게 스레드를 양보한다는 점을 기억.. 2024. 7. 31.
[Coroutines] 코루틴 디스패처 코루틴 스터디를 하며 정리 중인 시리즈 글왜 코루틴을 써야할까?[Coroutines] 코루틴 빌더, 코루틴 컨텍스트[Coroutines] 구조화된 동시성[Coroutines] 코루틴 스코프 함수[Coroutines] 디스패처[Coroutines] 코루틴과 공유상태 💥 디스패처 코루틴 컨텍스트에 대해 학습할 때 디스패처에 대해 간단히 학습하고 넘어갔었다. 이 글에서는 디스패처를 좀더 자세히 알아볼 예정이다. 영단어 디스패처는 사람이나 차량 등을 필요한 곳에 보내는 것을 담당하는 사람이라는 뜻이다. 코루틴에서의 디스패처는 코루틴을 스레드로 보내는 역할(어떤 환경에서 실행될지 결정하는 역할)을 한다.  📌 CoroutineDispatcher의 동작CoroutineDispatcher는 아래와 같은 그림처럼 .. 2024. 7. 8.
[Coroutines] 코루틴 스코프 함수 코루틴 스터디를 하며 정리 중인 시리즈 글왜 코루틴을 써야할까?[Coroutines] 코루틴 빌더, 코루틴 컨텍스트[Coroutines] 구조화된 동시성[Coroutines] 코루틴 스코프 함수[Coroutines] 디스패처[Coroutines] 코루틴과 공유상태 🎉 coroutineScope 코루틴 스코프 함수는 중단함수 내에서 스코프가 필요할 때 사용한다. coroutineScope는 코루틴 스코프 함수의 일종이다. 🔸 coroutineScope 로 인해 중단되는 코루틴coroutineScope는 새로운 코루틴을 생성하면 작업이 끝날 때까지 coroutineScope를 호출한 코루틴을 중단시킨다. 아래 예제를 보면 println이 순차적으로 진행되는 것을 볼 수 있다.suspend fun main.. 2024. 6. 29.
[Coroutines] 구조화된 동시성, 코루틴 스코프 코루틴 스터디를 하며 정리 중인 시리즈 글왜 코루틴을 써야할까?[Coroutines] 코루틴 빌더, 코루틴 컨텍스트[Coroutines] 구조화된 동시성[Coroutines] 코루틴 스코프 함수[Coroutines] 디스패처[Coroutines] 코루틴과 공유상태 🎄 구조화된 동시성'왜 코루틴을 써야할까?'에서 구조화된 동시성에 대해 아주 잠깐 설명했었다. 이 포스팅을 통해서 좀 더 자세한 이야기를 다뤄보려고 한다.  구조화된 동시성(Structured Concurrency)이란, 비동기 작업을 구조화함으로써 비동기 프로그래밍을 보다 안정적이고 예측 가능하게 만드는 원칙이다. 코틀린 코루틴은 비동기 작업인 코루틴을 부모-자식 관계로 구조화함으로써 코루틴을 안전하게 관리 및 제어하게 만들어졌다. 구조화된.. 2024. 6. 29.
[Coroutines] 코루틴 빌더, 코루틴 컨텍스트 코루틴 스터디를 하며 정리 중인 시리즈 글왜 코루틴을 써야할까?[Coroutines] 코루틴 빌더, 코루틴 컨텍스트[Coroutines] 구조화된 동시성[Coroutines] 코루틴 스코프 함수[Coroutines] 디스패처[Coroutines] 코루틴과 공유상태 🔅 코루틴 빌더 코틀린 코루틴은 코루틴을 일시 중단시킨다. 이런 방식을 통해 스레드를 블로킹할 때보다 훨씬 가볍게 사용할 수 있다. 그런데 이 코루틴 중단은 중단 함수 내에서만 일어날 수 있다. 그리고 중단함수는 중단함수 내에서만 호출되어야 한다. 중단함수가 최초로 시작되는 지점은 어디일까? 바로 코루틴 빌더다. 🔸 코루틴 빌더중단 함수가 시작되는 지점모든 코루틴 빌더는 자신의 Job을 생성 (Job에 대한 설명은 하단에 있다.)launch.. 2024. 6. 23.
왜 코루틴을 써야할까? 코루틴 스터디를 하며 정리 중인 시리즈 글왜 코루틴을 써야할까?[Coroutines] 코루틴 빌더, 코루틴 컨텍스트[Coroutines] 구조화된 동시성[Coroutines] 코루틴 스코프 함수[Coroutines] 디스패처[Coroutines] 코루틴과 공유상태 😏 스레드의 한계 JVM은 스레드를 기반으로 동작한다. 단일 스레드는 동시 작업을 수행할 수 없기 때문에 하나의 작업이 오래 걸리면 다른 작업의 처리도 지연된다. 이를 극복하기 위해 등장한 것이 멀티 스레드다. 멀티 스레드는 스레드를 여러 개 사용해 작업을 처리하는 것으로, 병렬 처리가 가능해진다. (동시성과 병렬성의 차이는 동시성 (Concurrency) vs 병렬성 (Parallelism) 글을 참고하길 바란다.)   멀티 스레드 이미지를.. 2024. 6. 9.
Spring Camp 2024 후기 😎 참가 신청 2024년 5월 25일, KSUG가 주관하는 스프링 캠프 컨퍼런스에 다녀왔다. 매년 인기가 좋은 컨퍼런스인지 작년만 해도 1분도 안되어 참가 신청이 매진되었다고 한다. 작년에는 나 역시 선착순에서 떨어졌었으나, 올해는 알람을 맞춰두고 대기한 덕에 신청 성공하였다.   🥸 세션을 듣고 세션을 듣고 생각하거나 느낀 점을 간단히 정리한다. 실제 세션 내용은 KSUG 측에서 3개월 후에 영상을 공개한다고 하니 해당 영상을 참고하길 바란다. 01 동시성의 미래 - 코루틴과 버츄얼 스레드 (이상훈님)전통적인 웹과 jvm에서 스레드를 어떻게 다뤘는지부터 시작해, 코루틴이 스레드를 어떻게 다루는지, 버츄얼 스레드에 와서는 스레드를 어떻게 다루는지 바뀌었는지에 설명한다. 여러 상황을 가정하시면서 성능 .. 2024. 5. 25.
[Reactor] 서버 느리게 만드는 API 개발하기 (feat: block) 1. 엉망진창 시작 🤯 Reactor에 대해서 'WebFlux는 비동기 프로그래밍할 때 쓴다', 'Mono는 단일 요소, Flux는 여러 요소' 이 두 가지 외에는 아무것도 모르는 상태에서 로직을 작성해야 했다. WebFlux의 기본 문법을 공부하는 중이긴 했지만, 학습 속도보다 업무 진행이 훨씬 급했다. 무작정 코드를 작성하니 어떻게든 내가 원하는 결과가 만들어졌다. 베타 서버 데이터를 이용한 테스트도 완료했다. 성공 케이스, 실패 케이스, 에러 케이스 모두 예상한대로 돌아갔다. 며칠 뒤, 퇴근했다가 갑자기 베타 서버가 이상하다는 슬랙이 온다.😭  2. 문제의 코드 😵 자세한 비즈니스 로직을 생략하기 위해 조금 억지스러운 예제를 가져왔다. 상품을 조회할 때, 상품을 판매하는 판매사명이 "test".. 2024. 5. 6.
[Spring] ReactiveCrudRepository를 이용한 삭제 시 주의점 😟 문제 상황 찜을 삭제하고 별도의 작업을 위해 event publish 하는 로직을 작성하였다.fun remove(favorite: Favorite): Mono = favoriteRepository.deleteById(favorite.id) .flatMap { productService.findById(favorite.productId) } // event publish할 때 필요한 데이터 조회 .flatMap { product -> val favoriteRequest = toFavoriteEventRequest(favorite, product) Mono.fromCallable { favoriteEventPublisher.publ.. 2024. 4. 28.
반응형