CS/Database 8

[Database] 레디스(Redis)

들어가기 전... 30년이 넘는 시간동안 RDBMS(Relational DataBase Management System)가 사랑받고 있지만, 대용량 데이터 저장, 비정형 데이터 저장, 빠른 응답시간 등의 새로운 요구사항에 기존 RDBMS만으론 대응하기 어려울 때가 있다. 그럴 때 기존 RDBMS와 차별적인 강점을 갖춘 데이터베이스 관리 프로그램들, NoSql을 찾게 된다. ※ NoSql? NoSql은 기존 RDBMS 방식을 탈피한 데이터베이스를 의미한다. ※ NoSql의 종류 (NoSql은 RDBMS가 아님) - 서로 연관된 그래프 형식의 데이터를 저장할 수 있는 Graph Store - Row가 아닌 Column 위주로 데이터를 저장하는 Column Store - 비정형 대량 데이터를 저장하기 위한 D..

CS/Database 2023.01.23

[Database] 저장 프로시저(Stored PROCEDURE)

저장 프로시저 (Stroed Procedure)란? 실무에서는 프로그램에서 만들어 놓은 SQL문을 저장해 놓고, 필요할 때마다 호출해서 사용하는 방식으로 프로그램을 만든다. 저장 프로시저는 이러한 방식이 가능하도록하는 각 DBMS에서 제공하는 프로그래밍이다. 간단히 말하자면, 여러 쿼리를 하나의 함수로 묶은 것이다. 데이터베이스에서 SQL을 통해 작업을 하다보면, 하나의 쿼리문으로 원하는 결과를 얻을 수 없을 때가 생긴다. 원하는 결과물을 얻기 위해 사용할 여러 줄의 쿼리문을 한 번의 요청으로 실행하면 좋지 않을까? 저장 프로시저는 쿼리문들의 집합으로, 어떤 동작을 여러 쿼리를 거쳐서 일괄적으로 처리할 때 사용한다. → 프로시저를 만들어두면, 애플리케이션에서 여러 상황에 따라 해당 쿼리문이 필요할 때 인..

CS/Database 2023.01.23

[Database] 트랜잭션 격리 수준 (Transaction Isolation Level)

트랜잭션의 격리수준이란? 동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것이다. 즉, 간단하게 말해 특정 트랜잭션이 다른 트랜잭션에 변경한 데이터를 볼 수 있도록 허용할지 말지 결정하는 것이다. 격리 수준 (4가지) READ UNCOMMITTED (커밋되지 않은 읽기) (레벨 0) READ COMMITTED (커밋된 읽기) (레벨 1) REPEATABLE READ (반복 가능한 읽기) (레벨 2) SERIALIZABLE (직렬화 기능) (레벨 3) 순서대로 READ UNCOMMITTED의 격리 수준이 가장 낮고, SERIALIZABLE의 격리 수준이 가장 높다. 즉, 아래로 내려갈수록 트랜잭션 간 격리(고립) 정도가 높아지며, 동시 처리 성능이 떨어지는 것이 일반..

CS/Database 2023.01.20

[Database] 트랜잭션(Transaction)

트랜잭션(Transaction)이란? 데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위 💡 데이터베이스의 상태를 변화시킨다는 것을 무엇일까? → SQL 질의어를 통해 DB에 접근하는 것! ※ SQL 질의어 SELECT INSERT DELETE UPDATE 🚨 작업의 단위는 질의어 한문장이 아니다. 작업단위 : 많은 질의어 명령문들을 사람이 정하는 기준에 따라 정하는 것을 의미. 예시) 사용자 A가 사용자 B에게 10,000원을 송금한다. ✔️ 이때 DB 작업 1. 사용자 A의 계좌에서 만원을 차감한다 : UPDATE문을 사용해 사용자 A의 잔고를 변경 2. 사용자 B의 계좌에서 만원을 추가한다 : UPDATE문을 사용해 사용자 B의 잔고를 변경 💡 현재 작업 단위 : 출금 UPDATE문 + 입금 ..

