Go + Vue 토이프로젝트 후기
in Programming Language on Go
나는 황금 연휴 기간 동안 무엇을 하였나?
4월 30일(석가탄신일), 5월1일(노동자의 날), 5월 2일(토요일), 5월 3일(일요일), 5월 4일 (휴가), 5월 5일(어린이날)
4월 말부터 공휴일이 끼면서 약 6일간 황금연휴가 있었다.
연휴때 뭘 해볼까… 하고 고민하다가 프로젝트를 해보고 싶다는 생각이 문득 들었다.
당시 프로젝트로 Go와 Vue로 개발된 마이크로 서비스를 담당하고 있었기 때문에
같은 기술 스택으로 토이프로젝트를 해봐야겠다고 생각했다.
곧장 실행에 옮겨 간단한 CRUD 게시판을 만들어보았다.
현재는 GCP에 배포하여 올린 상태이다. (그러나 종종 서버가 내려감… 역시 k8s를 써야…)
오늘은 Go와 Vue로 개발하면서 내가 느꼈던 점을 간략하게 적어보려고 한다.
Go 언어
요즘 굉장히 핫한 언어이고 성능에 초점을 맞춘 언어이다.
원래는 C를 대체할만한 간단하고 직관적이며 성능이 뛰어난 (특히 동시성 프로그래밍을 아주 손쉽게 구현 가능) 언어를 지향하고 있다.
실제로 Go는 정말 간략하고 C스러운 개념들(구조체, 포인터가 존재)은 한 때 C를 좋아하던 나에게는 아주 반갑게 다가왔다.
다만 Spring Framework라는 서버 개발에 특화된 프레임워크를 써보다 보니 분명히 불편한 점들도 있었다.
우선 Go는 표준 라이브러리들이 굉장히 방대하고, 서버 개발을 위한 서드파티 라이브러리들이 많이 존재한다.
그래서 Go로 개발할 때는 특정 프레임워크를 쓴다는 느낌 보다는 마이크로 라이브러리들을 조합해서 만든다는 느낌이 강하다.
그래서 스프링보다는 오히려 러닝커브가 완만한 편이었다.
하지만 그만큼 번거로운 부분들이 많았으며, 날 것(?)을 그대로 다룬다는 느낌도 많이 들었다. (에러처리 부분)
또한 Gorm이라고 하는 ORM 라이브러리를 사용했는데 이 라이브러리 문서가 생각보다 불친절해서 좀 애를 먹었던 기억이 난다.
또한 나같은 주니어의 입장에서 봤을 때 Go 관련 자료들이 대부분 영어인 것도 조금 어렵게 느껴졌다.
스프링은 한국에서 고수분들이 많다보니 아무래도 한국어 자료가 많은 편인데 Go는 상대적으로 한국어 자료가 적었다.
그래서 Go를 배우는 것 자체는 어렵지 않지만, Go의 서드파티 라이브러리들은 문서화가 잘 안되어있는 경우가 종종 있어서 학습하기가 사람에 따라서는 조금 어려울 수도 있겠다 생각했다.
네이버에서 Go를 주력으로 쓰는 친구의 말로는 Go는 초보자가 처음 배우기에는 별로고, 주력 언어가 있고 사이드로 배우면 괜찮은 언어라는 얘기를 선배에게 들었다고 했는데 공감이 됐다.
그래도 여전히 직관적이고 간편한 문법은 매력적으로 느껴졌다.
다만 Go에서는 자바처럼 클래스안에 Attribute와 Method가 묶여지지 않아서 메소드가 다른 파일에 중구난방으로 있으면 한눈에 보기는 조금 불편한 감도 없지않아 있었다. ( 그래서 가급적이면 구조체와 메소드를 하나의 파일 안에 두고 최대한 가깝게 두려고 노력했다. )
그리고 스프링의 AOP( Go에도 있을 수도..? )가 없는 것이 로깅할 때 꽤나 불편했다.
Vue
예전에 아주 잠깐 React를 써본적이 있는데, 굉장히 어렵게 느껴졌엇다.
자유도가 높은 라이브러리였지만 프론트 초심자인 나에겐 어려웠다.
그러나 Vue는 프레임워크라서 그런지 Vue-cli로 프로젝트를 생성하면 폴더들도 자동으로 셋팅되어 있는 점이 초보자인 나에게는 무척이나 좋았다.
그리고 러닝커브가 굉장히 쉬운편에 속해서 학습하면서도 재밌게 사용했던 기억이 난다.
그리고 상태관리에 Vuex를 사용했는데, 이 또한 굉장히 편리하게 상태관리를 할 수 있어서 좋았다.
총평
Go는 직관적이고 간편하며 성능이 뛰어난 언어지만 그만큼 특정 기능을 구현하기 위해서 마이크로 라이브러리들을 조합해서 사용해야하는 것은 살짝 귀찮게 느껴졌다.
종합 선물 셋트처럼 필요한 도구들을 모두 지원해주는 스프링 프레임워크가 그리운 순간이 종종 들었던 것이 사실이다.
하지만 그만큼 적은 코드량과 동시성 프로그래밍(고루틴)을 지원하는 점은 Go의 강점이라고 생각했다.
그래서 만약 동시성 프로그래밍이 필요한 서비스라면 마이크로 서비스로 만들어보기에는 좋은 언어라고 생각했다.
꼭 동시성 프로그래밍이 필요한 서비스가 아니더라도 GC가 있고, 기본적으로 성능이 뛰어난 Go를 서버사이드에서 사용하는 것은 좋은 선택일 수 있겠다고 생각했다.
Vue도 리액트,앵귤러에 비해서 완만한 러닝커브를 갖고 있고, 백엔드 개발자라고 하더라도 쉽게 사용할 수 있어서 좋았다.
그래서 러닝커브가 완만한 Go와 Vue를 조합해서 서비스를 만들었기 때문에 비교적 빠른 시간안에 토이프로젝트를 진행할 수 있었고, 굉장히 재밌었다.
다음에는 스프링 부트 + Kotlin + JPA + React로 토이프로젝트를 한번 진행해보고 Go + Vue와 어떤 점이 다른지 후기를 써봐야겠다.