[90DoDO] 시리즈는 MichaelCade의 90DaysOfDevOps 2022.ver를 바탕으로 공부한 내용을 담고 있습니다.
개인적인 견해는 초록색 초록색 글씨로 표시합니다.
Section2. Learning a Programmin Language는 Go 언어에 관련한 내용으로 한 포스트로 진행합니다.
day07. The Big Picture - DevOps & Learning a Programming Language
DevOps 직무엔 Python, Go가 주로 사용됩니다.
K8S나 컨테이너 사용을 위해선 Go 언어 학습이 더 유리합니다.
Go vs Python in DevOps
Python | Go |
---|---|
인터프리터 언어 빌드 프로세스가 길어지면 프로세스 속도가 느려질 수 있음. -> 소규모 자동화 작업에 유용 외부 라이브러리 의존도 높음 -> 프로그램을 실행하려는 원격 머신에 라이브러리 설치 필요 | 컴파일러 언어 but, 머신 코드로 직접 컴파일 됨 모든 종속성이 실행 파일에 포함 -> 외부 종속성 설치 필요없음 다양한 운영 체제용 쉬운 바이너리 실행 파일 생성 |
day08. Setting up your DevOps environment for Go & Hello World
go.dev/dl/ 해당 사이트에서 현재 사용 중인 컴퓨터의 운영체제에 맞는 파일을 다운로드하고
표시되는 화면을 따라 기본값으로 설치합니다.
(Mac 기준)
이후, 터미널에서 go version
을 입력해 설치가 잘 완료됐는지 확인할 수 있습니다.
다음으로, Go 환경변수를 확인해야 합니다.go env
를 통해 확인할 수 있습니다.
이후, mkdir go
로 go 폴더를 만들어 해당 디렉토리로 이동 후, (cd go
) pkg, bin, src 세 폴더를 만듭니다.
VScode에서 생성한 go 폴더를 열고 src/Hello 폴더를 생성합니다.
Hello 디렉토리 내에 main.go 파일을 생성후 Enter를 누르면 VSCode에 Go 확장 프로그램과 패키지 설치를 묻는 팝업이 우측 하단에 뜹니다.
이를 설치하고 다시 pkg 폴더를 확인하면 새로운 패키지가 추가됐음을 알 수 있습니다.
이제 main.go 파일에
package main
import "fmt"
func main() {
fmt.Println("Hello #90DaysOfDevOps")
}
를 복사하고 터미널에서 go run main.go
명령어를 실행합니다.
이 프로그램을 다른 컴퓨터에서 실행하려면 파일을 먼저 생성해야합니다.go build main.go
명령어를 활용해 main.go의 실행 파일을 생성합니다.
파일이 있는 디렉토리에서 ./main
명령어를 실행하면 정확히 동작함을 알 수 있습니다.
day09. Let's explain the Hello World code
Go 작동방식을 알아보기 전, 컴파일에 대해 알아야 합니다.
Compile이란, Java, C++ 같은 일반적인 고수준 프로그래밍 언어는 실행하기 위해선
기계가 이해할 수 있는 형태로 변환되어야 합니다.
이 작업을 컴파일이라고 합니다.
패키지는 같은 디렉토리 내 여러 .go 확장자 파일의 모음으로 구성됩니다.
이를 이용해 코드 재사용이 가능하고, 따라서 소스 코드의 재사용과 유지 보수가 쉬워집니다.
Day08에서 봤던 코드를 한 줄씩 살펴보면..
package main // 해당 파일이 main 함수를 포함하는 패키지임을 나타냄. main은 프로그램의 시작점
import "fmt" // 다른 패키지를 가져옴. fmt는 Go의 표준 패키지 중 하나. Println() 제공
func main() { // 코드가 시작되는 곳.
fmt.Println("Hello #90DaysofDevOps") // 터미널에 메시지 출력
}
Day10. The Go Workspace
아까 생성했던 src, pkg, bin 디렉토리가 각각 무슨 역할을 하는지 알아봅시다.
src: Go 프로그램과 프로젝트 코드 저장소.
pkg: 프로그램에 설치된 패키지의 파일 저장. 사용 중인 패키지가 수정되었는지 여부에 따라 컴파일 프로세스 속도 향상에 도움됨.
bin: 컴파일된 모든 바이너리가 저장됨.
.
코드 컴파일 및 실행
컴파일 방법 3가지
go build
:현재 디렉토리에서 패키지와 종속성 컴파일.
프로젝트에 main 패키지가 있다면, 실행 파일이 현재 디렉토리에 생성됨.
main 패키지가 없다면, 실행 파일은 pkg 폴더에 생성되고, 이후 다른 Go 프로그램에서 사용 가능.
+) go build를 사용하면 Go가 지원하는 모든 OS 플랫폼에서 실행 파일 빌드 가능
go install
: go build와 비슷하지만, bin 폴더에 실행 파일 저장
go run
: command line에 저장된 .go 파일로 구성된 기본 패키지를 컴파일하고 실행.
컴파일된 실행 파일은 임시 폴더에 저장됨.
Day11. Variables & Constants in Go (Go의 변수 및 상수)
Go는 변수를 선언하고 값을 정의하기 위해 func main 함수 내에서 var, const와 같은 키워드를 이용합니다.
#90DaysofDevOps 챌린지의 스케쥴 애플리케이션을 만드는 예제로 더 알아보겠습니다.
package main
import "fmt"
func main() {
var challenge = "#90DaysOfDevOps" // 변수 선언
const daystotal = 90 // 상수 선언
var dayscomplete = 11
fmt.Println("Welcome to", challenge, "")
fmt.Println("This is a", daystotal, "challenge and you have completed", dayscomplete, "days")
fmt.Println("Great work")
}
var
은 변경 가능한 "변수"입니다.
const
는 선언 이후 데이터 변경이 불가능한 "상수"입니다.
데이터 타입
Basic type: 숫자, 문자열, 불리언 값
-> bool: True & False
-> Numeric: 정수형, 부동 소수점 값, 복소수형
-> string: 문자열
Aggeregate type: 배열, 구조체
Reference type: 포인터, 슬라이스, 맵, 함수, 채널
Interfact type
변수 타입을 정의해야 하는 경우
"키워드 / 변수명 / 데이터 타입"
형식으로 정의할 수 있습니다.
ex) var DaysCompleted uint
Day12. Getting user input with Pointers and a finished program
Day11에선 학습을 완료한 개수인 daysComplete 변수에 값이 할당되어 있습니다.
이는 변수를 수정해야 하는 하드 코딩을 요구하기 때문에 사용자에게 입력을 받는 형태로 바꾸겠습니다.
Go의 기본 패키지인 fmt 패키지는 입력과 출력을 위해 다양한 기능을 제공합니다.
주로 메시지 출력, 사용자 입력, 파일에 쓰기 등의 기능을 합니다.
fmt.Scan(&TwitterName)
이 코드를 통해 사용자의 입력으로 변수에 값을 할당합니다.
package main
import "fmt"
func main() {
const DaysTotal int = 90
var remainingDays uint = 90
challenge := "#90DaysOfDevOps"
fmt.Printf("Welcome to the %v challenge.\nThis challenge consists of %v days\n", challenge, DaysTotal)
var TwitterName string
var DaysCompleted uint
// asking for user input
fmt.Println("Enter Your Twitter Handle: ")
fmt.Scanln(&TwitterName) // TwitterName 변수에 할당할 값을 사용자로부터 입력받음.
fmt.Println("How many days have you completed?: ")
fmt.Scanln(&DaysCompleted) // DaysCompleted 변수에 할당할 값을 사용자로부터 입력받음.
// calculate remaining days
remainingDays = remainingDays - DaysCompleted // 남은 날짜 계산
fmt.Printf("Thank you %v for taking part and completing %v days.\n", TwitterName, DaysCompleted)
fmt.Printf("You have %v days remaining for the %v challenge\n", remainingDays, challenge)
fmt.Println("Good luck")
}
'DevOps' 카테고리의 다른 글
[90DoDO] day05 계획 > 코드 작성 > 빌드 > 테스트 > 릴리즈 > 배포 > 운영 > 모니터링 > (0) | 2024.09.17 |
---|---|
[90DoDO] day04 DevOps & Agile (0) | 2024.09.17 |
[90DoDO] day03 애플리케이션 중심의 데브옵스 수명 주기 (1) | 2024.09.17 |
[90DoDO] day01 개요 & day02 DevOps엔지니어의 책임 (0) | 2024.09.17 |