개발자 99% 커뮤니티에서 수다 떨어요!
오늘 TIL 3줄 요약
모든 일에는 동시성이 있다.
불규칙한 실패는 동시성 문제인 경우가 많으며 작업 흐름 분석으로 개선해라.
작업들에 고유한 추적 아이디를 부여하고 관여하는 액터들에게 전파하여 작업 흐름을 파악하고 조율하자.
TIL (Today I Learned) 날짜
2022. 03. 30
오늘 읽은 범위
6장. 동시성
책에서 기억하고 싶은 내용을 써보세요.
동시성(concurrency)은 둘 이상의 코드 조각이 실행될 때 동시에 실행 중인 것처럼 행동하는 것이다.
병렬성(parallelism)이란 실제로 동시에 실행되는 것이다.
모든 일에는 동시성이 있다.
우리는 동시성을 확보해야 한다. 결과적으로 분석하기 더 쉽고 응답속도도 더 빠르며 더 안정적인 시스템을 만들 수 있을 것이다.
작업 흐름 분석으로 동시성을 개선하라.
활동 다이어그램을 사용하면 동시에 수행할 수 있는데도 아직 동시에 하고 있지 않은 활동들을 찾아내서 병렬성을 극대화할 수 있다.
공유 상태는 틀린 상태다.
인스턴스 둘 이상인 파일, 데이터베이스, 외부 서비스 등 어떤 리소스에 동시에 접근할 수 있다면 잠재적인 동시성 문제를 안고 있는 것이다.
불규칙한 실패는 동시성 문제인 경우가 많다.
리소스를 공유하는 환경에서 동시성은 어렵다. 해결 하겠다고 한다면 고난의 연속일 것이다.
액터(actor)와 프로세스를 사용하면 흥미로운 방식으로 동시성을 구현할 수 있다. 공유 메모리 접근을 동기화하느라 고생할 필요도 없다.
'액터'는 자신만의 비공개 지역 상태(state)를 가진 독립적인 가상 처리 장치(virtual processor)다.
'프로세스'는 본래 더 일반적인 가상 처리기로, 보통 운영 체제가 동시성을 지원하기 위하여 구현한다.
공유 상태 없는 동시성을 위하여 액터를 사용하라.
최초의 칠판 시스템 중 하나는 데이비드 겔런터(David Gelernter)가 만든 린다(Linda)였다. 린다는 수집한 사실을 유형별 튜플로 저장했다. 애플리케이션들은 린다에 새로운 튜플을 쓰거나 저장된 튜플을 패턴 매칭 같은 방법으로 조회 할 수 있었다.
분산된 칠판 형태의 시스템을 이용하면, 객체의 데이터뿐만 아니라 자바 객체 전체를 칠판에 저장할 수 있고, 템플릿이나 와일드카드를 통한 필드의 부분 일치 검색 또는 유형별 검색으로 다시 불러올 수 있다.
칠판으로 작업 흐름을 조율하라.
특정한 비즈니스 작업 처리를 시작할 때 고유한 '추적 아이디 (trace id)'를 만들어 붙이고, 해당 작업에 관여하는 모든 액터로 아이디를 전파하여 로그 파일을 통해 일어난 일을 재구성해 볼 수 있을 것이다.
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
화,수 퇴근 후 자기전 몇시간 내서 읽었는데 실제 업무에 어떻게 적용 가능할지는, 동시성/공유상태/액터/프로세스 등 추가 공부가 필요할 것 같습니다.
주말에 미리 뒷편까지 읽으면서 정리하고 소스와 연습 문제도 더 관심을 가져야 겠습니다.
현재 작업중인 소스에도 서로 관여된 데이터들이 많아서 불필요한 시간을 낭비하고 그만큼 문제도 많이 발생하고 있는데, 어떻게 처리해야 할지 더 고민해봐야 겠습니다.
궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.
오늘 읽은 다른사람의 TIL
flynnpark님의 TIL (https://nomadcoders.co/community/thread/4101)