연락처 정보

코스 개요

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
  • elseelse if
  • 조건 내 변수 선언
  • for 루프
  • 무한 루프
  • 루프 조건
  • breakcontinue
  • range를 이용한 반복
  • 중첩 루프
  • 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 run
  • go build
  • go install
  • go test
  • 빌드 플래그
  • 환경별 구성
  • 다른 운영 체제 및 아키텍처를 위한 빌드
  • 스탠드얼론 바이너리 생성
  • 애플리케이션 구성 관리
  • 연습: 애플리케이션을 여러 플랫폼을 위해 컴파일

13. 파일과 웹 처리

  • 파일 열기 및 닫기
  • 파일 읽기
  • 파일 쓰기
  • 디렉터리 생성
  • 파일 메타데이터
  • 버퍼링된 I/O
  • 스트림 처리
  • JSON 파일 읽기 및 쓰기
  • HTTP 클라이언트
  • 대외 HTTP 요청 전송
  • HTTP 클라이언트 에러 처리
  • 타임아웃 및 취소
  • API 응답 처리
  • 실습: 외부 API에서 데이터를 가져와서 로컬에 영속화

14. 에러 처리 및 디버깅

  • Go의 에러 접근 방식
  • 함수에서 에러 반환
  • 에러 확인
  • 커스텀 에러 생성
  • 에러 래핑(Wrapping errors)
  • 에러에 컨텍스트 추가
  • errors.Iserrors.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 서비스 구축을 위한 추가 기회

요건

  • 일반 프로그래밍 원리에 대한 이해

대상 수강생

  • 개발자
 28 시간

참가자 수


참가자별 가격

회원 평가 (5)

예정된 코스

관련 카테고리