카테고리 없음

SQL 기초 및 활용 - 2

ROSEV 2021. 8. 25. 10:59

트랜잭션

트랜잭션이란 여러 개의 작업들을 하나의 실행 유닛으로 묶어준 것입니다. 각 트랜잭션은 하나의 특정 작업으로 시작을 해 묶여 있는 모든 작업들을 다 완료해야 끝나게 되어있습니다. 만약 한 개의 작업이라도 실패하게 된다면 전부 실패하게 됩니다. 다시 말해 작업이 하나라도 실패를 하게 되면 트랜잭션도 실패이고 모든 작업이 성공적이면 트랜잭션 또한 성공적이게 됩니다.

 

트랜잭션이란 데이터베이스 시스템에서 복구 및 병행 수행 시 처리되는 작업의 논리적 단위

 

이처럼 트랜잭션은 성공 혹은 실패 이 두개의 결과만 존재합니다. 이러한 데이터베이스 트랜잭션의 정의는 ACID 특성을 가지고 있습니다.

출처 : ITwiki

ACID

  • 원자성(Atomicity) : 트랜잭션이 전부 성공하거나, 전부 실패해야한다는 것으로 부분적으로 실행이 되면 안되는 것을 의미합니다
  • 일관성(Consistency) : 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미합니다
  • 고립성(isolation) : 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미합니다.
  • 지속성(Durability) : 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미합니다.

 

 

NOSQL

NOSQL이란 데이터가 고정되어 있지 않은 데이터베이스 형태를 말합니다.

보통 관계형 데이터베이스의 경우 행과 열로 구성된 테이블을 말합니다 하지만 NOSQL의 경우는 정해진 틀이 보다 자유로워 데이터를 쌓아 놓기 편하다는 장점이 있습니다.

 

 

출처 : Microsoft docs

NOSQL의 4가지타입

  1. key-value 타입 : 데이터를 key-value의 쌍을 속성으로 하는 배열 형태로 저장합니다. ex.)Redis, Dynamo
  2. 문서형 데이터 베이스 : 데이터를 테이블이 아닌 문서처럼 저장하는 데이터베이스를 의미합니다. ex.) MongoDB
  3. Wide-Column 데이터베이스 : 데이터베이스의 열에 대한 데이터 관리를 집중하는 데이터베이스입니다. ex.)Cassandra, Hbase
  4. 그래프 데이터베이스 : 자료구조의 그래프와 비슷한 형식으로 데이터 간의 관계를 구성하는 데이터베이스입니다. ex.)Neo4J

 

 

출처 : https://velog.io/@rlcjf0014/Database-SQL-vs-NoSQL

SQL과 NOSQL의 차이점

  • 데이터를 저장할 때 관계형 DB의 경우 SQL을 이용하여 데이터를 테이블에 저장하지만, NOSQL의 경우 앞서 언급한 4가지 형식의 방법으로 데이터를 저장합니다
  • SQL은 형식이 고정된 스키마가 필요하지만 NOSQL의 경우 스키마의 형태가 보다 동적으로 행을 추가할 때 열도 즉시 추가할 수 있고 모든 열에 대한 데이터가 반드시 입력되지 않아도 되는 장점이 존재합니다
  • SQL의 경우 DB의 스키마 및 관계를 참고하여 쿼리문을 작성해야하지만, 비관계형은 데이터 그룹 자체를 조회하는 것에 초점이 되어 있어 구조화 되지 않은 쿼리문으로도 데이터 조회가 가능합니다
  • SQL 기반의 관계형 데이터베이스는 말그대로 DB가 커지면 커질 수록 관계도 복잡하기 때문에 하드웨어의 성능을 많이 필요하게 되지만 NOSQL의 경우 관계와 같은 복잡한 처리 과정이 필요 없고 데이터를 쌓아 놓기만 해도 되기 때문에 보다 저렴하고, 편리하게 서버를 증설하고 확장할 수 있고 비용적인 측면에서 유리합니다.

 

 

SQL을 무조건 사용해야하는 경우

ACID의 성질을 준수해야 할 때

: 전자 상거래, 금융 서비스를 위한 소프트웨어 등은 ACID를 지켜야하는 것이 필수 옵션입니다.

 

서비스에 사용되는 데이터가 구조적이고 일관적인 경우

: 일관된 데이터의 경우는 높은 트래픽이나, 복잡한 관계 및 참조 과정이 필요 없으므로 굳이 NOSQL를 사용 하지 않아도 됩니다.

 

NOSQL을 무조건 사용해야하는 경우

데이터의 구조가 거의 없고 대용량의 데이터를 저장할 때

: 정형화 되지 않은 많은 양의 데이터가 필요할 때  NOSQL를 사용하는 것은 효율적입니다.

 

클라우드 컴퓨팅 및 저장공간이 많이 필요할 때

: 관계및 참조와 같은 복잡한 과정이 필요하지 않은 경우 즉, 확장성이 제일 중요하다면 NOSQL 데이터베이스를 사용하는 것이 효율적입니다.

 

매우 동적인 서비스를 구축하고, 이에 따라 데이터 구조를 자주 변경해야할 때

: NOSQL은 미리 스키마를 정의하지 않아도 되기 때문에, 동적인 서비스를 빠르게 구축할 때 유용합니다. 또한, 데이터베이스 서버 오프라인(다운타임) 없이 데이터 구조를 자주 변경해야 할 때 일일이 스키마를 수정해야하는 관계형 DB보다 NOSQL기반 비관계형 DB가 더 좋습니다.