일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- go 패닉
- go 대기그룹
- air 환경변수
- go 맥 air
- go air 환경변수
- go clean architecture
- golang gopher
- go channel
- 개발자
- 좀비고루틴
- gin logger
- 고루틴 채널
- 신입개발자
- go 맥
- go air
- go recover
- 골랑 고퍼
- go 환경변수
- clean architecture middleware
- go 캐릭터
- gin recovery
- go디자인패턴
- go 마스코트
- go 맥 air 환경변수
- gopath 환경변수
- go panic
- go
- git
- gin middleware
- go middleware
- Today
- Total
뽀미의 개발노트
Go 컴파일 언어 본문

네이티브 바이너리 형식 컴파일 언어
C#과 Go의 컴파일 차이
C#의 소스코드는 IL(Intermediate Language)(중간 단계의 코드)로 컴파일됨. 컴파일된 코드는 CLR(Common Language Runtime)에서 실행됨. CLR은 Virtual Machine처럼 동작하며, JIT(Just-In-Time) 컴파일러를 통해 IL을 네이티브 코드(CPU가 이해할 수 있는 기계어)로 바꿈. IL 코드는 플랫폼 독립적이어서 OS에 구애받지 않지만, 최종적으로는 .NET 런타임(CLR)이 있어야만 실행됨.
클라우드에 배포할 때 .NET 런타임을 포함해야해서 배포가 상대적으로 복잡함. (*.NET 환경에서만 실행된다는 소리는 : .NET Core 또는 .NET5라면 배포할때 .NET 런타임을 포함해서 self-contained 애플리케이션이 됨. 사용자는 별도로 뭘 설치 안 해도 됨. 근데 .NET Framework는 윈도우 전용이고, 최신 윈도우에는 저게 기본적으로 설치되어 있어 사용자가 별도로 뭐 설치 안 해도됨. 근데 구버전이 필요할 경우 따로 설치해야될 수도 있음.)
Go는 Go 컴파일러에 의해 네이티브 바이너리로 컴파일됨. (현재 사용하는 OS와 하드웨어에 알맞게끔) 별도의 VM이나 런타임 환경 설치 필요 없이 바로 실행될 수 있음. 여러 플랫폼(Linux, Windows, macOS 등 운영체제 또는 x86, ARM 등 CPU 아키텍처)에 맞는 바이너리를 간단하게 한번에 생성할 수 있음.
Go로 만든 프로그램은 종속성 없이 하나의 실행 파일로 배포할 수 있어 클라우드에 배포하기 간편함. 또한 Docker를 이용해 Go 애플리케이션을 배포할 때 경량화된 도커 이미지로 쉽게 빌드할 수 있음. 그래서 컨테이너화된 환경에서 효율적으로 동작하고, 빠른 배포가 가능함.
빠르게 시작하고 종료할 수 있어 MSA(Microservices Architecture)에 적합함. MSA는 분산 시스템이므로 여러 서비스 간에 많은 요청과 응답이 오고 가는데, 이런 환경에서 Go의 고루틴이 효율적으로 멀티태스킹 처리하는데 유리함. Go로 개발된 프로그램은 단일 실행 파일로 배포 가능하여 각 마이크로 서비스를 독립적인 바이너리로 배포하는데 매우 적합함.
백엔드 언어로 쓰일 때 장점
JAVA VS Python VS Go 비교
JAVA
자바로 만든 프로그램은 JVM(Java Virtual Machine) 위에서 돌아가야 함. 그래서 덕분에 OS와 하드웨어에 종속되지 않고 독립적으로 실행 가능함. 근데 JVM이 실행될 때 메모리를 많이 사용함.

자바는 동적 컴파일 언어라서 사용할 때 컴파일함. 그리고 컴파일러와 인터프리터 모두 사용함. 소스코드가 자바 컴파일러에 의해 완전한 기계어로 컴파일된 상태가 아니고 실행할 때 interpret 되느라 좀 느림. 그래서 컴파일된 자바코드를 기계어로 바꿔주는 JIT 컴파일러를 이용해 단점을 보완했음. 그래도 초기 실행 시간이 좀 걸려서 좀 느림.

Python
파이썬은 Interpreter 언어임(JS와 TS처럼). 런타임 내에서 필요할 때마다 interpret 함.. 인터프리터는 런타임에 한줄한줄 코드를 번역해서 실행시간이 좀 느림.

Go
고는 compile 언어. 컴파일 언어는 컴파일 하는 데는 오래 걸리지만 한번 해두면 실행속도는 빠른게 특징인데, 고는 컴파일 속도마저 빨라서 인터프리터 언어처럼 쓸 수 있는 것이 장점임. Go는 코드 파일 전체를 바로 컴파일 해서 바이너리 파일을 뽑아내는 정적 프로그래밍 언어이므로 컴파일 후 그 자체로 프로그램이 됨. 그래서 CPU를 덜 먹고 속도가 빠름.
그리고 Go의 고루틴 기능 → 다른 언어에서도 있기는 한데 프레임워크를 꼭 통해서 제공 가능함. 근데 고에서는 언어 자체에 내장된 기능이라 더 가볍고 빠름. 그래서 동시성 프로그래밍에 유용함. 10명이서 같이 접근해도 누군가 하나는 기다려야되는 상황이 아니라 동시에 동작할 수 있는 것!!! 동시성이 필요한 작업에 고루틴을 마~음껏 써도 됨.
'Go lang' 카테고리의 다른 글
Go 프레임워크 + 테스트코드 라이브러리 (0) | 2024.12.20 |
---|---|
Go 고루틴과 채널 (1) | 2024.12.20 |
Go는 exception이 없다 (0) | 2024.12.20 |
Go 포인터와 GC (0) | 2024.12.20 |
Go 구조체와 인터페이스 (1) | 2024.12.20 |