이번주 배운 것
1. 이번주는 layered architecture pattern과 testing tool 그리고 refresh token에 대하여 배웠다.
몽고DB-Mongoose와 Mysql-Sequeilze 환경을 둘다 사용해보고 orm이나 관계형 비관계형 DB에 대하여 느낀점을 정리 해보자.
1. ORM (Object Relational Mapping)
- ORM이란 객체와 데이터 베이스를 맵핑해주는 도구로, 우리가 사용하는 코드 영역에서 실제 존재하는 DB와 내가 사용하는 객체와 연결해주고, 해당 영역에서 코드로 바로 DB를 조작할 수 있게 도와주는 도구이다.
- mongoDB에서는 관계형 데이터 베이스가 아니기 때문에 ODM이라고 지칭하기도 하였으나 결국 ODM 이나 ORM 이나 같은 거라는 생각이 들었다.
2. noSQL vs SQL
- 우리가 흔히 사용하는 엑셀과 비슷한 관계형 디비(행, 열, 테이블)와 주로 대부분 key-value로 값을 저장하는 비관계형 데이터 베이스가 존재한다.
- SQL은 구조적인 안정감을 가지고 있습니다. 테이블이 존재하고 해당 테이블에 행과 열이 존재해야하며, 이러한 테이블들이 서로 관계를 가질 수 있습니다. 이처럼 구조적인 규정들이 있고 이를 지키며 이루어져 있기 때문에 데이터의 신뢰성이 높고 관계가 명확하며 역할도 명확합니다.
- noSQL은 구조적 약속이 없으며, 관계가 없습니다. 대신에 놀라운 자유도 또한 가지고 있습니다. 필요할 때마다 새로 필드를 추가하는 것이 가능합니다.
3. 그럼 언제 쓰는게 좋은가?
- SQL
1. 앱의 여러 부분에서 관련 데이터가 비교적 자주 변경되는 경우 (NoSQL이라면 항상 여러 컬렉션을 수정해야 함)
2. 명확한 스키마가 중요하며, 데이터구조가 극적으로 변경되지 않을 때
- noSQL
1. 정확한 데이터 요구사항을 알 수 없거나 관계를 맺고 있는 데이터가 자주 변경(수정)되는 경우
2. 읽기(read)처리를 자주하지만, 데이터를 자주 변경하지 않는 경우 (즉, 한번의 변경으로 수십 개의 문서를 수정 할 필요가 없는 경우)
3. 데이터베이스를 수평으로 확장해야 하는 경우 ( 즉, 막대한 양의 데이터를 다뤄야 하는 경우, 읽기/쓰기 처리량이 큰 경우)