드디어 블로그를 배포하고, 첫 포스트를 쓰게 되었다!
미루고 미루던 계획을 꺼내오기까지
사실 “블로그를 만들자!” 하고 머릿속에 계획한 것은 작년 겨울방학이었다. 작년 가을부터 여러 개발자 모임에 참석했었는데, 모임에서 알게 된 개발자분들 중 상당수가 개인 블로그를 운영하시는 것을 보고, 블로그를 만들어야겠다고 생각만 했다. 아직 아무것도 모르는 초보였으니깐 겨울방학이면 다 만들 수 있겠지? 하고 패기넘치게 생각했지만…
알아야 할 것들이 너무 많음을 깨닫다
그렇게 블로그를 만들겠다는 결심을 하고, 블로그를 만들 수 있는 여러 가지 방법들을 찾아보다가 문득 깃허브 블로그가 눈에 들어왔다. <github_id>.github.io
의 형식으로 깃허브에서 웹사이트를 호스팅 해주는 서비스였는데, 처음에 딱 “이거다!” 하고 꽂힌 이유는
- “깃허브” 라니깐 뭔가 있어 보여서
- 뭔가 어렵지 않게 할 수 있을 것 같아서
였는데, 막상 겪어보니깐 전혀 아니었다! 깃허브 블로그는 jekyll
이라는 웹사이트 제작 도구를 이용한 (알고보니 이 툴을 깃허브에서 만들었다) 정적 웹사이트 호스팅 방식이었는데, “2017년 1월의 나” 한테는 너무 힘들었다 (너무나도 당연했다. 웹개발 경험이라고는 중2때 딱 한번 맛본 html이 전부였으니깐).
그래도 어떻게든 튜토리얼을 따라가면서 해본 결과 레포지토리를 만들 수는 있었다. 하지만, 해당 레포지토리로 들어가보니 그냥 흰색 바탕에 “GyuLog” 라고 적힌, 말 그대로 아무것도 없는 html 페이지 하나 뿐이었다. 여기다가 내용을 추가하고 꾸미자니 CSS도 적용해야 되고, 자바스크립트도 배워야 되고, 너무 할 것들이 많았다. 이 때 “내가 멋모르고 거창한 계획을 세웠구나” 를 뼈저리게 느꼈다.
그리고 2학년 1학기가 찾아왔고, 대학교 2학년들에게 찾아오는 “대2병” 에 나도 예외는 없었다가 아니라 그냥 내가 너무 게을러서 공부를 안했다.
다시 웹 개발에 손을 대다
그렇게 방황을 하다가 다시 웹 개발에 손을 대게 된 계기는, 학교에서 학과 동아리에 들어가고 나서부터였다. 과 동아리가 1학년 신입생들은 동아리 자체 세미나에 참석하고, 나머지 재학생들은 세미나를 진행함과 동시에 동아리에서 팀을 만들어서 프로젝트를 진행하는 형식이었는데, 여러 주제를 고민하다가 우리 팀에서 나온 주제는 “동아리 웹사이트 만들기” 였다.
또한, 세미나를 진행하면서 느꼈던 점은, “내가 많이 알아야지 많이 알려줄 수 있겠구나” 였다. 배워서 남 주는 것을 좋아하지만 남을 주려면 일단 배워야 할 것이 아닌가.
학교 동아리 웹개발 팀에서 나온 얘기는, “학기중에 파이썬과 장고(django
)를 공부하고, 방학때 개발을 시작하자” 였다. 그리고 방학중에는 개발을 위한 기획조차 하지 않았다. 동아리 차원에서 웹 개발을 하게 될 것 같아서 웹 백엔드를 본격적으로 공부함과 동시에 개인 블로그 구축까지 해낸다면 얻어갈 것이 많을 것 같아서 다시 시작했고, 다음과 같이 대충 블로그 개발을 위한 구상을 했다.
- 프론트엔드를 할 줄 모르니 무료 테마를 이용하자.
- 백엔드는
Go
를 이용하여 구축하자. - 배포는
docker
를 활용하여aws
에 배포하자.
Go 언어를 선택한 이유
백엔드 언어 중에 눈에 들어온 세 가지는 Python
, Node.js
, 그리고 Go
였는데, 고 언어를 선택하게 된 이유는,
- 파이썬은 어차피 학교 동아리 사이트 개발하면서 익힐 수 있을것 같아서
- 구글이 개발한 Go 언어를 써보고 싶어서
지인 개발자분이 고 언어 약을 팔아서자바는 너무 구리다고 생각해서
였다(블로그를 만들고 나니 고 언어로 개발한 선택은 대성공이었다. 고 언어를 소개해주셔서 감사합니다!). 또한, 세 언어를 모두 둘러본 결과, 고언어가 가장 간결해 보였고, C와 스타일이 제일 유사했다(그때 당시 가장 자신있었던 언어는 C/C++ 이었으니깐).
그렇게 정신없이 2학년 1학기가 끝나고 방학이 찾아왔고, 대충 계획해놓은 것들을 하나씩 실천에 옮기기 시작했다.
본격적으로 공부하고 개발하다
가장 먼저 한 일은, Go 언어를 공부하는 것이었다. 첫 번째로 공식 사이트 투어를 돌았다. 투어의 내용도 알찼고 한국어 번역도 엄청 잘 되어 있어서 이해하기 엄청 편하였다.
두 번째로, The Go Programming Language
라는 책을 사서 읽었다. 투어보다는 한층 더 심화된 Go 언어의 문법과 활용 방법에 대하여 알 수 있었고, 이때부터 고언어의 메커니즘에 빠져들었다. 인터페이스의 암시적 충족, 구조체의 리시버, 고루틴 등 고 언어의 매력적인 특징에 빠져들었다.
마지막으로, Go Web Programming
이라는 책을 사서 읽었다. 이 책을 통하여 웹 백엔드 개발의 기반 지식(http 등) 과 Go 언어로 웹 백엔드 개발을 하는 방법을 익혔다.
이렇게 공부를 다 하고 나니 뭔가 자신감이 솟구쳤다. 당장이라도, 하루만에 이 블로그란 것을 만들 수 있을 것만 같은, 왠지는 모르겠지만 할 수 있겠다는 자신감에 힘입어 일단 시작했다(역시 맨땅에 헤딩하면 힘들지만 얻어가는 것은 많은 거 같다). 하지만 역시나, 개발 과정이 순탄치는 않았는데, 가장 어려웠던 점을 꼽자면,
- 무료 테마를 Go 언어용 템플릿으로 바꾸는 일
- UI 수정이 필요함에 따라 CSS를 수정하는 일
- 버그가 났을 때 기록하고, 고치는 일
주로 프론트엔드 관련 작업이 가장 어려웠다. 아무리 백엔드 개발이라도 프론트엔드 지식이 없으면 힘들구나 라는 사실을 깨달았다.
그렇게 7월 한달을 꼬박 공부하고 개발하여서, 결국 로컬(내 컴퓨터) 에서 잘 돌아가는 블로그를 완성시켰다!
배포
개발을 다 하였으니 실제 서버에 올려놓는 일만 남아서, 일단 하루 쉬고 aws 를 공부하기 시작하였다. 생각했던 것보다 aws는 복잡하고 엄청 기능들이 많았다. 정말 없는 게 없는 정도였다! 클라우드 서버부터, 데이터베이스며, 파일 저장소며, 도메인 관련 기능까지 정말 많았다.
배포 과정 또한 일단 하고 봤다. EC2(클라우드 서버)도 두고, S3(파일 저장소) 도 두고, RDS(관계형 데이터베이스 - 데이터베이스를 MySQL을 이용하여 개발하였다) 도 두고…
하다보니 너무 복잡해서 구글링을 하다가, Elastic Beanstalk
에 대해서 알게 되었는데, 여태 내가 시도한 삽질한 것들을 전부 알아서 해결해주는 aws 기능이었다! (여러분 EB 씁시다 알아서 다 해줘요) EB 를 사용하는 과정에서 docker
는 필요가 없다고 생각되어서 사용하지 않았고, 오랜 고생 끝에 이 블로그가 탄생하게 되었다! 이제 aws 프리 티어 한도가 다 될 때까지 제대로 놀아보는 일만 남았다.
얻었던 것, 그리고 앞으로 할 일들
막상 블로그를 완성시키기 전에는 엄청 힘들었는데, 끝나고 보니깐 “별거 아니었네” 라는 생각도 든다.
우선, 많이, 꾸준히 프로젝트를 해야겠다 라는 것을 느꼈다. 개인 프로젝트든 팀 프로젝트든, 과정이 수월했든 수월하지 않았든 간에 해당 프로젝트에서 얻어가는 기술적인 면과 정신적인 면이 많겠구나 는 것을 첫 개인 프로젝트였던 “블로그 만들기” 에서 얻었다.
두번째, 백엔드 개발자라도 프론트엔드 지식이 필요하다 를 느꼈다. 개발 도중에 가장 힘들었던 일은, http 요청/응답 다루기, 데이터베이스, 기타 고언어적인 부분이 아닌 바로 프론트엔드 였으니깐. 또한, 막상 팀으로 개발할 때 프론트엔드 개발자가 팀에 있더라도, 백엔드 개발자가 프론트엔드 지식이 있으면 팀원간 소통이 훨씬 쉬울 테니깐 프론트엔드 지식이 필요할 것이다.
세번째, 로그 남기기와 유닛 테스팅의 중요성 을 느꼈다. 개발 초기에는 구현하는 기능 및 메소드에 일절의 로그도 남기지 않았다. 그러다 보니 개발하고 있는 소프트웨어의 현재 상태 등을 개발 도중에 알아내기가 매우 어려웠다. 또한, 테스팅을 소홀히 하다 보니 잘 되던 기능이 갑자기 안 되는 경우도 있었다. 고 언어에는 테스팅 라이브러리가 매우 잘 되어 있는데 이를 활용하지 못했다는 자책감도 든다.
하지만 무엇보다도, 코딩은 하면 재밌다 를 가장 와닿게 느꼈던 것 같다. 딱 웹사이트에 접속했을 때 원하던 화면이 뜰 때 그 쾌감이란!
이렇게 첫 번째 개인 프로젝트 “블로그 만들기” 는 일단 끝이 난 상태다. 하지만 앞으로 할 일들이 많은 것 같아서 정리해보면,
- 검색 기능과 분류 기능 : 포스트가 많아짐에 따라 검색 기능과 분류 기능이 추가적으로 구현되어야 할 것으로 보인다. 검색은
elasticsearch
를 한번 사용해볼 생각이다. - 블로그 테마 오픈소스화 : 블로그 테마를 Go 언어 엔진에서 쓸 수 있도록 템플릿으로 제작하였는데,
hugo
같은 블로깅 시스템에서 쓸 수 있도록 상용화를 시켜볼 생각이다(이미 원작 테마 깃허브 레포지토리를 fork 해둔 상태이다). - 성능 개선 : 처음 한 개발이다 보니깐 미숙한 부분이 많았을 것이다. 추후 다른 프로젝트를 하면서 지식을 더 얻은 후에 다시 블로그 코드로 돌아와서 성능을 개선시켜 볼 생각이다.
많은 우여곡절 끝에 작년 겨울에 계획"만" 했던 블로그 만들기를 무려 8개월의 시간 끝에 드디어 완성시켰다! 정말 블로그 만들기를 잘 한것 같다. 노력이 헛되지 않도록 꾸준히 포스팅을 열심히 해야겠다.