Back-End/Golang
-
고루틴 누수(Goroutine Leak)란?Back-End/Golang 2024. 5. 10. 11:59
고루틴 누수(Goroutine Leak)는 고루틴이 끝나지 않고 계속 메모리와 시스템 리소스를 소비하는 상태를 말합니다. 고루틴은 Go 언어에서 경량 스레드처럼 동작하며, 고루틴 누수는 프로그램의 성능 저하나 예상치 못한 동작을 초래할 수 있습니다. 고루틴이 제대로 종료되지 않으면 그에 따른 채널이나 다른 리소스도 해제되지 않아 리소스 누수로 이어질 수 있습니다. 고루틴 누수가 어떤 피해를 주나요?고루틴 누수는 프로그램의 성능과 안정성에 여러 가지 해로운 영향을 미칠 수 있습니다. 이러한 영향을 구체적으로 살펴보겠습니다:1. 메모리 사용 증가고루틴은 스택 메모리를 사용하고, 각 고루틴은 일반적으로 몇 킬로바이트의 메모리를 소비합니다. 고루틴이 계속 누적되면 사용되지 않는 메모리가 점점 증가하여 전체 시스..
-
golang: 1급 시민(First-class citizen)이란?Back-End/Golang 2024. 4. 28. 22:20
프로그래밍 언어에서 "1급 시민" 또는 "1급 객체"라는 용어는 해당 언어의 요소가 다음과 같은 특성을 갖추었을 때 사용됩니다:변수나 데이터 구조 안에 담길 수 있음: 1급 객체는 변수에 할당될 수 있습니다. 예를 들어, 함수가 1급 객체인 언어에서는 함수를 변수에 할당할 수 있습니다.함수의 인자로 전달될 수 있음: 함수를 다른 함수의 인자로 전달할 수 있습니다. 이는 고차 함수(higher-order function)를 가능하게 합니다.함수의 결과로 반환될 수 있음: 함수에서 다른 함수를 결과로 반환할 수 있습니다. 이는 함수를 동적으로 생성하고 조작할 수 있음을 의미합니다.할당에 사용된 표현식 내에서 리터럴로 표현될 수 있음: 객체를 코드 내에서 직접적으로 리터럴 형태로 표현할 수 있어야 합니다. 예..
-
golang: Go 언어의 장점Back-End/Golang 2024. 4. 21. 22:31
Go 언어의 장점 요약 Go 언어의 장점들을 나열하고 그 이유를 설명하면 다음과 같습니다: 강력하고 정적 타입 시스템: 이유: Go는 컴파일 시 타입 체크를 수행합니다. 이는 런타임에 발생할 수 있는 오류를 최소화하고, 프로그램의 안정성과 유지 보수성을 향상시킵니다. 가비지 컬렉션 지원: 이유: 메모리 관리를 자동화하여 개발자가 메모리 누수와 같은 문제에 대해 걱정하지 않도록 합니다. 이로 인해 개발자는 애플리케이션 로직 구현에 더 집중할 수 있습니다. 동시성 프로그래밍 지원: 이유: '고루틴(goroutine)'과 채널을 사용하여 동시성을 쉽게 구현할 수 있습니다. 이는 멀티코어 프로세서의 이점을 최대화하고, I/O 대기 시간 등을 효율적으로 관리하여 애플리케이션의 성능을 향상시킵니다. 패키지 관리 시..
-
golang: 문자열 함수Back-End/Golang 2024. 4. 21. 13:39
Go 언어에서 문자열을 다루는 데 사용되는 주요 함수들은 대부분 strings 패키지 내에 있습니다. 여기서는 strings 패키지의 주요 함수들을 나열하겠습니다. 이 함수들은 다양한 문자열 조작 작업에 사용될 수 있습니다: Compare: 두 문자열을 비교하고, 첫 번째 문자열이 두 번째 문자열보다 작으면 -1, 같으면 0, 크면 1을 반환합니다. Contains: 하나의 문자열이 다른 문자열에 포함되어 있는지 확인합니다. ContainsAny: 주어진 문자들 중 하나라도 문자열에 포함되어 있는지 확인합니다. ContainsRune: 문자열이 특정 룬을 포함하고 있는지 확인합니다. Count: 하나의 문자열이 다른 문자열에 몇 번 등장하는지 세어 반환합니다. EqualFold: 두 문자열이 대소문자를 ..
-
golang: for-select 패턴Back-End/Golang 2024. 4. 19. 10:24
Go 언어는 효율적인 동시성 처리를 지원하는 강력한 메커니즘을 제공합니다. 이 중 for-select 패턴은 Go의 동시성을 활용하는 중요한 방법 중 하나로, 여러 동시 작업을 관리하고, 다양한 채널 간 통신을 조절하는 데 사용됩니다. 이 블로그 글에서는 for-select 패턴이 무엇인지, 어떻게 사용되는지, 그리고 이 패턴을 통해 어떤 문제를 해결할 수 있는지 상세히 설명하겠습니다. for-select 패턴이란? for-select 패턴은 Go의 for 루프와 select 문을 결합한 구조입니다. select 문은 여러 채널 오퍼레이션 중 하나가 준비될 때까지 기다리다가 준비된 오퍼레이션을 실행합니다. 이 패턴은 주로 비동기적으로 데이터를 수신하거나, 여러 채널에 걸쳐 동시에 이벤트를 처리할 필요가 ..
-
golang: 동시성에서 제한(Confinement)이란?Back-End/Golang 2024. 4. 19. 09:50
"동시성 코드로 작업할 때, 안전한 작동을 위한 몇 가지 옵션이 있다." 메모리 공유를 위한 동기화 기본 요소(예: sync.Mutex) 통신을 통한 동기화(예: 채널) 변경 불가능한 데이터 제한(Confinement)에 의해 보호되는 데이터 제한(Confinement)은 동시성 프로그래밍에서 데이터 접근을 제어하여, 고루틴 간의 간섭이나 경쟁 상태를 방지하는 기법입니다. 데이터를 고루틴이나 특정 코드 영역에 "제한"함으로써 안전하게 데이터를 공유할 수 있습니다. 언제 사용하나요? 제한은 특히 여러 고루틴이 동시에 실행되는 환경에서 중요합니다. 데이터를 여러 고루틴이 공유할 때 발생할 수 있는 문제(예: 경쟁 상태, 데드락)를 방지하기 위해 사용됩니다. 제한을 통해 각 고루틴이 데이터의 접근을 독립적으로..
-
golang: 포인터(Pointer)란?Back-End/Golang 2024. 3. 30. 12:34
Go 언어에서 포인터는 변수의 메모리 주소를 저장합니다. 포인터를 사용하면, 변수의 메모리 주소를 통해 직접 변수의 값을 읽거나 수정할 수 있습니다. 이는 데이터를 효율적으로 처리할 수 있게 하며, 특히 큰 데이터 구조를 다룰 때나 함수 간에 데이터를 전달할 때 유용합니다.포인터의 기본 개념:포인터 선언: * 키워드를 사용해 포인터 타입을 선언합니다. 예를 들어, var p *int는 정수형 변수의 메모리 주소를 저장할 수 있는 포인터 p를 선언합니다.주소 연산자 &: 변수 앞에 &를 붙여 해당 변수의 메모리 주소를 얻습니다.역참조 연산자 *: 포인터 앞에 *를 붙여 포인터가 가리키는 메모리 주소의 실제 값을 얻습니다.코드 예시: 포인터 사용하기아래 코드는 포인터를 사용하여 변수의 값이 함수에 의해 어떻..
-
golang: 컨텍스트(Context)란?Back-End/Golang 2024. 3. 30. 12:13
Go 언어에서 context 패키지는 고루틴 간에 데이터, 취소 신호, 타임아웃 등을 전파하는 데 사용됩니다. context.Context 인터페이스는 요청 처리에 필요한 모든 정보를 담고, 고루틴의 실행 제어를 가능하게 합니다. 이는 주로 API 호출, 데이터베이스 요청 등의 작업을 취소하거나, 작업의 마감 시간(deadlines)을 설정하고, 요청 스코프의 값(value)을 전달하는 데 유용합니다. Context의 주요 사용 사례: 요청 취소: 사용자 요청 취소나 타임아웃 시, 모든 관련된 작업을 중단시킵니다. 타임아웃 설정: 특정 작업에 대한 최대 실행 시간을 지정합니다. 값 전달: 요청 스코프에 있는 데이터를 여러 고루틴 사이에서 전달합니다. Context 사용 예제: 아래 예제에서는 contex..