본문 바로가기

DevOps/Study

[DevOps challenge] The Big Picture: DevOps & Learning a Programming Language

Day07. The Big Picture: DevOps & Learning a Programming Language

90DaysOfDevOps/day07.md at main · MichaelCade/90DaysOfDevOps


왜 프로그래밍 언어를 배워야 할까?

팀원들과 같은 언어를 써야하고, Kubernetes or Containers → GO lang

학생이면 일하게 될 분야의 언어를 배우는게 좋다.

DevOps tools 를 잘 다루기 위해서 언어를 잘 알아야 한다

특히, YAML files → yaml 이란?

왜 GO?

인기있는 언어라서

python → 실행 전 complie 과정이 생략되어서

GO→ 바로 컴파일 해서 실행속도가 빠르다.

Go 는 single binary executable, and no external dependencies

go는 외부 패키지가 필요없다 파이썬은 외부 패키지가 있어야만 외부에서 실행할 수 있다.

또한, go는 플랫폼에 독립적인 프로그램으로 OS에 상관 없이 실행이 가능하고 낮은 CPU와 메모리로 실행 가능하다.

싱글 바이너리란?

아래는 싱글 바이너리의 개념을 이해하기 위해 정리하고자 한다.

바이너리 코드

  • 컴퓨터 내부적으로 이용하는 코드로서 0과 1로만 표현 되는 것을 뜻한다.

실행 프로그램 파일(확장자가 COM이나 EXE)은 모두 이진 파일

기계어

0과 1로 이루어진 바이너리 코드이다.

기계어가 이진코드로 이루어졌을 뿐 모든 이진 코드가 기계어는 아니다.

단지 CPU제조사에서 CPU를 만들 때 해당 CPU에서 사용하는 명령어 집합을 공개하는데, 이것을 '기계어'라고 부를 뿐이다.

때문에 CPU가 변경되면 기계어가 달라진다. 같은 동작을 하는 명령어지만 완전히 다른 0과 1의 나열이 될 수 있다는 말

바이트 코드

바이트 코드는 가상머신이 이해할 수 있는 언어를 뜻함 즉, 제조사가 바뀌어도 머신이 이해하는 언어

자바 실행 방법

실행엔진(Execution Engine)은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행. 이때, 실행 엔진은 두가지 방식으로 변경한다.

i. 인터프리터: 바이트 코드 명령어를 하나씩 읽어서 해석하고 실행함.

ii. JIT 컴파일러(Just-In-Time Compiler) : 바이트 코드 전체를 컴파일하여 바이너리 코드로 변경하고 이후에는 해당 메서드를 더 이상 인터프리팅 하지 않고, 바이너리 코드로 직접 실행하므로 하나씩 인터프리팅하여 실행하는 것이 아니라 바이트 코드 전체가 컴파일된 바이너리 코드를 실행하는 것이기 때문에 전체적인 실행속도는 인터프리팅 방식보다 빠름.

3가지 언어 해석 방식

파이썬 → 인터프리터 언어로 기계어로 바로 변환 (os 독립적) 각각의 os 에 맞춰서 변환을 하기 때문

자바 → 컴파일 → jvm 메모리에 바이트 코드 올림 → 실행 엔진 2개 → 바이트 코드를 바이너리 코드(기계어)로 읽어서 해석 후 실행

go → 컴파일 → 싱글(네이티브) 바이너리 코드(기계어)로 변환 → 바로 실행

go가 빠르게 컴파일 할 수 있는 이유

싱글 바이너리 코드로 변환 하기 때문에 os 에 맞게 해석할 필요도 없고, 컴파일 후 기계어로 바로 번역되어 실행하기 때문에 실행 속도도 빠르고 리소스 사용율도 매우 적다. 가능한 이유는 go lang 자체가 매우 simple 하기 때문에 가능하다고 한다.

'DevOps > Study' 카테고리의 다른 글

yaml 이란?  (0) 2022.07.10
[DevOps challenge] Day 03.DevOps Lifecycle  (0) 2022.07.03
[DevOps challenge] Day02 DevOps engineer’s Role  (0) 2022.07.03
[DevOps 90 challenge] Day 01. DevOps?  (1) 2022.06.27