한국의 Programming Bootcamp - 4/12주차
점점 배우는게 많아질 수록 Immersive Course초기에 등록했던 피트니스센터에 가는 횟수는 줄어들고 점심시간과 운동시간 마져 스프린트에 열중하는, 그럴 수 밖에 없는 나를 보게 된다. 운동도 하고 싶고, 쉬고도 싶지만 아직 머릿속에 넣고 이해해야 할 게 산더미이기 때문에 이 불안한 마음을 조금이나마 달래기 위해서는 열심히 공부하고, 헤쳐나가야 할 것만 같다.
(7월9일부로 Code/States Immersive 1기과정이 끝나고 졸업을 했다. 그렇기 때문에 기존의 Sprint와 그 당시에 적어놓은 노트와 코드 그리고 일기를 토대로 기억을 되살려 해당 블로그를 작성하였다.)
3주차에 간단한 채팅서비스 Chatterbox의 Front-end를 구현하는 Sprint를 했었다. 그 당시 기본적으로 셋팅된 Back-end를 이용했었는데, 이번에는 직접 Chatterbox의 Back-end를 구현해보는 Sprint이다. Back-end(Nodejs)와의 첫만남이였다.
node서버를 돌리고 적용사항을 확인하기 위해서는 매번 아래와 같이 node 명령어를 사용해야만 했다.
node server-file.js
하지만 이런 불편함을 참고만 있을 사람들이 아니었다. nodemon이라는 정말이지 너무나도 훌륭한 툴을 이용하면 서버 내 파일들을 감시하고 있다가 변동사항이 생기면 자동으로 새로고침을 해준다. So Coooooool! (물론 지금은 nodemon을 당연하게 생각했지만 이 때는 정말 굉장하다고 느꼈었다)
nodemon server-file.js
별것 아닌 것 같은 서버를 짜는데 꼬박 2일이 걸렸다. 나중에야 안 사실이지만 Node.js의 단짝 프레임워크인 express를 사용할 경우, 라우팅과 미들웨어를 굉장히 편하게 사용할 수 있다. 웹 개발과 REST API에 최적화된 프레임워크인 것 같다.
하지만 express와 같은 별도의 프레임워크 없이 Node.js 만을 이용하여 간단한 서버를 구성하는 것은 좋은 경험이였던 것 같다. 프레임워크에 의존하고 어떻게 사용하는지에 중점을 두기 보다는 기본적으로 Node.js가 어떤 구조로 동작하는지에 조금 더 집중할 수 있었다. JavaScript를 이용해서 Front-End와 Back-End의 기술통합으로 좀 더 쉽고 빠르게 할 수 있다는 장점이 있는 것 같다.
이번 스프린트에서는 archive.org(Internet archiving website)와 유사한 서비스를 구현했다. 즉 URL을 입력하면 해당 웹을 Local에 Text로 저장하고, 해당 복사본을 Client에게 보여주는 것이다. 여기에서 새롭게 등장하는 Key Concept 중 하나가 REST(Representational safe transfer)의 개념이다.
REST는 Method, Message, Resource로 구성이 된다. Method는 HTTP Method인 CRUD(Create, Read, Update, Delete)에 해당하는 Post, Get, Put, Delete를 사용한다. Message는 말 그대로 전달할 내용을 뜻한다. 그리고 Resource는 해당 구조 타입에 알맞게 각 Resource에 id를 할당한다. 예를들어
Http Post, http://brunch.co.kr/user
{
user : june,
title : Web Historian
}
이라고 한다면, http://brunch.co.kr/user/라는 Resource에 id는 june, Message는 ‘title : Web Historian’이라는 것을 Post method를 통해 등록하는 것이다. Post외에 Get, Put, Delete 또한 마찬가지 이다. REST API를 통한 통신을 하다보면 Post가 Put의 역할까지 할 수 있는 것으로 보이지만, 역할 상의 구분을 위해 개인적으로 Post는 신규데이터 등록, Put은 기존정보의 Update로 사용했다.
또한 이번 스프린트부터는 반복적으로 사용되는 함수들을 별도의 helper file에 보관하여 재사용함으로써 반복적인 함수 선언을 피하고, 좀 더 코드의 질을 향상시키고자 했다.
Node.js, 그리고 REST API를 이용하여 서비스를 구현하였다. 해당 서비스페이지에서 url을 입력창에 url을 입력하면 site.txt에 해당 url이 기록되고, 해당 url의 text파일이 ./archive/sites 내에 url명의 파일로 기록된다. 그래서 기존에 입력한 local에 저장했던 url을 입력하면, 과거에 기록된 text를 불러와 해당 페이지를 다시 보여주게 된다.
해당 서비스의 경우 crontab을 사용하여 일정시간마다 특정 사이트를 local에 저장할 수 있다.
이번 스프린트에서는 Node.js의 FS(File System)패키지를 사용할 때도 동기식은 사용하지 못하도록 제한을 둬서 Node.js의 특징중 하나인 비동기에 대한 학습도 병행하였다. Callback Hell에 빠지지 않기위해 Promise 패턴을 사용하였다.
이젠 Database다. 항상 내가 사용하는 서비스들이 내 정보를 어디다 모아놓는지 궁금했었는데, 바로 그 DB이다. MySQL을 통해 Front-end와 Back-end를 했던 Chatterbox의 Database를 학습했다.
RDBMS(Relational Database Management System, 관계형 데이터베이스)인 MySQL의 특성상 Join, Primary Key, Foreign Key를 통해 서로 관계를 설정하는 부분이 재미있었다. 금융권에 종사하는 Instructor분의 이야기에 따른 보수적인 금융권의 경우 몇백, 몇천개의 Join문이 나오기도 한다고 한다. 상대적으로 RDBMS가 신뢰성이 높고, 데이터무결성을 보장하기 때문에 금융권과 같은 보수적인, 데이터의 실수가 있어서는 안되는 곳에 많이 사용된다고 한다.
4주차의 끝을 보니, 어느정도 Front-end, Back-end, Database를 학습했다. 열심히 달려왔고, 죽을만큼 공부했지만 아직은 한참 부족한 것이 느껴진다. 꾸역꾸역 머릿속으로 여러가지를 넣고 있지만, 그것을 내 머릿속에 잘 자리잡게 하기까지는 조금 더 시간이 걸릴 것 같다. 하지만 4주전과 지금의 나를 비교해보면 성장하고 있는게 느껴진다. 앞으로 8주후 Immersive Course를 졸업할 때 쯤이면 성장해있을 나와 친구들의 모습이 궁금해진다.