개발자 99% 커뮤니티에서 수다 떨어요!
동시성은 기회이자 위기이다.
공유 상태는 무척 조심해서 사용해야 한다.
액터나 메시지 시스템을 사용하여 공유 상태를 배제할 수 있다.
2022.03.31(목)
6장 동시성
Topic 33 시간적 결합 깨트리기
Topic 34 공유 상태는 틀린 상태
Topic 35 액터와 프로세스
Topic 36 칠판
우리는 동시성을 확보해야 한다. 시간이나 순서에 의존하는 시간적 결합 을 끊는 방법을 생각해 내야 한다.그렇게 함으로써 유연성도 얻을 수 있고, 작업 흐름 분석과 아키텍처, 설계, 배포와 같은 개발의 여러 측면에서 시간과 관련된 의존성도 함께 줄일 수 있다. 결과적으로 분석하기 더 쉽고 응답속도도 더 빠르며 더 안정적인 시스템을 만들 수 있을 것이다.
시간 결합도 시스템 결합 만큼 파훼하여야할 대상이다. 일의 선후가 분명 있을 수는 있겠지만 동시 수행이 가능한 독립적인 작업들을 잘 식별하고 발라내어 시간 결합을 최대한 제거해야 할 것이다.
오늘날 무어의 법칙이 한계를 보이고 있는 상황에서 동시성은 개발자의 첨단 무기이자 아픈 손가락이다. 동시성을 잘 활용하면 하고자 하는 일을 효율적으로 처리할 수 있고 사용자에게는 즉각적인 응답성을 제공할 수 있다. 그러나 얻는 것이 있으면 그에 따른 위험 부담도 따라오기 마련. 동시성을 다루는 일은 날카로운 단도로 저글링을 하는 것 만큼 어렵고 위험한 작업이다.
병렬 처리에서 문제가 발생하는 부분은 보통 공유 상태를 다루는 부분이다. 공유 상태를 다루다 보면 동시성 문제가 발생하거나 경쟁 상황이 되기가 십상이다.
따라서 안정적인 병렬 처리를 위해서는 가급적 공유 상태를 갖지 않도록 시스템을 설계하는 것이 바람직하다. 시스템을 오직 액터와 액터 간에 주고 받은 메시지의 흐름으로 보는 액터 모델과 카프카 같은 메시징 계층을 도입하는 것이 좋은 해결책이 될 수 있을 것이다.
액터 모델에 대해서는 들어서 알고는 있었지만 사용해보지는 않았다. Akka 같은 액터 프레임워크를 이용하여 간단한 파일럿을 구성해보면 좋을 것 같다.
yunimok 님의 TIL: https://nomadcoders.co/community/thread/4095
Tip 56 작업 흐름 분석으로 동시성을 개선하라.
Tip 57 공유 상태는 틀린 상태다.
Tip 58 불규칙한 실패는 동시성 문제인 경우가 많다.
Tip 59 공유 상태 없는 동시성을 위하여 액터를 사용하라.
Tip 60 칠판으로 작업 흐름을 조율하라.