0. 시작에 앞서.

- 지금 하는 프로젝트에서도 사용하는 mysql과 같은 데이터베이스를 기본적인 이론부분부터 다시 정리해보자.

 

1. 데이터 베이스란?

- 한 조직 내에서 필요로 하는 데이터를 공동으로 사용할 수 있도록 중복을 최소화하여 통합 저장한 데이터의 집합체. 데이터를 효율적으로 처리하기 위해 개발된 것으로, 데이터의 중복에서 오는 모순성을 제거할 수 있고 새로 개발된 응용 프로그램도 데이터베이스 내에 있는 기존의 데이터를 사용할 수 있음. 자료틀. 순화어는 `기초 자료'.

( 정의 출처 : Oxford Languages )

 

2. DBMS(DataBase Management System) 란?

 

- 데이터베이스를 관리할 수 있게 해주는 소프트웨어

- 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 제공해주고 데이터베이스를 관리해주는 소프트웨어

- 데이터의 종속성과 중복성 문제를 해결하기 위해 제안되었다.

- 데이터베이스의 구성, 접근방법, 유지관리에 대한 모든 책임을 진다.

- Oracle, MySQL, MSSQL 등이 있다.

 

 2-1. 데이터 종속성이란?

    - 데이터와 프로그램 사이에는 상호 의존관계가 있다.

    - 데이터에 대한 접근과 저장방법이 프로그램 안에 명세되어있다.

    - 그러므로 프로그램은 해당 데이터에 맞는 접근 방법으로 작성되어야 한다.

    - 따라서, 데이터의 속성이 변경되면, 이를 기초로 한 응용프로그램도 변경되어야 한다. 

      (반대로 프로그램의 데이터 저장방식에 따라 데이터의 저장방식이 바뀌기도 한다.)

    - 데이터 종속성 때문에 데이터의 구조가 바뀌면 프로그램도 수정해야 하므로 비용이 많이 들어간다.

    - 결국 데이터와 응용프로그램이 의존관계에 있다는 것이다.

 

2-2 데이터 중복성이란?

    - 같은 데이터를 사용하더라도, 그 사용방식에 따라 구조와 양식을 다르게 하여 사용하는 경우가 많이 존재한다.

    - 파일 시스템에서는 이러한 경우에 별도의 파일을 만들어 사용해야 한다.

    - 이러한 상황 발생시 같은 내용의 구조가 다른 데이터들이 많이 생겨나고, 하나의 시스템에서 같은 데이터가 중복되

      되게 저장 관리하는 것을 데이터 중복성이라고 한다.

    - 결국 같은 데이터가 중복된채 저장되어 있는 것이고, 이를 관리함에 있어 일부가 수정될 경우 같은 모든 중복데이터

       를 수정해주어야 한다. (그렇지 않으면 불일치성이 발생한다.)

 

3. DBMS 사용 효과

- 1. 중복성을 피해 공간 절약

- 2. 데이터의 일관성을 유지하기 편리

- 3. 데이터 무결성 유지

- 4. 데이터를 통합하여 관리가능

- 5. 보안을 유지하기에 편리하다.

- 6. 데이터베이스의 논리적 물리적 독립성을 보장

 

4. DBMS가 갖춰야할 기능

- 1. 정의 ( Definition )

    : 응용프로그램이 요구하는 데이터를 지원하기 위해 데이터베이스에 저장될 데이터의 타입과 구조, 이용방식, 제약 조

      건등을 정확히 명시하여야 하며, 데이터와 데이터 사이의 관계를 명확하게 명시해야 한다.

 

- 2. 조작 ( Manipulation )

    : 응용프로그램과 데이터베이스 사이에 인터페이스를 제공하여, 데이터 탐색, 수정, 삽입, 삭제를 할 수 있도록 한다.

 

- 3. 제어 기능 ( Control )

    : 데이터의 무결성을 유지하고, 보안에 관련된 부분을 제어해야 한다. 또한, 여러 사용자가 동시에 접근하여 수정할 때

      도 항상 정확성을 유지할 수 있도록 Concurrency control ( 동시(병행) 제어 ) 가 가능해야 한다. 

1. 해쉬 테이블이란?

 

  저장하고자 하는 데이터를 key 와 value 값을 통하여 저장하는 자료구조

 

  데이터를 저장하고 매우 빠르게 탐색을 수행하기 위한 자료구조 이다.

 

  여러가지 다양한 컨테이너들 중에 어쩌면 컴퓨터의 저장방식을 가장 닮은 저장방식이라고 생각한다.

 

  컴퓨터는 결국 모두 숫자(이진수)로 저장을 하고 특정한 규칙에 따라 그 자료를 해석하는 것인데 해쉬 테이블이 

  이와 매우 유사하다.

 

 

 

 

2. 해쉬 함수 (hash function)

 

  해쉬 테이블을 구성하는 데 있어 가장 중요한 것이 해쉬 함수(hash function)이다.

 

  이 해쉬 함수, 즉 알고리즘을 어떻게 짜느냐에 따라 해쉬테이블의 탐색 성능이 좌지우지 된다.

 

  저장하고자 하는 데이터를 해쉬함수를 이용하여 가공하여 그 결과값을 key로 하여 테이블에 저장한다.

 

  효율적인 함수를 짜지 못한 경우 최악의 경우 탐색에 O(n)이 소요될 수 있다.

 

 

 

 

3. 충돌 (Collision)

 

  우선 해쉬테이블을 만들기 위하여 고정된 크기의 배열을 선언해주는데 저장하고자 하는 데이터의 수가 배열의 크기

 

  보다 크다면 필연적으로 두개 이상의 데이터간의 충돌이 일어날 수 밖에 없다.

 

  (물론 위의 경우가 아니더라도 서로 다른 데이터에 대해 동일한 키 값을 만들어 낼 경우 충돌 발생)

 

  따라서 이 충돌에 대한 것을 어떻게 처리해주느냐가 매우 중요한 문제이다.

 

  그러면 충돌을 해결하는 방법을 알아보자.

 

 

 

 

3-1. Chainig 방식

 

  이름에서 주는 느낌그대로 해쉬테이블 에서 각각의 컨테이너를 링크드 리스트로 선언하여

 

  저장하고 하는 테이블 인덱스에 이미 다른 데이터가 자리하고 있을경우 그 데이터의 뒤쪽에 연결해서

 

  체인처럼 매달아 주는 방식이다.

 

  탐색을 할 때는 찾고자 하는 key값에 해당하는 리스트에서 원하는 값을 탐색한다.

 

  데이터의 수가 상대적으로 많아질 경우 링크드리스트가 아닌 tree 구조를 이용하여 탐색시간을 줄일 수도 있다.

 

  공간에 대한 제약이 적다.

 

 

 

 

3-2. Open addressing 방식

 

  1. linear probing 

 

  충돌이 발생했을 때 테이블에서 그 키 값의 뒤쪽 index의 버켓 중 빈 곳을 찾아 넣는 방식입니다.

 

  탐색을 할 때 찾고자하는 데이터의 key값에 해당하는 버켓에 갔을 때, 원하는 데이터가 아닐 경우 그 뒤쪽으로 탐색을 시작합니다.

 

  그리고 삭제처리를 할때 신경을 써주어야 하는데 단순히 삭제를 해주는 것이 아닌 dummy 데이터를 넣어 원래 비어있던 곳인지

 

  다른 데이터가 있었다가 삭제가 된 곳인지 구분을 해주어야 탐색을 할 때 문제가 생기는 것을 방지할 수 있습니다.

 

 

  

 

  2.double hashing

 

   단순히 충돌이 발생한 뒤쪽에서 부터 빈 곳에 넣는 linear probing과 달리 2차 해쉬 함수를 통해서 새로운 키 값을 구해서

 

   첫 번째 key값에서 2차 해싱 값만큼 jump하여

 

   테이블에 저장하는 방법 이다. (물론, 또 충돌이 발생할 수는 있습니다.)

 

 

 

 

4. hash function (해쉬 함수)

 

  결국 좋은 해쉬 함수란 데이터들의 특성에 맞게 데이터를 되도록이면 고르게 분포시킬 수 있도록 하여,

 

  충돌을 최소화 할 수 있게 해주는 함수 이다.

1. JSON이란?

 

 

- 이름에서도 알 수 있지만 JavaScript의 객체를 정의하는 문법과 매우 유사한 형식을 따릅니다..

 

 

- 하지만 문법,프로토콜 등은 아니고 그저 텍스트 일 뿐......(데이터를 표시하는 방법)

 

 

- 일단 형식 자체가 이해하기가 매우 쉽다는 장점이 있습니다.

 

 

- 데이터를 전송하거나 저장을 할 때 많이 사용하는 형식 정도 라고 생각하면 될 것 같습니다.

 

 

 

 

 

2. JSON 특징

 

 

- JavaScript 함수를 통해 JSON형식의 파일을 JavaScript의 객체로 변환 할 수 있습니다.

  (JSON.parse("json텍스트") --> json을 자바스크립트 객체로)

  (JSON.stringify("자바스크립트 객체") --> 자바스크립트 객체를 json으로)

 

 

- 다양한 언어에서 json 데이터를 다룰 수 있는 라이브러리를 제공하고 있습니다.

 

 

- 서버와 클라이언트의 데이터 교류에 json형식이 많이 사용됩니다

 

 

- 용량이 적다.

 

 

 

 

 

3. JSON 형식

 

 

- javascript의 객체의 형식과 같이 {}(중괄호)로 묶어줍니다.

 

 

- "name" : "value"의 쌍으로 이루어져 있습니다. 

 

 

- "name" : "value" 쌍 사이는 ,(쉼표)로 구분하여 줍니다.

 

 

- key는 ""(쌍따옴표)로 묶어주며 문자열의 경우도 ""로 묶어줍니다.

 

 

- 객체안에 문자열, 정수, 배열[], 객체{} 등이 포함 될 수 있습니다

 

 

 

 

4. 예시형식

 

 

vector는 오름차순 정렬 되어있어야합니다(이진탐색 기반이기 때문에)

'학부생 공부 > C++' 카테고리의 다른 글

(21.05.20) next_permutation  (0) 2021.05.20
C++ memory [heap]  (0) 2020.12.24
C++ memory [stack]  (0) 2020.12.22
c++의 포인터, 참조 타입 변수(레퍼런스)의 차이  (0) 2019.11.10
call by reference, call by value  (0) 2019.11.10

저 같은 경우

 

php 스톰을 통해서 작업을 진행하고 있는데 mysql 데이터 베이스와 연동 후

 

테이블에 데이터를 넣고 쿼리문을 날려 확인을 해보려 했을 때 한글로 들어간 데이터 들은

 

???로 표시가 뜨더군요....

 

데이터베이스 는 utf8로 설정을 하는 과정을 했었기 때문에 php 의 문제라 생각 하여 찾아보니..

 

생각보다 오래된 게시글이 많더군요 그래서

 

setting 에 들어가서 파일 인코딩 형식 변경도 하고 해보았지만 잘 해결되지 않아 결국 이렇게 해결하였습니다.

 

데이터 베이스와 php 를 연동시키는 부분에서 

 

$pdo = new PDO("mysql:host=$DB_HOST;dbname=$DB_NAME", $DB_USER, $DB_PW);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec("set names utf8");

return $pdo;

 

빨간색 줄을 한칸 추가 해주시면 됩니다... ! 

 

전 이렇게 해결 되었습니다 

 

도움되는 부분이 있었으면 좋겠습니다 ~!

'Web & App > Php' 카테고리의 다른 글

PHPMailer를 이용하여 서버에서 메일 보내기  (0) 2020.10.20
PDO (PHP Data Object) 란?  (0) 2020.10.13

추상화 데이터 타입 그런 자료구조를 왜 만들고 왜 필요할까?

 

생각해보면 스케쥴러를 짜는데

 

큐(선입선출,FIF0)를 사용하지 않고 배열을 이용한다면....

 

직접 인덱스(index)관리를 일일히 해주어야 한다는 소리인데

 

규모가 커지면 이건 정말 쉽지 않은 문제이다.

 

하지만 추상화데이터타입을 만들고 그를 활용한다면 단지 pop과 푸쉬만 이용하면

 

따로 직접 index 를 관리 하지 않아도 된다

 

추상화데이터타입을 이용하는 이유 중 하나는 **인덱스 관리의 어려움** 이 있지 않을까?

 

스택에 함수 call과 관련된 정보를 담을 때도 스택이라는 자료구조를 이용하지 않으면 생각만 해도 끔찍하다...

 

들은 내용중 기억에 남기고 싶은 내용이라 정확하지 않을 수 있지만 기록을 해놓습니다...

'학부생 공부 > 생각들' 카테고리의 다른 글

정적영역, 스택영역, 그리고 힙 영역  (0) 2019.11.09
go to문? 왜 남아 있지?  (0) 2019.11.06

+ Recent posts