패스잇
CS 기초 · 심화

고도로 동시성(concurrent)이 요구되는 시스템을 설계할 때, 전통적인 디자인 패턴만으로는 충분하지 않거나 오히려 복잡성을 증가시킬 수 있습니다. 이러한 환경에서 Producer-Consumer, Reactor, Actor 모델과 같은 동시성 패턴(Concurrency Patterns)이 어떻게 스레드 안전성, 자원 관리, 그리고 성능 최적화를 달성하는 데 기여하는지 설명하고, 이들 패턴을 적용할 때 주의해야 할 점과 잠재적인 문제점(예: 데드락, 라이브락)에 대해 논의해주세요.

힌트 · 동시성 패턴은 공유 자원 접근 제어, 작업 분배, 비동기 통신 등을 통해 스레드 안전성과 성능을 높입니다. 데드락, 라이브락, 경합 조건 등을 피하기 위한 적절한 동기화 메커니즘과 설계가 중요합니다.

스레드 안전성자원 경쟁데드락라이브락컨텍스트 스위칭

모범답안

고성능 동시성 시스템 설계 시, 전통적인 패턴은 스레드 간 복잡한 상호작용을 관리하기 어렵습니다. Producer-Consumer 패턴은 생산자와 소비자 간의 데이터 흐름을 큐로 분리하여 스레드 안전성과 자원 관리를 효율화합니다. Reactor 패턴은 단일 스레드 또는 소수 스레드로 다수의 I/O 이벤트를 비동기적으로 처리하여 컨텍스트 스위칭 오버헤드를 줄이고 성능을 높입니다. Actor 모델은 독립적인 Actor들이 메시지 전달로만 통신하며 상태를 캡슐화하여 스레드 안전성을 확보하고 확장성을 용이하게 합니다.

이러한 패턴 적용 시, 데드락이나 라이브락 같은 문제는 주의해야 합니다. 예를 들어, Producer-Consumer에서 큐가 가득 찼을 때 생산자가 무한정 대기하거나, Actor 모델에서 메시지 순환으로 인해 Actor들이 응답하지 않는 상황이 발생할 수 있습니다. 이를 방지하기 위해 적절한 타임아웃 메커니즘, 메시지 우선순위 지정, 그리고 명확한 통신 프로토콜 설계가 필수적입니다. 또한, 과도한 동기화는 성능 저하를 야기할 수 있으므로, 공유 자원 접근을 최소화하고 비동기 통신을 적극 활용하는 것이 중요합니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 디자인 패턴 면접 질문

← 디자인 패턴 면접 질문 전체 보기