들어가기 전에

매주 WIL은 분명 아 저거? 하는 키워드가 나오는데도 검색하지 않고 내 손으로 써내려갈 수 없다. 

어차피 검색해서 맘에 드는 부분들 짜깁기할 거... 내 생각 당장 떠오르는 부분만 살짝 정리한 담에 검색하기로.

 

 

지난 4주차의 강의 내용에서 ORM을 사용해봄 -  Node.js의 라이브러리 sequelize. 

 

해당 강의에서 느낀 포인트는, mongoDB(NoSQL, 비관계형 데이터베이스)를 활용하여 작성한 코드에서

DB를 MySQL(SQL, 관계형 데이터베이스)로 변경하는 과정이 매우 쉽다는 점이었다. 

 

이 이유는 기존에 비관계형DB인 mongoDB를 사용할 때도 schema, model을 이용하여

관계형 DB와 유사하게 구현해뒀기 때문.

(*단, mongoDB 조작에 사용했던 mongoose는 ODM. Object Document Mapper로

MongoDB의 "Document"를 데이터베이스에 mapping 해준다는 의미)

 

ORM은 객체 <--> DB간의 연결을 매끄럽게 해주는 툴이라고 생각한다. 

각 DB마다 다른 고유의 query 문법 등을 모두 새로 작성하지 않고도, 

본래의 코드에 객체를 활용하여 DB에 들어갈 테이블을 잘 정의해두었다면

ORM이 특정 DB로 매끄럽게 연결해주는 것.

 

ORM(Object Relational Mapping) 이란?

ORM(Object Relational Model)은 사물을 추상화시켜 이해하려는 객체지향적 사고방식과 DataModel을 정형화하여 관리하려는 관계형 DB 사이를 연결할 계층의 역할로 제시된 패러다임으로, 관계형DB의 모델을 객체지향 프로그래밍에 Entity 형태로 투영시키는 방식을 사용한다. 즉, Object와 Database간에 연결 역할을 해주는 것이 ORM이다.

 

1. ORM의 등장배경

ORM을 사용하지 않을 경우 개발자가 개발을 위하여 Database에 접근하기 위해서는 SQL Query문을 직접 만들었다.

  • SQL문법을 알고 있어야하는 문제 (쿼리문 작성시간이 오래걸려 개발이 지체되는 문제가 발생)
  • 개발 코드와 Database가 서로 종속된다.

위와같은 문제점들이 생겨나기 시작했다.
이러한 문제점을 해결하기 위해 ORM이 등장하였고 ORM이 등장함으로서

  • SQL Query 문법에서 비교적 자유로워졌으며
  • 개발 코드와 Database를 분리함으로써 객체지향의 의도에 부합하게 되었다.

2. ORM사용의 장점과 단점

   1. 장점

      개발 생산성 향상 : 선언문, 할당, 종료 등과 같은 부수적인 코드가 사라짐

      명확한 쿼리 : 코드가 간결하고 직관적, 가독성 높아짐

      DB 의존성 감소 : 대부분의 ORM은 특정 DB에 종속적이지 않음, 개발자는 DB 상관없이 OOP에 집중. 

 

   2. 단점

      튜닝의 어려움 : 미세한 수정과 디버그가 상대적으로 어려움

      복잡한 쿼리는 작성하기 어려움 : ORM이 제공하는 명령만 사용 가능

      Raw 쿼리를 사용하는 것보다 실행속도가 느리다 (한 단계 거쳐가기 때문)

 

참조 : https://kyungyeon.dev/posts/3

 

[ORM] Node.js에서 ORM 사용하기

Node.js에서 지원하는 ORM의 종류와 차이점 찾아보기

kyungyeon.dev

 

noSQL vs SQL

* 너무 자주 다뤘던 내용... 물론 지금 당장 아무것도 안 보고  누군가에게 설명하기 힘들지만 잘 정리된 글 찾아두고 pass.

  포인트는 하고자 하는 프로젝트의 특성, 예상되는 데이터의 형태에 따라 선택하여 사용할 수 있어야 한다는 것이고

  데이터 구조를 사전에 설계해서 model, schema를 정의해두었을 경우에는

  ODM / ORM 을 각각 활용하여 noSQL이건 SQL이건  비교적 수월하게 연결할 수 있다는 것. 

 

SQL : 관계형 DB, 명확하게 정의된 스키마에 의해 데이터를 저장, 데이터 무결성 보장

NoSQL : 비관계형, 스키마 없음, 유연한 데이터 추가와 조정

 

참조 : https://siyoon210.tistory.com/130

 

SQL vs NoSQL (MySQL vs. MongoDB)

※이 포스팅은 academind의 SQL vs. NoSQL을 번역한 포스팅입니다. [개요] 웹 애플리케이션 개발을 위한 첫 걸음을 내딛은 이후에 한가지 선택사항을 마주하게 됩니다. MySQL와 같은 SQL을 사용할 것인가?

siyoon210.tistory.com

 

항해99 4주차 Node.js 숙련 WIL

개인과제는 로그인/회원가입 구현, 댓글 기능 구현. 

=> 아마도 JWT를 활용한 인증 방식, 보안에 대한 생각, 댓글 기능을 구현하면서 거의 필연적으로 comment를 관리할

     DB collection을 하나 더 추가하게 될 것이고 이것이 기존 article DB의 특정 값을 참조하게 될 테니, 

     DB의 설계와 관계성에 대한 아이디어를 경험하는 과정이었다고 생각. 

 

처음에는 강의 내용이 다소 산발적이라고 느꼈음

 1) 로그인 / 회원가입

 

 2) MySQL, Docker, sequelize

    * 사실 Docker 관련해서는, 가상 이미지를 띄워서 해봤다는 건 알겠는데

      그로 인해 MySQL에 대해 거의 하나도 이해하지 못했음. 다만

         1) 기존에 OOP스럽게 코딩을 잘 해놨으며

         2) 비관계형이라 할지라도 schema를 정의하여 DB를 사용해왔다면

         3) DB가 관계형으로 바뀌어도 ORM을 사용하여 쉽게 활용이 가능하다는 아이디어만 얻어감. 

 

  3) socket.io를 이용한 양방향 실시간 통신

      TCP와 UDP, 패킷, 소켓 등의 개념에 대해 훑어본 시간.

 

  4) 코드 정리 (추상화, 코드 포맷, 파일 분리 등)

 

  5) 테스트 코드의 작성과 활용 - TDD

 

위 주제에 대해 WIL처럼 키워드를 던져주면, 인터넷 검색 없이 대답할 수 있는가? NO

그럼 대답할 수 있도록 지금 공부하고 있는가? NO

 

크롬에 즐겨찾기만 엄청 늘어간다. 설명 잘해놓은 글들만 최대한 추려서 정리해놓는 것으로 면피중.

 

일단 JS 기본 문법이 급하다고 느낀 시점...

일단 Deep Dive 좀 파다가 다른 거 개인과제도 하고... 이런 것 새로운 것들 공부도 하고... 

동시에 이것저것 다 할 수 있다면 좋겠지만

 

그렇지가 않기 때문에

 

     

 

 

+ Recent posts