고
-
golang: 런타임(Runtime)이란?Back-End/Golang 2024. 11. 27. 22:18
Go의 Runtime은 Go 프로그램의 실행을 관리하는 핵심 구성 요소입니다. 이는 Go 런타임이 제공하는 동작과 기능을 이해하면, 프로그램의 성능을 최적화하고 동작 방식을 효율적으로 활용할 수 있습니다. Go 런타임의 주요 구성 요소와 개념을 자세히 설명드리겠습니다.1. Go Runtime이란?Go의 런타임은 Go 프로그램이 실행되는 동안 메모리 관리, 병행성 처리, 가비지 컬렉션, 스케줄링 등의 작업을 담당하는 표준 라이브러리 및 런타임 시스템입니다.Go는 컴파일러 기반 언어로, C/C++처럼 런타임이 없는 언어에 가깝지만, 병행성과 메모리 관리 등의 기능을 위해 런타임 환경을 제공합니다.2. 주요 기능과 구성 요소2.1 가비지 컬렉터 (Garbage Collector)Go는 자동 메모리 관리를 위해..
-
golang: 고루틴(Goroutine) 연습해보기 초급편Back-End/Golang 2024. 11. 23. 14:58
고루틴 학습 교과서: Go로 배우는 동시성 프로그래밍서문Go 언어의 핵심인 고루틴은 경량 스레드로, 효율적이고 강력한 동시성 프로그래밍을 가능하게 합니다. 이 교과서는 고루틴의 기초부터 심화된 패턴까지 체계적으로 학습할 수 있도록 설계되었습니다. 각 단계별로 학습 포인트와 실습 예제를 통해 실력을 점진적으로 향상시킬 수 있습니다.1단계: 고루틴 기초학습 포인트고루틴의 정의 및 기본 사용법동기 실행과 비동기 실행의 차이점설명고루틴은 go 키워드를 사용하여 비동기로 함수를 실행할 수 있는 Go의 기본 단위입니다. OS 스레드와 비교해 메모리 오버헤드가 작으며, 런타임 스케줄러가 고루틴을 관리합니다.예제package mainimport ( "fmt" "time")func printMessage(msg stri..
-
golang: 고언어의 철학(Clear is better than clever)Back-End/Golang 2024. 11. 16. 22:17
"Clear is better than clever"("명확성은 영리함보다 우수하다)는 Go 언어의 설계 철학 중 하나로, 코드의 가독성과 명확성을 우선시해야 한다는 원칙을 뜻합니다. 이는 Go 언어 설계자들이 Go 언어의 단순하고 직관적인 사용성을 강조하면서, 복잡하거나 지나치게 "영리한" 코드 작성을 피하자는 철학입니다.세부 설명Clear (명확성):코드를 읽는 사람이 쉽게 이해할 수 있는 코드를 작성하는 것을 지향합니다.코드가 직관적이어야 팀원이나 후임자가 코드를 읽고 수정하거나 유지보수하기 쉽습니다."이 코드는 무엇을 하는지 바로 알 수 있는가?"를 기준으로 작성.Clever (영리함):지나치게 복잡하거나 고도의 기술적인 구현(트릭)을 사용한 코드.한 번에 많은 일을 처리하거나, 너무 축약된 표현..
-
golang: 제네릭(Generic) 심화과정Back-End/Golang 2024. 11. 10. 13:04
Go 언어의 제네릭(Generic) 심화 이해 및 활용Go 언어는 간결함과 효율성으로 널리 사랑받는 언어입니다. 그러나 제네릭(generic)이 없다는 점은 복잡한 코드를 작성할 때 걸림돌이 되었습니다. 이러한 필요성에 따라 Go 1.18 버전부터 제네릭이 도입되었고, 이는 코드 재사용성과 타입 안전성을 크게 향상시켰습니다. 이번 글에서는 제네릭이 무엇인지부터 시작하여, 왜 필요한지, 그리고 현업에서 어떻게 활용되는지 다양한 예시와 함께 깊이 있게 알아보겠습니다.1. 제네릭이란 무엇인가?1.1 제네릭의 개념제네릭은 함수나 타입을 정의할 때 타입을 매개변수처럼 사용할 수 있게 하는 기능입니다. 즉, 코드 작성 시 구체적인 타입을 명시하지 않고도 다양한 타입에 대해 동작하는 코드를 작성할 수 있습니다.1.2..
-
golang: 그레이스풀 셧다운(Graceful Shutdown)Back-End/Golang 2024. 10. 25. 14:40
그레이스풀 셧다운의 개념 그레이스풀 셧다운은 서버가 종료 요청을 받았을 때, 즉시 모든 연결을 끊지 않고 현재 처리 중인 요청들을 완료한 후 안전하게 종료하는 방식입니다. 이렇게 하면 클라이언트 요청이 비정상적으로 끊기는 것을 방지할 수 있고, 데이터 손실이나 요청 실패를 줄일 수 있습니다. 일반적으로, 서버가 종료할 때 남은 작업을 완료하기 위한 시간 제한(타임아웃)을 설정하여 요청이 무기한 지속되는 것을 방지합니다.Golang에서 그레이스풀 셧다운 Golang의 경우, net/http 패키지를 통해 웹 서버를 간단하게 실행하고 그레이스풀 셧다운을 구현할 수 있습니다. Golang의 비동기 특성과 context 패키지는 이러한 셧다운을 쉽게 처리할 수 있게 해줍니다.Golang 그레이스풀 셧다운 예시p..
-
golang: 제네릭(Generic)이란?Back-End/Golang 2024. 8. 3. 13:14
제네릭(Generic)은 Go 언어에서 매우 강력한 도구로, 다양한 데이터 타입을 처리하고 코드를 간결하고 유연하게 만드는 데 유용합니다. 이를 통해 코드의 확장성, 안정성, 재사용성을 높일 수 있으며, 다양한 상황에서 효율적으로 사용할 수 있습니다. 제네릭을 잘 활용하면 더 나은 설계를 하고 변화하는 요구사항에 유연하게 대응할 수 있는 코드를 작성할 수 있습니다. 1. 타입 확장성제네릭을 사용하면 다양한 데이터 타입을 하나의 함수나 구조체로 처리할 수 있습니다. 이는 특정 타입에 제한되지 않고, 여러 타입에 대해 동일한 로직을 사용할 수 있게 합니다.예시: 숫자 계산 함수package mainimport "fmt"// 제네릭 타입 정의type Number interface { ~int | ~float6..
-
golang: Tee 패턴이란?Back-End/Golang 2024. 5. 15. 21:12
Tee 패턴은 하나의 입력 채널에서 읽은 데이터를 여러 출력 채널로 복사하여 동시에 여러 곳에서 사용할 수 있게 하는 패턴입니다. 이 패턴은 이름 그대로 "티" 모양처럼 데이터를 여러 갈래로 나누는 기능을 합니다. 이 패턴은 데이터를 여러 곳에서 병렬로 처리할 때 유용합니다.Tee 패턴의 구조입력 채널: 데이터를 제공하는 채널입니다.출력 채널들: 입력 채널에서 읽은 데이터를 복사하여 전달할 여러 개의 출력 채널입니다.예제 코드아래 예제에서는 tee 함수가 입력 채널에서 데이터를 읽어 두 개의 출력 채널로 복사하는 기능을 수행합니다.package mainimport ( "fmt" "sync")// tee 함수는 입력 채널에서 데이터를 읽어 여러 출력 채널로 복사합니다.func tee(done 코..
-
고루틴 누수(Goroutine Leak)란?Back-End/Golang 2024. 5. 10. 11:59
고루틴 누수(Goroutine Leak)는 고루틴이 끝나지 않고 계속 메모리와 시스템 리소스를 소비하는 상태를 말합니다. 고루틴은 Go 언어에서 경량 스레드처럼 동작하며, 고루틴 누수는 프로그램의 성능 저하나 예상치 못한 동작을 초래할 수 있습니다. 고루틴이 제대로 종료되지 않으면 그에 따른 채널이나 다른 리소스도 해제되지 않아 리소스 누수로 이어질 수 있습니다. 고루틴 누수가 어떤 피해를 주나요?고루틴 누수는 프로그램의 성능과 안정성에 여러 가지 해로운 영향을 미칠 수 있습니다. 이러한 영향을 구체적으로 살펴보겠습니다:1. 메모리 사용 증가고루틴은 스택 메모리를 사용하고, 각 고루틴은 일반적으로 몇 킬로바이트의 메모리를 소비합니다. 고루틴이 계속 누적되면 사용되지 않는 메모리가 점점 증가하여 전체 시스..