왜 대부분 node.js 강의들은 mongoDB를 같이 쓰는가? mySql은 안되나?
node.js
강의를 찾다 보면 대부분이 데이터 베이스 챕터로 mongoDB
를 사용하고 있습니다. 이미 이전 수업을 통해 mongoDB
를 입문해 보았기 때문에 견문을 좀 더 넓힐 겸sql
수업을 찾고 있었는데요, 이게 찾는 게 쉽지 않더라고요.
왜 많은 node.js
수업들이 mongoDB
를 선택해 쓰고 있을까요? 알게 모르게 들었던 현장 이야기로는 mongoDB
보다 mySql
이나 postgreSql
을 사용하는 곳이 더 많았는데 말이죠. 왜 그럴까요?
그건 아닙니다. node.js
와 함께 sql
을 사용하는 수업이 없는 건 아니었거든요. 그리고 그 수업을 들은 결과, 궁금했던 점이 단숨에 해소 되었습니다. 정말 단순한 이유였습니다. 진입하기가 너무 어려웠거든요. 객체 지향에 익숙한 프런트 코린 이에겐 sql
의 스키마 형식이 낯설기도 하고, 쿼리문 사용 방법에 대해서 공부도 필요하고요. 거기에 join
문까지 살짝 곁들이기 시작하면... 어휴 생각만 해도 눈앞이 캄캄합니다.
그건 mongoDB
가 문서 지향 데이터 베이스 시스템을 지향하기 때문일 겁니다. mongoDB는 모든 쿼리문에 대해 BSON
형태를 반환합니다. BSON
은 Binary-json
으로 JSON
을 바이너리 형태로 인코딩 하는 것을 말합니다. 일반 JSON
에 비해 BSON
은 문서 자체의 여백을 줄여 데이터 용량을 절약하고 로우 레벨(c언어)의 데이터 형태이기 때문에 인코딩 디코딩도 무척 빨라 성능에 큰 지장을 주지 않죠.
mongoDB
는 이러한 BSON
데이터를 필요하다면 언제든지 JSON
형식으로 보여주기 때문에 database
에 익숙하지 않은 저에겐 mongoDB
가 더 쉽게 느껴졌던 거 같습니다.
강의를 제작하시는 분 역시 초심자를 기준에 두고 강의를 만드셨을테니 데이터 베이스 챕터로 node.js
에 함께 mongoDB
가 많이 채택되어 쓰인 것이겠죠. 이외에도 schema
나 join
을 사용하지 않는 것 역시 sql
을 제치고 선택 된 이유라 볼 수 있겠네요.
물론 실제 앱을 만드는 데 있어서는 위의 이유가 sql
과 nosql
을 가르는 기준이 되는 건 절대 아닙니다. 단순히 데이터베이스를 처음 배우는 것이고 이를 node.js
와 함께 배운다는 전제 하에선 mySql
보다는 mongoDB
가 입문하기에 더 편하게 느껴졌다 라는 것뿐입니다.
현장에서는 각 데이터베이스 환경의 장단점을 보고 앱에 더 적합한 것을 적용시키는 것이 옳은 판단 기준이 되겠죠. 요즘엔 ORM
이나 ODM
도 있으니 쿼리문을 공부해야하는 입장에선 그 수고를 조금 덜 수 있겠네요. (물론 날 것으로 쿼리문을 쓰는 게 맵핑 보다 처리속도가 훨씬 더 빠르긴 합니다.)
어찌 되었든 익숙하지 않더라도 sql
은 결국 공부해야 하는 겁니다. 이미 많은 회사에서 sql
이 쓰이고 있으니까요. 앱은 만들어야 하는데 데이터베이스를 하나도 모른 체 작업할 수는 없는 거니까요. 인프런에서 얄코님의 mySql
입문 강의가 싸고 괜찮아 보이던데, 지금 듣고 있는 강의 챕터가 완료되면 저는 이걸로 좀 더 지식을 보완해보려구요.
그럼 이만.
참고자료
프론트엔드 개발자를 위한 데이터베이스
https://velog.io/@ryuwisdom0_o/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%95%A4%EB%93%9C-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC-%EC%9C%84%ED%95%9C-database
JSON vs BSON
https://www.mongodb.com/json-and-bson
https://m.blog.naver.com/sehyunfa/221654102140
mongoDB 연결하기
https://m.blog.naver.com/scw0531/220933688166
한 눈에 끝내는 node.js
https://edu.goorm.io/learn/lecture/557/%ED%95%9C-%EB%88%88%EC%97%90-%EB%81%9D%EB%82%B4%EB%8A%94-node-js/lesson/174384/mongodb%EB%9E%80