-
Go 언어란?
- C언어의 모체가 된 B언어와 유닉스의 개발자인 켄 톰슨이 설계에 참여해 구글이 개발한 프로그래밍 언어
- 빠른 성능, 안정성, 편의성, 쉬운 프로그래밍을 목표로 개발된 범용 프로그래밍 언어
Go 언어의 특징
- 정적 타입, 강 타입
- 컴파일 언어
- 가비지 컬렉션
- 병행성(Concurrency)
- 멀티코어 환경 지원
- 모듈화 및 패키지 시스템
- 빠른 컴파일 속도
Go 언어의 장점
- 네이티브 바이너리형식
- 가상 머신 위에서 돌아가는 Java, C#에 비해 성능이 좋음
- 컴파일 시간
- C, C++ 는 헤더파일이 많아서 컴파일 속도가 느림, 헤더파일 의존 관계도 복잡
- Go는 헤더파일이 없음, 소스 코드를 패키지화하여 변경된 부분만 컴파일하므로 속도가 빠름, 문법적으로도 복잡한 요소를 최대한 줄여 컴파일 속도에 유리하게 설계
- 언어적 문법 간결, 컴파일 속도가 빠름 생산성 증대
- 간결한 컴파일 명령어로 인해 C나 C++처럼 make 파일을 복잡하게 만들 필요가 없음
- 컴파일 시간을 단축시킬 수 있으며 속도도 빠름
- 컴파일 시간
- 가비지 컬렉션
- Java나 C#처럼 메모리 관리를 해주는 가비지 컬렉션이 존재
- Java나 C#처럼 가상머신으로부터 제공되는것이 아니므로 성능적 우위를 가져올 수 있음
- C나 C++ 처럼 별도의 메모리 관리가 필요 없고 가비지 컬렉션으로 인해 생산성이 높아짐
- C, C++의 빠른 성능 + Java, C#의 빠른 생산성의 장점을 동시에 가져올 수 있음
- 고루틴
- 쓰레드 위에서 돌아가는 경량 쓰레드같은 개념
- 쓰레드보다 적은 리소스(고루틴: 2KB, 쓰레드: 1MB) 약 500배 차이)
- 멀티쓰레드 방식에 비해 리소스 부담을 대폭 줄여줌
- 활용 범위
- 메모리 관리에 시간을 쏟기 보다는 로직에 집중하는 애플리케이션 개발에 적합, 생산성 위주
- 메모리 관리가 철저히 요구되는 시스템 라이브러리 개발에는 적합하지 않음
- 메모리관리가 다소 느슨해도되고 규모가 크고 복잡하며 유지보수가 번번한 곳에서 편리하게 사용할 수 있음
Go 언어 채택 사유
- 언어적 문법이 간결 -> 언어 접근성, 생산성 유리
- 가비지 컬렉션이 제공 별도 메모리 관리 불필요 -> 생산성 유리
- Java, C#과 같은 가상머신을 필요로 하지 않기때문에 C, C++에 가까운 성능적 퍼포먼스를 가져올 수 있음 -> 성능 유리
- 컴파일 방법이 간단하고 속도도 빠름 -> 생산성 유리
- 멀티코어 프로그래밍을 지원하므로 멀티코어 시스템에 유리(요즘 시스템은 대부분 멀티코어) -> 성능 유리
- 고루틴이라고 하는 경량쓰레드(일반쓰레드 리소스의 1/500 수준)를 활용해서 다중 처리 시스템에 유리 -> 성능 유리
- 기본 라이브러리가 다양하게 제공되고 외부 라이브러리도 보편화되어있어 구하기 쉬움 -> 생산성 유리
결론
- C, C++의 성능의 장점 + Java, C#의 생산성의 장점을 동시에 활용할 수 있음
- 메모리 관리에 신경을 덜 쓰게 되므로 유지보수가 번번히 이루어지는 시스템에 적합(온라인 캐주얼 게임 서비스, 웹 서비스, 실시간 서비스 등)
- 다중 처리 시스템에 유리하므로 서버에 적합
- 메모리 관리가 철저히 요구되는 애플리케이션에는 적합하지 않음(예: 시스템 라이브러리, 드라이버 등)
- 좋은 성능의 시스템으로 원활한 유지보수에 적합
- 온라인 게임 서비스, 웹 서비스 등에 적합
- 쉬운 문법으로 인해 진입장벽이 높지 않음
- 범용적으로 쓰이고있는 클라우드 플랫폼인 Docker도 Go언어 기반으로 개발되었음
- 활용 분야가 많아지고 있는 추세(블록체인)
- 아직까지는 국내의 범용적인 언어들에 비해서는 개발자들이 많지 않음