태그: Golang
16편
-
Go 런타임 깊이 보기: G/M/P 스케줄러, 채널 구현, 인터페이스 레이아웃, 삼색 GC
Go 런타임이 고루틴을 G/M/P 모델로 스케줄링하는 방식, 언버퍼드·버퍼드 채널과 select의 동작, iface와 빈 인터페이스의 메모리 레이아웃, 쓰기 장벽을 쓰는 삼색 마킹 GC와 GOGC 조정을 설명합니다. context 취소와 워커 풀 패턴도 다룹니다.
-
Go 슬라이스 심화: 메모리 할당 방식, append 성장, 복사와 참조, 성능 최적화와 함정
Go 슬라이스 헤더가 가리키는 백킹 배열이 make와 append에서 어떻게 할당되고 용량이 어떤 규칙으로 늘어나는지 설명합니다. 사전 할당과 인덱스 대입으로 성능을 높이는 법, 필터·청크 분할 패턴, 작은 슬라이스가 큰 배열을 붙잡는 메모리 누수를 다룹니다.
-
Go로 웹 API 만들기: Gin 라우팅, GORM, JWT 인증, 미들웨어, 동시성과 배포
Go로 웹 API를 만드는 흐름을 Gin 라우팅과 기본 서버, GORM 모델 정의와 PostgreSQL 연결, CRUD 엔드포인트, JWT 발급과 인증 미들웨어, 고루틴과 채널을 쓴 동시 처리, Docker 배포 순서로 따라갑니다. Node.js와의 비교도 다룹니다.
-
[Go 심화 #09] context.Context로 타임아웃·취소·우아한 종료 다루기 — C++와의 비교
HTTP 요청이 끊겼는데 DB 쿼리가 계속 도는 문제를 context.Context로 막는 방법을 설명합니다. 루트와 파생 컨텍스트, 파이프라인 취소 전파, 오래 도는 고루틴 멈추기, 신호를 받아 Shutdown하는 우아한 종료를 C++ stop_token과 비교하며 다룹니다.
-
C++ 개발자를 위한 Go 언어 2주 학습 커리큘럼: Day별 일정과 C++ 개념 대응
C++ 개발자가 Go를 배울 때 클래스 없는 구조체와 인터페이스, 에러 값 반환, 고루틴과 채널로 사고방식을 옮기는 과정을 Day별 2주 일정으로 정리했습니다. M:N 스케줄러와 채널 내부 구조, C++ 코드를 Go로 옮길 때의 주의점도 다룹니다.
-
[Go 2주 완성 #01] Day 1~2: Go 언어의 철학과 기본 문법 - C++ 개발자의 첫인상
C++ 개발자가 Go를 처음 배울 때 단순성, 명시성, 동시성이라는 설계 철학과 포인터·상속·제네릭 차이를 먼저 짚습니다. 설치와 Hello World 비교, go mod 패키지 구조, := 짧은 선언과 제로 값, for 하나로 모든 반복을 표현하는 문법을 익힙니다.
-
[Go 2주 완성 #02] Day 3~4: 메모리와 자료구조 - 포인터 연산은 없지만 포인터는 있다
Go에는 포인터는 있지만 포인터 연산은 없다는 점에서 출발해 C++과 포인터·함수 인자 전달을 비교합니다. 값 타입인 배열과 동적 배열인 슬라이스의 내부 구조, 두 슬라이스가 같은 배열을 공유해서 생기는 버그, map 사용법을 예제로 봅니다.
-
[Go 2주 완성 #03] Day 5~6: 클래스 없는 객체지향 - 상속을 버리고 합성을 취하다
클래스와 상속이 없는 Go에서 구조체, 메서드, 리시버로 객체지향을 구현하는 방법을 C++ 코드와 비교합니다. 값 리시버와 포인터 리시버를 고르는 기준, 구조체 임베딩으로 상속 없이 재사용하기, Functional Options 생성자 패턴을 다룹니다.
-
[Go 2주 완성 #04] Day 7: 다형성의 재해석, 인터페이스 - 가상 함수 없이 다형성 구현하기
implements 선언 없이 메서드만 구현하면 인터페이스를 만족하는 Go의 암시적 인터페이스를 C++ 가상 함수와 비교합니다. io.Reader·io.Writer·fmt.Stringer·error 같은 표준 인터페이스, any와 타입 단언, 타입 스위치, 작은 인터페이스 설계 원칙을 다룹니다.
-
[Go 2주 완성 #05] Day 8~9: 예외 처리의 새로운 접근 - try-catch는 잊어라
try-catch가 없는 Go에서 에러를 값으로 반환하고 if err != nil로 즉시 처리하는 방식을 C++ 예외와 비교합니다. RAII 대신 쓰는 defer의 실행 순서와 평가 시점, fmt.Errorf의 %w 래핑과 errors.Is·As, panic과 recover의 쓰임새를 다룹니다.
-
[Go 2주 완성 #06] Day 10~11: 고루틴과 채널 - 동시성 프로그래밍의 혁명
std::thread보다 훨씬 작은 스택으로 시작하는 고루틴과 WaitGroup, 고루틴 사이의 통신 수단인 채널, 버퍼 채널, select의 타임아웃과 논블로킹 처리를 C++ 코드와 비교합니다. 워커 풀, 파이프라인, 팬아웃·팬인 동시성 패턴도 다룹니다.
-
[Go 2주 완성 #07] Day 12~13: 의존성 관리와 테스팅 - CMake보다 쉬운 세상
CMake 없이 go mod init과 go get으로 의존성을 관리하고 go.mod 구조를 읽는 법, Gin을 붙인 HTTP 서버 예제를 보여줍니다. go test로 작성하는 유닛 테스트, 테이블 주도 테스트와 t.Run 서브테스트, 벤치마크, 커버리지 측정, 모킹을 다룹니다.
-
[Go 2주 완성 #08] Day 14: 실전 미니 프로젝트 - REST API 서버 구축
앞선 편에서 익힌 구조체, 인터페이스, 에러 처리, 고루틴, 테스트를 묶어 net/http만으로 할 일 관리 REST API 서버를 만듭니다. 프로젝트 구조, 저장소 인터페이스, 핸들러와 미들웨어, 백그라운드 작업, 핸들러 테스트, Docker 배포까지 따라갑니다.
-
C++ 개발자를 위한 Go 2주 학습 시리즈 목차
C++ 개발자를 위한 Go 언어 2주 학습 시리즈 전체 목차. 기본 문법부터 고루틴, 채널, 인터페이스, REST API 서버 구축까지 14일 집중 학습 로드맵과, 실무 심화 context·우아한 종료까지 링크합니다.
-
C++ vs Go: 성능, 동시성 모델, 프로젝트별 선택 기준
C++로 웹 API를 만들다 개발 속도가 밀리거나 Go로 지연에 민감한 시스템을 만들다 GC가 문제가 되는 선택 실패 사례를 두고 두 언어를 비교합니다. 스레드·이벤트 루프와 고루틴 M:N 스케줄링, 컨텍스트 스위칭 비용, CPU 바운드 성능을 다룹니다.
-
C++ 개발자의 뇌 구조로 이해하는 Go 언어
C++ 습관대로 Go를 쓰다 막히는 지점을 파일은 어디서 닫는지, 에러를 매번 if로 확인해야 하는지 같은 질문으로 풀어 봅니다. RAII와 defer·GC, 템플릿과 인터페이스, 예외와 error 반환, 스레드와 고루틴·채널의 대응 관계를 표로 정리했습니다.