코스 개요
1. Go 입문
- Go(Golang)란?
- Go의 역사와 디자인 철학
- 웹 및 시스템 프로그래밍 언어로서의 Go
- 주요 특징:
- 정적 타이핑
- 간단함과 가독성
- 빠른 컴파일
- 내장된 동시성
- 가비지 컬렉션
- 크로스 플랫폼 컴파일
- Go의 일반적인 사용 사례
- Go의 이점과 한계
- C/C++, JavaScript, Ruby, Python, Java와의 Go 비교
- Go 생태계 이해
- Go 표준 라이브러리 개요
- Go 모듈 및 의존성 관리
- Go 애플리케이션 구조 해부
- 실습: 간단한 Go 프로그램 검토 및 실행
2. Go 개발 환경 설정
- Go 설치
- Go 툴체인 이해
- 환경 변수 구성
- IDE 또는 코드 에디터 선택
- 커맨드 라인에서 Go 사용
- Go 워크스페이스 생성
- Go 프로젝트 구조 이해
- Go 모듈을 사용하여 프로젝트 초기화
go mod init사용go get을 사용하여 의존성 관리- 의존성 업데이트 및 검사
gofmt을 사용하여 소스 코드 포맷팅go run을 사용하여 프로그램 실행go build을 사용하여 애플리케이션 빌드- Go 애플리케이션 설치
- 애플리케이션 크로스 컴파일
- 실습: 컨테이너 내부에서 Go 프로젝트 생성 및 구성
3. Go 변수, 상수 및 타입
- 변수 선언
- 명시적 타입과 추론된 타입
- 단축 변수 선언
- 상수
- 기본값(Zero values)
- 변수의 스코프와 수명
- 원시 데이터 타입:
- 정수
- 부동 소수점 숫자
- 복소수
- 불리언
- 문자열
- 타입 변환
- 유니코드 및 UTF-8 처리
- 루니(Runes)와 바이트(Bytes)
- 여러 변수 대입
- 타입 안전성 이해
- 연습: 작은 커맨드 라인 데이터 처리 프로그램 구축
4. 연산자와 식(Expression)
- 산술 연산자
- 비교 연산자
- 논리 연산자
- 대입 연산자
- 증가 및 감소 연산자
- 연산자 우선순위
- 정수 및 부동 소수점 계산 처리
- 흔한 타입 변환 오류 피하기
- 연습: 계산 및 검증 로직 구현
5. 날짜, 시간 및 포맷팅
time패키지 사용- 날짜 생성 및 조작
- 현재 시간 조회
- 시간대 및 위치
- 날짜 및 시간 파싱
- 날짜 및 시간 포맷팅
- 경과 시간(Durations) 계산
- Unix 타임스탬프 처리
- 타임아웃 처리
- 연습: 애플리케이션에 타임스탬프 및 경과 시간 계산 추가
6. 배열, 슬라이스, 맵 및 구조체
배열(Array)
- 배열 선언
- 배열 초기화
- 배열 반복(iterating)
- 다차원 배열
슬라이스(Slice)
- 슬라이스와 배열의 차이 이해
- 슬라이스 생성
- 요소에 추가(Appending)
- 슬라이스 복사
- 슬라이스 길이와 용량
- 슬라이스 슬라이싱(Slicing slices)
- 흔한 슬라이스 함정
맵(Map)
- 맵 생성
- 항목 추가 및 삭제
- 키 존재 여부 확인
- 맵 반복(iterating)
- 복잡한 데이터를 포함하는 맵
구조체(Struct)
-
구조체 정의
-
구조체 필드
-
구조체 초기화
-
중첩 구조체(Nested structs)
-
익명 구조체(Anonymous structs)
-
구조체 메서드
-
JSON 구조체 태그
-
실습: 구조체, 슬라이스, 맵을 사용하여 사용자, 제품 및 애플리케이션 데이터 모델링
7. 조건문과 루프
if문else및else if- 조건 내 변수 선언
for루프- 무한 루프
- 루프 조건
break및continuerange를 이용한 반복- 중첩 루프
switch문- 식 기반 스위치(Expression-based switches)
- 여러 케이스(Multiple cases)
- 기본 케이스(Default cases)
- 타입 스위치(Type switches)
- 연습: 애플리케이션 검증 및 처리 로직 구현
8. 함수
- 함수 정의
- 함수 매개변수
- 반환 값(Return values)
- 여러 반환 값
- 이름 있는 반환 값(Named return values)
- 가변 인자 함수(Variadic functions)
- 익명 함수
- 함수 값(Function values)
- 클로저(Closures)
- 재귀(Recursion)
- 함수를 인자로 전달하기
- 에러 반환 함수
- 작고 재사용 가능한 함수 설계
- 연습: 기존 코드를 재사용 가능한 함수로 리팩토링
9. 포인터와 메모리 개념
- 포인터란?
- 주소(&) 및 참조 해제(*) 연산자
- 포인터와 함수 매개변수
- 포인터 수신자(Pointer receivers)
- 구조체 포인터
- Nil 포인터
- 포인터 사용 시점
- 값 세멘틱스 vs 참조 세멘틱스
- Go의 메모리 관리 및 가비지 컬렉션 이해
- 흔한 포인터 실수
- 실습: 포인터를 사용하여 애플리케이션 데이터 수정
10. Go를 사용하여 웹 애플리케이션 구축
- Go의 웹 기능 개요
net/http패키지 소개- HTTP 서버 생성
- HTTP 요청과 응답
- HTTP 메서드
- 요청 URL 및 쿼리 매개변수
- HTTP 헤더
- HTTP 상태 코드
- 라우팅 기초
- 핸들러(Handlers) 생성
- 폼 데이터 처리
- 정적 파일 서빙(Serving)
- HTML 템플릿 사용
- 템플릿 변수 및 제어 구조
- 웹 애플리케이션 구조화
- 실습: 기본 Go 웹 서버 구축
11. RESTful 웹 서비스 구축
- REST 아키텍처 기초
- API 엔드포인트 설계
- GET, POST, PUT, PATCH 및 DELETE
- JSON 처리
- JSON 인코딩 및 디코딩
- 요청 검증
- HTTP 상태 코드
- 에러 응답
- 쿼리 매개변수 및 경로 매개변수
- API 응답 구조
- 핸들러와 비즈니스 로직 분리
- 실습: CRUD REST API 구축
12. Go 런타임, 컴파일 및 프로젝트 빌드
- Go 컴파일러 이해
- Go의 빌드 프로세스
go rungo buildgo installgo test- 빌드 플래그
- 환경별 구성
- 다른 운영 체제 및 아키텍처를 위한 빌드
- 스탠드얼론 바이너리 생성
- 애플리케이션 구성 관리
- 연습: 애플리케이션을 여러 플랫폼을 위해 컴파일
13. 파일과 웹 처리
- 파일 열기 및 닫기
- 파일 읽기
- 파일 쓰기
- 디렉터리 생성
- 파일 메타데이터
- 버퍼링된 I/O
- 스트림 처리
- JSON 파일 읽기 및 쓰기
- HTTP 클라이언트
- 대외 HTTP 요청 전송
- HTTP 클라이언트 에러 처리
- 타임아웃 및 취소
- API 응답 처리
- 실습: 외부 API에서 데이터를 가져와서 로컬에 영속화
14. 에러 처리 및 디버깅
- Go의 에러 접근 방식
- 함수에서 에러 반환
- 에러 확인
- 커스텀 에러 생성
- 에러 래핑(Wrapping errors)
- 에러에 컨텍스트 추가
errors.Is및errors.As- Panic과 Recovery
panic사용 시점- 흔한 Go 문제 디버깅
- 애플리케이션 활동 로깅
- Go 디버깅 도구 사용
- 연습: 고의로 도입된 애플리케이션 에러 진단 및 수정
15. 인터페이스와 추상화
- 인터페이스란?
- 암시적 인터페이스 구현
- 인터페이스 정의
- 인터페이스 값
- 빈 인터페이스 /
any - 타입 어설션(Type assertions)
- 타입 스위치(Type switches)
- 포인터 구현 vs 값 구현
- 작은 인터페이스 설계
- 의존성 역전(Dependency inversion)
- 테스트를 위한 인터페이스 사용
- 애플리케이션 결합도(Coupling) 감소
- 실습: 예제 웹 애플리케이션에 인터페이스 도입
16. 패키지 및 프로젝트 조직
- 패키지 생성
- 패키지 네이밍 규칙
- 내보낸(Exported) 및 내보내지 않은(Unexported) 식별자
- 패키지 가져오기(Importing)
- 패키지 초기화
- 애플리케이션 레이어 조직화
- 내부 패키지(Internal packages)
- Go 모듈을 사용하여 의존성 관리
- 시맨틱 버전링(Semantic versioning)
- 서드파티 패키지 사용
- 순환 의존성 피하기
- 유지보수 가능한 Go 프로젝트 설계
- 연습: 애플리케이션을 별도의 패키지로 리팩토링
17. 고루틴(Goroutines)을 활용한 동시성
- 동시성(Concurrency)이란?
- 고루틴(Goroutines)
- 고루틴 시작
- 경량 동시 실행 이해
- 동기화 문제(Synchronization challenges)
- 공유 상태(Shared state)
- 경쟁 상태(Race conditions)
sync.WaitGroup사용- 뮤텍스(Mutexes) 및 읽기/쓰기 뮤텍스
- 원자(Atomic) 연산
- 실습: 순차적 작업을 동시 처리로 변환
18. 채널(Channels)
- 채널 이해
- 값 전송 및 수신
- 버퍼링된 채널 vs 비버퍼링된 채널
- 블로킹 동작
- 채널 닫기
- 채널을 대상으로 반복(Ranging over channels)
- 방향성 채널(Direction channels)
- 채널 기반 통신
- Select 문
- 타임아웃 및 취소
- 워커 풀(Worker-pool) 패턴
- 프로듀서/컨슈머(Producer/consumer) 패턴
- 실습: 동시 워커 시스템 구축
19. 컨텍스트(Context) 및 요청 관리
- 웹 애플리케이션에서 컨텍스트의 중요성
context.Context- 요청 스코프 컨텍스트(Request-scoped context)
- 취소(Cancellation)
- 데드라인(Deadlines)
- 타임아웃(Timeouts)
- 애플리케이션 레이어를 통해 컨텍스트 전파
- 데이터베이스 또는 HTTP 작업 취소
- 컨텍스트 오용 방지
- 연습: 웹 애플리케이션에 요청 취소 및 타임아웃 추가
20. Go 애플리케이션 테스트
- 자동 테스트의 중요성
- 단위 테스트 작성
testing패키지- 테스트 함수
- 테스트 네이밍 규칙
- 테이블 기반 테스트(Table-driven tests)
- 에러 테스트
- HTTP 핸들러 테스트
- HTTP 테스트 서버
- 테스트 픽스처(Test fixtures)
- 테스트 커버리지
- 벤치마크(Benchmarks)
- 예제 테스트(Example tests)
- мок(모의 객체)이나 가짜(Fake)를 사용한 인터페이스 테스트
- 실습: 예제 애플리케이션용 테스트 스위트 생성
21. 성능 최적화
- Go 애플리케이션 성능 이해
- 병목 현상 식별
- CPU 성능 vs 메모리 성능
- 효율적인 데이터 구조
- 불필요한 할당 감소
- 문자열, 바이트 및 버퍼
- 고루틴 관리
- 과도한 동시성 방지
- 캐싱 전략
- 데이터베이스 및 네트워크 고려 사항
- 애플리케이션 프로파일링
- 벤치마크 및 성능 테스트
- Go 프로파일링 도구 사용
- 연습: 고의로 비효율적으로 작성된 애플리케이션 프로파일링 및 최적화
22. 보안 및 견고한 웹 애플리케이션 관행
- 사용자 입력 검증
- HTTP 요청 안전 처리
- 흔한 웹 취약점 방지
- 안전한 에러 처리
- 인증 및 권한 부여 개념
- 비밀 정보 및 구성 관리
- 안전한 HTTP 통신
- 로그에 민감한 정보 노출 방지
- 의존성 관리 및 업데이트
- 리소스 제한 및 요청 타임아웃
- 연습: 예제 API 검토 및 강화
23. 애플리케이션 로깅 및 관찰 가능성(Observability)
- 로깅 기초
- 구조화 로깅(Structured logging)
- 로그 레벨
- 요청 로깅
- 에러 로깅
- 상관 관계 및 요청 ID(Correlation and request IDs)
- 애플리케이션 행동 모니터링
- 기본 메트릭(Basic metrics)
- 헬스 체크(Health-check) 엔드포인트
- 프로덕션 문제 진단
- 실습: 구조화 로깅 및 헬스 체크 추가
24. Go 애플리케이션 컨테이너화
- 왜 컨테이너를 사용해야 할까?
- Go 애플리케이션과 컨테이너화
- Dockerfile 작성
- 멀티스테이지 빌드(Multi-stage builds)
- 최소 런타임 이미지 구축
- 환경 변수를 통한 구성 관리
- 컨테이너 네트워킹
- 애플리케이션 포트 노출
- 컨테이너에서 애플리케이션 실행
- 컨테이너화 된 애플리케이션 테스트
- 실습: 예제 Go 애플리케이션을 프로덕션 대응 컨테이너로 패키징
25. 배포
- 프로덕션을 위한 애플리케이션 준비
- 프로덕션 바이너리 빌드
- 환경 구성
- 컨테이너 기반 배포
- 배포 아키텍처
- 리버스 프록시(Reverse proxies)
- HTTPS/TLS 고려 사항
- 애플리케이션 헬스 체크
- 순격 종료(Graceful shutdown)
- 운영 체제 신호 처리
- Go 웹 애플리케이션 스케일링
- 수평 스케일링 vs 수직 스케일링
- 기본 배포 문제 해결
- 실습: 예제 웹 애플리케이션 배포
26. 캡스톤: 완전한 Go 웹 애플리케이션
참가자는 개념을 종합하여 완전한 애플리케이션을 개발합니다.
프로젝트는 다음을 포함할 수 있습니다:
- Go 모듈을 통한 프로젝트 초기화
- 패키지 조직
- HTTP 라우팅
- REST API 엔드포인트
- JSON 요청 및 응답 처리
- 입력 검증
- 에러 처리
- 인터페이스
- 동시 처리
- 외부 API 통신
- 파일 또는 데이터베이스 영속화
- 자동 테스트
- 로깅
- 성능 고려 사항
- 컨테이너화
- 프로덕션 구성
- 배포
27. 검토 및 모범 사례
- Go 핵심 구문 검토
- Go 코딩 규칙
- 아이디오매틱(Idiomatic) Go 작성
- 코드의 단순함 유지
- 효과적인 패키지 설계
- 에러 처리 모범 사례
- 인터페이스 설계 원칙
- 동시성 모범 사례
- 테스트 전략
- 성능 고려 사항
- 유지보수性及び가독성
- 신규 Go 개발자가 범하기 쉬운 흔한 실수
- Go 개발 지속을 위한 권장 접근 방식
28. 결론
- 핵심 개념 검토
- 완성된 웹 애플리케이션 검토
- 질문 및 토론
- 흔한 현실 시나리오 문제 해결
- Go 개발을 위한 권장 다음 단계
- 추가 Go 라이브러리 및 생태계 리소스
- 프로덕션 등급 Go 서비스 구축을 위한 추가 기회
요건
- 일반 프로그래밍 원리에 대한 이해
대상 수강생
- 개발자
회원 평가 (5)
트레이너는 자신이 해당 주제의 전문가임을 입증했습니다. 이는 절대로 당연하게 여기지 않습니다. 그는 산업 표준에 대한 매우 유용한 통찰력을 제공했습니다.
Giuseppe
코스 - Learning Go Programming
기계 번역됨
저는 실습을 많이 한 것에 대해 만족했습니다. 저는 실제로 해보면서 배우는 편이라 프란체스코가 많은 실습을 제공해준 것이 좋았습니다. 슬라이드에서 몇 가지 개념을 이해하는 데 어려움이 있었지만, 실제로 손으로 해보고 언어의 핵심 기능들을 구현하면서 더 잘 이해할 수 있었습니다.
Adam Fitzhugh - OpticoreIT
코스 - Learning Go Programming
기계 번역됨
강사가 약간 더 어려운 질문을 도와주고 유지하는 능력.
Andrei Mihai - Viasat
코스 - Learning Go Programming
기계 번역됨
라두의 심도 있는 지식과 제 속도에 맞춘 강의.
Adeel Ahmad - Coefficient Data Ltd
코스 - Learning Go Programming
기계 번역됨
트레이너의 유연성. 정말 우리의 특정 요구에 맞게 과정을 조정해주었습니다.
Daniel Kurner - Daimler TSS
코스 - Learning Go Programming
기계 번역됨