Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
6장. 동시성
#pragmatic
2년 전
562
2

오늘 TIL 3줄 요약

  • 작업 흐름 분석으로 동시성을 개선하라.

  • 불규칙한 실패는 동시성 문제인 경우가 많다.

  • 공유 상태 없는 동시성을 위하여 액터를 사용하라.

TIL (Today I Learned) 날짜

2022. 03.29

오늘 읽은 범위

6장. 동시성

책에서 기억하고 싶은 내용을 써보세요.

  • 애플리케이션이 실제 세상을 다루기 원한다면 동시성은 필수다.

  • 동시성이나 병렬성을 지원하는 코드를 쓰는 건 어렵다. 순차적으로 사용할 때는 안전하지만, 동시에 두 가지 일이 일어나면 중복된 요청으로 꼬일 수 있다.

  • 동시성을 확보해야 한다. 시간이나 순서에 의존하는 시간적 결합을 끊는 방법을 생각해 내야 한다.

  • 작업 흐름 분석으로 동시성을 개선하라.

  • 활동 다이어그램: 동시에 수행할 수 있는데도 아직 동시에 하고 있지 않은 활동들을 찾아내서 병렬성을 극대화할 수 있다.

  • 우리 코드가 아닌 다른 곳에서 시간일 걸리는 활동(데이터베이스 조회, 외부 서비스 접근, 사용자 입력 기다림 등)을 할 때를 동시 작업의 기회로 삼아 생산성을 높여야 한다.

  • 공유 상태의 위험을 없애려면? 세마포어 사용(lock/unlock, claim/release)

  • 불규칙한 실패는 동시성 문제인 경우가 많다.

  • 액터: 자신만의 비공개 지역 상태(state)를 가진 독립적인 가상 처리 장치

  • 액터들은 아무것도 공유하지 않으면서 비동기적으로 동시에 실행된다.

  • 공유 상태 없는 동시성을 위하여 액터를 사용하라.

  • 액터 모델에서는 동시성을 다루는 코드를 쓸 필요가 없다. 공유된 상태가 없기 때문이다.

  • 칠판으로 작업 흐름을 조율하라.

  • 아키텍처에서 액터, 칠판, 마이크로서비스를 활용하면 모든 종류의 동시성 문제를 예방할 수 있다. 단점은 비용이 필요하고, 많은 동작이 간접적으로 일어나므로 분석이 힘들다는 점이다.

  • 이를 해결하기 위해, 메시지 형식 및 API를 모아두는 '중앙 저장소'를 운영한다. 그리고 메시지나 정보를 추적할 수 있도록 특정 비즈니스 작업 처리를 시작할 때 고유한 '추적 아이디'를 만들어서 붙이도록 한다.

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

  • 첩첩산중으로 들어가는 느낌이다. 갈수록 읽는 속도가 떨어진다. 이상하게도 어렵지만 이해가 안 되는 건 아니고, 명확하게 이해되는 것도 아니다. 모호한데 알듯 말듯 아리송하다. 아무래도 이렇게까지 생각해야 하는 복잡한 코딩을 해 본 경험이 없어서 그런 것 같다.

  • 코드의 생산성을 높여서 사용자가 쾌적하게 사용할 수 있는 애플리케이션을 위해 동시성을 잘 실현시켜야 할 것 같다. 동시성을 구현하면서 앞으로 머리를 쥐어 뜯을 그 날을 기대한다.

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

  • 메시지 시스템이란?

  • 얼랭, 엘릭사 언어가 궁금하다.

  • 액터에 대해 더 알아봐야 겠다.

2 comments