목록CS 지식/데이터베이스 (47)
개발놀이터
오늘 포스팅에서는 흔히 Read Committed 격리 수준에서 생기는 부정합 문제인 Non-Repeatable Read 문제를 해결하기 위해 사용하는 방법이라고 알려져있는 MVCC에 대해서 알아보도록 하겠습니다. 이 포스팅에서는 MVCC가 무엇인지, 사용하면 어떤 이점이 있는지, 동작원리 등을 알아볼겁니다. MVCC에 대해서 깊게 알고싶지 않으신 분들은 그냥 Non-Repeatable Read 문제를 해결하기 위해서 Undo영역 혹은 Xmin, Xmax를 이용해 해결하는 방법론이라고 알고 계시면 될 것같습니다. 그럼 시작해보죠 MVCC란? MVCC란 Multiversion Concurrency Control의 약자로 해석해보면 "여러개의 버전으로 동시성문제를 해결하는 방법"이라고 할 수 있습니다. 왜 ..
이번 포스팅에서는 트랜잭션과 ACID 그리고 더 나아가서 자바에서 트랜잭션을 어떻게 다루는지에 대해서 알아보도록 하겠습니다. 굉장히 딥하게 들어가기 때문에 트랜잭션과 ACID에 대한 기본적인 내용에 대해서만 알고싶으신 분들은 앞부분만 읽으시고 뒷부분은 알아만 두시는 것을 추천드리겠습니다. 최대한 쉽게 풀어서 쓸거라 찬찬히 읽으시면 이해가 안되지는 않을겁니다! 그럼 시작해보죠 트랜잭션 트랜잭션을 간단하게 한마디로 설명하자면 "데이터베이스의 상태를 변경시키기 위한 논리적인 단위" 라고 할 수 있습니다. 여기서 상태를 변경시킨다는 것은 우리가 흔히 사용하는 SQL문을 이용한 것입니다. DDL, DML등을 말하는 것이지요. 트랜잭션에 대한 개념은 이게 다입니다. 조금 허무하시죠? 이제 트랜잭션의 특징이라고 말할..
이번 포스팅에서는 커넥션 풀에 대해서 알아보도록 하겠습니다. 커넥션 풀링은 데이터 접근 패턴으로 많이 알려져있습니다. 커넥션 풀링은 데이터베이스 커넥션과 읽고/쓰는 데이터베이스 작업 성능을 포함되는 과부하를 줄이기위한 목적으로 사용됩니다. 기본적인 레벨에서 커넥션 풀은 데이터베이스 커넥션 캐싱 구현체입니다. 이것은 개발자들의 특별한 요구를 적절하게 구성할 수 있습니다. 커넥션 풀 왜 커넥션 풀을 사용해야 할까요? 이 질문에 대한 답을 얻기 위해서는 데이터베이스가 커넥션 작업을 하는 동안 벌어지는 일에 대해서 알면 답할 수 있습니다. 데이터베이스 커넥션은 데이터베이스 드라이버를 사용해서 커넥션을 엽니다. 읽기/쓰기에 의해 생성된 데이터를 위해 TCP 소켓을 엽니다. 읽기/쓰기에 의해 생성된 데이터를 소켓에..
이번 포스팅에선 이해하기 어렵기로 소문난 정규화에 대해서 포스팅해볼 생각입니다. 저도 정규화에 대해서 공부해야겠다고 마음 먹었지만 이렇게 이해하기 힘들었던 적은 없었던 것 같네요. 워낙 말이 베베꼬여져 있으니까 예제와 함께 제가 말로 풀어서 설명해보도록 하겠습니다. 정규화 정규화는 무엇일까요? 우선 정규화의 기본 목표는 테이블 간에 중복된 데이터를 허용하지 않는다는 것입니다. 중복된 데이터를 허용하지 않음으로써 무결성을 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있습니다. 저는 여기서 한가지 걸리더군요. 무결성은 또 뭔가? 정규화에 대해서 알아보기 전에 무결성을 유지할 수 있다고 하니 무결성에 대해서 조금만 알아보도록 하겠습니다. 무결성 무결성에는 크게 세가지가 있습니다. 개체 무결성, 참조 무..
테이블 작성시에 Constraint를 사용해서 입력하는 자료에 대해서 제약, 즉 규칙을 정해줄 수 있는데요. 이때 정해진 제약에 따라서 데이터가 입력이 됩니다. 제약에 배반된다면 자료 입력이 거부되면서 오류가 납니다. 즉, 데이터 무결성을 지키기 위한 데이터 무결성 제약조건에 대해서 알아볼까 합니다. 데이터 무결성이란 권한이 부여된 계정이나 사람만이 접근 가능하고, 정확하고 완전한 데이터들이 저장되어 있는 상태를 생각하시면 됩니다. 데이터의 무결성을 위해서 데이터베이스에서는 5가지의 제약조건을 제공하고 있습니다. 이제 각각에 대해서 알아보도록 하겠습니다. 1. NOT NULL -구문 형식 NOT NULL은 INSERT 시 즉, 데이터 입력시에 누락이 되어서는 안되는 부분이라는 것입니다. NULL값이 들어..
DB를 사용하면서 데이터의 양에 다라 실행 결과의 속도가 차이가 납니다. JOIN이나 서브 쿼리 사용 시 곱 연산이 일어나 데이터 양이 증가하기 때문에 WHERE 조건에 필요한 데이터만 추출 후 사용하는 것이 좋다고 합니다. 쿼리의 성능을 높이는데 중요한 것은 인덱스를 적재적소에 사용하는 것입니다. 그렇다면 인덱스란 무엇인지 구조는 어떻게 되는지 사용시 장단점은 무엇인지 등에 대해 지금부터 포스팅 해보도록 하겠습니다. 인덱스 인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조입니다. 여기서 중요한건 '검색 속도'를 향상시키기 위한 자료구조라는 것입니다. 그럼 다른 연산은 향상이 안되는건가? 꼭 그렇지만은 않습니다. 향상은 되지만 추가적인 연산이 ..
우선 데이터베이스 격리수준을 들어가기 전에 우리는 트랜잭션에 대해서 간단한 이해가 필요합니다. 트랜잭션 트랜잭션은 데이터의 정합성을 보장하기 위한 기능입니다. 트랜잭션은 꼭 여러개의 변경 작업을 수행하는 쿼리가 조합됐을때만 의미있는 개념은 아닙니다. 트랜잭션은 논리적인 작업 셋 자체가 100% 적용되거나 또는 아무것도 적용되지 않아야 함을 보장해 주는 것입니다. 이러한 트랜잭션의 특징을 잘 나타내는 4가지 키워드가 있습니다. 바로 ACID 라고 하는 원자성 (Atomicity), 일관성 (Consistency), 격리성 (isolation), 지속성 (Durability)를 보장해야 합니다. ACID에 대한 자세한 설명은 아래와 같습니다. 원자성 (Atomicity) : 트랜잭션 내에서 실행한 작업들은 ..