개요
지난 2~3년간 Go언어에 대해 집중적으로 관심이 좁혀졌던 것에 비해,
최근(2023)에는 Go-lang에 대한 관심이 식은것같아 시장 상황이 궁금하여 다음과 같은 글을 작성하게 되었다.
선요약
- 대한민국에서 Go언어로 주력으로 나가기는 어렵다.
- Go를 첫언어로 선택하기보다는 Java, Python 등이 많음.
- Go는 Type강제가 심한 언어이므로, OOP를 추구하는 다른언어들과 특징이 다르므로 선뜻 선택하기는 어려운편.
- C언어를 대체로 리팩토링하기에는 이르다고 생각.
Go언어 특징
• 편의성 :동시성 기능 중 일부는 언어 자체에 내장. 'http 패키지'와 같은 고 표준 라이브러리 패키지로 제공된다. 자동 메모리 관리 기능을 지원. 파이썬 등의 스크립팅 언어와 달리 고 코드는 빠르게 실행되는 네이티브 바이너리로 컴파일된다. 컴파일 속도는 매우 빨라서 스크립팅 언어를 쓰는 느낌이 들 정도다.
• 속도 : 고 바이너리의 실행 속도는 C보단 느리지만 속도 차이는 대부분의 애플리케이션에서 무시할 만한 수준이다. 대부분의 작업에서 고의 성능은 C와 대등.
• 이식성 : 고 툴체인으로 생성된 실행 파일은 기본적인 외부 종속성 없이 단독으로 실행할 수 있다. 고 툴체인은 다양한 운영체제 및 하드웨어 플랫폼에서 사용할 수 있으며, 여러 플랫폼에서 바이너리를 컴파일하는 데 쓸 수 있다.
• 상호운용성 : 고는 기반 시스템 액세스를 희생하지 않고 이 모든 장점을 제공한다. 고 프로그램은 외부 C 라이브러리와 통신하거나 네이티브 시스템 호출을 수행할 수 있다. 예를 들어 도커에서 고는 저수준 리눅스 함수, 컨트롤 그룹, 네임스페이스와 연결하여 컨테이너를 활용할 수 있다.
• 지원 : 고 툴체인은 리눅스, 맥OS, 윈도우 바이너리 또는 도커 컨테이너로 무료 제공된다. Red Hat Enterprise Linux와 Fedora 등 여러 인기 리눅스 배포판에 기본으로 포함돼 있어 이런 플랫폼에 배치하기 비교적 용이하다. VS Code 등 많은 서드파티 개발 환경에서도 고 지원은 탄탄하다.
개선
주요 개선 사항으로는 의존성 관리(고의 지속적인 문제점), 버그 진단, 신뢰성이 있었다. 이 밖에 메모리, CPU 사용량, 바이너리 크기, 빌드 타임 등도 지적됐다.
Go언어 분야
:주요 사용 사례는 API 또는 RPC 서비스 개발(49%)이었다. 데이터 처리(10%), 웹 서비스(10%), CLI 애플리케이션(8%)
• 클라우드-네이티브 개발
고의 동시성 및 네트워킹 기능, 높은 수준의 이식성은 클라우드 네이티브 앱을 개발에 적합하다. 실제로 고는 도커, 쿠버네티스, 이스티오 등 여러 클라우드 네이티브 컴퓨팅의 기반을 구축하는 데 사용됐다.
• 분산형 네트워크 서비스
네트워크 애플리케이션의 핵심은 동시성이며, 고의 네이티브 동시성 기능(예: 고루틴 및 채널)은 이런 작업에 적합하다. 많은 고 프로젝트가 API, 웹 서버, 웹 애플리케이션을 위한 최소 프레임워크 등 네트워킹, 분산형 기능, 클라우드 서비스에 쓰이는 이유다.
• 유틸리티 및 독립형 도구
고 프로그램은 외부 종속성이 최소화된 상태에서 바이너리로 컴파일된다. 그래서 유틸리티 및 기타 도구 제작에 이상적이다. 빠르게 실행되고 재배포를 위해 신속하게 패키지화할 수 있어서다. 텔레포트(Teleport, SSH용)라는 액세스 서버를 한 예로 들 수 있다. 텔레포트는 소스부터 컴파일하거나 사전 구축 바이너리를 다운로드하여 쉽고 빠르게 서버에 배치할 수 있다.
네트워크 고부하 환경, MSA 등 다양한 것을 섞어쓰는경우 Go-lang은 좋다.
하지만, 기존 것을 리팩토링하기엔 아직 어려움이 있을 것이다.
참고 출처:
https://www.itworld.co.kr/news/250756#csidxbf0b6039d33dcf0935cdb390457d98b
'웹(Web) > 데브옵스(DevOps)' 카테고리의 다른 글
[그라파나x엘라스틱서치] 시각화 방법 (0) | 2024.03.02 |
---|---|
mariaDB 설치오류 해결법(MariaDB 10.4 Setup Wizard ended prematurely because of an error) (0) | 2022.02.02 |
[React/Spring Boot/Kotlin] 목록 만들기(배포) (2) | 2021.06.30 |
[React/Spring Boot/Kotlin] 목록 만들기(Spring-React연결하기) (0) | 2021.06.30 |
포트 사용중일때, 사용중인 port 죽이기 (0) | 2021.06.29 |