아주 찰나와 같은 시간동안 집중적으로 Go언어와 함께하고 있는 아마추어가 글을 남겨도 될까 싶습니다만... Go언어는 장점과 단점이 정말 명확해서 선택하시는 분들도, 피하시는 분들도 분명한 이유가 있어 보입니다. 개인적으로 Rust 언어와 비교할 건 아닌 거 같고 Kotlin(Java)과 비교하는 게 맞는 거 같습니다.
Go의 고루틴은 정말 훌륭하지만, 마법은 아닙니다. 특히 백엔드에서 MySQL을 하나만 쓰는 작은 프로젝트에서는 이 동시성이라는 게 관리하기 정말 까다롭습니다. JS/TS런타임에서는 크게 신경 안써도 되는 MySQL 자원 고갈 현상이나 풀 관리가 생각보다 어렵거든요. 결국 이 상황에서는 DB가 병목이 되므로 Go언어의 동시성에 대한 장점이 일부 퇴색됩니다. (JS/TS 런타임의 비동기 I/O나 이벤트 루프가 오히려 더 적절할 수도 있음) 당장 hey 같은 도구로 -c 100 이렇게 때려넣어보면 알 수 있습니다.
그리고 훌륭한 GC가 있지만, 그렇다고 함부로 객체를 포인터만 넘겨서 쓰다가 뒤처리는 나몰라라 해선 안됩니다. 모든 게 트레이트오프가 있지만, Go언어도 가능하면 작은 객체들은 그냥 값 복사로 넘겨서 사용하고 함수가 끝나면 바로 처리되도록 하는게 낫습니다. 제가 낡은 사고에 같혀 있는 걸지도 모르겠지만, C/C++ 언어처럼 효율의 관점으로 포인터를 쉽게 접근하면 안되었습니다.
error 를 함수 리턴할 때 거의 매번 리턴하고 그걸 매번 if err != nil {} 로 검사해야 하는 건 정말 귀찮지만, 이건 장점입니다. try catch 보다 비용이 저렴하니까요. 그리고 finally {} 와 같은 역할을 해주는 defer 키워드도 훌륭합니다. 자원 해제 시점을 고민할 필요가 없으니 좋습니다. 표준 라이브러리만으로 훌륭한 백엔드 서버 구성이 바로 가능한 점도 좋구요 (1.23 이상) 무엇보다 타켓 OS에 맞춰 빌드하면 다른 런타임이나 사전 설치가 필요하지 읺다는 점이 가장 좋습니다.
Go언어를 길게 쓰진 않았는데 너무 개인적인 의견으로 길게 쓰는 것 같아 이만 줄입니다. ㅎㅎ 저는 Go언어도 좋고 다른 언어도 좋습니다!
아주 찰나와 같은 시간동안 집중적으로 Go언어와 함께하고 있는 아마추어가 글을 남겨도 될까 싶습니다만... Go언어는 장점과 단점이 정말 명확해서 선택하시는 분들도, 피하시는 분들도 분명한 이유가 있어 보입니다. 개인적으로 Rust 언어와 비교할 건 아닌 거 같고 Kotlin(Java)과 비교하는 게 맞는 거 같습니다.
Go의 고루틴은 정말 훌륭하지만, 마법은 아닙니다. 특히 백엔드에서 MySQL을 하나만 쓰는 작은 프로젝트에서는 이 동시성이라는 게 관리하기 정말 까다롭습니다. JS/TS런타임에서는 크게 신경 안써도 되는 MySQL 자원 고갈 현상이나 풀 관리가 생각보다 어렵거든요. 결국 이 상황에서는 DB가 병목이 되므로 Go언어의 동시성에 대한 장점이 일부 퇴색됩니다. (JS/TS 런타임의 비동기 I/O나 이벤트 루프가 오히려 더 적절할 수도 있음) 당장 hey 같은 도구로 -c 100 이렇게 때려넣어보면 알 수 있습니다.
그리고 훌륭한 GC가 있지만, 그렇다고 함부로 객체를 포인터만 넘겨서 쓰다가 뒤처리는 나몰라라 해선 안됩니다. 모든 게 트레이트오프가 있지만, Go언어도 가능하면 작은 객체들은 그냥 값 복사로 넘겨서 사용하고 함수가 끝나면 바로 처리되도록 하는게 낫습니다. 제가 낡은 사고에 같혀 있는 걸지도 모르겠지만, C/C++ 언어처럼 효율의 관점으로 포인터를 쉽게 접근하면 안되었습니다.
error 를 함수 리턴할 때 거의 매번 리턴하고 그걸 매번 if err != nil {} 로 검사해야 하는 건 정말 귀찮지만, 이건 장점입니다. try catch 보다 비용이 저렴하니까요. 그리고 finally {} 와 같은 역할을 해주는 defer 키워드도 훌륭합니다. 자원 해제 시점을 고민할 필요가 없으니 좋습니다. 표준 라이브러리만으로 훌륭한 백엔드 서버 구성이 바로 가능한 점도 좋구요 (1.23 이상) 무엇보다 타켓 OS에 맞춰 빌드하면 다른 런타임이나 사전 설치가 필요하지 읺다는 점이 가장 좋습니다.
Go언어를 길게 쓰진 않았는데 너무 개인적인 의견으로 길게 쓰는 것 같아 이만 줄입니다. ㅎㅎ 저는 Go언어도 좋고 다른 언어도 좋습니다!