항해 WIL - 개발자로서의 4주차

2022. 12. 11. 20:54항해99/항해99

빠르게 한주가 흘렀다.

이번 주차는 주특기 심화 주차로 mysql에 대해 쫌 진하게 공부하게 되었다.

저번 주차는 mongoDB로 api를 구현했는데 이번엔 mysql로 db서버를 직접 만들고 api도 구현해는 과정을 배웠다.

 

아래 링크는 이번주차에서 해본 코드다!!

https://github.com/ludin-lee/ludin-lee-node_mysql_practice

 

이번 주차 키워드는 SQL과 NOSQL의 차이로 내용은 아래와 같다!


SQL (관계형 DB)

 

SQL을 사용하면 RDBMS에서 데이터를 저장, 수정, 삭제 및 검색(CRUD) 할 수 있음

 

SQL 핵심적인 특징

  • 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다.
  • 데이터는 관계를 통해 여러 테이블에 분산된다.
  • 데이터의 중복을 피하기 위해 '관계'를 이용한다.(정규화 목표)

SQL 장점

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

SQL 단점

  • 덜 유연함. 데이터 스키마를 사전에 계획하고 알려야 함. (나중에 수정하기 힘듬)
  • 관계를 맺고 있어서 조인문이 많은 복잡한 쿼리가 만들어질 수 있음
  • 대체로 수직적 확장만 가능함

SQL 데이터베이스 사용이 더 좋을 때

  • 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션의 경우
  • NoSQL에서는 여러 컬렉션을 모두 수정해야 하기 때문에 비효율적
  • 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우

정규화란?   

정규화(Normalization)의 기본 목표는 테이블 간에 중복된 데이타를 허용하지 않는다는 것이다.

중복된 데이터를 허용하지 않음으로써 무결성(Integrity)를 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있다.

이러한 테이블을 분해하는 정규화 단계가 정의되어 있는데, 

여기서 테이블을 어떻게 분해되는지에 따라 정규화 단계가 달라짐

 

아래 링크에서 더 정확하게 공부해보자!(학교에서 배운거 다 까먹음..)

 

출처:https://mangkyu.tistory.com/110

 

[Database] 정규화(Normalization) 쉽게 이해하기

지난 포스팅에서 데이터베이스 정규화와 관련된 내용을 정리했었다. 하지만 해당 내용이 쉽게 이해되지 않는 것 같아서 정규화 관련 글을 풀어서 다시 한번 정리해보고자 한다. 1. 정규화(Normaliz

mangkyu.tistory.com


NoSQL (비관계형 DB)

말그대로 관계형 DB로 스키마도 없고, 관계도 없음

 

NoSQL에서는 레코드를 문서(documents)라고 부른다.

 

차이점

  • SQL은 정해진 스키마를 따르지 않으면 데이터 추가 불가능 NoSQL은 추가 가능
  • 여러 테이블에 조인할 필요없이 이미 필요한 모든 것을 갖춘 문서를 작성함

 

그러면 조인하고 싶을 때 NoSQL은 어떻게 할까?

컬렉션을 통해 데이터를 복제하여 각 컬렉션 일부분에 속하는 데이터를 정확하게 산출하도록 한다.

하지만 이러면 데이터가 중복되어 서로 영향을 줄 위험이 있다.

따라서 조인을 잘 사용하지 않고 자주 변경되지 않는 데이터일 때 NoSQL을 쓰면 상당히 효율적이다.

 

NoSQL 장점

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

 

NoSQL 단점

  • 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있음
  • 데이터 중복을 계속 업데이트 해야 함
  • 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수행해야 함 (SQL에서는 중복 데이터가 없으므로 한번만 수행이 가능)

NoSQL 데이터베이스 사용이 더 좋을 때

  • 정확한 데이터 구조를 알 수 없거나 변경/확장 될 수 있는 경우
  • 읽기를 자주 하지만, 데이터 변경은 자주 없는 경우
  • 데이터베이스를 수평으로 확장해야 하는 경우 (막대한 양의 데이터를 다뤄야 하는 경우)

이제 심화주차다... 솔직히 숙련주차에서도 벽이 느껴졌는데

이번엔 더 빡세게 해보자 이번 주차만 넘기면 난 더 성장할 것이다!!

파이팅!!!!!!!