전체 글 262

RDBMS vs NoSQL

Relational DBMS 관계형 데이터 베이스로 객체를 나타내는 각 테이블의 관계로 정의되는 데이터 모델링 기법을 사용한다. RDBMS에서 사용하는 테이블은 고정된 스키마가 존재하며 SQL 언어를 사용하여 데이터를 조작하고 ACID 특성을 보자한다. NoSQL 고성능의 비관계적 데이터를 지향하기 위해 고안되었다. 빅데이터 등으로 저장해야하는 데이터 양이 늘어나자 수평적 확장에 대한 유연함이 요구 되었고 기존 관계형 데이터 베이스에서 고정된 스키마의 변경의 어려움을 극복하고자 하였다. 관계형 테이블을 만들지 않고 모든 데이터를 한 형식, Key-Value Pair 혹은 JSON document 등으로 저장하는 방식을 택한다. 따라서 테이블 JOIN이 필요없게 되었다. 대신 기존 관계형 테이블에서 무결성..

DB/이론 2022.05.02

무결성 제약 조건

무결성 제약 조건 (Intergrity Constraint) 관계형 데이터 베이스에서 데이터 무결성을 지키기 위한 제한된 조건을 의미한다. 입력, 삭제, 갱신하는 경우 항상 무결성 제약 조건을 만족할 때만 실행하도록 허용한다. 종류 설명 도메인 제약조건 속성의 자료 값은 항상 도메인의 원자값을 가져야한다. 개체 무결성 제약조건 속성은 null이 아니고 중복이 불가능하다. 키 제약조건 키 값은 유일하게 튜플을 식별해야한다. 참조 무결성 제약조건 외부키 값은 반드시 기본키의 도메인 값이어야 한다. 의미 무결성 제약 조건 조건을 명시한 제약조건은 지켜야한다. MySQL 에서 제공하는 제약조건 기본 키 제약 조건 PRIMARY KEY 기본 키 제약 조건에 해당하는 경우 해당 속성의 값은 중복을 허용하지않고 NU..

DB/이론 2022.05.02

MySQL MVCC - 멀티 버전 동시성 제어

MVCC (Multi Version Concurreny Control) 목적 잠금없이 동시성을 높이면서 일관된 읽기를 제공하기 위해 사용한다. Mutli Version 다중 버전의 레코드가 읽게 된. 격리 수준에 따라 레코드가 어떻게 읽힐 지가 결정된다. 예시 CREATE TABLE memberTbl( member_id INT NOT NULL AUTOINCREMENT PRIMARY KEY, member_name VARCHAR(24) NOT NULL, join_date DATE NOT NULL ); INERT INTO memberTbl(member_id, member_name, join_date) VALUES(1, 'John', '2022-05-01'); COMMIT; 위 연산의 실행 결과는 다음과 같다...

DB/MySQL 2022.05.01

트랜잭션 고립 수준에 따른 부정합 문제

트랜잭션 격리 수준 (isolation level) 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지를 결정하는 것이다. 부정합 문제 격리 수준에 따라 Dirty Read / Non-Repeatable Read / Phantom Read가 발생할 수 있다. Dirty Read 트랜잭션 T1에서 Reika라는 이름을 가진 계정 정보를 INSERT하였다. 트랜잭션 T2에서는 T1이 COMMIT을 하기 전에 해당 레코드를 읽었다. 트랜잭션 T1이 COMMIT을 완료한다. Dirty Read 현상에서는 한 트랜잭션에서 변경한 사항을 아직 COMMIT하기 전임에도 불구하고 다른 트랜잭션에서 읽을 수 있는 것을 말한다. 이러한 현상을 허용하는..

DB/이론 2022.05.01

REST API

