전체 글 269

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

트랜잭션 격리 수준 (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

[C++] libcurl (3) 공개 API를 사용해보자 : HTTP POST

libcurl 라이브러리를 이용하여 HTTP POST 요청을 해본다. POST 요청의 경우 일반적으로 계정을 나타내는 Authentication 인증 정보를 헤더에 요구할 경우가 많다. 그 헤더 종류 중 하나가 Basic Authentication이 있다. "Authroization: Basic {username:password}" {username:password}: 해당 계정 이름과 비밀번호를 Base64 변환을 통해 얻은 스트링을 담아 보내게 된다. 두 필드는 ':'로 구분되어야 하기 때문에 username에는 ':' 가 없어야한다. HTTP POST 테스트 쉽게 HTTP POST를 테스트할 수 있는 사이트 중 다음을 이용해보도록 한다. https://reqbin.com/req/o3vugw0p/po..

Advanced C++ 2022.04.18

[C++] libcurl (2) 공개 API를 사용해보자 : HTTP GET

(1)에서 libcurl 정적 라이브러리를 이용하여 실제로 공개되어 있는 API를 사용해보도록 한다. 블록체인 코인 시세 조회하기 https://www.blockchain.com/explorer Blockchain.com Explorer | BTC | ETH | BCH The easiest and most trusted transaction search engine and block explorer. www.blockchain.com 위 사이트에서 제공하는 API를 사용해서 실시간 거래 시세를 조회해보도록 한다. 관련 API를 조회해보면 인증 없이 사용될 수 있는 API 중에 /tickers 관련 API를 사용하면 모든 코인 혹은 {symbol}에 해당하는 거래 시세를 조회가능할 것으로 보인다. Auth..

Advanced C++ 2022.04.17

[C++] libcurl (2) JSON 데이터 다루기

C++ 언어로 객체를 JSON 데이터로 직렬화하고 다시 스트링으로부터 역직렬화 하는 방법을 알아본다. Modern C++을 이용해서 JSON 데이터를 효과적으로 다루는 다음 공개 소스 코드를 사용한다. https://github.com/nlohmann/json GitHub - nlohmann/json: JSON for Modern C++ JSON for Modern C++. Contribute to nlohmann/json development by creating an account on GitHub. github.com nlohmnn json의 경우 header-only 라이브러리로 include 폴더 내의 json.hpp만 포함시키면 링크 없이 바로 적용할 수 있다. json_define.h #pr..

C++ 2022.04.17