Backend
Sql과 NoSql
- Sql과 NoSql은 관계형이냐 아니냐에 따라 나뉜다.
- 보통은 Spring으로 개발할 때는 MySql을, Node.js로 개발할 때는 MongoDB를 주로 사용한다고 한다.
- Node.js와 MongoDB는 둘 다 Javascript를 기반으로 한다.
- 그저 관계형 데이터 베이스냐, 비관계형 데이터 베이스냐 + 사용하기 무엇이 더 수월하냐, 쉽냐 등의 기준으로 MongoDB 사용을 택했지만, 사용 목적에 따라, 유형에 따라 결정된다고 한다.
Sql 사용
- Sql은 정해진 데이터 스키마(모델)에 따라 데이터가 저장되기 떄문에 데이터의 무결성이 보장되며, 이러한 특징때문에 데이터의 스키마를 준수하지 않은 데이터는 추가할 수 없다.
- 데이터가 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우, Sql을 선택한다.
- 또한 데이터가 자주 변경되어, 변경되는 데이터 속에서도 일관성을 유지해야 하는 경우 에도 Sql이 적합하다.
NoSql 사용
- 정확한 데이터 구조를 알 수 없거나 변경되거나 확장될 수 있는 경우
- 막대한 양의 데이터를 다뤄야 하는 경우, Sql를 사용하면 데이터와 테이블 간의 관계를 매번 정의해야 하기 때문에 NoSql이 적합하다.
프로젝트로 만든 커뮤니티 애플리케이션의 경우,
- 프로필, 개인 정보, 게시글, 댓글 등의 정형화된 데이터를 다룬다 => Sql
사용자, 친구 등의 다양한 관계를 다룬다. => Sql
- 대규모 데이터를 처리해야 한다. => NoSql
- 확장성의 문제, Sql은 데이터의 관계를 매번 지정해줘야하기 떄문에 매우 복잡하다.
- 실시간 채팅, 실시간 알림 메시지 등의 실시간 데이터를 다룬다. => NoSql
결론
- 프로젝트의 성격에 따라 택한다.
번외
- 이 글을 작성하고자 했던 이유는 스키마(Schema)때문이다.
- Sql은 스키마가 필요하고 NoSql은 필요없다는 설명을 많이 보았는데, 본인의 커뮤니티 프로젝트에서는(Sql이 더 적합했을 듯 하다.) NoSql인 MongoDB를 사용하면서 저장될 데이터의 형태를 미리 Schema로 지정해줬다.
- NoSql은 스키마가 필요없다고 봤는데 mongoose에서 매 스키마를 정해줬던 게 의문이었다.
- 찾아보니 데이터를 저장할 때 무작정 삽입해도 오류가 나지 않지만, 스키마를 사용하여 데이터 구조를 정해준 것이라고 한다.
- Sql의 장점을 흉내낸 건가…