0Pricing
Go Academy · 강의

대안: HashiCorp go-plugin

플랫폼 간 지원을 위한 RPC 기반 플러그인

대안: HashiCorp go-plugin은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

왜 go-plugin인가요?

네이티브 Go 플러그인 패키지는 Linux/macOS에서만 사용할 수 있고, 의존성 버전이 동일해야 하며, 플러그인을 언로드할 수 없습니다. HashiCorp go-plugin은 플러그인을 별도의 프로세스로 실행하고 RPC(gRPC 또는 net/rpc)를 통해 통신하여 이러한 문제를 해결합니다.

아키텍처

go-plugin은 플러그인 바이너리를 하위 프로세스로 실행합니다. 호스트가 이를 시작하고 gRPC/net/rpc 연결을 설정한 다음 생성된 클라이언트를 통해 플러그인을 호출합니다. 호스트가 종료되면 플러그인 프로세스가 종료됩니다.

인터페이스 정의

공유 패키지에 인터페이스를 정의한 다음 gRPC 또는 net/rpc 브리지를 제공합니다.

// shared/interface.go
type Greeter interface {
    Greet(name string) (string, error)
}

플러그인 측

플러그인이 인터페이스를 구현하고 go-plugin의 제공 메커니즘에 등록합니다:

func main() {
    plugin.Serve(&plugin.ServeConfig{
        HandshakeConfig: Handshake,
        Plugins: map[string]plugin.Plugin{
            "greeter": &GreeterPlugin{Impl: &Greeter{}},
        },
        GRPCServer: plugin.DefaultGRPCServer,
    })
}

호스트 측

호스트가 플러그인 하위 프로세스를 시작하고 클라이언트를 통해 인터페이스를 가져옵니다:

client := plugin.NewClient(&plugin.ClientConfig{
    HandshakeConfig: Handshake,
    Plugins:         PluginMap,
    Cmd:             exec.Command("./greeter-plugin"),
    AllowedProtocols: []plugin.Protocol{plugin.ProtocolGRPC},
})
rpcClient, _ := client.Client()
raw, _ := rpcClient.Dispense("greeter")
greeter := raw.(Greeter)

핸드셰이크 구성

공유 HandshakeConfig(매직 쿠키 키와 값)는 플러그인이 아닌 바이너리가 실수로 플러그인으로 실행되는 것을 방지합니다:

var Handshake = plugin.HandshakeConfig{
    ProtocolVersion:  1,
    MagicCookieKey:   "GREETER_PLUGIN",
    MagicCookieValue: "hello",
}

교차 플랫폼

플러그인은 TCP 또는 Unix 소켓을 통해 통신하는 별도의 프로세스이므로 어떤 플랫폼용으로든 컴파일할 수 있습니다. 호스트와 플러그인의 Go 버전이 동일할 필요도 없습니다.

충돌 격리

플러그인이 충돌하면 호스트는 다음 RPC 호출에서 오류를 받습니다. 호스트 자체는 충돌하지 않고 플러그인 하위 프로세스를 다시 시작한 후 재연결할 수 있습니다.

성능

go-plugin의 RPC는 프로세스 내부 함수 호출보다 지연 시간이 큽니다(나노초가 아닌 마이크로초). 호출 빈도가 낮고 작업량이 큰 플러그인 호출에는 적합하지만, 고빈도 반복문에는 적합하지 않습니다.

버전 관리

go-plugin은 프로토콜 버전 관리를 지원하므로 호스트가 여러 버전의 플러그인 인터페이스와 동시에 협상할 수 있어 플러그인을 점진적으로 업그레이드할 수 있습니다.

실제 사용 사례

go-plugin은 커뮤니티가 개발한 플러그인으로 구성된 대규모 생태계인 HashiCorp Terraform 제공자, Vault 비밀 엔진, Packer 빌더를 구동합니다.

선택 기준

교차 플랫폼 지원이 필요하거나, 충돌 격리가 중요하거나, 의존성 버전을 맞출 수 없거나, 타사에서 플러그인을 작성하는 경우에는 네이티브 플러그인보다 go-plugin을 선택하십시오.

빠른 확인

HashiCorp go-plugin은 어떻게 충돌을 격리하나요?

복습: HashiCorp go-plugin

핵심 사항:

  • 플러그인은 하위 프로세스로 실행되고 gRPC 또는 net/rpc를 통해 통신합니다
  • 교차 플랫폼을 지원하고 충돌이 격리되며 버전 차이를 허용합니다
  • HandshakeConfig는 바이너리가 실수로 실행되는 것을 방지합니다
  • RPC로 인한 성능 오버헤드가 있으므로 작업량이 크고 호출 빈도가 낮은 경우에 사용합니다

자주 묻는 질문

“대안: HashiCorp go-plugin” 강의는 무료인가요?

네 — “대안: HashiCorp go-plugin” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“대안: HashiCorp go-plugin”에서 뭘 배우나요?

플랫폼 간 지원을 위한 RPC 기반 플러그인 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Go Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“대안: HashiCorp go-plugin” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Go plugin 패키지 기초
  2. 플러그인 인터페이스 설계
  3. 동적 로딩과 심볼
  4. 대안: HashiCorp go-plugin
← Go Academy(으)로 돌아가기