코드스테이츠_국비교육/[Section2]

31.02_[DB] SQL, NoSQL_22.10.05

생각없이 해도 생각보다 좋다. 2022. 10. 5. 22:10

관계형 데이터베이스

: SQL을 기반으로 한다. 

: 관계형 데이터베이스는 구조가 고정된, 구조화된 데이터베이스라고도 한다.

: 테이블의 구조와 데이터 타입 등을 미리 정의하고, 정의된 형태의 데이터만 데이터베이스에 저장할 수 있다.

: 이런 고정된 구조는 마치 표와 같아서 엑셀과 유사하게 생각하면 좋다. (머릿속에 관계형 데이터베이스를 그린다면 그냥 엑셀을 떠올려도 무관할 정도!)

: 관계형 데이터베이스 내 테이블 간의 관계는 직관적으로 파악할 수 있다. 이를 스키마가 뚜렷하게 보인다고도 한

다. 또 이 말의 다른 의미로는 SQL을 활용해 원하는 정보를 query할 수 있다는 말과 같다.

 

비관계형 데이터베이스

: NoSQL을 기반으로 한다. (Not Only SQL)

: 관계형 데이터베이스와는 반대의 특징들을 갖는다. 고정되지 않은, 구조화되지 않은 데이터베이스라고도 한다.

: 관계형 데이터베이스가 아닌 데이터베이스는 모두 비관계형 데이터베이스이다.

: SQL에서는 데이터를 입력할 때 스키마에 맞게 입력하지만, NoSQL에서는 데이터를 읽어올 때 스키마에 따라 데이터

를 읽어온다. (schema on read)

: 비관계형 데이터베이스는 표의 형식이 아닌 방식으로 데이터를 저장한다.

: 데이터 저장 방식으로는 문서형 저장 방식, key-value형 저장 방식, graph형 저장 방식, wide-column store 저장 방식이 있다.

: MongoDB(문서형 데이터베이스), Redis(key-value형 데이터베이스),  Cassandre(wide-column store 데이터베이스), Neo4J(graph형 데이터베이스)

 

SQL 기반 데이터베이스와 NoSQL 기반 데이터베이스의 차이

  • 1. 데이터 저장

: 데이터 저장 방식이 다르다.

  • 2. 스키마

: SQL은 정적인(고정된) 스키마가 필요하고, NoSQL은 동적으로 스키마를 관리한다.

: SQL은 처리하려는 데이터 속성 별로 column에 대한 정보를 미리 입력해야한다.

: NoSQL은 미리 입력하지 않아도 되고, 이후에 열을 추가할 수도 있다.

  • 3. 쿼리

: SQL의 쿼리는 정해진 형식에 집중한다. (형식이 정해진 관계형 데이터베이스에 데이터를 요청하기 때문에.)

: NoSQL의 쿼리는 데이터 그룹 자체를 조회하는데 집중한다.

  • 4. 확장성

: SQL 기반 데이터베이스는 수직적으로 확장한다. 하드웨어 성능(CPU)을 많이 이용하기 때문에 비용이 많이 든다.

: NoSQL 기반 데이터베이스는 수평적으로 확장한다. 서버 증설 혹은 클라우드 서비스를 이용하기 때문에 비용이 저렴한 편이다.

 

SQL, NoSQL, 둘 중 무엇을 사용해야 할까

: 확장성이나 속도가 중요한 서비스라면 NoSQL을 사용하고, 고차원으로 구조화되어 좋은 성능을 추구하는 서비스면 SQL

을 사용하는 것이 좋다.

: 이처럼 상황마다 다르니 다양한 사례를 통해 적절하게 선택할 수 있도록 공부하는 것이 좋다.

>SQL 기반 데이터베이스 사용 예시

1. 데이터베이스의 ACID 성질을 준수해야 하는 경우

: 일반적으로 금융 및 거래 관련 서비스에서 사용된다.

2. 소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우

: NoSQL은 다양한 데이터 유형과 높은 트래픽을 지원한다. 이와 반대되는 경우 SQL을 사용하는게 유리하다.

 

/*

수직적 향상과 수평적 향상

수직적 향상, 즉 컴퓨터 성능 업그레이드로 서버를 확장한다는 의미이다.
때문에 기존 데이터베이스의 구조 변경 없이 사용 가능하고, 부분적인 확장(일부 부품의 교체로 성능 업그레이드)같은 경우는 비용도 적게 든다.
하지만, 하이엔드 성능을 위해 전체적인 업그레이드를 위해서는 비용이 많이 들고, 단일 환경이기 때문에 문제가 생길 경우, 서비스 전체를 이용 못하게 될 수도 있다.

 

수평적 향상, 즉 병렬적으로 양을 늘려서 서버를 확장한다는 의미이다.

때문에 고사양의 컴퓨터를 쓸 필요가 없어 서버 확장 비용이 저렴하고, 이론적으로는 무한대로 확장할 수 있다.

하지만, 이론적으로만 무한대로 확장이 가능할 뿐이고 실제로 확장을 위한 공간 등에 제약이 있다.

그리고 수평적 향상 시,  서버 구조를 변경해야 하기 때문에 스키마가 고정되어있거나 복잡한 경우 유지 보수가 거의 불가능할 정도로 어렵다.

*/

>NoSQL 기반 데이터베이스 사용 예시

1. 데이터의 구조가 거의 또는 전혀 없는 대용량의 데이터를 저장하는 경우

: 정형화 되지 않은 많은 양의 데이터를 저장하기에는 NoSQL 기반 데이터베이스가 유리하다.

2. 확장성이 중요한 경우

: SQL의 확장보다 NoSQL의 확장이 쉽고 저렴하다.

3. 데이터 구조를 자주 업데이트 하는 경우
: SQL은 미리 스키마를 준비해야 한다.

: 하지만 NoSQL은 스키마를 준비할 필요가 없기 때문에 빠르게 개발해야하는 경우 유리하다.

: 또한, 데이터 구조 업데이트를 위해선 스키마를 매번 수정해야하는 SQL보다 NoSQL이 유리하다.

 

/*

내 생각

공부하고 정리하며 느낀 것은

SQL은 고지식하고 공감 능력이 떨어져서 가끔 열받지만 일처리 잘하는 친구 같은 느낌이고,

NoSQL은 1등은 아니지만 상위권에 속하고 성격좋고 배려심 많은 친구 느낌이다.

NoSQL자체가 SQL을 극복하기 위해 개발된 부분이 있어서 더 그런 것 같다.

금융권에는 아직 ACID 특성때문에 SQL이 필요하겠지만, 대부분은 NoSQL로 가지 않을까?

*/

 

참고 링크

https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-sql-vs-nosql/