CS/데이터베이스 10

MySQL과 MySQL2의 차이점

MySQL과 MySQL2의 차이점은 바로 promise다. mysql은 콜백 기반이기 때문에 promise를 사용하지 못하고 npm에 있는 promise-mysql 모듈을 따로 설치해서 사용해야 한다. 하지만 mysql2는 promise를 지원하기 때문에 다른 모듈을 설치하지 않고 사용이 가능하다. promise - promise로 구현된 비동기 처리 함수는 콜백을 예측 가능한 패턴으로 사용하도록 도와준다. 순차적이지 않은 비동기함수의 실행순서를 제어할 수 있게 도와주고 콜백 패턴에 비해 가독성이 좋고 반환된 결과물을 사용하기 편하게 도와준다. promise의 세 가지 상태 - pending: new Promise로 Promise가 생성된 직후부터 resolve나 reject가 호출되기 전까지의 순간 -..

Ch9. Transaction

이번 마지막 챕터에서는 트랜잭션에 대해서 배웠다 트랜잭션은 DBMS에서 데이터를 다루는 논리적인 작업의 단위인데 하나의 트랜잭션은 여러 개의 오퍼레이션으로 구성되어 있고 그 오퍼레이션은 하나의 논리적인 작업의 단위가 된다 DBMS에서 트랜잭션을 정의하는 이유는 데이터베이스에서 데이터를 다루는 작업 중 장애가 발생할 때 데이터를 복구하는 작업의 단위로 사용하기 위해서다 트랜잭션은 전체 수행되거나 전체 수행되지 않아야 한다(all or nothing) DBMS에는 동시성 제어와 회복이라는 기능이 있다 동시성 제어 - 동시에 수행되는 트랜잭션들이 데이터베이스에 미치는 영향은 이들을 순차적으로 수행했을 때 데이터베이스에 미치는 영향과 동일해야 하는 것 -> 그래서 다수의 사용자가 데이터베이스에 동시에 접근할 수..

Ch8. Indexing

챕터 8에서는 인덱싱에 관해서 배웠다 인덱싱은 원하는 데이터를 접근하는 속도를 높이기 위해 사용되는데 인덱스가 무엇인지 알기 위해서 서치 키가 무엇인지 알아야 한다(서치 키 - 파일에서 레코드를 찾기 위해 사용되는 속성 또는 집합) 인덱스 파일은 인덱스 엔트리라는 레코드로 구성된다 인덱싱에는 두 가지 종류가 있는데 1. Ordered index - 정렬된 순서로 서치 키를 저장하고 각 서치 키를 그 서치 키를 가지고 있는 레코드와 연결한다 ㅇ primary index(clustering index) - 순차적으로 정렬된 파일의 순서를 정하는 기준이 되는 속성을 서치 키로 사용하는 인덱스 ㅇ secondary index(non-clustering index) - 키의 순서가 레코드 순서와 상관없다 ㅇ de..

Ch7. Normalization

이번 챕터에서는 정규화에 대해서 배웠는데 정규화의 의미, 이상 현상이 무엇인지, 함수 종속이 무엇을 의미하는지, 정규화 과정에 대해서 배웠다 정규화는 하나의 릴레이션에 하나의 의미만 존재할 수 있도록 릴레이션을 분해해가는 과정인데 이 과정에서 데이터 중복이 있을 때 이상 현상이 발생할 수 있다 이런 데이터의 중복을 피하기 위해 우리는 스키마를 분해해서 정규화를 하게 된다 정규화를 하면 자료 저장 공간 최소화, 데이터베이스 내 데이터 불일치 되는 위험 요소 최소화하므로 사용하기 좋은 데이터베이스 스키마 설계가 된다 이상 현상은 릴레이션의 설계가 잘못되어 불필요한 데이터 중복이 발생하고 데이터 중복이 릴레이션을 조작할 때 문제를 발생시키는 것인데 갱신 이상, 삽입 이상, 삭제 이상이 있다 함수 종속은 속성 ..

Ch6. Entity-Relationship Model

챕터 7은 개체-관계 모델(E-R 모델)에 배우는데 첫 번째 강의 개체, 관계, 속성에 대해 배웠다 개체는 다른 객체와 구별되어 존재하는 하나의 객체이고 개체들은 속성을 갖고 있다 개체 집합은 같은 특성을 가지고 있는 같은 타입의 개체들의 집합이고 관계 집합은 관계(각 개체들의 순서쌍)의 집합이다 관계 차수는 관계 집합의 관계에 참여하는 개체 집합의 수이다 속성은 타입이 있는데 단순 속성 - 더 이상 나누어지지 않는 속성 복합 속성 - 더 작은 다른 속성으로 나누어질 수 있다->사용하면 일부만을 참조할 때 좋고 모델링을 명확하게 할 수 있다 단일 값 속성 - 특정 개체에 대해서 하나의 값을 가지는 속성 다중 값 속성 - 여러 개의 값을 가질 수 있는 속성 유도(derived) 속성 - 저장되지 않고 필요..

