ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Go 명분 찾기
    개발하면서/etc 2017. 10. 26. 19:36
    반응형

    Go에 관심을 갖은 건 2012년 정도로 생각된다. 하지만!! 지금까지 Go 관련 글을 Evernote나 workflowy에 저장만 하고

    딱히 Go를 이용해서 뭘 만들어 보지도 않을뿐더러 문법도 애매하게 안다...

     

    지금까지 행동 없이 관심만 가지고 지내면서 너무나 무뎌진 나의 개발 능력을 체감했고, 날카롭게 만들고 싶었다.

    (물론 무뎌짐을 느낀게 처음은 아니지만 이번엔 세게 왔다. 결심은 큰 의미 없으니 어느 정도 생각이 잡히면 바로 행동)

    우선 내가 날카롭게 만들고 싶은게 무엇인지 적어보면 

    다양한 데이터를 손쉽게 수집하기,

    수집한 데이터와 사용 용도에 적합한 DB solution을 찾을 줄 알고, 장/단 점 파악 및 설정 값들이 어떤 의미가 있는 정도, 

    마지막으로 저장된 데이터를 쉽게 관리할 수 있는 시스템 만들기다. 

     

    우선 Go의 장점/단점이 어떤게 있는지 알아보고, 명분을 찾아보자.

     

    Why go is Not Good

    • Generic, Type overloading 이 없다
    • immutable data type, pattern matching, option이 없다
    • 대부분 multiple return의 두 번째 값을 통해 오류처리를 하는데 잊어버리기 쉽다.
    • embedded programming에는 overhead가 없는 Rust 가 짱짱맨

     

    Why we switched from Python to Go

    • C++, Java와 비슷한 성능
    • 직관적인 코드로 생산성 괜춘
    • goroutine과 channel을 이용한 쉬운 동시성 코딩 (1977년에 시작된 CSP를 새로운 접근 방식으로 구현)

    부족한 (CRUD API 지원되는) Framework과 패키지 관리 시스템과 부족한 Error Handling

    Python과 Go를 비교

    • 코딩 시간은 Python이 조금 더 짧았지만 최적화하는데 시간이 오래 걸렸다.
    • Go는 최적화가 필요하지 않을 정도로 괜찮은 성능이 나왔다.

     

    Why Go and Rust are not competitors

    • Rust는 C/C++ 호출이 overhead 없이 가능, Go엔 cgo라는 게 있지만 성능 이슈가 있다.
    • Rust는 극강의 성능을 지향, Go는 단순함을 유지하기 위해 성능을 희생
    • Go는 단순함이나 직교 성을 해치는 것을 막는 것에 초점을 잡았고
      Rust는 unsafe 하거나 오버헤드, 즉 성능에 영향을 끼치는 것을 막는데 초점이 잡았다.
    • Rust는 성능을 요구하는 C++, D 같은 언어와 경쟁한다. ex) 게임 엔진, 웹 렌더링 엔진
    • Go는 인터넷 2.0세대 이후 생긴 Ruby, Python, Node.js 그리고 배포에 오랜 시간이 걸리는 JVM 기반 언어와 경쟁한다.

    Why Go?

    • 메모리 관리에 대해서 안전하다.
    • 개발 생산시간이 컴파일 시간보다 비싸진 건 오래전부터 다.
      Go는 컴파일 시간이 짧고, 코드에 모호성이 없다.
    • 코드를 읽는 것이 작성하는 것보다 우선순위가 높다는 기조로 만들어졌다.
      그리고 다양한 분석 도구들이 생기고 있다.
    • 하드웨어의 발전만으로 성능을 이끌어냈던 공짜 점심은 끝났다.
    • goroutine, channel를 이용해 동시성을 지원하는 코드를 손쉽게 작성할 수 있다.

     

    How to convince Your company to Go with Golang

    Go를 좋아하면 새로운 걸 배우는 걸 좋아하는 사람들이고 이런 사람들은 우리 회사가 원하는 개발자였다. 채용 개이득!! ㅋㅋ

     

    마음에 드는 말

    기술로 무언가를 할 수 있다는 것이 가장 좋은 방법은 아니라는 것을 사람들에게 이해시키는데 도움이 되었던 말 
    “Perl로도 계속 개발할 수 있다."

    “We can keep doing it in Perl,” which usually helped people to understand that just because you can do something with a technology doesn’t mean its the best way to do it.

     

    Ten Reasons Why I Don’t Like Golang

    • public, private을 대소문자로 구분하는 것, scope이 어디까지인지 알기 어렵다
    • error handling이 어렵다
    • “convention over configuration” 기조가 작은 프로젝트에선 괜찮지만 커다란 프로젝트에선 너의 발목을 물것이다!!
    • 사용하지 않는 variable이나 import가 있으면 경고가 아니라 컴파일이 안된다.
    • ternary 연산자가 없어서 불편하다.
    • generic이 없어서 interface{}를 사용하고 있다.
    • db 혹은 web 과의 통신이 잦은 프로그램에서는 추천하지 않는다.

     

    Why rust?

    SQL 계층은 Go의 장점을 십분 활용해 구현했지만, 성능이 중요한 저장 계층에선 Go가 단점이 되었다.

    저장소로 RockDB를 사용하기로 했는데 cgo의 오버헤드 무시 못함 

     

    Why Go? http://www.mikeperham.com/2014/10/08/why-go/

     

    지금까지 tutorial 수준으로 해왔던 경험과 위 링크를 읽은 후 Go에 대한 나의 생각

     

    문법이나 생태계 측면으로는 정말 생존에 필요한 도구만 챙기고 바로 캠핑을 떠나는 모험가 같다.
    마치 베어 그릴스 같은...
    편안하고 쉬운 캠핑을 하기 위해 더 챙겨가면 좋은데 가볍고 빠른 행동(?)을 하기 위해 정말 필요한 것만 챙긴다.

    하지만 단체로 캠핑을 갈 경우엔 함께 가는 사람들이 모두 베어 그리스가 아니라면 좀 더 많은 것들을 챙겨가야 할 것이다. 
    (Go가 큰 프로젝트에 사용할 때 불편하다는 말에 어느 정도 공감한다. 물론 크다는 기준이 굉장히 주관적이지만...)

    사용성이나 성능면으로는 어떠한 분야를 특출 나게 잘하진 않지만 다양한 분야를 어느 정도 잘하는 사람 같다.
    [학교 성적/회사 성과]도 상위권이고 친구와의 관계도 그리 나쁘지 않고, 이성에게 인기도 어느정도 있는 그런 사람.

    Go를 나쁘게 보면 어중간하다고 할 수 있지만 두루두루 잘한다고 볼 수도 있다.

    정말 극강의 성능을 필요로 한다면 C/C++ 나 Rust로, 외부 데이터와의 연동이 많다면 Java로 하고 그 외에는 Go!!
    Python의 라이브러리가 좋은 게 있으면 Python을 이용하자
    (현재 데이터 분석 및 관리하는 건 Python이 최고!!!)

    우선 Go부터 시작하고 어느 정도 익숙해지면 Python도 익숙해져 보자 (제발~~~)

    반응형

    댓글

Designed by Tistory.