상세 컨텐츠

본문 제목

원티드 프리온보딩 백엔드 챌린지 2월 MySQL "잘"사용하기 사전과제!

DB

by 덴마크 당나귀 2023. 1. 27. 02:24

본문

728x90

 

1. 관계형 데이터베이스(RDBMS)와 비관계형 데이터베이스(NoSQL)의 장단점 비교


- 관게형 데이터베이스는 SQL에 의해 저장되고 있으며 정해진 스키마에 따라 데이터를 저장한다. R(relational)의 약자로 RDBMS는 관계형 데이터베이스 관리 시스템을 의미한다. RDB는 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 데이터베이스이다. 특징적으로는 여러개의 테이블로 구성되어있는 것들을 서로 연관관계를 맺을 수 있다. Primary Key가 있고, 서로간의 관계를 나타내는 외래 키(foreign key) 라는 것을 사용한다. 이렇게 테이블간의 관계에서 외래 키를 이요한 테이블 간 Join이 가능하게 하는 것이 RDBMS의 가장 큰 특징이다.

- RDBMS 장점 :
  - 스키마에 따라 데이터를 저장해야 하므로 명확한 데이터 구조를 보장하고 있다.
  - 관계는 각 데이터를 중복없이 한 번만 저장할 수 있다.

- RDBMS 단점 :
  - 테이블 간 관계를 맺고 있어서 시스템이 커지면 Join문이 많은 복잡한 쿼리가 만들어짐.
  - 성증 향상을 위해 서버의 성능을 향상 시켜야하는 Scale-up만 지원. 이로 인한 비용이 기하급수적으로 늘어날 수 있다.
  - 스키마로 인해 데이터가 유연하지 않음. --> 스키마가 나중에 변경 되면 번거롭고 어려워진다.

- 비관게형 데이터베이스는 RDBMS와는 달리 테이블 간 관계를 정의하지 않는다. 이러한 특성으로 인해 테이블 간의 관계를 정의하지 않아 일반적인 테이블 간 Join도 불가능하다. 시간이 지남에 따라 빅데이터의 등장으로 데이터와 트래픽이 기하급수적으로 증가함에 따라 RDBMS에 단점인 성능을 향상시키기 위해 장비가 좋아야 하는 Scale-Up의 특징이 비용을 기하급수적으로 증가시키기 때문에 데이터 일관성은 포기하되 비용을 고려하여 여러 대의 데이터에 분산하여 저장하는 Scale-Out을 목표로 등장했다.

- NoSQL 장점 :
  - NoSQL에서는 스키마가 없어서 유연하고 자유로운 데이터 구조를 지님. 언제든 저장된 데이터를 조정하고 새로운 필드 추가가 쉽다.
  - 데이터 분산이 용이하며 성능 향상을 위한 Scale-up 뿐 아니라 Scale-out 또한 가능하다.

- NoSQL 단점 :
  - 데이터 중복이 발생할 수 있다. 중복된 데이터가 변경 될 경우 수정을 모든 컬렉션에서 수행을 해야 한다.
  - 스키마가 존재하지 않아서 명확한 데이터 구조를 보장하지 않으며 데이터 구조 결정하는게 어려울 수 있다.


2. 트랜잭션(transaction)이란 무엇인가요?

 

