본문 바로가기
반응형

전체 글332

Spring MVC + Coroutines 에 대한 고민 🤔 문제의 시작 우리 팀은 Spring MVC와 Coroutines, Kotlin을 사용하는 레포가 있다. 신규 API를 개발해서 호출하니 NoClassDefFoundError가 발생했다. MonoKt를 찾지 못한다고 한다. 모든 API에서 발생하는 건 아니고 코루틴을 적용한 API에서만 발생하였다.Handler dispatch failed: java.lang.NoClassDefFoundError: kotlinx/coroutines/reactor/MonoKt 많은 곳에서 kotlinx.coroutines.reactor 의존성을 추가하라는 말만 있을 뿐, 명쾌한 해결 방법이나 원인에 대해 알기는 어려웠다. WebFlux를 사용하는 것도 아닌데 reactor와 관련된 의존성을 왜 추가해야 하는지 이해가 안.. 2024. 9. 30.
서울 우먼잇츠 X 우아한스터디 후기 ⏰ 스터디 지원 2024.06.01 ~ 2024.07.27까지 약 두 달간 서울 우먼잇츠 X 우아한스터디를 참여했다. 서울 우먼잇츠 X 우아한스터디는 서울시여성가족재단과 우아한형제들이 함께하는 스터디 모임으로, 서울 우먼잇츠 커뮤니티 멤버와 우아한형제들 임직원들 대상으로 진행된다. 나는 우아한형제들 임직원으로서 코루틴 스터디를 신청하였다. 나중에 들어보니 지원자가 굉장히 많았다고 한다.  👥 스터디 인원스터디 멤버는 스터디장님이 모든 신청서를 확인하시며 뽑으신 것 같았다. 우리 팀 인원은 총 7명이었는데 스터디장님이 최대한 다양성을 추구하며 뽑으셨다. 서울 우먼잇츠 커뮤니티 멤버 4명과 우아한형제들 임직원 3명, 직군도 백엔드(서버)/안드로이드 섞여있고, 성별도 혼성, 연차도 다양하게 등 여러 유형의 .. 2024. 9. 22.
[인프콘 후기] 2024 INFCON 1. 올해도 인프콘! 올해도 인프콘 신청에 광탈했다.😇 하지만 정말 감사하게도! 문기님의 은혜로 초대권을 받아 참가할 수 있었다.👍 2022년, 2023년에 이어 올해도 인프콘에 참여할 수 있게 되어서 정말 기쁘다. 작년에도 즐길거리가 많다고 느꼈는데 올해는 인생네컷이나 라이트닝 토크 등 더 많은 이벤트를 준비하신 게 눈에 보였다. 좋은 발표도 많은데 즐길거리도 많으니 행사 시간 8시간이 모자랄 지경이다. 매년 발전하는 인프콘 존경하고 감사합니다! 이전 인프콘 후기들 바로가기[인프콘 후기] 2023 INFCON[인프콘 후기] Hello INFCON! 2. 세션 메모세션에 대한 간단한 감상과 인상깊게 들은 부분에 대한 메모를 남깁니다.실제 세션 내용은 이후 인프콘에서 공개하는 영상을 확인해 보시길 추천.. 2024. 8. 3.
[Coroutine] 코루틴과 공유 상태 코루틴 스터디를 하며 정리 중인 시리즈 글왜 코루틴을 써야할까?[Coroutine] 코루틴 빌더, 코루틴 컨텍스트[Coroutine] 구조화된 동시성[Coroutine] 코루틴 스코프 함수[Coroutine] 디스패처[Coroutine] 코루틴과 공유상태 코루틴 코루틴의 이름에는 아래와 같은 뜻이 담겨있다.co: 함께, 협력하는routine: 특정한 일을 처리하기 위한 일련의 명령coroutine: 함께 실행되는 루틴. 서로 간에 스레드 사용을 양보하며 함께 실행됨 코루틴은 항상 하나의 스레드 위에서 동작하지는 않는다. 코루틴 디스패처와 스레드풀의 연관 관계는 '[Coroutine] 디스패처' 포스트를 참고하길 바란다. 코루틴은 일시 중단이 일어나면 다른 코루틴에게 스레드를 양보한다는 점을 기억하자.  .. 2024. 7. 31.
[Coroutine] 코루틴 디스패처 코루틴 스터디를 하며 정리 중인 시리즈 글왜 코루틴을 써야할까?[Coroutine] 코루틴 빌더, 코루틴 컨텍스트[Coroutine] 구조화된 동시성[Coroutine] 코루틴 스코프 함수[Coroutine] 디스패처[Coroutine] 코루틴과 공유상태 💥 디스패처 코루틴 컨텍스트에 대해 학습할 때 디스패처에 대해 간단히 학습하고 넘어갔었다. 이 글에서는 디스패처를 좀더 자세히 알아볼 예정이다. 영단어 디스패처는 사람이나 차량 등을 필요한 곳에 보내는 것을 담당하는 사람이라는 뜻이다. 코루틴에서의 디스패처는 코루틴을 스레드로 보내는 역할(어떤 환경에서 실행될지 결정하는 역할)을 한다.  📌 CoroutineDispatcher의 동작CoroutineDispatcher는 아래와 같은 그림처럼 동작한다... 2024. 7. 8.
[Coroutine] 코루틴 스코프 함수 코루틴 스터디를 하며 정리 중인 시리즈 글왜 코루틴을 써야할까?[Coroutine] 코루틴 빌더, 코루틴 컨텍스트[Coroutine] 구조화된 동시성[Coroutine] 코루틴 스코프 함수[Coroutine] 디스패처[Coroutine] 코루틴과 공유상태 🎉 coroutineScope 코루틴 스코프 함수는 중단함수 내에서 스코프가 필요할 때 사용한다. coroutineScope는 코루틴 스코프 함수의 일종이다. 🔸 coroutineScope 로 인해 중단되는 코루틴coroutineScope는 새로운 코루틴을 생성하면 작업이 끝날 때까지 coroutineScope를 호출한 코루틴을 중단시킨다. 아래 예제를 보면 println이 순차적으로 진행되는 것을 볼 수 있다.suspend fun main(): U.. 2024. 6. 29.
[Coroutine] 구조화된 동시성, 코루틴 스코프 코루틴 스터디를 하며 정리 중인 시리즈 글왜 코루틴을 써야할까?[Coroutine] 코루틴 빌더, 코루틴 컨텍스트[Coroutine] 구조화된 동시성[Coroutine] 코루틴 스코프 함수[Coroutine] 디스패처[Coroutine] 코루틴과 공유상태 🎄 구조화된 동시성'왜 코루틴을 써야할까?'에서 구조화된 동시성에 대해 아주 잠깐 설명했었다. 이 포스팅을 통해서 좀 더 자세한 이야기를 다뤄보려고 한다.  구조화된 동시성(Structured Concurrency)이란, 비동기 작업을 구조화함으로써 비동기 프로그래밍을 보다 안정적이고 예측 가능하게 만드는 원칙이다. 코틀린 코루틴은 비동기 작업인 코루틴을 부모-자식 관계로 구조화함으로써 코루틴을 안전하게 관리 및 제어하게 만들어졌다. 구조화된 코루틴의.. 2024. 6. 29.
[Coroutine] 코루틴 빌더, 코루틴 컨텍스트 코루틴 스터디를 하며 정리 중인 시리즈 글왜 코루틴을 써야할까?[Coroutine] 코루틴 빌더, 코루틴 컨텍스트[Coroutine] 구조화된 동시성[Coroutine] 코루틴 스코프 함수[Coroutine] 디스패처[Coroutine] 코루틴과 공유상태 🔅 코루틴 빌더 코틀린 코루틴은 코루틴을 일시 중단시킨다. 이런 방식을 통해 스레드를 블로킹할 때보다 훨씬 가볍게 사용할 수 있다. 그런데 이 코루틴 중단은 중단 함수 내에서만 일어날 수 있다. 그리고 중단함수는 중단함수 내에서만 호출되어야 한다. 중단함수가 최초로 시작되는 지점은 어디일까? 바로 코루틴 빌더다. 🔸 코루틴 빌더중단 함수가 시작되는 지점모든 코루틴 빌더는 자신의 Job을 생성 (Job에 대한 설명은 하단에 있다.)launch, asy.. 2024. 6. 23.
왜 코루틴을 써야할까? 코루틴 스터디를 하며 정리 중인 시리즈 글왜 코루틴을 써야할까?[Coroutine] 코루틴 빌더, 코루틴 컨텍스트[Coroutine] 구조화된 동시성[Coroutine] 코루틴 스코프 함수[Coroutine] 디스패처[Coroutine] 코루틴과 공유상태 😏 스레드의 한계 JVM은 스레드를 기반으로 동작한다. 단일 스레드는 동시 작업을 수행할 수 없기 때문에 하나의 작업이 오래 걸리면 다른 작업의 처리도 지연된다. 이를 극복하기 위해 등장한 것이 멀티 스레드다. 멀티 스레드는 스레드를 여러 개 사용해 작업을 처리하는 것으로, 병렬 처리가 가능해진다. (동시성과 병렬성의 차이는 동시성 (Concurrency) vs 병렬성 (Parallelism) 글을 참고하길 바란다.)   멀티 스레드 이미지를 보면 메.. 2024. 6. 9.
반응형