ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • golang: 컨텍스트(Context)란?
    Back-End/Golang 2024. 3. 30. 12:13
    반응형

    Go 언어에서 context 패키지는 고루틴 간에 데이터, 취소 신호, 타임아웃 등을 전파하는 데 사용됩니다. context.Context 인터페이스는 요청 처리에 필요한 모든 정보를 담고, 고루틴의 실행 제어를 가능하게 합니다. 이는 주로 API 호출, 데이터베이스 요청 등의 작업을 취소하거나, 작업의 마감 시간(deadlines)을 설정하고, 요청 스코프의 값(value)을 전달하는 데 유용합니다.

    Context의 주요 사용 사례:

    • 요청 취소: 사용자 요청 취소나 타임아웃 시, 모든 관련된 작업을 중단시킵니다.
    • 타임아웃 설정: 특정 작업에 대한 최대 실행 시간을 지정합니다.
    • 값 전달: 요청 스코프에 있는 데이터를 여러 고루틴 사이에서 전달합니다.

    Context 사용 예제:

    아래 예제에서는 context를 사용하여 작업에 타임아웃을 설정하는 방법을 보여줍니다. 이 예제에서는 context.WithTimeout 함수를 사용하여 2초 후에 취소되는 컨텍스트를 생성합니다.

    package main
    
    import (
    	"context"
    	"fmt"
    	"time"
    )
    
    // 시간이 걸리는 작업을 시뮬레이션하는 함수
    func doTimeConsumingWork(ctx context.Context) {
    	select {
    	case <-time.After(3 * time.Second): // 3초 후에 작업 완료
    		fmt.Println("Work completed successfully")
    	case <-ctx.Done(): // 컨텍스트가 취소되면
    		fmt.Println("Work cancelled:", ctx.Err())
    	}
    }
    
    func main() {
    	// 2초 후에 자동으로 취소되는 컨텍스트 생성
    	ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
    	defer cancel() // 메인 함수 종료 시 모든 자원 해제
    
    	go doTimeConsumingWork(ctx)
    
    	// 컨텍스트가 취소될 때까지 기다림
    	<-ctx.Done()
    	fmt.Println("Main function:", ctx.Err())
    }

    이 코드는 3초가 걸리는 작업을 수행하는 doTimeConsumingWork 함수를 가지고 있지만, 컨텍스트에 설정된 타임아웃은 2초입니다. 따라서, 작업은 완료되기 전에 컨텍스트의 타임아웃에 의해 취소됩니다. 결과적으로 ctx.Done() 채널은 타임아웃 시점에 신호를 받고, 작업이 취소된 것을 알립니다.

    요약:

    • context 패키지는 고루틴의 실행 제어와 요청 스코프 데이터의 전파를 위한 강력한 도구입니다.
    • 타임아웃, 취소 신호 등을 통해 더욱 견고하고 유지 관리가 쉬운 동시성 프로그램을 작성할 수 있습니다.
    • 값 전달 기능을 사용하면, 요청 관련 데이터를 고루틴의 계층을 통해 효율적으로 전달할 수 있습니다.

    context 패키지의 사용은 Go에서 동시성을 다룰 때 중요한 패턴 중 하나이며, 이를 통해 더욱 안전하고 효율적인 동시성 프로그램을 구현할 수 있습니다.

    반응형

    'Back-End > Golang' 카테고리의 다른 글

    golang: for-select 패턴  (0) 2024.04.19
    golang: 동시성에서 제한(Confinement)이란?  (0) 2024.04.19
    golang: 포인터(Pointer)란?  (0) 2024.03.30
    golang: 채널(Channel)이란?  (0) 2024.03.30
    golang: 고루틴(Goroutines)이란?  (0) 2024.03.30
Designed by Tistory.