목록CS 지식/데이터베이스 (44)
개발놀이터
이번 포스팅에서는 Elasticsearch에 대해서 알아보겠습니다. Elasticsearch가 뭐야? 라고 물으면 "index 아냐?", "검색 엔진이잖아", "데이터베이스 분석하는 툴이지", 구글같은거?" 이런 많은 대답이 오고 갈 수 있는 이유는 Elasticsearch가 위의 모든 내용을 포함하고 있기 때문입니다. Elasticsearch는 웹사이트나 document에서 간단한 검색부터, 로그데이터를 분석하고 모으는 일이나, 데이터를 분석하고 시각화해주는 똑똑한 비즈니스 툴이죠. 이번 포스팅에서는 Elasticsearch가 어쩌다 가장 인기있는 엔터프라이즈 검색 엔진이 되었는지 그리고 가장 인기있는 DBMS 탑10에 이름을 올리게 되었는지에 대해서 설명해보겠습니다. Elasticsearch가 뭐야?..
이번 포스팅에서는 Brewer (브루어)의 CAP정리에 대해서 알아보도록 하겠습니다. CAP정리가 20년도 더 된 정리이기 때문에 그걸 보완한 PACELC 정리에 대해서도 알아보겠습니다. CAP에 대해서 구글링을 해보면 많은 분들이 CAP이론이라고 하시는데 이론과 정리는 엄연히 다릅니다. 이론은 증명되지 않은 생각? 주장? 에 가깝고 (e.g 일반 상대성 이론) 정리는 증명이 완료된 이론을 정리라고 합니다 (페르마의 마지막 정리). 정확히 말하면 CAP는 이론이었다가 증명이 완료된 후 정리가 된것입니다. 정식 영문 명칭도 theory가 아닌 theorem으로 되어있습니다. p.s 저도 CAP이론이라고 말하는게 더 멋있어서 이론이라고 부르고 싶은데... 이론이 아닌걸 이론이라고 부르면 아무래도 잘못된 ..
오늘 포스팅에서는 데이터베이스 튜닝 방법인 Clustering, Replication, Sharding에 대해서 알아보도록 하겠습니다. 제가 설명할 이 세가지는 바로 분산시스템을 구현하는 방법들입니다. 분산시스템 혹은 분산환경이라고 불리는데, 여러개의 데이터베이스로 쪼개는 작업을 일컫습니다. 즉, MVCC와 마찬가지로 특별한 기술이 아닌 방법론으로 이 방법론들을 개발자들은 Architecture라고 하는 듯 합니다. 따라서 이 셋을 구현하는 방법은 정말 여러가지로 많고 우리는 그중에서 가장 대표적인 것들을 위주로 알아볼 예정입니다. Clustering Clustering (이하 클러스터링)은 하나의 데이터베이스 인스턴스 혹은 시스템 서버를 더많은 과정으로 쪼개는 작업입니다. 보통 데이터베이스 클러스터 안..
이번 포스팅에서는 흔히 NoSQL이라 불리우는 비관계형 데이터베이스에 대해서 알아보도록 하겠습니다. 원래는 NoSQL에 대해서 공부할 생각이 없었지만 트위터에서 개발자가 꼭 알아야할 내용중에 NoSQL이 있는 것을 보고 내가 생각했던것만큼 중요하지않은게 아니구나 싶어서 공부하게 되었습니다. 이번 포스팅에서는 NoSQL이 무엇인지, 기존 관계형 데이터베이스와 무엇이 다른지, NoSQL의 타입, 마지막으로 MicroService Architecture의 저변확대로인한 NoSQL의 입지에 대해서 알아보겠습니다. DBMS의 역사 우리는 NoSQL을 알아보기에 앞서 NoSQL 전에 관계형 데이터베이스 그리고 더 이전인 과거 이야기부터 시작해야합니다. 관계형 데이터베이스 이전, 기업들은 데이터를 관리하는 방법으로 ..
이번 포스팅에서는 Repeatable Read 격리수준에서 발생하는 부정합 문제인 Phantom Read를 Oracle에선 어떤 방식으로 해결했을지에 대해서 알아보도록 하겠습니다. Oracle은 전 세계에서 가장 많이 사용하는 데이터베이스 중 하나로 오랜시간 사랑받은 데이터베이스입니다. Phantom Read 해결방안 In Oracle 데이터를 잠근다는 것은 같은 리소스에 접근하는 트랜잭션 사이에서 일어날 수 있는 해를 끼치는 상황들을 막아줍니다. 이러한 모든 상황에서 오라클은 SQL문이 처리될 때 필요한 락을 자동적으로 얻을 수 있습니다. 그래서 오라클을 사용하는 유저는 세세한 것까지 걱정할 필요가 없어지죠. 오라클은 자동적으로 가장 낮은 수준의 제한정도를 가장 높은 수준의 데이터 정합성으로 바꿔줍니다..
이번 포스팅에서는 Repeatable Read 격리수준에서 발생하는 부정합 문제인 Phantom Read 를 PostgreSQL과 MSSQL에서는 어떻게 해결했는지에 대해서 포스팅해보겠습니다. 우선 PostgreSQL과 MSSQL을 묶은 이유는 두개의 데이터베이스가 Phantom Read 부정합문제를 같은 방식으로 해결했기 때문입니다. 우선 저는 이번에 PostgreSQL에 대해서 자세히 알게 되었습니다. 얼마전까진 있었는지도 몰랐구요. 그래서 간단하게 PostgreSQL에 대해서 정리하고 본격적으로 해결방안에 대해서 말씀드리겠습니다. PostgreSQL이란? PostgreSQL은 RDBMS 중 하나입니다. 기존 Postgres에서 SQL을 지원하게 된 것이 지금의 PostgreSQL이라고 합니다. 초기..
이번 포스팅에서는 Mysql에서 Phantom Read 부정합 문제를 어떻게 해결하고 있는지에 대해서 알아보도록 하겠습니다. 굳이 Mysql에서 라고 글을 쓴 이유는 공식문서를 여러개 찾아보던 중에 PostgreSQL과 Oracle 에선 다른 방식으로 이 Phantom Read 부정합 문제를 해결했다는 듯이 쓴 글을 몇개 봤기 때문입니다. PostgresSQL은 얼마나 smoothly 하게 이슈를 해결했는지 꼭 알고싶어서 말이죠 따라서 이번 포스팅에서는 우리가 흔히 접하게 되는 Mysql에서 Phantom Read를 어떻게 해결했는지에 대해서 알아보겠습니다. Phantom Read란? 격리 수준에 대해서 포스팅할 때나, @Transactional 에 대한 포스팅을 할 때 잠깐잠깐 등장하고 아주 간략하게 ..
오늘 포스팅에서는 흔히 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 소켓을 엽니다. 읽기/쓰기에 의해 생성된 데이터를 소켓에..