제목이 좀 어그로지만 ^ㅡ^...
다름이 아니라 캡디 프로젝트에서 백엔드 부분을 맡으면서 웹을 어떻게 구현할 건지 선택하는 게 생겼는데 "왜 그걸로 했어?"라고 물어봤을 때 "~~해서 이걸로 정했어!" 라고 말할 수 있는 설득력을 갖기 위해 다음의 글을 쓴다.
사실 이건 바로 말하면 되긴 하는데,, 좀 논리력이 부족한지라^^; 이참에 글로 적으면서 정리도 할 겸!
단적으로 말하면 취업에 도움이 되서... 는 농담이고(정말 이걸 원했다면 node.js가 아니라 자바 스프링을 썼을 것이다)
1. 지금 하고 있는 프로젝트는 판례 데이터의 지속적인 업데이트가 필요한데 데이터들을 사용자에게 전송하고 갱신된 판례 데이터를 데이터베이스에 저장해야한다. 이 부분에서 node.js의 장점이 잘 드러난다고 할 수 있다. 또한 판례 데이터는 대략 80000개 정도인데 이런 대용량 데이터를 다루기에 node.js는 적합하다.
2. node.js는 빠르고 가볍고 쉽고 편하다. 특히 게시판 같은 웹사이트에 특화되어 있다. 지금 만드는 프로젝트도 크게 보면 사용자 입력을 기반으로 하는 게시판 형식이라서 이 점이 잘 드러난다고 할 수 있다.
+) 그리고 아주 사심을 추가하자면,, 예전에 django를 배워봤을 때 정말 노잼이라서^^...(지금 생각해보면 django의 문제가 아니라 만든 웹페이지 결과물 자체에 별 애정이 없어서 그랬던 것 같다) 암튼 django는 이미 해봤고 새로운 걸 하고싶다!! 하면서 선택한 것도 있다.
++) django가 커다란 돌에서 내가 원하는 부분을 깎아 만드는 조각같은 느낌이라면 node.js는 내가 원하는 부분만 조합에서 쌓아가는 레고 블럭같은 느낌이다. 지금은 node.js로 구현하고 있는데 정말 재밌다..! npm은 최고다... 성격과 취향 상 node.js가 나와 더 잘 맞는 것 같다.
먼저 node.js에서 많이 쓰는 mongoDB와 비교하였다. 가장 큰 차이점은 mySQL은 관계형 데이터베이스(RDBMS)이고 mongoDB는 noSQL 데이터베이스라는 점이다. 따라서 관계형 데이터베이스와 noSQL 데이터베이스를 비교해보고자 한다.
1. RDBMS는 정형화된 구조를 가지고 있다.
웹 페이지에서 보여주는 것은 게시판의 경우 판례 제목, 사건번호, 선고날짜, 사건종류이며 상세 내용을 조회하면 여기에 법원명, 판결유형, 판례 요지, 판결 요지, 참조 판례, 참조 조문, 판시 사항이 추가된다. 여기서 개발을 위해 추가한다면 업데이트 날짜정도? 웹 페이지에 보이는 항목은 이것으로 고정되어 있기 때문에 데이터 속성을 즉시 추가하는 기능은 딱히 필요하지 않다.
2. 우리가 사용하는 판례 데이터는 많은 용량이 필요하지 않다.
현재 가지고 있는 판례 데이터의 용량은 대략 1GB정도? TB가 넘는다면 noSQL과 RDBMS간 유의미한 성능차이가 나겠으나 데이터베이스 기준으로 많은 용량이 아니기때문에 성능 면에서는 비슷할 것이라 예상한다. mySQL도 최대 5000만행까지는 무난하게 지원한다!
3. 과거에 일어난 판례는 현재 달라지지 않는다. 과거 기록은 그대로 있기 때문에 일관성이 중요하다(사실 이 부분을 중점으로 블록체인 기술을 활용하려고도 했으나...) RDBMS는 데이터의 일관성을 유지하는데 장점이 있다. 업데이트를 빨리 하느냐(쓰기가 빠른 것이 중요하냐) 데이터의 일관성을 유지하는 것이 중요하냐라고 봤을 때 유사도 분석을 기준으로 하면 데이터 일관성을 유지하는 것이 훨씬 중요하다고 생각한다. 쓰기는 이미 쌓여있는 데이터에서 하나를 추가하는 것이라면 일관성이 깨져버린다면 유사도 분석의 근간이 흔들릴 수 있기 때문이다.
4. 아마 데이터 분석이 필요하지 않고 node.js로만 개발을 했다면 mongoDB를 사용했을 수도 있다. 그렇지만 유사도를 분석할 때 쓰는 ai 기술은 파이썬을 이용하므로 다른 프로그램에서도 유연하게 연동되어야 한다.
+) 지금까지 데이터베이스를 배울 때 관계형 위주로 공부하기도 해서 사실 찾아볼 때는 noSQL을 더 많이 알아봤다.(node.js database로 검색했을 때 mongoDB가 많이 나오기도 했고..) 그렇지만 위와 같은 이유로 mySQL을 결정!
mySQL을 하자고 정하니 AWS RDS가 따라왔다 ㅎ.. 정말 배움에는 끝이 없다 ^ㅡㅜ.....~
내가 node.js로 초기 페이지와 사용자 입력을 만드는 동안 다른 팀원이 데이터베이스 설계를 해줬는데 그때 발생한 오류가 연결 -> 업데이트 -> 연결해제 이 순서가 되어야 하는데 연결 -> 연결해제 -> 업데이트 순으로 되어 데이터베이스 상에 실제 업데이트가 되지 않는다는 점이었다. 왜 이런 오류가 발생하는지 자세히 찾아보지는 않았지만 AWS에서 제공하는 데이터베이스를 이용하면 이런 오류가 해결될 것이라 예상한다.
AWS RDS에서 말하는 장점은 관리 부담 감소, 성능, 확장성, 가용성 및 내구성, 보안, 관리 효율성, 비용 효율성인데 각각 엄청난 장점인 것 같다..! 솔직히 데이터베이스 치곤 작다고 하지만 1GB 파일을 계속 들고다니는 것도 일이다 ㅎㅎ,, 노트북에서 잘 열리지도 않는... ^ㅡㅜ; 어쨌든 지금은 AWS RDS를 공부하고 있는데 최적화된 쿼리를 구상해서 원하는 기능이 잘 구현되면 좋겠다~
Node.js와 Django 중에서 무엇을 사용해야할까?
Django vs Node.js: When to Choose Which Framework
Relational Database Vs NoSQL: 7 Critical Aspects
MongoDB vs. MySQL: 5 Differentiators to Settle the Debate of DBMSs