목록CS 지식/데이터베이스 (47)
개발놀이터
다음 프로젝트를 기획하면서 Redis를 사용해봐야겠다는 생각을 하게 되었습니다. 기존 이론적으로 알고 있었던 내용으로는 Redis가 캐싱이나 세션 데이터 저장소로서 사용된다는 것은 알고 있었지만 실제 어떻게 사용하는지 그 이외의 사용처는 무엇이 있는지에 대해서 공부가 부족해 조금 알아보게 되었습니다. 이번 공부는 특별히 요즘 핫한 Open AI의 Chat GPT 3.5 버전을 이용해 공부를 진행했습니다. 하지만 어디까지나 생성형 대화 AI인만큼 정보가 정확한지에대한 더블체크를 진행했으니 정보의 신뢰성은 걱정하지 않으셔도 될 것 같습니다. 때문에 이번 포스팅의 출처에는 제가 정보를 얻은 출처가 아닌 더블체크에 사용된 출처가 기입될 예정이니 참고해주시면 감사하겠습니다. 또한, GPT를 이용해 얻은 정보들은 ..
작년 12월쯤에 데이터베이스 인덱스에 관한 포스팅을 진행한 적이 있습니다. 하지만 그때 당시 제대로 된 문서를 찾아보고 포스팅을 한 것이 아니라 다른 분들이 블로그에 올리신걸 짜집기 해서 적은 것이라 내용이 많이 부실합니다. 이번 포스팅에서는 이전 인덱스에 관한 내용을 리뉴얼하는 과정을 거칠 것이고 그렇기 때문에 이번 포스팅은 꽤나 알차게 작성할 예정입니다. 각설하고 시작해보죠 인덱스 우선 이런 데이터가 있다고 가정해봅시다. 이 상태에서 점수가 30점인 학생을 찾고 싶습니다. SQL문 SELECT 어쩌구 해서 만들겠죠? SQL문을 그렇게 만들면 데이터를 가져올겁니다. 하지만 기존 DBMS는 데이터를 검색할 때 모든 데이터를 다 뒤져서 가져옵니다. 점수가 30점인 학생을 찾기 위해서 다섯개의 레코드를 다 ..
블로그를 한번 쭉 보니 제가 데이터베이스 공부를 하면서 NoSQL을 굉장히 깊게 공부했는데 BASE에 대해서 다루지 않았더라구요. 이번 포스팅에서는 RDBMS에 ACID가 있다면 NoSQL에는 BASE가 있다! BASE에 대해서 알아보겠습니다. 그리고 BASE에서 가장 중요한 Eventual Consistency에 대해서 깊이있게 알아보도록 하겠습니다. BASEBASE는 ACID와 마찬가지로 NoSQL의 특징을 잘 알려주는 특징들의 앞글자를 따서 만든 단어입니다. BASE에 들어가기 앞서 ACID에 대해서 베이스 지식이 없으시면 아래의 링크에서 참고해주세요! https://coding-review.tistory.com/296 트랜잭션과 ACID (자바에서 트랜잭션을 다루는 방법에 대한 관점으로)이..
이번 포스팅에서는 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 에 대한 포스팅을 할 때 잠깐잠깐 등장하고 아주 간략하게 ..