2018년 회고

친구1

프로그래밍의 전부는 웹이고 HTML, CSS, jQuery인줄 알았던 나에게 프로그래밍 입문을 도와줬다. jQueryJavascript의 라이브러리인지도 몰랐던 시절이 떠오른다. 생활코딩을 보며 나의 개발공부를 시작하게 된 터닝포인트가 바로 친구1이었다.

  • Github: 커밋 확인 용도가 가장 컸다. 아직 협업을 하는 단계가 아니었기 때문에 브랜치를 쳐서 새로운 버전을 만드는 용도까지는 아니었다. 그리고 이때까지는 중요한 기능을 쓰지 않던 단계라 로컬에서 작업하나 깃헙에 업로드 하나 별 차이가 없었을 것같다.
    • TIL(Today I Learnd): 오늘 무엇을 공부했는지 기록하는 공간이다. 처음 몇 달간은 뭔가 맥락 없이 정리를 하다가 9월 말부터 매달 기록하는 식으로 틀을 잡아서 꾸준히 기록해가고 있다. 매달 기록하는 레이아웃에서도 처음에는 기록하는 내용들이 엄청 짧았지만 점점 내용들이 길어지고 있음을 눈으로 직접 보고 있다.
    • 버전관리: 코드를 버전관리 하는 것 뿐만 아니라 한글, 엑셀 파일도 버전관리가 가능하단 사실도 알 수가 있었다. 물론 깃으로 하는건 아니었다. .bak 확장자에 대해서도 알게 됐다. 그리고 어디선가 대한민국 헌법이 바뀐 것을 전후 버전으로 깃헙에서 본 기억이 났다. 그래서 투자 플랫폼의 약관이 바뀐 것을 보기 쉽게 깃헙에 올려 전후 버전을 비교해보는 기회도 있었다.

부지런함의 척도라며 잔디를 푸르게 푸르게 만들어야 한다고 알려줬다. 하지만 푸르게 푸르게 만들려다 쓸데없는 커밋을 해선 안된다고까지는 알려주지 않아서 이것을 깨닫는데 시간이 조금 걸렸다. 생각해보면 완전 당연한 이야기지만 쓸데없는 커밋으로 잔디를 늘리는건 멍청한 짓이었는데 말이다.

생활코딩

이고잉님의 강의를 보면서 공부하는 방법에 대해서 갈피를 잡았다. “지금 배우고 배운 것을 바로 응용해라. 모르는 지식들은 응용하다 막힌 시점에 필요에 의해 학습해라.” 라는 맥락의 말이었다. 커리큘럼을 보고 지금 당장 필요 없는건데 이게 왜 커리에 들어가있지 생각했던 것들이 지금 생각해보면 필요한 것들이었단 것을 알았다. 그때 내가 제대로 안봤는지 강의에서 어떤 문법이 왜 필요한지를 알려주지 않았는지는 기억이 나지 않지만 지금은 확실하다. 필요했고 필요하다.

그 맥락대로 공부를 하며 튜토리얼을 보고 따라만들고 깃헙에 올리는 식을 반복했다. 이때 서버 동작의 원리, CRUD, 이외에 필요한 지식들을 많이 쌓을 수 있었다. 이미 아는 사람들도 많겠지만 생활코딩은 처음 개발을 접하는 사람들에게는 정말 성지와도 같은 곳이라고 말해주고싶다. 인포그래픽이 나의 이해도를 배가 시켰던 것은 200프로 확신한다.

RSS reader

프로그램 공부에 짬나는 시간에 독일어 공부까지 하려니까 점점 시간이 부족해왔다. 평소에 커뮤니티에서 핫딜정보, 꿀팁들 읽는 것을 좋아했다. 이게 전부 다 다른 커뮤니티에서 읽는 글들이니 거기로 들어가서 괜찮은 글들을 찾는데만 해도 알게 모르게 체력소모가 있었을 것이다. 하지만 집에 쳐박혀 공부하느라 세상 돌아가는 물정까지 모르고 싶지는 않았다. 그래서 생각한게 한 플랫폼에서 커뮤니티에 괜찮은 글들을 받아서 보는 것이었다. 이미 내가 알고있는 것이더라. 블로그나 뉴스 사이트마다 RSS(Rich Site Summary) 아이콘이 있었는데 그게 뭔지 찾아보고자 하는 호기심이 없었던 내가 한심하더라. feedly라는 플랫폼에서 RSS를 긁어와서 전부 모아볼 수가 있었다. RSS기능을 기본으로 제공하는 사이트들은 클릭 한 번으로 XML코드를 받아올 수 있었지만 그렇지 못한 사이트들도 꽤나 있었다.