REST (Representational state transfer) World Wide Web의 아키텍쳐 개발을 위해 고안된 소프트웨어 아키텍쳐 스타일을 지치한다. REST는 인터넷-스케일에서 분산 하이퍼미디어 시스템을 위한 제약 조건들의 집합을 정의한다. REST 아키텍쳐 스타일은 컴포넌트간의 상호작용/ 일관적인 인터페이스, 독립적인 컴포넌트 유지 그리고 유저-반응과 연관된 캐시 성능을 활용하기 위해 레이어드(계층) 형태의 아키텍처를 지향한다. REST는 소프트웨어 산업 전반에서 상태가 없고 신뢰성있는 webAPI를 제공하기 위해 널리 받아들여진 가이드라인과 같은 존재이다. REST 규약을 따르는 web API의 경우 RESTful이라고 지칭한다. RESTful web API는 HTTP 전송 메서드를..

내부 조인과 외부 조인

내부 조인 Inner Join 두 테이블의 컬럼 값을 결합으로써 새로운 결과 테이블을 만들어내는 것. 비교하는 컬럼 값이 항상 존재하는 레코드만으로 테이블을 생성해낸다. 명시적 조인 JOIN 키워드 뒤에 ON 절을 사용하여 결합 기준이되는 컬럼을 지정한다. SELECT * FROM employee INNER JOIN department ON employee.DepartmentID = department.DepartmentID; 암시적 조인 SELECT 구문의 FROM 절에서 컴마를 사용하여 단순히 조인을 위한 테이블을 나열한다. 이는 CROSS JOIN을 암묵적으로 사용하게 되고 WHERE 절에 오는 컬럼 비교를 사용하여 새로운 조인 테이블을 만들게 된다. SELECT * FROM employee, de..

DB/이론 2022.04.30

테이블 정규화

데이터 베이스 ACID ACID(원자성, 일관성, 고립성, 지속성) 특징은 데이터 베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다. 데이터베이스에서 데이터에 대한 하나의 논리적 실행단계를 트랜잭션이라고 한다. 원자성(Atomicity)은 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다. 예를 들어, 사용자 A가 B에게 돈을 입금한 경우 B의 계좌에 입금과 A의 출금 실행이 한번에 이루어져야하며 둘 중 하나가 실패한 상태가 존재해서는 안된다. 일관성(Consistency)은 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 말한다. 독립성(Isolation) 트랜잭션을 수행 시 다른 트랜잭션이 ..

DB/이론 2022.04.29

x64 아키텍쳐 레지스터

x64 레지스터들은 8개의 범용 레지스터와 8개의 추가 레지스터들을 합하여 16개의 레지스터로 이루어진다. 범용 레지스터 RAX / RBX / RCX / RDX 이 레지스터들은 함수 계산을 할 때 주로 사용되는 레지스터들로 RAX는 주로 함수의 리턴 값을 저장한다. RBX는 RSI/RDI와 연계하여 기준 주소의 오프셋을 나타내는 값을 저장한다. RCX는 for,while 문에서 자주 사용되는 반복 횟수가 저장된다. RDX는 RAX와 같이 데이터나 주소 등 여러 범용으로 사용된다. 스택 포인터 레지스터 RBP / RSP RBP : 스택 메모리의 시작 주소를 저장한다. RSP : 증가하는 스택 메모리의 끝 주소를 저장한다. 인덱스 레지스터 RSI / RDI 복사나 비교의 대상이 자주 되는 기준 출발/목적지 ..

[C++] SEHException : 구조적 예외 처리 Strucutred Exception Handling

Structured Exception Handling (SEH) 구조적 예외 처리 https://docs.microsoft.com/en-us/cpp/cpp/structured-exception-handling-c-cpp?view=msvc-170 C 언어에 대한 Microsoft 확장 표현으로 하드웨어 오류 같은 예외적인 상황을 잘 처리하기 위한 예외 처리 방법이다. 윈도우와 MicroSof에서 SEH를 지원한다 하더라도 ISO-표준 C++ 예외 핸들링 기법을 사용하는 것을 권장한다. 왜냐하면 표준 예외처리가 더 유연한 코드를 만들기 떄문이다. 문법 try-except 문법 __try { // compound-statement } __except (expression) { // compound-statem..

Advanced C++ 2022.04.20