ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 노트북을 사용하면 아키텍처 호환성 이슈를 꼼짝없이 맞을 수 밖에 없다. 다행히 이것도 시간이 지나면 해결될 것이다.

     

    패키지 관리가 까다롭다

     

    Java를 많이 써본 사람이라면 패키지 명으로 패키지 관리는 하는데 GO 언어에선 GO 모듈이라는 것으로 패키지 관리를 한다. 그런데 이게 깃헙에 코드를 공개하는 기능까지 고려해서 만든 것이긴 한데 패키지 명을 url로 사용하는게 컨벤션 규칙이 됐다. 다른 부분의 수정사항을 무시하고 확장성까지 고려해서 만든 기능인 것은 이해가 되긴 한데 그래도 패키지 명에 url 주소를 넣는것은 아직까진 이해가 가지 않는다. 물론 이것 또한 취향 차이이긴 하지만 개인적으로 불편한 부분이라서 단점에 넣어봤다.

     

     

    '개발' 카테고리의 다른 글

    golang 장단점 분석 (vs JAVA)  (0) 2022.03.10
    Flutter - Row, Column, Flexible, Expanded  (0) 2022.03.01
    PostgreSQL VACUUM  (0) 2022.02.17
    go - goroutine  (0) 2022.02.03

    댓글 0

Designed by Tistory.