Back-End
-
클로저(Closure)란?Back-End/Language 2024. 4. 5. 11:33
Go 언어에서의 클로저(Closure)는 JavaScript의 클로저와 유사한 개념을 가지고 있습니다. 둘 다 외부 함수로부터 생성된 내부 함수가 그 외부 함수의 스코프에 있는 변수에 접근할 수 있게 해주는 프로그래밍 기능입니다. 하지만 언어의 특성과 구현 방식에서는 차이가 있을 수 있습니다. 공통점 변수의 스코프 유지: 클로저는 내부 함수가 외부 함수의 실행 컨텍스트가 종료된 후에도 외부 함수의 변수에 접근할 수 있게 해줍니다. 이를 통해 특정 함수 호출이 종료된 이후에도 변수의 상태를 유지할 수 있습니다. 데이터 은닉과 캡슐화: 클로저는 데이터를 함수 내부에 은닉하고, 특정 함수를 통해서만 데이터에 접근할 수 있게 함으로써 캡슐화를 제공합니다. 차이점 언어적 특성: JavaScript는 프로토타입 기..
-
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..
-
golang: 채널(Channel)이란?Back-End/Golang 2024. 3. 30. 12:10
채널(Channel)은 Go 언어의 핵심 기능 중 하나로, 고루틴 간에 데이터를 안전하게 주고받을 수 있는 통신 메커니즘입니다. 채널을 사용하면 고루틴 사이에서 동기화 없이 데이터를 전달할 수 있으며, 이는 동시성 프로그래밍에서 발생할 수 있는 복잡한 문제들을 효과적으로 해결할 수 있게 해줍니다. 채널의 특징: 타입 안전성: 채널은 특정 타입의 데이터만을 전송할 수 있으며, 이는 프로그램의 안정성을 높여줍니다. 동기화: 채널을 통해 데이터를 보내거나 받을 때, Go 런타임은 이 과정이 안전하게 이루어지도록 자동으로 동기화를 관리합니다. 블로킹과 넌블로킹 동작: 채널은 기본적으로 블로킹(Blocking) 동작을 합니다. 데이터를 보내거나 받을 준비가 되지 않았을 경우, 해당 고루틴은 대기 상태에 머물게 됩..
-
golang: 고루틴(Goroutines)이란?Back-End/Golang 2024. 3. 30. 12:02
고루틴(Goroutines)은 Go 언어에서 동시성(concurrency)을 구현하는 핵심적인 부분입니다. 간단히 말하자면, 고루틴은 Go에서 실행되는 경량 스레드(lightweight threads)와 유사합니다. 하지만 전통적인 스레드에 비해 훨씬 적은 메모리를 사용하며, 쉽게 수천 개 이상을 생성하고 관리할 수 있습니다. 고루틴은 Go 런타임에 의해 관리되며, 고루틴 사이의 통신은 주로 채널(Channels)을 통해 이루어집니다. 고루틴의 특징: 경량: 고루틴은 매우 작은 메모리 스택을 사용하여 시작되며, 필요에 따라 동적으로 확장됩니다. 비동기 실행: 고루틴은 비동기적으로 실행됩니다. 즉, 메인 프로그램의 실행을 차단하지 않고 동시에 실행될 수 있습니다. 쉬운 생성: go 키워드를 사용하여 함수 ..
-
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed 에러 해결Back-End/Python 2018. 9. 22. 22:08
맥북에서 CERTIFICATE VERIFY FAILED 에러 대처 파이썬으로 크롤링을 연습하던 중 에러를 만났다. self._sslobj.do_handshake() ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/bsherman/anaconda/lib/python3.5/runpy.py", line 184, in _run_module_as_main "__main__", mod_spec) File "..