Skip to main content

박수완

1. 📌 핵심 개념 정리

✅ 요약하기

이 장에서는 여러 스레드를 동시에 돌리는 이유를 논한다. 여러 스레드를 동시에 돌리는 어려움도 논한다. 이런 어려움에 대처하고 깨끗한 코드를 작성하는 방법도 몇 가지 제안한다.

  1. 동시성이 필요한 이유?

    동시성은 결합을 없애는 전략이다. 즉, 무엇과 언제를 분리하는 전략이다. 스레드가 하나인 프로그램은 무엇과 언제가 서로 밀접하다. 그래서 호출 스택을 살펴보면 프로그램 상태가 곧바로 드러난다. 컨테이너는 동시성을 부분적으로 관리한다. 웹 요청이 들어올 때마다 웹 서버는 비동기식으로 서블릿을 실행한다. 각 서블릿 스레드는 다른 서블릿 스레드와 무관하게 자신만의 세상에서 돌아간다. 이번에는 정보를 대량으로 분석하는 시스템을 살펴보자 시스템은 모든 정보를 처리한 후에야 최종적인 답을 낸다. 정보를 나눠 여러 컴퓨터에서 돌리면 어떨까? 대량의 정보를 병렬로 처리한다면?


    다음은 동시성과 관련한 일반적인 미신과 오해다.

  • 미신과 오해

    • 동시성은 항상 성능을 높여준다

      대기 시간이 아주 길어 여러 스레드가 프로세서를 공유할 수 있거나 여러 프로세서가 동시에 처리할 독립적인 계산이 충분히 많은 경우에만 성능이 높아진다.

    • 동시성을 구현해도 설계는 변하지 않는다

      단일 스레드 시스템과 다중 스레드 시스템은 설계가 판이하게 다르다. 일반적으로 무엇과 언제를 분리하면 시스템 구조가 크게 달라진다.

      • 웹 또는 EJB 컨테이너를 사용하면 동시성을 이해할 필요가 없다.

        실제로는 컨테이너가 어떻게 동작하는지 어떻게 동시 수정, 데드락 등과 같은 문제를 피할 수 있는지를 알아야 한다.


        다음은 동시성과 관련한 타당한 생각이다.

        • 동시성은 다소 부하를 유발한다

          성능 측면에서 부하가 걸리며 코드도 더 짜야한다.

        • 동시성은 복잡하다.

        • 일반적으로 동시성 버그는 재현하기 어렵다.

        • 동시성을 구현하려면 흔히 근본적인 설계 전략을 재고해야 한다.


  1. 난관
    .
    .
    .

  1. 한 줄 요약 내용
    .
    .
    .

2. 🤔 이해가 어려운 부분

🔍 질문하기

책을 읽으며 이해하기 어려웠던 개념이나 명확하지 않았던 내용을 정리합니다.

  1. 개념 또는 원칙의 이름
    • 어려웠던 부분
      해당 개념이 헷갈리거나 명확하지 않았던 점을 구체적으로 설명합니다.
    • 궁금한 점
      해당 개념이 어떤 원리로 동작하는지, 실무에서 어떻게 활용되는지 등을 질문 형태로 정리합니다.

  1. 개념 또는 원칙의 이름
    • 어려웠던 부분
      .
    • 궁금한 점
      .

  1. 개념 또는 원칙의 이름
    • 어려웠던 부분
      .
    • 궁금한 점
      .

3. 📚 참고 사항

📢 논의하기

관련된 자료가 있다면 공유하고, 더 깊이 논의하고 싶은 아이디어나 의견을 정리합니다.

  1. 관련 자료 공유
    • 추가 자료
      관련 블로그 글이나 공식 문서 링크를 제공합니다.

  1. 논의하고 싶은 주제
    • 주제
      논의하고 싶은 내용을 간략히 정리합니다.
    • 설명
      논의하고 싶은 이유를 작성합니다.