[실용주의 프로그래머] 6장. 동시성

MEUN·2022년 3월 29일
0
post-thumbnail

2 주차

화, 수 | Assignment #10

  • 📚 6장. 동시성
  • ✔️ TIL

6장. 동시성


📘 책에서 기억하고 싶은 내용

  • 동시성 : 둘 이상의 코드 조각이 실행될 때 동시에 실행중인 것처럼 행동하는 것
    • 실행 중에 코드의 다른 부분으로 실행을 전환할 수 있는 환경에서 코드를 구동해야 함
  • 병렬성 : 실제로 동시에 실행되는 것
    • 두 가지 일을 동시에 할 수 있는 하드웨어가 필요함
  • 시간적 결합 깨트리기 (p.243)
    • 애플리케이션의 작업 흐름을 모델화하고 분석하는 작업이 필요함
    • 활동 다이어그램 사용 시 동시에 수행할 수 있는데도 아직 동시에 하고 있지 않은 활동들을 찾아내서 병렬성 극대화 가능
    • 비교적 독립적인 부분 작업들은 병렬로 처리하여 결과를 합치면 효율성을 높일 수 있음
  • 공유 상태는 틀린 상태 (p.249)
    • 코드에서 둘 이상이 파일, DB, 외부 서비스 등 어떤 리소스에 동시에 접근할 수 있다면 잠재적인 문제를 안고 있는 것
    • 불규칙한 실패는 동시성 문제인 경우가 많다.
  • 액터와 프로세스 (p.258)
    • 액터 모델에서는 공유된 상태가 없기 때문에 동시성을 다루는 코드를 쓸 필요가 없다.
      또한, 액터가 수신하는 메시지에 따라 알아서 실행되기 떄문에 명시적으로 처음부터 끝까지 무엇을 하라는 코드도 쓸 필요가 없다.
    • 다른 대부분의 언어에도 액터 구현이 있으니, 동시에 실행되는 작업을 구현할 떄 액터를 사용하라.
  • 칠판 (p.266)
    • 칠판 : 형사가 수사 시 칠판을 이용하는 것과 같이 일종의 자유방임주의적 동시성을 의미
    • 카프카나 NATS 같은 메시징 시스템은 칠판으로도, 여러 액터를 실행하는 플랫폼으로도 사용할 수 있다.
      • 이벤트 로그의 형태로 영속성을 제공하고, 패턴 매칭 형태로 메시지를 가져오는 것도 지원함
    • 아키텍처에서 MSA, 액터, 칠판 등을 사용하면 애플리케이션에서 생길 수 있는 모든 종류의 동시성 문제를 예방할 수 있지만 비용이 수반된다. 이때는 메시지 형식 및 API를 모아두는 중앙 저장소를 운영하면 도움이 될 것이다.
      • 맞춰야 하는 구성 요소 수가 더 많기 때문에 배포 및 관리가 까다롭지만 잘게 쪼개진 시스템 덕에 개별 액터만 교체하여 업데이트가 가능하게 한다.
    • 특정한 비즈니스 작업 처리를 시작할 때 고유한 추적 아이디를 만들어 붙이고, 추후 해당 작업에 관여하는 모든 액터로 아이디를 전파하면 로그를 분석하여 일어난 일을 재구성해볼 수 있다.

🤔 소감 및 생각

  • 부끄럽지만 아직 메시징 시스템을 제대로 사용해본 적이 없는데, 추후 따로 공부해서 동시성을 고려하는 시스템을 잘 개발할 수 있도록 해야겠다고 생각했다.
  • 공부는 하면 할수록 내가 얼마나 부족한 사람인지 증명하는 것만 같다. 😢

🔍 새롭게 또는 다시 알게 된 내용

  • 파이버 : 스레드보다 더 가벼운 실행 흐름을 만드는 도구

0개의 댓글