그래서 Feed43이라는 사이트를 알았다. 이 곳에서는 RSS를 기본으로 제공하지 않는 사이트에서도 정보를 긁어올 수 있게 HTML을 분석해서 XML을 짜주는 사이트다. 여기서 HTML의 반복원리를 대충이나마 알 수가 있게 되었다.

  • Feed43: SSR(Server Side Rendering)이 된 사이트만 긁어올 수가 있다. CSR(Client Side Rendering)이 된 곳은 크롤러가 HTML을 분석을 할 수가 없더라. 그저 자바스크립트 코드만 있었다.

Feedly를 통해 클리앙, 뽐뿌, JTBC, 1Boon같은 곳에서 양질의 정보만을 골라 읽어올 수 있어 생산성의 향상을 크게 봤다. 물론 개발공부에 도움이 된 부분은 적지만.

Weather Parser

처음에는 튜토리얼을 보고 따라하다가 RSS때문에 웹상에서 크롤링이 중요하다는 사실을 알았다.

그리고 항상 모바일로 외출 전 오늘 일기예보와 미세먼지 농도를 확인하는데 이 두 개를 한가지 앱으로 통합했으면 좋겠다는 생각을 해왔다. 그러다 생각난게 아직 웹개발조차 제대로 못하는데 앱개발은 무리지만 혼자서 쓰기 편하게 데이터들을 웹에서 긁어다가 한데 모으면 어떨까 하는 생각에서 시작되었다.

  • cheerio: request와 같이 사용해서 웹사이트의 <body>태그 내에 있는 내용을 전부 다 가져올 수 있다.
  • puppeteer: 웹 매크로처럼 사용할 수 있는 라이브러리이다. cheerio에 키보드 인풋, 캡쳐링 등의 기능까지 추가된 발전형이라고 할 수 있다.

위 라이브러리를 사용해서 처음 만든게 웹으로는 못들어가고 콘솔에서만 일기예보를 보는 간단한 프로그램이었다. 아직까지는 호기심이 많아질수록 만들 수 있는게 많아진다는 사실을 깨닫지 못했었다. 그러다 다른 튜토리얼을 보고 뷰까지 추가해서 크롤링해서 브라우저에 쏴줄 수 있게 만들었다.

팀프로젝트

Javascript 관련 검색 중 멤버1님 블로그를 살피다 프로젝트를 같이 할 사람을 구한다는 포스팅을 봤다. 블로그 하단에는 라이브 채팅앱이 설치가 되있었고 거기다 바로 메시지를 남겼다. 처음 시작부터 엄청 큰 도전으로 보였다. 쇼핑몰을 만드는 웹앱을 만들자는 내용이었으니까 말이다. 여기서 쇼핑몰을 먼저 만들어보자고 제안하고 인원이 나 포함 3명이 모였다. 여기서 한 2달 정도 아무런 소득없이 기본세팅만 했고 더이상 아무것도 하지 않고 흐지부지 끝나는 줄 알았다. 그 중 한 명이 탈주하고 며칠 후 멤버1님은 같이 학원을 다녔던 멤버2님을 초대해 진짜 팀다운 팀을 만들게 됐다.

  • 멤버1: 프론트엔드 개발. 블로그를 널리 알리려면 어떻게 해야할지를 멤버1님의 블로그를 읽거나 깃헙을 읽어보면서 알았다. 포스팅을 자주 하는 것은 기본이고 내용이 양질의 자료를 포함하고 남들이 가지지 않고 있는 정보를 포함하고 있으면 도움이 많이 되며, 어썸데브로그라는 곳에 블로그 링크를 올리셨더라. 국내 개발블로그를 수집하는 것을 시작으로 여러가지 정보를 수집해서 제공해주는 플랫폼같은 곳이었다. 물론 오픈소스였고 말이다. 멤버1님을 통해 좋은 곳을 많이 알 수 있었다.
  • 멤버2: 기획 및 프론트엔드 개발. 추진력이 아주 좋은 분이었다. 추진력이 좋은 사람이 옆에 있으니 나까지 같이 각성되는 느낌이었으며 동기부여가 혼자 공부할때보다 훨씬 잘되서 짧은 시간 내에 많은 것들을 해낼 수 있었다. 내가 지식이 부족할만한 부분을 기분나쁘지 않게 친절히 알려줬다.