Ch5. Advanced SQL

챕터5에서는 데이터베이스 프로그래밍 언어를 사용해서 데이터베이스에 접근하는 방법이 필요한지에 대해 알아봤고 JDBC 프로그래밍에 대해 배워봤다 먼저 첫 강의에서는 프로그래밍 언어로 데이터베이스에 접근하는 방법에 대해 공부했는데 범용 프로그래밍 언어로 데이터베이스에 접근하는 이유는 SQL은 데이터를 어떻게 가져오는 지에 대한 기술이 없기 때문이다. SQL로 다 표현할 수 없는 질의를 작성하기 위해 더 강력한 프로그래밍 언어에 SQL을 내장시켜야 한다 데이터베이스 서버에 접근하는 방법은 2가지로 1. Dynamic SQL - 프로그래밍 언어를 직접 사용하기 때문에 직접 JAVA API를 호출할 수 있고 따로 컴파일러가 필요하지 않다 2. Embedded SQL - 데이터베이스 서버와 소통할 수 있는 수단을 ..

Ch4. Intermediate SQL

이번 챕터 4에서는 좀 더 다양한 조인 방법과 가상 릴레이션인 뷰의 개념, Transaction, 무결성 제약조건, 데이터 정의, 권한에 대해서 배웠는데 첫 강의에서는 조인 연산은 두 개의 릴레이션을 결합해서 하나의 릴레이션으로 넘겨주는 거라 배웠는데 내부 조인은 매치되지 않은 투플을 유지하지 않는 것으로 보통의 조인인데 좀 더 다른 조인 방법으로는 Outer join, Left outer join, Right outer join, Full outer join, Join using, on condition이 있는데 Outer join은 두 릴레이션에 natural join 연산을 할 때 조인 속성 값이 같은 투플이 상대 릴레이션에 존재하지 않아 조인 연산에서 제외된 투플들을 결과 릴레이션에 포함시키는 조..

Ch3. SQL

챕터 3는 Data Manipulate Language의 대표적인 언어 SQL에 대해서 배웠는데 양이 가장 많았다. 그리고 강의 중에 예를 드는 게 너무 많아서 힘들었지만 그래도 어찌저찌 잘 끝낸 거 같아서 다행이었다. 일단 SQL 첫 강의에서는 SQL에 대한 간단한 개요에 대해서 배웠는데 SQL의 역사에 대해 간단히 배우고 SQL 도메인 타입과 무결성 제약조건에 대해서 배웠는데 무결성 제약조건은 간단하게 1. null 값을 가질 수 없고 2. 기본키를 구성하는 속성은 null값, 중복된 값을 가질 수 없고 이미 릴레이션 안에 존재하는 기본 키 값을 가진 tuple은 삽입될 수 없다였다 그리고 릴레이션을 정의하는 예를 보고 릴레이션의 스키마를 삭제하거나 수정하는 명령어까지 알아봤다 두 번째 강의에서는 기..

Ch2. Relational Model

이번 챕터에서는 관계형 모델에 대해서 공부를 했는데 2개의 강의로 나누어져 있어서 양이 많은가하고 염려스러웠지만 괜찮았던 것 같다. 관계형 모델은 아래와 같은 그림으로 나타낼 수 있는데 여기서 테이블을 relation으로, 테이블의 행을 tuple로, 테이블의 열을 attribute라고 할 수 있다. Relational 데이터베이스는 테이블들의 모음인데 즉 여러 개의 relation으로 데이터베이스가 구성되는 것이다. 그리고 테이블은 순서를 가지지만 relation은 순서를 가지지 않는데 내용이 같으면 순서가 달라도 동일한 relation으로 간주한다 -> 그대신 중복된 tuple을 가져서는 안된다! Relation의 column인 attribute는 도메인(각 attribute에 허락된 값들의 집합)을..

Ch1. 데이터베이스 소개

이번에 dev2play 활동을 하면서 블로그에 공부한 걸 올리기로 했는데 이런 게 너무 익숙하지 않다보니 좀 낯설지만 일단 어설프게라도 시작해 볼 생각이다. 데이터베이스 공부는 edwith 부스트코스에서 인터넷 강의를 들으며 PPT로 공부했던 내용을 정리하는 식으로 공부했다. 아직은 Chapter 1만 했지만 곧 Chapter 12까지 수두룩하게 채워지는 것을 볼 수 있을 것이다! Chapter 1은 데이터베이스에 대해 소개를 해줬고 1~3강까지 있었다. 배운 내용을 토대로 요약해보자면 우리가 흔히 아는 데이터베이스란 단순히 데이터를 모아놓는 것이 아니라 데이터베이스 매니지먼트 시스템(DBMS)을 의미하는 것이었다. 오늘날 데이터베이스는 여러 분야에서 쓰이고 있고 예를 들어 은행의 고객 계좌 관리나 우리..