NOSQL vs RDB
항목 | NOSQL | RDB(관계형) |
사용 툴 | MONGO-DB 사용예정 | MYSQL, ORACLE, POSTGRES 중 선택 |
장점 | 스키마가 없기때문에 자유로움 -> 정형화된 스키마가 없는 경우 저장 용이(ex 빅데이터) 언제든 데이터 변형 가능 Scale-out에 용이 |
정해진 스키마와 이에따른 명확한 데이터 구조를 가짐 각 데이터를 중복없이 저장 ACID (Atomic, Consistency, Integrity, Duarabity)보장 - 원자가는 완벽하게 실행하거나 혹은 전혀 실행하지 않는 트랜잭션을 필요로 합니다. - 일관성은 트랜잭션이 커밋되면 데이터가 데이터베이스 스키마를 준수하도록 요구합니다. - 격리성은 동시에 일어나는 트랜잭션들이 각기 별도로 실행되어야 함을 의미합니다. - 내구성은 예기치 못한 시스템 장애 또는 정전 시 마지막으로 알려진 상태로 복구하는 기능을 필요로 합니다. |
단점 | 스키마 설계가 없다는것이 단점이 될 수 있음 -> 명확한 데이터 구조가 없음 RDB에 존재하는 PK가 없기에 데이터 중복이 일어날 수 있음 ACID 완벽히 보장되지 않음 |
여러 관계를 맺고 있기에 join문으로 복잡한 쿼리 발생 Scale-out이 어려움(Scale-up은 비용적인 문제가 발생) 스키마로 인한 유연하지 않은 데이터 구조 |
인턴중 사수분에게 물어보니
"CRUD 중에서 R이 많은경우 NOSQL이 효율적이다. 대부분의 회사에서는 RDB와 NOSQL를 혼용해서 쓰는경우가 많고 사용자가 DB 등록 API를 호출하면 하나는 RDB에 저장 나머지 하나는 MQ를 통해 produce를 한다. 이후 NOSQL은 해당 데이터를 consume하여 저장한다." 고합니다.
이후 NOSQL은 주로 읽기 전용으로 사용한다고 하네요
Spring에서 NOSQL
https://luvstudy.tistory.com/62
ORM이 아닌 ODM이 존재, 위의 블로그 뿐만아니라 다른 레퍼런스 다수
하지만, NoSql의 특성상 스키마가 자유롭게 변경이 되는것인데, 이렇게 되면 DTO 혹은 VO가 자주 바뀔 수 있다는것이다. 이것이 과연 JAVA가 추구하는 객체지향(객체는 객체스럽게)과 결이 비슷하는지는 의문이 든다...
결론
1. 러닝커브
현재 MYSQL, ORACLE등 RDBMS만을 사용해왔음. 즉, NOSQL을 사용하게 된다면 해당 관련 지식을 배울 필요가 있음
2. CRUD 기능 목록
현재 프로젝트에서 주요한 데이터 목록
- 회원정보
- 게시판
- 채팅(채팅 방, 메세지)
현재 프로젝트에서 U가 자주 일어나는 기능
- 회원정보
- 게시판
- 채팅 방
CR만이 이루어지는 항목
- 채팅 메세지
- 로그 데이터
3. 컬럼값이 주기적으로 변경될 수 있는 목록
- 게시판 글등록 시 (성별, MBTI, 기상시간.... 등 여러가지가 들어갈 수 있다.)
- 각 대학교 별 기숙사 목록
최종적으로 MongoDB에 저장될만한 값들
- 로그데이터
- 채팅 데이터
결론적으로 채팅데이터와 로그데이터는 CR이 주를 이루고 UD는 일어나지 않는다. 그리고 필요한 데이터이면서 대용량의 데이터가 될 수 있는 가능성이 있다. 나아가 ELK를 사용하여 로그타입 형식을 바꾼다거나 채팅과 관련된 데이터 attr을 수정해야할 가능성도 충분히 있기에 NOSQL로 구축할 것이다.
RDB형태로 ERD 다이어그램을 만들어보며 , 채팅 및 로그데이터는 NOSQL로 구축할 수 있도록 스키마설계를 할 계획이다.
'프로젝트 > 캡스톤디자인' 카테고리의 다른 글
관리자 페이지 with 로그 (0) | 2022.12.12 |
---|