아직까지도 프로젝트는 진행중이며 프로젝트를 마칠때까지 배울 것들은 아직 많이 남아있으며 내가 도움을 받은만큼 나도 그들에게 도움을 줄 수 있을만큼 성장하고 싶다. 튜토리얼만 볼때는 생각하지 못했던 부분들 작은 오류들을 해결할 수 있는 능력이 커졌음에 감사한다.

  • sequelize.js: 원리를 알기 위해 SQL의 원리를 깊게 알아야 했다. SQL에서 한 번 더 추상화 된 쿼리기때문에 sequelize 공식 사이트에 있는 API만으로는 이해가 되지 않았던 경우가 대부분이다. 때문에 SQL에 대한 거만했던 내 태도 또한 고칠 수가 있었다.
  • koa.js: express.js와 많이 비슷하고 비동기 문법을 쉽게 사용하도록 고안되어있었다. 하지만 커뮤니티가 부족해 자료를 구하기는 힘들었다. 미들웨어 이름 앞에 koa-가 붙어있어 뭔가 익스프레스의 수퍼셋인 느낌이 많이 든다. 코아까지 공부하면서 미들웨어 기본세팅을 대충이나마 알게 됐다.
  • SQL: RDBMs가 복잡한 연산까지도 잘 소화할 수 있는 언어라는걸 알 수 있었다.

Boilerplate

개발에도 여러가지 라이브러리 조합이 있기 때문에 내가 알고 있는 라이브러리로 만들 수 있는 경우의 수를 생각해봤다. 프레임워크 2가지, 데이터베이스 2가지만 있어도 경우의 수가 벌써 4가지다. 거기다 이것저것 더하다보면 경우의 수는 기하급수적으로 늘어날거고 기본세팅을 하다가도 헷갈릴 경우가 생길 수도 있다고 생각을 했다. 그래서 완전완전 기본기본세팅을 해놓은 보일러플레이트를 작성을 했고 몇개를 깃헙에 업로드를 했다.

Github Page 시작

티스토리 블로그에서 생활블로그와 개발블로그로 레이아웃은 물론 똑같게 분리시켰다. 깃헙페이지를 시작하기 전 봤던 글이 블로그가 잔디밭 만들기에도 도움이 많이 된다는 내용이었다. 그리고 테마까지 다 무료로 제공되고 있어 약간의 프로그램 지식만 있다면 할 수 있겠구나 싶어서 시작했다. jekyll은 루비로 작성되어 있어 생소했지만 루비로 작성된 파일은 오로지 설정파일 뿐이라 걱정거리가 줄었다.

블로그를 완성 후 무슨 내용을 포스팅할지 몰라 계속 방치하다 포스팅거리가 드디어 생기게 됐다. 프로젝트 깊이가 깊어질수록 오류는 많아지고 내가 겪은 경우랑 같은 경우를 한글 구글링만으로는 찾을 수 없게 됐고 영문 검색을 통해 여러 포스팅을 읽어보고 해결한 경험이 바로 포스팅거리가 되더라. 그래서 이제는 어떤 글들을 올리는게 낫겠구나 싶은걸 알았고 클리셰스러운 포스팅보다는 남들이 많이 쓰지않거나 정말 내 경험에서 우러난 포스팅을 쓰게 됐다. 그래서 TIL에 기록한 것들도 정리해서 나중에 포스팅을 해볼까 한고 아니면 그 자체를 매달 기록을 했으니 업로드 해볼까 한다.

친구2

퍼블리셔에서 프론트개발자로 전직하려는 친구2와 대화를 나누면서 현업에 대한 이야기들을 들었으며 아이디어가 중요하다는 것을 깨달았다. 아이디어를 정말 많이 가지고 있더라. 친구2와 대화를 하면서 내가 가지고 있었지만 까먹고 있었던 남들은 하지 않는 생각들이 뭔가에 대해 많이 고민해보는 기회가 되었다.

큰아버지