- 트랜잭션이란 간단하게 말하면 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 뜻함.
  -  데이터베이스의 상태 변화? -> SQL을 이용해서 데이터베이스에 접근하는 것을 의미한다.
    -  SELCET, INSERT, DELETE, UPDATE -> 여기서 작업의 단위는 질의어 한문장이 아니라는 점. 작업단위는 많은 질의어 명령문들을 사람이 정하는 기준에 따라 정해짐. 즉, 관리자나 개발자가 하나의 트랜잭션 설계를 잘하는 것이 데이터를 다루는 것에 많은 이점이 있다.
    - 트랜잭션의 특징은 크게 4가지로 구분된다.
      1. 원자성
        -  트랜잭션이 DB에 모두 반영되던가, 혹은 전혀 반영되지 않는다는 것.
          그 이유는, 트랜잭션은 사람이 설계한 논리적인 작업 단위. 일처리는 작업단위 별로 이루어져야 사람이 다루는데 무리가 없기 때문.
            그 이유는, 트랜잭션 단위로 데이터가 처리되지 않는다면, 설계한 사람은 데이터 처리 시스템을 이해하기 힘들고 오작동 했을 시 원인을 찾기 매우 힘들어짐.
      2. 일관성
        -  트랜잭션의 작업 처리 결과는 항상 일관성이 있어야 한다.
          트랜잭션이 진행되는 동안, DB가 변경 되더라도 업데이트된 DB로 트랜잭션이 진행되는 것이 아닌, 기존 트랜잭션을 진행할 당시 참조한 DB로 진행된다. 이렇게 하면서 사용자가 일관성 잇는 데이터를 볼 수 있게하기 위해서이다.
      3. 독립성
        -  둘 이상의 트랜잭션이 동시에 실행되고 있을 경우 어떤 하나의 트랜잭션이라도, 다른 트랜잭션의 연산에 끼어들 수 없다는 점을 가리킨다. 하나의 특정 트랜잭션이 완료될 때까지, 다른 트랜잭션이 특정 트랜잭션의 결과를 참조할 수 없다. (상식적으로 당연한 것? 사전에 조치를 해둬야 될 듯?)
      4. 지속성
        -  트랜잭션이 성공적으로 완료됐을 경우, 결과는 영구적으로 반영되어야 한다는 점.

  -  트랜잭션의 Commit : 하나의 트랜잭션이 성공적으로 끝났고, DB가 일관성있는 상태에 있을 때, 하나의 트랜잭션이 끝났다는 것을 알려주기 위해 사용하는 연산.
  -  Rollback : 하나의 트랜잭션 처리가 비정상적으로 종료되어 트랜잭션의 원자성이 깨진 경우, 트랜잭션을 처음부터 다시 시작하거나, 트랜잭션의 부분적으로만 연산된 결과를 다시 취소시킨다. 후에 사용자가 직접 트랜잭션 처리된 단위대로 Rollback을 진행할 수도 있다.


3. MySQL에서 조인(join)의 역할은 무엇인가요? 다양한 join의 방식에 대해 설명해주세요.



- 조인이란 SELCET와 더불어 가장 많이 사용하는 옵션 중 하나. 두 개 이상의 테이블을 묶어서 하나의 결과 집합으로 만들어 내는 것. 즉, 서로 다른 테이블에서 데이터를 가져올 때 사용하는 것이 join이다.
- 표준 SQL 에서는 JOIN을 1. INNER JOIN 2. LEFT JOIN 3. RIGHT JOIN 으로 구분한다.

- 1. INNER JOIN
  - 가장 많이 사용되는 join문이다. ON절과 함께 사용되며, ON 절의 조건을 만족하는 데이터만을 가져온다. ON절에서는 WHERE 절에서 사용할 수 있는 모든 조건을 사용할 수 있다.

- 2. LEFT JOIN
  - 첫 번째 테이블을 기준으로, 두 번째 테이블을 조합하는 JOIN이다. 이때 INNER JOIN과 다른 점은 ON 절을 만족하지 않는 경우는 첫 번째 테이블의 필드 값을 그대로 가져온다는 것. 그러나 해당 레코드의 두 번째 테이블의 필드 값은 모두 NULL로 표시된다.

- 3. RIGHT JOIN
  - LEFT JOIN과는 반대로 두 번째 테이블을 기준으로 첫 번째 테이블을 조합하는 JOIN이다. 이때 ON 절의 조건을 만족하지 않는 경우는 두 번째 테이블의 필드 값을 그대로 가져오되, 첫 번째 테이블의 필드 값을 모두 NULL로 표시된다.


4. MySQL에서 인덱스(index)란 무엇인가요?



- 인덱스란 테이블에서 원하는 데이터를 쉽고 빠르게 찾기 위해 사용. 쉽게 생각하면 자주 사용되는 필드 값으로 만들어진 원본테이블의 사본이라고 생각할 수 있다.
  - MySQL은 데이터 검색시 첫 번째 필드부터 차례대로 테이블 전체를 검색. 그렇기에 테이블이 크면 클수록 데이터를 탐색하는 시간도 많이 늘어나게 된다. 
  - 그러나 인덱스 사용시 테이블 전체를 읽지 않아도 돼서, 검색과 질의에 대한 처리가 빠르게 이루어짐. 
  - 이러한 인덱스는 사용자가 직접 접근할 수 없고, 검색과 질의에 대한 처리에서만 사용됨.
  - 이렇게 인덱스가 설정된 필드 값을 포함한 데이터의 삽입, 삭제, 수정 작업이 원본 테이블에서 이루어지면 인덱스도 함께 수정되어야 함. -> 인덱스 설정된 테이블의 처리속도 저하 가능성 존재
  - 인덱스는 수정보다 검색이 자주 사용되는 테이블에서 사용하는 것이 좋다!!

 

 

 

 

참조

http://www.tcpschool.com/mysql

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

728x90