ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION591 / 1500
언어·런타임난이도 중하5분 답변 목표 · 보강본

Go에서 여러 API를 errgroup으로 호출합니다. 첫 오류가 나면 남은 작업과 큐·동시성은 어떻게 되나요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

errgroup은 고루틴의 완료·오류를 모으고 WithContext를 쓰면 오류에 따른 취소 신호를 연결할 수 있습니다. 하지만 함수가 context를 따르지 않으면 실제 작업은 계속되며 무한 큐나 외부 효과가 자동 정리되지는 않습니다.

동작 원리와 전제

SetLimit 등으로 활성 고루틴 수를 제한할 수 있지만 호출을 기다리는 생산자와 입력 목록 메모리는 별도입니다. 필수 결과와 선택 결과를 나누지 않고 모든 오류를 같은 실패로 처리하면 불필요한 취소가 생길 수 있습니다.

선택과 실패 처리

루프의 입력 캡처는 사용하는 Go 버전·선언 방식에 맞게 확인하고 결과 저장은 인덱스 분리나 동기화로 보호합니다. group이 끝난 뒤 파생 context의 수명을 후속 작업에 그대로 의존하지 않도록 계약을 확인합니다.

구체적인 사례와 검증

하위 API 세 개 중 추천 결과만 선택적이라면 추천 오류를 내부 결과로 바꾸고 필수 계정·주문 조회의 실패만 그룹 실패로 연결할 수 있습니다. 다만 timeout을 무조건 빈 값으로 숨기면 사용자에게 정상 추천 없음과 시스템 장애를 구분하지 못하게 할 수 있어 상태를 명시합니다. 제한된 group에 작업을 넣는 호출 자체가 대기할 수 있으므로 생산자 취소와 전체 입력 크기도 관리합니다. 결과 배열의 서로 다른 인덱스에 쓰는 설계라도 slice 확장을 동시에 하면 헤더·저장소 경합이 생길 수 있어 사전 할당과 소유 범위를 확인합니다. 라이브러리 선택과 실제 공유 상태의 안전성을 따로 검증합니다.

하위 timeout·취소 무시·생산자 중단·부분 결과를 시험합니다. 제한된 동시성 안에서 전체 deadline과 정리 시간을 남깁니다. errgroup이라는 라이브러리 사용 여부보다 부모와 자식의 수명·오류 정책을 명확히 하는 것이 핵심입니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • 핵심 구분: errgroup은 고루틴의 완료·오류를 모으고 WithContext를 쓰면 오류에 따른 취소 신호를 연결할 수 있습니다.
  • 선택 조건: 루프의 입력 캡처는 사용하는 Go 버전·선언 방식에 맞게 확인하고 결과 저장은 인덱스 분리나 동기화로 보호합니다.
  • 검증 기준: 하위 timeout·취소 무시·생산자 중단·부분 결과를 시험합니다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • errgroup을 쓰면 큐 크기·실제 취소·모든 공유 결과가 자동 보호된다고 한다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

  • 여러 하위 작업 중 하나가 실패하면 필수·선택 결과와 남은 자원 수명을 어떻게 나누나요?
  • 수락한 요청이 계속 쌓이면 실행 수와 대기 수를 어떤 별도 상한으로 제한하나요?
  • 작업과 취소가 동시에 준비되면 선택과 실제 실행권은 어떻게 결정하나요?

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

원리부터 공부하고 싶다면

답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.

← 전체 질문 보기