완전 조우였다. 엄청 만나기 힘든 분이고 바쁜 분이니까. 세상에 나이는 중요치 않다지만 60대 중반이며 비개발자인 분이 python, AWS를 어느정도 조예있게 안다는 사실만으로도 대화를 나눌법한 분이었다. 미래에 대한 고민을 토로할 곳이 없었기에 솔직하게 고민을 이야기했고 그 이야기를 들으시고는 알고있지만 망각하고 있던 부분에 대해 설명을 해주셨다. 큰아버지가 해줬던 말은 다 당연한 말들이었지만 남을 통해 들으니 다시 한 번 깨달을 수 있었다.

  • 내용:
    • 지금 하는 걱정들은 나중에 되돌아보면 아무 것도 아닌게 된다.
    • 생존경쟁에서 절대로 뒤쳐지지 말아야 한다.
    • 신기술은 영어로 된 포스팅이나 비디오가 많으니 영어 강의를 봐야한다.
    • 내 탓, 환경 탓을 하지 말아야 한다.
    • 내가 부족하더라고 지금 당장 도전해봐야 한다.
    • 남들이 하지 않는 것을 하는 것이 성공의 원리이다. = 신기술을 남들보다 일찍 습득해야 한다.
    • 좁은 물에서 놀면 사람의 그릇까지도 작아지기 때문에 큰 물을 찾아 나서야 한다.

잘 알고 잘 설명할 줄 아는 어른을 만난건 오랜만이었다. 그래서인지 대학때 독일어공부를 열심히 할 수 있게 만들어주신 교수님의 느낌을 받았다. 내겐 큰 자양분이며 원동력이 될 내용들이었다.

2019년 할일

sequelize.js

친구가 이해하려면 코드의 가장 깊은 곳까지 내려갔다가 올라와봐야 한다고 했다. 그리고 오픈소스를 만져보고 싶은 욕심도 있고 말이다. 이 과정에서 sql문으로 변환되는 과정 또한 이해한다면 완전 ORM은 내 것이 될 것같은 느낌도 들고 오픈소스에 기여자가 되는 기쁨도 누릴 수 있을 것같다. 이것을 필두로 소규모의 오픈소스 운영자가 되보는 것도 꿈꿔본다.

alex.js

유럽어를 파싱해서 성차별적, 인종차별적 단어, 욕설 등을 필터링하기 위한 라이브러리인데, Hacktoberfest때 다른 언어로도 파싱을 하고싶다고 개발자님이 도움을 요청한 글을 봤었다. 이 라이브러리를 분석해서 독일어를 추가하거나 한글 형태소 분석기를 이용해서 alex에 한글도 추가시켜보고자 하는 계획이 있다.

프로젝트 마무리

프로젝트가 벌써 장기화되고 있다. 멤버1님이 먼저 프로젝트를 이제 데드라인을 잡아 계획적으로 끝내가자고 제안을 했다. 동의한다. 그래서 코딩 이후에 이루어질 배포과정을 미리 heroku를 이용해서 한번, aws에 도커라이징을 통해 한번씩 미리 해보고려고 한다. 그리고 부족한 부분이 많기 때문에 하루빨리 서비스 도입가능할 정도 수준으로 우리의 앱의 레벨을 끌어올려보고 싶다.

python

내가 데이터를 다루고 싶다고 하니깐 큰아버지가 추천해줬던 python. 이미 python은 데이터쪽에서 엄청나게 많이 쓰고 있는 언어이기도 하다. 이번 기회를 발판삼아 tensorflow를 배워보고 대량의 데이터를 다뤄보고싶다. 수학적 지식이 엄청나게 필요하지 않는 선에서 말이다. 언젠간 수학공부를 다시 해야할 날이 오겠지만 그건 필요에 의한 날로 미뤄보기로 한다.

취업

백엔드 개발자로 취직해서 프론트에도 데이터에도 깊게 관여해보고 싶다. 급여보다는 나를 사람취급해주며 내 스킬을 레벨업 시킬 수 있는 자리를 꼭 찾아 들어갈 것이다.

알고리즘

팀프로젝트 중 트리구조에 대해 공부하게 된 적이 있는데 각 언어별로 자료구조를 구현하는 것부터가 알고리즘이라고 하더라. 알고리즘이 러닝커브가 높다고 해야하나. 공부하는 시간에 비해 머릿속에 많이 안들어오니까? 어떤 글을 봤다. 회사 내에서 톱니바퀴처럼 즉 코더로 살지 않으려면 알고리즘을 충분히 공부해둬야 한다고 말이다. 그래서 올해는 javascript로 알고리즘 구현하는 법을 배워보려고 한다.