파이프라인 단계
채널 단계 연결하기
파이프라인 단계은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
파이프라인이란 무엇인가
파이프라인은 채널로 연결된 일련의 stage입니다. 각 stage는 값을 받고 작업을 수행한 후 결과를 하류로 보냅니다. 데이터는 조립 라인처럼 흐릅니다.
- 각 stage는 하나의 고루틴입니다
- stage는 채널을 통해서만 통신합니다
- 조합할 수 있어 이해하기 쉽습니다
stage 시그니처 관례
관례상 각 stage는 하나 이상의 수신 전용 입력 채널을 받고 수신 전용 출력 채널을 반환합니다. 따라서 stage를 연결할 수 있습니다.
func stage(in <-chan int) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for v := range in {
out <- v
}
}()
return out
}소스 stage
첫 번째 stage는 데이터를 생성합니다. 보통 슬라이스나 가변 인수를 받아 채널로 흘려보냅니다.
func numbers(vals ...int) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for _, v := range vals {
out <- v
}
}()
return out
}변환 stage
이 stage는 모든 값에 10을 곱합니다. in에서 읽고 변환된 값을 out에 씁니다.
func tenfold(in <-chan int) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for v := range in {
out <- v * 10
}
}()
return out
}필터 stage
필터는 조건을 충족하는 값만 전달합니다. 여기서는 짝수를 남기고 나머지는 버립니다.
func evens(in <-chan int) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for v := range in {
if v%2 == 0 {
out <- v
}
}
}()
return out
}stage 연결하기
한 출력값을 다음 입력으로 전달하여 stage를 조합합니다. 이렇게 연결하면 코드를 거의 문장처럼 읽을 수 있습니다.
pipe := tenfold(evens(numbers(1, 2, 3, 4)))
for v := range pipe {
fmt.Println(v)
}defer close(out)
defer close(out)을 사용하면 나중에 조기 반환을 추가하더라도 stage 고루틴이 반환될 때 출력 채널이 닫힙니다. 이를 통해 스트림 종료 신호가 하류로 전달됩니다.
완전한 파이프라인
소스, 필터, 변환 순서로 실행합니다. 실행하여 짝수 입력의 tenfold만 확인해 보세요.
package main
import "fmt"
func numbers(vals ...int) <-chan int {
out := make(chan int)
go func() { defer close(out); for _, v := range vals { out <- v } }()
return out
}
func evens(in <-chan int) <-chan int {
out := make(chan int)
go func() { defer close(out); for v := range in { if v%2 == 0 { out <- v } } }()
return out
}
func tenfold(in <-chan int) <-chan int {
out := make(chan int)
go func() { defer close(out); for v := range in { out <- v * 10 } }()
return out
}
func main() {
for v := range tenfold(evens(numbers(1, 2, 3, 4, 5, 6))) {
fmt.Println(v)
}
}배치가 아닌 스트리밍
값은 생성되는 대로 한 번에 하나씩 파이프라인을 통과합니다. 소스가 마지막 값을 내보내기 전에 변환 stage가 첫 번째 항목의 작업을 시작할 수 있습니다. 따라서 메모리 사용량과 지연 시간이 작게 유지됩니다.
파이프라인은 지연 실행됩니다
어떤 것이 출력에서 읽기 전까지 stage는 작업을 수행하지 않습니다. 소비자가 범위 순회를 중단하면 상류 stage는 값을 보내는 부분에서 차단됩니다. 이러한 자연스러운 역압은 불필요한 계산을 막습니다.
동시성 추가하기
느린 stage의 속도를 높이려면 같은 입력을 읽는 여러 인스턴스로 분산하고 출력을 집계합니다. stage 시그니처는 그대로 유지되며 연결 방식만 바뀝니다.
빠른 확인
파이프라인에 대한 지식을 확인해 보세요.
복습
파이프라인 stage를 배웠습니다:
- 각 stage: 수신 전용 입력을 받고 수신 전용 출력을 반환합니다
defer close(out)은 스트림 종료를 전달합니다- 호출을 중첩하여 stage를 연결합니다
- 파이프라인은 역압을 사용하여 지연 실행 방식으로 스트리밍합니다
AI 튜터와 함께 Go을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 51
- 레슨
- 203
자주 묻는 질문
“파이프라인 단계” 강의는 무료인가요?
네 — “파이프라인 단계” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“파이프라인 단계”에서 뭘 배우나요?
채널 단계 연결하기 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Go Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“파이프라인 단계” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.