CS/Database 2023.01.12

[Database] 인덱스 (Index)

들어가기 전... 인덱스(Index)란 무엇인가? DBMS도 데이터베이스 테이블의 모든 데이터를 검색해서 원하는 결과를 가져오려면 시간이 오래 걸린다. 그래서 칼럼의 값과 해당 레코드가 저장된 주소를 키와 값의 쌍으로 인덱스를 만들어 두는 것이다. DBMS의 인덱스는 항상 정렬된 상태를 유지하기 때문에 원하는 값을 탐색하는데는 빠르지만 새로운 값을 추가하거나 삭제, 수정하는 경우에는 쿼리문 실행 속도가 느려진다. (뒤에 나옴) → 결론적으로 DBMS 에서 인덱스는 데이터의 저장 성능을 희생하고 그 대신 데이터의 읽기 속도를 높이는 기능이다. 그래서 인덱스의 목적 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조. 즉, 데이터베이스의 테이블에 대한 검색 ..

CS/Database 2023.01.10

[Database] 이상 현상 (Anomaly)

좋은 관계형 데이터베이스를 설계하는 목적 중 하나가 정보의 이상 현상 (Anomaly)이 생기지 않도록 고려해 설계하는 것이다. 이상 현상은 테이블을 설계할 때, 잘못 설계하여 데이터를 삽입, 삭제, 수정할 때 논리적으로 생기는 오류를 말한다. 💡 정규화를 해야하는 이유는 잘못된 테이블 설계로 인해 Anomaly(이상 현상)이 나타나기 때문이다. 이상 현상은 갱신 이상 (Update Anomaly) 삽입 이상 (Insertion Anomaly) 삭제 이상 (Deletion Anomaly) 으로 구성된다. 학번 이름 나이 성별 강의코드 강의명 전화번호 1011 이태호 23 남 AC1 데이터베이스 개론 010-2627-8123 1012 강민정 20 여 AC2 운영체제 010-4665-1941 1013 김현수..

CS/Database 2023.01.10

[Database] SQL과 NOSQL의 차이

기본적으로 두 기술의 가장 큰 차이점은 SQL은 관계형 데이터베이스이고, NoSQL은 비관계형 데이터베이스이다. 보통 Spring에서 개발할 때는 MySQL을, Node.js에서는 MongoDB를 주로 사용했을 것이다. 하지만 그냥 단순히 프레임워크에 따라 결정하는 것이 아니다. 프로젝트를 진행하기에 앞서 적합한 데이터베이스를 택해야 한다. 차이점을 알아보자. SQL (관계형 DB) SQL을 사용하면 RDBMS(관계형 DB 관리 시스템)에서 데이터를 저장, 수정, 삭제 및 검색할 수 있다. 주로 데이터의 다양한 엔티티와 변수 간의 관계가 있는 구조화된 데이터를 관리하는 데 사용된다. 관계형 데이터베이스에는 핵심적인 두 가지 특징이 있다. 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다. 데이터는 ..

CS/Database 2023.01.05

[Database] SQL Injection

SQL Injection이란? 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위 ※ 인젝션 공격은 OWASP Top10 중 첫 번째에 속해 있으며, 공격이 비교적 쉬운 편이고 공격에 성공할 경우 큰 피해를 입힐 수 있는 공격 (OWASP이란? → 보안 취약점 등을 연구하고, 10대 웹 애플리케이션의 취약점(OWASP TOP 10)을 발표) 왜 발생할까? 웹 어플리케이션은 User의 행동(클릭, 입력 등)에 따라 DB에 있는 데이터를 서로 다르게 표시한다. 이를 위해 Query는 User가 입력한 데이터를 포함하여 Dynamic하게 변하므로 개발자가 의도하지 않은 정보를 열람할 수 있게 된다. 주로 어떨 때 발생할..

CS/Database 2023.01.04