
DataBase 연결 방식에는 크게 두 가지가 있다. ORM과 ODM으로 나눠지는데, ORM은 데이터를 테이블 안에 객체 형태로 행과 열과 담아주며, 이런 방식을 관계형 데이터베이스라고 부른다. 대표적으로 Oracle, MySQL, Postgres가 있으며 SQL이라 한다.
ODM은 데이터를 서류 봉투 방식으로 담아준다. 이것을 NotOnlySQL, NoSQL이라 한다. 대표적으로 MongoDB와 FireBase가 있다.
SQL
SQL은 관계형 DB라고도 부르며, 데이터를 저장, 수정, 삭제 및 검색을 할 수 있다. 핵심적인 두 가지 특징이 있는데 한 가지는 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다. 그리고 데이터는 관계를 통해 여러 테이블에 분산된다.
데이터는 테이블에 레코드로 저장되는데, 각 테이블마다 명확하게 정의된 구조가 있다. 해당 구조는 필드의 이름과 데이터 유형으로 정의된다. 그렇기에 스키마를 준수하지 않은 레코드는 테이블에 추가할 수 없게 된다. 그래서 하나의 테이블에서 중복 없이 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없어진다.
장점과 단점으로는
장점은 명확하게 정의된 스키마로 데이터의 무결성을 보장하며 관계는 각 데이터를 중복없이 한 번만 저장한다.
단점은 덜 유연하여 데이터 스키마를 사전에 계획하고 알려야 한다는 점과 관계를 맺고 있어서 조인문이 많은 복잡한 쿼리가 만들어질 수 있다. 수직적 확장이 주로 이뤄진다.
NoSQL
관계형 DB의 반대로 스키마도 관계도 없다. NoSQL에서는 레코드를 서류 봉투라고 부른다. SQL과 가장 큰 차이는 SQL은 정해진 스키마를 따르지 않으면 데이터 추가가 불가능했지만 NoSQL에서는 다른 구조의 데이터를 같은 컬렉션에 추가가 가능하다.
서류 봉투는 Json과 비슷한 형태로 가지고 있어 관련 데이터를 동일한 '컬렉션'에 넣는다. 데이터가 중복되어 서로 영향을 줄 위험이 있어 자주 변경되지 않는 데이터일 때 NoSQL을 쓰면 상당히 효율적이다.
장점과 단점으로는
장점은 스키마가 없어서 유연하며, 언제든지 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있다는 점과 데이터는 애플리케이션이 필요로 하는 형식으로 저장하여 데이터를 읽는 속도가 빠르다. 마지막으로 수직과 수평의 확장이 가능해서 애플리케이션이 발생시키는 모든 읽기/쓰기 요청 처리가 가능하다.
단점은 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있으면 좋겠고 데이터 중복을 계속 업데이트해야한다. 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수행해야 한다.
* 참고한 글
https://gyoogle.dev/blog/computer-science/data-base/SQL%20&%20NOSQL.html
SQL과 NOSQL의 차이 | 👨🏻💻 Tech Interview
SQL과 NOSQL의 차이 웹 앱을 개발할 때, 데이터베이스를 선택할 때 고민하게 된다. 보통 Spring에서 개발할 때는 MySQL을, Node.js에서는 MongoDB를 주로 사용했을 것이다. 하지만 그냥 단순히 프레임워크
gyoogle.dev
댓글