스킬 go-concurrency-patterns
📦

go-concurrency-patterns

안전

Go 동시성 패턴 마스터하기

또한 다음에서 사용할 수 있습니다: wshobson

확신을 가지고 동시성 Go 애플리케이션을 구축하세요. race condition 과 리소스 누수를 방지하기 위한 goroutine, channel, worker pool, 우아한 셧다운을 위한 프로덕션 준비 패턴을 배우세요.

지원: Claude Codex Code(CC)
🥉 72 브론즈
1

스킬 ZIP 다운로드

2

Claude에서 업로드

설정 → 기능 → 스킬 → 스킬 업로드로 이동

3

토글을 켜고 사용 시작

테스트해 보기

"go-concurrency-patterns" 사용 중입니다. channel 에서 작업을 처리하는 3 개의 worker 를 가진 worker pool 생성

예상 결과:

sync.WaitGroup 을 사용한 적절한 동기화와 함께 results channel 을 통해 결과를 수집하면서 작업을 동시에 처리하는 3 개의 worker 를 가진 worker pool 구현입니다.

"go-concurrency-patterns" 사용 중입니다. 동시 HTTP 요청을 위해 errgroup 사용 방법 보여주기

예상 결과:

이 예제는 golang.org/x/sync/errgroup 을 사용하여 여러 URL 을 동시에 가져오는 방법을 보여줍니다. 첫 번째 오류가 context propagation 을 통해 대기 중인 모든 요청을 취소합니다.

"go-concurrency-patterns" 사용 중입니다. 동시 작업을 제한하기 위한 semaphore 구현

예상 결과:

가중치 semaphore 를 위한 golang.org/x/sync/semaphore.Weighted 와 간단한 속도 제한을 위한 channel 기반 struct{} semaphore 의 두 가지 semaphore 접근 방식을 제공합니다.

보안 감사

안전
v1 • 2/25/2026

All 44 static analysis findings are false positives from markdown-enclosed Go code examples. The skill contains legitimate educational content about Go concurrency patterns with no executable code or security risks.

2
스캔된 파일
691
분석된 줄 수
0
발견 사항
1
총 감사 수
보안 문제를 찾지 못했습니다
감사자: claude

품질 점수

38
아키텍처
100
유지보수성
87
콘텐츠
32
커뮤니티
100
보안
100
사양 준수

만들 수 있는 것

동시성 마이크로서비스 구축

worker pool 을 사용하여 리소스를 효율적으로 관리하면서 여러 요청을 동시에 처리하는 확장 가능한 Go 서비스 생성

데이터 처리 파이프라인 구현

적절한 오류 처리와 cancellation 을 갖춘 fan-out/fan-in 파이프라인을 설계하여 대용량 데이터셋을 병렬로 처리

race condition 디버깅

적절한 동기화 패턴과 race detection 도구를 사용하여 기존 Go 코드의 동시성 버그 식별 및 수정

이 프롬프트를 사용해 보세요

기본 worker pool 생성
5 개의 동시 worker 로 100 개의 작업을 처리하는 Go 의 worker pool 생성 방법 보여주기
우아한 셧다운 구현
SIGTERM 신호를 처리하고 in-flight 요청이 완료될 때까지 대기하는 우아한 셧다운을 갖춘 Go 서버 작성
fan-out 파이프라인 구축
스테이지당 5 개의 worker 로 3 개의 스테이지를 통해 항목을 처리하는 Go 의 fan-out/fan-in 파이프라인 생성
goroutine 누수 수정
이 Go 코드를 검토하여 잠재적인 goroutine 누수를 식별한 다음 context cancellation 을 사용하여 수정하는 방법 보여주기

모범 사례

  • 동시 작업에서 cancellation 과 deadline 을 위해 항상 context.Context 사용
  • panic 을 방지하기 위해 sender 측에서만 channel 닫기
  • goroutine 간 통신을 위해 mutex 보다 channel 선호
  • sync.WaitGroup 또는 errgroup 을 사용하여 goroutine 완료 대기

피하기

  • channel 이나 WaitGroup 과 같은 적절한 primitive 대신 동기를 위해 time.Sleep 사용
  • receiver 측에서 channel 을 닫아 panic 발생
  • ctx.Done() 확인을 잊어 goroutine 누수 발생
  • 적절한 동기화 없이 goroutine 간 메모리 공유

자주 묻는 질문

Go 에서 동시성 (concurrent) 프로그래밍과 병렬성 (parallel) 프로그래밍의 차이점은 무엇인가요?
동시성 (concurrency) 은 여러 작업을 동시에 처리할 수 있도록 프로그램을 구조화하는 것이고, 병렬성 (parallelism) 은 여러 CPU 코어에서 동시에 여러 작업을 실행하는 것입니다. Go 의 goroutine 은 동시성을 가능하게 하며 Go 런타임이 병렬로 실행할 수 있습니다.
channel 과 mutex 중 언제 사용해야 하나요?
goroutine 이 통신하거나 조정해야 할 때는 channel 을 사용하세요 (통신을 통한 메모리 공유). 동시 액세스로부터 공유 상태를 보호해야 할 때는 mutex 를 사용하세요 (메모리 공유를 통한 메모리 공유). channel 이 일반적으로 Go 에서 더 관용적입니다.
goroutine 누수를 어떻게 방지하나요?
context cancellation 을 사용하고, 루프에서 ctx.Done() 을 확인하며, channel 이 결국 닫히도록 하고, 자동으로 정리를 처리하는 errgroup 과 같은 패턴을 사용하여 goroutine 에 대한 종료 경로를 항상 제공하세요.
sync.WaitGroup 의 목적은 무엇인가요?
sync.WaitGroup 을 사용하면 goroutine 모드가 완료될 때까지 대기할 수 있습니다. Add() 로 카운터에 추가하고, goroutine 이 완료되면 Done() 으로 감소시키며, Wait() 으로 카운터가 0 이 될 때까지 차단합니다.
Go 코드에서 race condition 을 어떻게 감지하나요?
'go test -race ./...' 또는 'go run -race main.go' 를 사용하여 race detector 를 활성화하여 테스트나 바이너리를 실행하세요. race detector 는 메모리 액세스를 모니터링하고 동기화 없이 공유 메모리에 대한 동시 읽기/쓰기를 보고합니다.
buffered channel 과 unbuffered channel 의 차이점은 무엇인가요?
unbuffered channel(make(chan T)) 은 sender 와 receiver 가 동시에 준비되어야 하며 동기화를 제공합니다. buffered channel(make(chan T, n)) 은 receiver 없이 최대 n 개의 값을 보유할 수 있어 buffer 가 가득 찰 때까지 sender 가 진행할 수 있습니다.

개발자 세부 정보

파일 구조