Go 2주 완성 시리즈 전체 목차 | C++ 개발자를 위한 Golang 마스터 커리큘럼
이 글의 핵심
Go의 설계 배경(단순함·고루틴·정적 바이너리)과 함께, #01~#09까지 문법→동시성→실전→운영 순 목차·14일 로드맵·연관 글을 한 페이지에 모았습니다.
Go 2주 완성 시리즈 목차
C++ 개발자를 위한 Go 언어 집중 학습 시리즈입니다. C++과의 비교로 문맥을 맞추었고, 각 글에는 코드 대조, 실습 과제, 체크리스트가 들어 있습니다. 시작 경로: 커리큘럼 전체 보기에서 로드맵을 확인하시거나, #01 기본 문법부터 읽으시면 됩니다. ⏱️ 학습 시간: 하루 2–3시간 투자로 14일 완성 (총 약 28–42시간) 👥 대상 독자: C/C++ 경험이 있고, 클라우드 네이티브 개발이나 마이크로서비스를 위해 Go를 빠르게 습득하고 싶은 개발자
Go가 지향하는 것과 이 목차의 축
Go(2009년 공개, Google)는 멀티코어·네트워크 서비스를 전제로 빠른 빌드·읽기 쉬운 코드·정적 링크 바이너리를 강조해 왔습니다. 예외 대신 error 값, 클래스 상속 대신 구조체·임베딩, “스레드만으로는 비용이 크다”는 문제에 고루틴(M:N 스케줄링에 가까운 경량 작업 단위)과 채널(통신으로 공유 메모리)을 제시한 점이 특징입니다. C++ 개발자에게는 GC·런타임이나 제네릭 도입 전후의 관용처럼 처음엔 낯은 부분도 있지만, 단일 바이너리 배포·표준 라이브러리의 실용성은 운영 관점에서 자주 체감됩니다.
이 시리즈는 1주 차(#01~#04)에서 문법·메모리 모델·합성·인터페이스로 “컴파일되고 읽히는 코드”를 만들고, 2주 차(#05~#08)에서 에러·동시성·모듈·REST로 “다른 서비스와 말하는 코드”로 넓힌 뒤, #09에서 context·취소·우아한 종료로 “끊을 수 있는 서버”까지 이어지도록 배치했습니다. 2주는 핵심 골격을 잡는 기간에 가깝고, 숙련은 이후 실서비스·코드 리뷰·프로파일링에서 쌓인다고 보면 기대치를 맞추기 좋습니다.
🔖 빠른 점프
1주 차: #01 기본 문법 • #02 자료구조 • #03 객체지향 • #04 인터페이스 2주 차: #05 에러 처리 • #06 고루틴·채널 • #07 테스팅 • #08 REST API • #09 context·우아한 종료
추천 학습 경로
%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#ffe6e6','primaryTextColor':'#000','primaryBorderColor':'#ff9999','lineColor':'#666','secondaryColor':'#e6f3ff','tertiaryColor':'#fff4e6','noteBkgColor':'#e6ffe6','noteTextColor':'#000','noteBorderColor':'#99cc99'}}}%%
flowchart TD
A[커리큘럼br/확인] --> B["1주 차:br/기본기"]
B --> C["2주 차:br/동시성"]
C --> D[실전br/프로젝트]
B --> E["#01 기본br/문법"]
E --> F[#02br/자료구조]
F --> G[#03br/객체지향]
G --> H[#04br/인터페이스]
C --> I["#05 에러br/처리"]
I --> J["#06 고루틴·br/채널"]
J --> K[#07br/테스팅]
D --> L["#08 RESTbr/API"]
style A fill:#ffe6e6,stroke:#ff9999,stroke-width:2px,color:#000
style B fill:#e6f3ff,stroke:#99ccff,stroke-width:2px,color:#000
style C fill:#fff4e6,stroke:#ffcc99,stroke-width:2px,color:#000
style D fill:#e6ffe6,stroke:#99cc99,stroke-width:2px,color:#000
style E fill:#e6f3ff,stroke:#99ccff,stroke-width:2px,color:#000
style F fill:#e6f3ff,stroke:#99ccff,stroke-width:2px,color:#000
style G fill:#e6f3ff,stroke:#99ccff,stroke-width:2px,color:#000
style H fill:#e6f3ff,stroke:#99ccff,stroke-width:2px,color:#000
style I fill:#fff4e6,stroke:#ffcc99,stroke-width:2px,color:#000
style J fill:#fff4e6,stroke:#ffcc99,stroke-width:2px,color:#000
style K fill:#fff4e6,stroke:#ffcc99,stroke-width:2px,color:#000
style L fill:#e6ffe6,stroke:#99cc99,stroke-width:2px,color:#000
📚 시리즈 전체 글 목록
시작: 커리큘럼 개요
- C++ 개발자를 위한 2주 완성 Go 언어 마스터 커리큘럼 — 전체 학습 로드맵, 14일 계획, 학습 팁
📘 1주 차: 패러다임의 전환과 기본기 다지기
C++의 복잡함을 덜어내고 Go의 심플함에 적응하는 주간입니다.
Day 1~2: 기본 문법
- #01 Go 언어의 철학과 기본 문법
- Go 설치 및 툴체인 (
go build,go run,go fmt) - 변수 선언:
autovs:= - 반복문:
while없는 세계 - 가비지 컬렉터로 메모리 관리 자동화
- Go 설치 및 툴체인 (
Day 3~4: 자료구조
- #02 메모리와 자료구조
- 포인터: 연산은 없지만 역참조는 있다
- Slice: C++
std::vector와의 차이 - Map: 해시 테이블 활용
- Length vs Capacity 이해
Day 5~6: 객체지향
- #03 클래스 없는 객체지향
- 구조체와 메서드
- 포인터 리시버 vs 값 리시버
- 상속 대신 합성(Embedding)
- 생성자 패턴 (
NewXxx)
Day 7: 인터페이스
- #04 다형성의 재해석, 인터페이스
- 가상 함수 없는 다형성
- Duck Typing (암시적 인터페이스)
io.Reader,io.Writer패턴- 빈 인터페이스와 타입 단언
📗 2주 차: Go 언어의 꽃, 동시성과 실전 에코시스템
OS 스레드와 Mutex에서 벗어나 우아한 동시성 제어를 배웁니다.
Day 8~9: 에러 처리
- #05 예외 처리의 새로운 접근
try-catch대신if err != nil- 다중 반환값으로 에러 전달
defer로 자원 해제 (RAII 대체)panic과recover의 올바른 사용
Day 10~11: 동시성
- #06 고루틴과 채널
- 고루틴: 수만 개를 가볍게
- 채널: 안전한 통신
select로 다중 채널 제어- 워커 풀, 파이프라인 패턴
Day 12~13: 테스팅
- #07 의존성 관리와 테스팅
- Go Modules (
go.mod,go.sum) go get으로 라이브러리 추가go test로 유닛 테스트- 테이블 주도 테스트, 벤치마크
- Go Modules (
Day 14: 실전 프로젝트
- #08 실전 미니 프로젝트 - REST API 서버
net/http로 HTTP 서버 구축- JSON 직렬화/역직렬화
- 고루틴으로 백그라운드 작업
- 테스트와 Docker 배포
실무 심화 (2주 이후 권장)
- #09
context.Context로 타임아웃·취소·우아한 종료WithCancel/WithTimeout/ 취소 전파http.Request.Context와 DB·HTTP 클라이언트http.Server.Shutdown과 SIGTERM 처리- C++의 취소·조건 변수 모델과 대응
🎯 빠른 접근
주제별 바로가기
기본 문법이 궁금하다면:
- #01 기본 문법 —
:=,for,go fmt포인터와 자료구조를 알고 싶다면: - #02 메모리와 자료구조 — 포인터, Slice, Map 객체지향이 어떻게 다른지 궁금하다면:
- #03 객체지향 — 구조체, 메서드, 합성
- #04 인터페이스 — Duck Typing, 다형성 에러 처리 방식이 궁금하다면:
- #05 에러 처리 —
if err != nil,defer동시성 프로그래밍을 배우고 싶다면: - #06 고루틴과 채널 — 경량 스레드, 채널 통신 테스트와 빌드가 궁금하다면:
- #07 테스팅 — Go Modules,
go test실전 프로젝트를 만들고 싶다면: - #08 REST API 프로젝트 — 완전한 서버 구축 프로덕션으로 올릴 때(context·종료)가 궁금하다면:
- #09 context·우아한 종료 — 타임아웃·취소·Shutdown
💡 학습 팁
효과적인 학습 전략
- 순차 학습: #01부터 #08까지 순서대로 읽으면 체계적으로 배울 수 있습니다
- 실습 중심: 각 글의 실습 과제를 반드시 직접 코딩해보세요
- C++ 비교: 각 개념을 C++과 비교하며 이해하면 학습 속도가 빨라집니다
- 프로젝트 적용: Day 14 프로젝트를 자신만의 아이디어로 확장해보세요
시리즈 특징
- ✅ C++ vs Go 코드 비교: 매 개념마다 양쪽 코드를 나란히 비교
- ✅ 실습 과제: 각 글마다 3~4개의 실전 과제 포함
- ✅ 체크리스트: 학습 완료 확인 항목
- ✅ 시리즈 네비게이션: 이전/다음 글 링크로 쉬운 탐색
- ✅ FAQ: 자주 묻는 질문 3개씩
🔗 관련 시리즈
- C++ 실전 가이드 시리즈 — C++ 기초부터 고급까지
- C++ 고성능 네트워크 가이드 — Asio 심화
- Git 실전 가이드 시리즈 — Git 기초부터 협업까지
📖 추천 읽기 순서
완전 초보자 (Go를 처음 접하는 경우)
- 커리큘럼 전체 보기 — 학습 계획 수립
- #01 기본 문법 — Go 설치 및 첫 프로그램
- #02 자료구조 — Slice, Map 활용
- #03 객체지향 — 구조체와 메서드
- #04 인터페이스 — 다형성 구현
- #05 에러 처리 — 명시적 에러 핸들링
- #06 고루틴·채널 — 동시성 프로그래밍
- #07 테스팅 — 의존성과 테스트
- #08 REST API — 실전 프로젝트
- #09 context·우아한 종료 — 프로덕션 패턴(권장 후속)
특정 주제만 빠르게 보고 싶은 경우
동시성만 배우고 싶다면:
- #06 고루틴과 채널 (기본 문법은 안다고 가정) REST API 서버만 만들고 싶다면:
- #08 REST API 프로젝트 (전체 코드 포함) 운영 환경에서 타임아웃·종료만 빠르게 잡고 싶다면:
- #09 context·우아한 종료 C++과의 차이만 알고 싶다면:
- C++ 개발자의 뇌 구조로 이해하는 Go
- C++ vs Go 성능·동시성 비교
🎓 2주 후 당신이 할 수 있는 것
이 시리즈를 완료하면:
- ✅ Go 문법을 자유롭게 사용
- ✅ 고루틴으로 동시성 프로그래밍
- ✅ 채널로 안전한 통신
- ✅ 인터페이스로 유연한 설계
- ✅ REST API 서버 구축
- ✅ 테스트 작성 및 실행
- ✅ Go Modules로 의존성 관리
📊 시리즈 통계
- 총 포스트 수: 10개 (커리큘럼 1개 + 코어 8편 + 실무 심화 1편; 목차 페이지 제외)
- 총 단어 수: 약 50,000+ 단어
- 코드 예제: 150+ 개
- C++ vs Go 비교: 80+ 쌍
- 실습 과제: 30+ 개
- 예상 학습 시간: 14일 (하루 2–3시간)
🔍 검색 키워드
이 시리즈는 다음 키워드로 검색하시면 찾을 수 있습니다: Go 언어 배우기, C++ Go 전환, Golang 커리큘럼, 고루틴 채널, Go 동시성, REST API Go, C++ 개발자 Go, Go 2주 완성, Golang 입문, Go 인터페이스, Go vs C++
❓ 자주 묻는 질문
Q. 정말 2주 만에 Go를 마스터할 수 있나요?
A. 기본 프로그래밍 지식(특히 C/C++)이 있다면 2주 집중 학습으로 Go의 핵심 개념과 실무 패턴을 익힐 수 있습니다. 완전한 숙련도는 실전 프로젝트 경험이 필요합니다.
Q. 순서대로 읽어야 하나요?
A. 처음 배우는 경우 #01부터 순서대로 읽는 것을 권장합니다. 이미 Go를 조금 아는 경우 필요한 주제만 골라 읽어도 됩니다.
Q. 실습 환경은 어떻게 준비하나요?
A. go.dev에서 Go를 설치하고, 텍스트 에디터(VSCode 권장)만 있으면 됩니다. #01 기본 문법에서 상세히 안내합니다.
Q. C++ 경험이 없어도 괜찮나요?
A. 이 시리즈는 C++ 개발자를 대상으로 하지만, 다른 언어(Java, C# 등) 경험이 있어도 충분히 따라올 수 있습니다. C++ 코드 비교 부분은 참고만 하세요.
🚀 다음 단계
시리즈를 완료한 후 추천하는 학습 방향:
context와 우아한 종료: #09 글에서 정리- 데이터베이스 연동: PostgreSQL, MySQL, MongoDB
- 웹 프레임워크: Gin, Echo, Fiber
- gRPC: Protocol Buffers와 마이크로서비스
- 클라우드: Docker, Kubernetes 연동
- 고급 패턴: 미들웨어, 의존성 주입 추천 자료:
시작하기: #01 Go 언어의 철학과 기본 문법부터 시작하세요!
같이 보면 좋은 글 (내부 링크)
이 주제와 연결되는 다른 글입니다.
- C++ 개발자를 위한 2주 완성 Go 언어(Golang) 마스터 커리큘럼
- C++ 개발자의 뇌 구조로 이해하는 Go 언어 [#47-2]
- C++ 실전 가이드 시리즈 전체 목차 | #0~#49 기초·메모리·네트워크·면접
- Python 실전 시리즈 전체 목차 #01~#23 — 백엔드·스크립트를 Python으로도 다루는 경우 REST·배포 트랙을 비교해 보기 좋습니다.
실무에서 Go를 쓸 때의 팁
if err != nil을 지루해하지 말고 일관되게 처리합니다. 에러를 삼키거나 로그만 찍고 넘기면, 운영에서 원인 추적이 어려워집니다.- 고루틴은 “무료”가 아닙니다. 루프 안에서 무한히 띄우면 메모리·스케줄러 부하가 커집니다. 워커 풀·버퍼드 채널·상한을 함께 생각합니다.
defer의 실행 순서와 루프 안defer함정을 알아 둡니다. 자원 해제는 보통 함수 단위에서 읽기 쉽게 유지됩니다.context는 요청 단위로 전파합니다. DB·HTTP 클라이언트·고루틴에 같은 취소 신호를 넣어야 타임아웃이 한 번에 동작합니다.
실전 체크리스트 (Go)
동시성·종료
- 고루틴이 끝날 때까지 기다리는 메커니즘(
WaitGroup, 채널 종료)이 있는가? - HTTP 서버는
Shutdown등으로 우아한 종료 경로가 있는가?
에러·관측
- 외부 호출(DB, HTTP) 실패가 호출자까지 전달되거나 로깅되는가?
- 프로덕션에서
panic으로 흐름을 끊지 않는가(초기화 실패 등 예외적 경우 제외)?
모듈·빌드
-
go.mod의 의존성 버전이 팀에서 합의한 범위인가? - CI에서
go test ./...가 통과하는가?
이 글에서 다루는 키워드 (관련 검색어)
Go 시리즈 목차, Golang 학습 순서, C++ Go 로드맵, Go 2주 완성, pkglog Go, Golang 커리큘럼 링크 등으로 검색하시면 이 글이 도움이 됩니다.
관련 글
- C++ 개발자를 위한 2주 완성 Go 언어(Golang) 마스터 커리큘럼
- C++ 개발자의 뇌 구조로 이해하는 Go 언어 [#47-2]
- C++ 고성능 네트워크 가이드 시리즈 목차 | Boost.Asio·이벤트 루프·코루틴
- C++ vs Go | 성능·동시성·선택 가이드 완전 비교 [#47-1]
- C++ 실전 가이드 시리즈 전체 목차 | #0~#49 기초·메모리·네트워크·면접
심화 부록: 구현·운영 관점
이 부록은 앞선 본문에서 다룬 주제(「Go 2주 완성 시리즈 전체 목차 | C++ 개발자를 위한 Golang 마스터 커리큘럼」)를 구현·런타임·운영 관점에서 다시 압축합니다. 도메인별 세부 구현은 글마다 다르지만, 입력 검증 → 핵심 연산 → 부작용(I/O·네트워크·동시성) → 관측의 흐름으로 장애를 나누면 원인 추적이 빨라집니다.
내부 동작과 핵심 메커니즘
flowchart TD A[입력·요청·이벤트] --> B[파싱·검증·디코딩] B --> C[핵심 연산·상태 전이] C --> D[부작용: I/O·네트워크·동시성] D --> E[결과·관측·저장]
sequenceDiagram participant C as 클라이언트/호출자 participant B as 경계(런타임·게이트웨이·프로세스) participant D as 의존성(API·DB·큐·파일) C->>B: 요청/이벤트 B->>D: 조회·쓰기·RPC D-->>B: 지연·부분 실패·재시도 가능 B-->>C: 응답 또는 오류(코드·상관 ID)
- 불변 조건(Invariant): 버퍼 경계, 프로토콜 상태, 트랜잭션 격리, FD 상한 등 단계별로 문장으로 적어 두면 디버깅 비용이 줄어듭니다.
- 결정성: 순수 층과 시간·네트워크·스케줄에 의존하는 층을 분리해야 테스트와 장애 분석이 쉬워집니다.
- 경계 비용: 직렬화, 인코딩, syscall 횟수, 락 경합, 할당·GC, 캐시 미스를 의심 목록에 둡니다.
- 백프레셔: 생산자가 소비자보다 빠를 때 버퍼·큐·스트림에서 속도를 줄이는 신호를 어디에 둘지 정의합니다.
프로덕션 운영 패턴
| 영역 | 운영 관점 질문 |
|---|---|
| 관측성 | 요청 단위 상관 ID, 에러율·지연 p95/p99, 의존성 타임아웃·재시도가 대시보드에 보이는가 |
| 안전성 | 입력 검증·권한·비밀·감사 로그가 코드 경로마다 일관적인가 |
| 신뢰성 | 재시도는 멱등 연산에만 적용되는가, 서킷 브레이커·백오프·DLQ가 있는가 |
| 성능 | 캐시·배치 크기·커넥션 풀·인덱스·백프레셔가 데이터 규모에 맞는가 |
| 배포 | 롤백 룬북, 카나리/블루그린, 마이그레이션·피처 플래그가 문서화되어 있는가 |
| 용량 | 피크 트래픽·디스크·FD·스레드 풀 상한을 주기적으로 검증하는가 |
스테이징은 데이터 양·네트워크 RTT·동시성을 프로덕션에 가깝게 맞출수록 재현율이 올라갑니다.
확장 예시: 엔드투엔드 미니 시나리오
앞선 본문 주제(「Go 2주 완성 시리즈 전체 목차 | C++ 개발자를 위한 Golang 마스터 커리큘럼」)를 배포·운영 흐름에 맞춰 옮긴 체크리스트입니다. 도메인에 맞게 단계 이름만 바꿔 적용할 수 있습니다.
- 입력 계약 고정: 스키마·버전·최대 페이로드·타임아웃·에러 코드를 경계에 둔다.
- 핵심 경로 계측: 요청 ID, 단계별 지연, 외부 호출 결과 코드를 로그·메트릭·트레이스에서 한 흐름으로 본다.
- 실패 주입: 의존성 타임아웃·5xx·부분 데이터·락 대기를 스테이징에서 재현한다.
- 호환·롤백: 설정/마이그레이션/클라이언트 버전을 되돌릴 수 있는지 확인한다.
- 부하 후 검증: 피크 대비 p95/p99, 에러율, 리소스 상한, 알림 임계값을 점검한다.
handle(request):
ctx = newCorrelationId()
validated = validateSchema(request)
authorize(validated, ctx)
result = domainCore(validated)
persistOrEmit(result, idempotentKey)
recordMetrics(ctx, latency, outcome)
return result
문제 해결(Troubleshooting)
| 증상 | 가능 원인 | 조치 |
|---|---|---|
| 간헐적 실패 | 레이스, 타임아웃, 외부 의존성, DNS | 최소 재현 스크립트, 분산 트레이스·로그 상관관계, 재시도·서킷 설정 점검 |
| 성능 저하 | N+1, 동기 I/O, 락 경합, 과도한 직렬화, 캐시 미스 | 프로파일러·APM으로 핫스팟 확인 후 한 가지씩 제거 |
| 메모리 증가 | 캐시 무제한, 구독/리스너 누수, 대용량 버퍼, 커넥션 미반납 | 상한·TTL·힙/FD 스냅샷 비교 |
| 빌드·배포만 실패 | 환경 변수, 권한, 플랫폼 차이, lockfile | CI 로그와 로컬 diff, 런타임·이미지 버전 핀 |
| 설정 불일치 | 프로필·시크릿·기본값, 리전 | 스키마 검증된 설정 단일 소스와 배포 매트릭스 표준화 |
| 데이터 불일치 | 비멱등 재시도, 부분 쓰기, 캐시 무효화 누락 | 멱등 키·아웃박스·트랜잭션 경계 재검토 |
권장 순서: (1) 최소 재현 (2) 최근 변경 범위 축소 (3) 환경·의존성 차이 (4) 관측으로 가설 검증 (5) 수정 후 회귀·부하 테스트.
배포 전에는 git add → git commit → git push 후 npm run deploy 순서를 권장합니다.