본문 바로가기
반응형

Computer Science63

Redis란? 기본적으로 데이터베이스를 떠올리면 RDBMS이 생각날 것이다. 하지만 RDBMS는 관계형 데이터베이스이라서 조인 연산 등으로 인해 성능이 떨어질 수 있다. 이러한 문제를 개선하기 위해 NoSQL이라는 비관계형 데이터베이스가 등장하였다. NoSQL은 Not Only SQL의 약자로써 기존 관계형 데이터베이스(RDBMS)보다 더 융통성 있는 데이터 모델을 사용하고 데이터의 저장 및 검색을 위한 특화된 메커니즘을 제공하는 데이터 저장기술을 의미한다. ​NoSQL 데이터베이스는 단순 검색 및 추가 작업에 있어서 매우 최적화된 키-값 저장 기법을 사용하여 응답속도나 처리 효율 등에 있어서 매우 뛰어난 성능을 나타낸다. NoSQL에는 저장 방식에 따라 Key-Value, Wide Columnar, Document,.. 2021. 8. 27.
스레드 안전(Thread Safe)을 지키기 위한 방법 스레드란 CPU 이용의 기본 단위로써 프로세스의 실행 단위이다. 하나의 프로세스는 한 개 이상의 스레드를 가질 수 있는데, 이처럼 다수의 스레드를 수행하는 것을 멀티 스레딩이라고 한다. 프로세스 내부의 스레드들은 각각 스택 영역을 독립적으로 가지지만 스택 영역을 제외한 힙, 데이터 영역을 서로 공유하기 때문에 스레드들이 동시에 공유 자원에 접근하게 되면 예상치 못한 결과가 발생할 가능성이 생기게 된다. 간단한 예시로 현재 통장에 100만원이 들어있다고 하자. 만약 공유 자원에 대한 동시 접근을 막지 않았다면 N명이 동시에 100만원을 출금을 해버리면 100만원이 Nx100만원이 돼버리는 문제가 발생하게 된다. 이러한 상황을 "스레드 안전(Thread Safe)하지 않은 상황"이라고 부른다. 스레드 안전(.. 2021. 8. 15.
트랜잭션 고립화 레벨(Transaction Isolation Level) 트랜잭션 고립화 레벨(Transaction Isolation Level)은 정규화, 인덱스, 트랜잭션 특징(ACID) 등 Database 면접 질문으로 자주 등장한다는 소리를 들었다. 따라서 이번 기회에 한번 공부 및 정리해보려고 한다. ​우선 Isolaion Level이 무엇인지 알아보기 전에 Isolation Level이 왜 필요한지부터 알아보자. ​ Database에서 가장 중요한 것 중 하나는 데이터의 무결성을 보장해줘야 한다는 것이다. 만약, A가 DB에서 데이터를 사용하고 있다고 하자. 이때 B가 A가 사용하고 있는 데이터를 변경한다면 어떻게 될까? 데이터가 변경된다면 A는 원하는 데이터를 제대로 사용할 수 없다. ​즉, 이런 상황을 방지하기 위해 데이터의 무결성을 보장해줘야 하는 것이다. ​.. 2021. 7. 11.
개인키(대칭키) vs 공개키(비대칭키) 특정 웹사이트나 게임 같은 곳에 로그인하기 위해서는 ID와 Password를 입력할 것이다. 예를 들어 다음과 같이 로그인 정보를 입력하다고 하자. 만약 로그인을 할 때 ID는 그렇다 치고 Password를 현재 상태 그대로 해당 서버의 DB에 저장한다면 어떻게 될까? 이는 외부로 노출될 경우 쉽게 나의 비밀번호를 알 수 있기 때문에 보안상 굉장히 위험하다. ​이를 해결하기 위해 Password를 평문 상태로 저장하지 말고 특정한 알고리즘을 적용하여 암호화된 Password를 서버의 DB에 저장한다. 이러한 과정을 암호화라고 한다. ​또한, 반대로 암호화된 Password를 다시 평문으로 복구시키는 과정을 복호화라고 한다. ​물론 암호화 과정을 통해 100%로 노출을 막을 수 있는 것은 아니지만 암호화하.. 2021. 7. 10.
NoSQL 최근에 NoSQL이라는 데이터 저장기술이 많이 활용된다고 들었다. 내가 주로 사용하는 데이터 저장기술은 MySQL이지만 아무래도 최근 떠오르는 기술이기 때문에 면접에서도 자주 언급이 된다고 하길래 간단하게 한 번 정리해보려고 한다. ​ NoSQL은 Not Only SQL의 약자로써 기존 관계형 데이터베이스(RDBMS)보다 더 융통성 있는 데이터 모델을 사용하고 데이터의 저장 및 검색을 위한 특화된 메커니즘을 제공하는 데이터 저장기술을 의미한다. ​이를 통해 NoSQL 데이터베이스는 단순 검색 및 추가 작업에 있어서 매우 최적화된 키값 저장 기법을 사용하여 응답속도나 처리 효율 등에 있어서 매우 뛰어난 성능을 나타낸다. ​ NoSQL의 특징은 다음과 같다. 1. 관계형 모델을 사용하지 않으며 테이블 간 연.. 2021. 7. 10.
인덱스(Index) 인덱스는 데이터 레코드를 빠르게 접근하기 위해 쌍으로 구성되는 데이터 구조이다. 간단히 말해서 책의 색인(목차)이라고 할 수 있다. 책의 색인을 통해 원하는 페이지로 한 번에 이동할 수 있다. 이처럼 데이터베이스에서의 인덱스는 데이터베이스의 데이터를 빠르게 조회할 수 있는 자료구조이다. ​인덱스에 대해 공부하기 전에 인덱스가 왜 필요한지에 대해서 먼저 알아보자. ​테이블 A에 수 만개의 데이터가 있다고 하자. SELECT 문을 통해 원하는 데이터를 조회한다고 하면 어떻게 될까? 기준이 없기 때문에 테이블에 있는 모든 데이터를 순차적으로 읽는 FULL TABLE SCAN을 통해 원하는 데이터를 찾아야 한다. 이는 굉장히 비효율적인 방법이다. ​인덱스를 사용한다면 효율적으로 조회할 수 있다. 테이블 A의 데.. 2021. 7. 10.
DML - JOIN 대부분의 간단한 SQL 문제들은 SELECT 문을 통해 해결할 수 있지만 난이도가 올라가게 되면 JOIN 문을 활용해서 해결해야 하는 문제들이 등장한다. 따라서 한 번 JOIN에 대해 공부 및 정리해보려고 한다. ​ JOIN(조인)은 2개의 테이블에 대해 연관된 튜플들을 결합하여, 하나의 새로운 릴레이션을 반환하는 친구이다. ​JOIN은 크게 INNER JOIN(내부 조인)과 OUTER JOIN(외부 조인)으로 구분된다. 또한 일반적으로 FROM 절에 기술하지만, 릴레이션이 사용되는 어느 곳에서나 사용할 수 있다. ​ 먼저 INNER JOIN부터 알아보자. INNER JOIN은 교집합 개념으로 생각하면 쉽다. 두 테이블에 공통적으로 존재하는 튜플들을 추출한다. INNER JOIN은 일반적으로 EQUI J.. 2021. 7. 10.
키(Key)의 종류 키(Key)는 데이터베이스에서 조건에 만족하는 튜플을 찾거나 구별할 수 있는 유일한 기준이 되는 속성(Attribute)을 의미한다. ​튜플은 속성의 모임으로 릴레이션의 각 행을 뜻하며 파일 구조에서 레코드와 같은 의미이다. 튜플의 수를 카디널리티(Cardinality) 또는 기수, 대응수라고 한다. ​속성은 데이터베이스를 구성하는 가장 작은 논리적 단위로 개체(Entity)의 특성을 의미한다. 파일 구조상의 데이터 항목 또는 데이터 필드에 해당된다. 속성의 수를 디그리(Degree) 또는 차수라고 한다. ​ 예를 들어 다음과 같이 4개의 속성과 4개의 튜플이 존재하는 학생 테이블이 있다고 하자. 현재의 테이블에서는 중복된 값을 가지는 S_Grade, S_Subject 속성을 제외한 S_Id, S_Nam.. 2021. 7. 9.
SQL의 분류와 사용법 SQL은 Structured Query Language의 약어로써 국제 표준 데이터베이스 언어이며, 많은 회사에서 관계형 데이터베이스(RDB)를 지원하는 언어로 채택하고 있다. 또한, 질의 기능뿐만 아니라 데이터 구조의 정의, 데이터 조작, 데이터 제어 기능을 모두 갖추고 있다. ​이러한 SQL은 데이터를 정의하는 DDL, 데이터를 조작하는 DML, 데이터를 제어하는 DCL로 분류된다. 하나씩 살펴보도록 하자. ​ DDL(Data Define Language, 데이터 정의어) SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의하거나 변경 또는 삭제할 때 사용하는 언어 논리적 데이터 구조와 물리적 데이터 구조의 사상을 정의 데이터베이스 관리자나 데이터베이스 설계자가 사용한다. CREATE.. 2021. 7. 9.
반응형