WIL 22_12_11

YES31·2022년 12월 11일
0

WIL

목록 보기
4/11

이번주는 SQL과 sequelize에 대한 사용과 미들웨어 동작을 파악하기 위한 시간들을 가졌다.
WIL을 통해 진행했던 내용들을 한번에 정리하고 싶었지만, 아직까지 sequelize에 대해 모르는 부분이 많아서 조금더 사용해보고 올려야겠다고 생각했다.

먼저 SQL과 noSQL 그리고 ORM에 대해 찾아보면서 공부한 점에 대해 작성하도록 할 것이다.
.
.
.

ORM (object Relational Mapping)

객체-관계 매핑
  • 객체와 관계형 데이터 베이스의 데이터를 자동으로 매핑(연결)해주는 것
    • 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다.
    • 객체 모델과 관계형 모델 간에 불일치가 존재한다.
    • ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.
  • 데이터베이스 데이터 <--매핑--> Object 필드
    • 객체를 통해 간접적으로 데이터베이스 데이터를 다룬다.
  • ersistant API라고도 할 수 있다.
    • Ex) JPA, Hibernate 등

ORM의 장단점

  • 장점
    • 객체 지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할 수 있게 도와준다.
    • 재사용 및 유지보수의 편리성이 증가
    • DBMS에 대한 종속성이 줄어든다.
  • 단점
    • 완벽한 ORM 으로만 서비스를 구현하기 어렵다.
    • 프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어렵다.

noSQL (not only SQL)

스키마 X
관계 X

SQL과 핵심적으로 차이가 있는 부분은 스키마와 관계가 없어서 언제든 다른 구조의 데이터를 같은 컬렉션에 추가할 수 있다는 점이다.

NoSQL에서는 레코드를 문서(documents)라고 부른다. 위 사진처럼 문서는 Json과 비슷한 형태를 가지고 있다. 유저의 정보, 게시글의 정보, 댓글의 정보, 서버의 정보 등을 한개의 컬렉션 안에 담아 사용할 수 있다. 이것은 여러개의 테이블을 조인할 필요없이 모든것을 갖춘 문서로 사용가능하며, 그로인해 높은 유연성을 갖고있다. 이는 빠르게 성장하는 스타트업에서 많이 사용한다.

장점

  • 스키마가가 없어서 유연하다.
  • 언제든 저장된 데이터를 조정하고 새로운 필드를 추가하는데 있어서 좋다.
  • 데이터는 애플리케이션이 필요로 하는 형식으로 저장된다. 데이터를 읽어오는 속도가 빠르다.
  • 수직 및 수평 확장이 가능해서 애플리케이션이 발생시키는 모든 읽기/쓰기 요청을 처리한다.

단점

  • 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있다.
  • 데이터 중복을 계속 업데이트 해야한다.
  • 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수행해야 한다.

SQL (관계형 DB)

정해진 데이터 스키마에 따라 테이블에 저장
관계를 통해 여러 테이블에 분산

데이터는 테이블에 레코드로 저장되는데, 각 테이블마다 명확하게 정의된 구조 스키마를 갖는다. 따라서 스키마를 준수하지 않은 레코드는 테이블에 추가할 수 없다. 또한 데이터의 중복을 피하기 위해 관계를 이용한다. 이는 하나의 테이블에서 중복없이 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없어지는 장점이 있다. 여러 테이블에서 데이터를 호출할 때, noSQL이라면 여러 데이터 베이스를 한번씩 불러와야 하지만, SQL 같은 관계형 데이터 베이스에서는 includ 기능을 사용하여 필요한 데이터를 한번에 불러올 수 있다.

하지만 스키마의 영향을 받고 정해진 규칙이 있는만큼 데이터에 지정한 형태에 맞지 않으면 저장할 수 없으며, 스키마 또는 데이터베이스의 테이블을 수정하는데 있어서 noSQL보다 까다롭다.

장점

  • 명확하게 정의된 스키마
  • 데이터의 무결성 보장
  • 관계는 각 데이터를 중복없이 한번만 저장

단점

  • 덜 유연함, 데이터 스키마를 사전에 계획하고 알려아 한다.
  • 관계를 맺고 있어서 조인문이 많은 복잡한 쿼리가 만들어질 수 있다.
  • 대체로 수직적 확장만 가능하다.
profile
🏀 주니어 개발자

0개의 댓글