프로그래밍

👨‍💻 [Go] Go 에서 고루틴(Goroutine) 이란 무엇이며, 어떻게 활용할 수 있나요?

밝음의기둥 2025. 1. 2. 14:21
반응형

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


👨‍💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.

Go 에서 고루틴(Goroutine) 이란 무엇이며, 어떻게 활용할 수 있는지 간략히 알아보았습니다.


질문 >

Go 에서 고루틴(Goroutine) 이란 무엇이며, 어떻게 활용할 수 있나요?

답변 >

Go에서 고루틴(Goroutine)은 경량 스레드(lightweight thread)로서, Go 언어가 제공하는 동시성(concurrency) 메커니즘의 핵심 요소입니다. 고루틴은 독립적으로 실행되는 함수이며, 표준 스레드보다 훨씬 가볍고 효율적입니다.

고루틴의 특징

  1. 가벼움: 고루틴은 스레드보다 훨씬 적은 메모리를 사용하며, 수천 개를 생성해도 시스템에 큰 부담이 없습니다.
  2. 채널(Channels): 고루틴 간의 통신은 채널을 통해 이루어지며, 이를 통해 안전하고 간단한 데이터 교환이 가능합니다.
  3. 자동 스케줄링: Go 런타임은 고루틴을 실행하기 위해 여러 스레드에 자동으로 스케줄링합니다. 개발자는 직접 스레드 관리를 하지 않아도 됩니다.

고루틴 사용 방법

고루틴은 go 키워드를 사용하여 생성할 수 있습니다. 다음은 간단한 사용 예제입니다.

package main

import (
	"fmt"
	"time"
)

func printNumbers() {
	for i := 1; i <= 5; i++ {
		fmt.Println(i)
		time.Sleep(500 * time.Millisecond) // 0.5초 대기
	}
}

func main() {
	// 고루틴 생성
	go printNumbers()

	// 메인 함수도 병렬로 실행됨
	for i := 'A'; i <= 'E'; i++ {
		fmt.Printf("%c\\n", i)
		time.Sleep(700 * time.Millisecond) // 0.7초 대기
	}

	// 프로그램 종료를 막기 위해 대기
	time.Sleep(5 * time.Second)
}

실행 결과 (시간 간격에 따라 다를 수 있음):

1
A
2
B
3
C
4
D
5
E


고루틴 활용 사례

  1. 동시성 처리: 대규모 데이터 처리, 웹 크롤링, 네트워크 요청 등에서 활용.
  2. 병렬 처리: 멀티코어 CPU를 활용한 성능 최적화.
  3. 비동기 작업: 파일 I/O, 데이터베이스 쿼리 등 시간이 오래 걸리는 작업의 비동기화.

고루틴과 채널

채널은 고루틴 간의 데이터를 안전하게 교환할 수 있게 해줍니다. 다음은 채널을 활용한 고루틴 예제입니다.

package main

import "fmt"

func worker(ch chan string) {
	ch <- "고루틴 작업 완료!" // 채널에 메시지 전송
}

func main() {
	ch := make(chan string) // 문자열 채널 생성

	go worker(ch)           // 고루틴 시작

	message := <-ch         // 채널에서 메시지 수신
	fmt.Println(message)
}

실행 결과:

고루틴 작업 완료!


고루틴 사용 시 주의 사항

  1. 공유 자원 접근: 고루틴이 공유 메모리에 접근할 때 동기화 문제가 발생할 수 있으므로, 채널이나 sync 패키지의 도구(Mutex, WaitGroup 등)를 활용해야 합니다.
  2. 고루틴 누수(Goroutine Leak): 채널을 닫지 않거나, 고루틴이 종료되지 않는 경우 메모리 누수가 발생할 수 있습니다.

고루틴은 Go 언어의 핵심 기능 중 하나로, 효율적이고 간단한 동시성 프로그램을 작성하는 데 유용합니다.



🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리(Willee) 입니다. 📢 위로그@WiLog 는 자기계발을 목적으로 하는 채널 입니다. 📢 오늘도 즐겁게~ 자신을 위한 계발을 함께 해보아요~ d^_^b 📌

www.youtube.com

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

지금, 스트리밍이 시작됩니다. 치지직-

chzzk.naver.com


반응형