Go 로 서버 만들기 · 에러를 값으로 다룬다 · 실습
표준 라이브러리만으로 서버를 만든다
목표
표준 라이브러리만으로 HTTP 서버를 만들면서 Go 가 무엇을 강제하는지 봅니다.
프레임워크를 고르기 전에 net/http 가 이미 무엇을 주는지 확인합니다.
왜 중요한가
Go 를 처음 쓰는 사람은 if err != nil 이 지겹다고 말합니다. 그런데 그 길이는
비용이 아니라 명시성의 가격입니다 — 어느 줄이 실패할 수 있는지가 타입에
적혀 있고, 무시하려면 무시한다고 적어야 합니다.
이 실습에서는 그 대가와 이득을 둘 다 만져 봅니다. 그리고 Go 에서 실제로
사고가 나는 자리(고루틴 누수, 취소 미전파)를 직접 만들어 봅니다.
환경
네트워크가 없어 go get 은 동작하지 않습니다. 이 실습은 표준 라이브러리만
쓰므로 상관없습니다 — 오히려 그게 이 코스의 논점입니다.
go mod init <이름> 모듈 시작go build -o srv . 빌드go vet ./... 흔한 실수 찾기gofmt -l . 포맷이 어긋난 파일 나열단계
1. 모듈 초기화 → /root/work/gosrv/go.mod
2. /health 서버
3. 에러를 값으로 (%w 로 감싸기)
4. errors.Is/As → /root/work/gosrv/04-errors.txt
5. JSON 응답 → /root/work/gosrv/05-json.txt
6. context 로 취소 전파 → /root/work/gosrv/06-ctx.txt
7. 고루틴 누수 → /root/work/gosrv/07-leak.txt
8. go vet / gofmt → /root/work/gosrv/08-vet.txt
참고
- 서버를 띄운 뒤에는
kill %1로 정리합니다. 8080 이 물려 있으면 다음 - 에러 메시지는 소문자로 시작하고 마침표로 끝내지 않습니다 — 다른 메시지
빌드가 못 뜹니다.
안에 끼워 넣어지기 때문입니다.
단계 8개
- 모듈을 만든다
- HTTP 서버 한 개
- 에러를 값으로 돌려준다
- 원인을 물어본다
- JSON 을 돌려준다
- 취소를 전파한다
- 고루틴이 새는 것을 본다
- 도구에게 먼저 물어본다