-
golang 장단점 분석 (vs JAVA)개발 2022. 3. 10. 14:49
장점
빠르다
Java는 JVM 위에서 돌아가기 때문에 실행하기 위해선 byte코드를 machine코드로 변환하는 과정이 필요하다. 반면 golang은 빌드과정에서 이미 machine코드로 변환했기 때문에 바로 동작할 수 있다. 빌드에 걸리는 시간도 GO 언어 내부적으로 최적화를 많이 해둬서 빠른편이다. 초기 C++에서 실용성을 추가한 버전이기 때문에 속도는 거의 C++과 비슷하다고 봐도 무방할 것 같다.
비동기 작업이 쉽다
GO 언어에는 goroutine이라는 비동기 작업 처리용 경량 쓰레드가 있다. 코틀린에 coroutine과 비슷한 원리인데 둘다 사용해본 입장에선 goroutine이 좀더 간결하고 쓰기 간편했다. Nodejs 가 갖고 있는 비동기처리의 장점을 go 언어 상에도 잘 녹여낸 것 같다.
배우기 쉽다
C++에서 실용성을 가미한 언어기 때문에 여러므로 C, C++과 비슷한 점이 많다. 개인적으로 나도 따로 튜토리얼은 해보지 않고 스택오버플로우만 조금 보고 바로 코드를 작성 할 수 있었다. 실용주의를 많이 강조했기 때문에 언어도 쉽고 배울만 하다.
단점
메이저 언어가 아니다
다른언어에 비해 역사가 상대적으로 짧다. 그리고 메이저 언어는 아직 아닌 것 같다. 그렇다보니 몇몇 라이브러리에선 GO 언어와 호환되는 버전을 만들지 않는 경우가 종종 있다. 대표적으로 사내 시스템에서 제공하는 DB가 GO 언어를 지원하지 않아 어쩔 수 없이 스프링으로 돌아가야 했었다.. 그래도 최근에 대부분 플랫폼에서는 지원해주는 편이다.
아키텍처에 영향을 받는다
Java는 JDK와 Spring의 maven 파일에서 라이브러리를 참조하는 반면 GO는 실행하는 컴퓨터의 라이브러리 즉 /usr/lib 폴더내의 라이브러리를 쓴다. 그래서 gcc 같은 경우 호스트 컴퓨터의 gcc 버전을 변경해야하는 경우도 있다. 최근 M1이 대중화 되면서 몇몇 라이브러리는 ARM64버전을 이제서야 대응하기 시작했는데 GO언어를 쓰고 M1 노트북을 사용하면 아키텍처 호환성 이슈를 꼼짝없이 맞을 수 밖에 없다. 다행히 이것도 시간이 지나면 해결될 것이다.
라이브러리 관리가 까다롭다
pom.xml 이나 gradle 을 이용해서 패키지 관리하는데 익숙한 자바 개발자라서 그런지 go 언어용 클라이언트 라이브러리를 불러올 때 github url을 넣어야 한다는 것이 익숙하지 않았다. Kafka 라이브러리를 임포트 할 때도 자바에서 쓰는것 처럼 자동완성된 패키지명을 쓰는 것이 아니라 url이 포함된 주소가 들어가 있어서 생소하기도 하고 적응이 안되기도 하고. 아마 시간이 지나면 차차 적응이 될 것 같기도 한데 주관적인 느낌으로는 와닿지는 않다.
import ( "fmt" "github.com/confluentinc/confluent-kafka-go/kafka" ) func main() { c, err := kafka.NewConsumer(&kafka.ConfigMap{
'개발' 카테고리의 다른 글
kubernetes - Configmap (0) 2022.06.08 Kafka 용어 정리 (0) 2022.05.31 Flutter - Row, Column, Flexible, Expanded (0) 2022.03.01 PostgreSQL VACUUM (0) 2022.02.17 go - goroutine (0) 2022.02.03