본문 바로가기
CS

22.12.09 / CS특강 / DB 기초

by 노믹 2022. 12. 11.

데이터베이스(Database, DB)가 필요한가요?

'데이터베이스가 왜 필요한가?'라고 묻는다면 여러 이유가 있지만, 가장 큰 이유로는 상이한 시스템에서 데이터를 공용하여 사용하기 위해 필요하다고 할 수 있다.

이때  '그냥 파일로 저장해놓고 공용하면 되는거 아냐?'라는 의문이 떠오른다.

수많은 시스템이나 응용 프로그램이 사용할 수 있는 데이터를 저장하는 표준 파일 포맷을 만들어서(예. HTML, PDF) 그에 맞게 데이터를 처리하면 된다는 것이다.

이 물음에 대답하기 위해 위의 학생, 출결, 성적파일에 있을만한 데이터의 종류를 봐보자.

학생 파일 출결 파일 성적 파일
이름 이름 이름
수강 강좌 수강 강좌 수강 강좌
강좌 시간 출결 여부  성적

이름과 수강 강좌가 겹쳐있다는 것을 알 수 있다.

파일 내부에 데이터를 체계적으로 잘 입력해놨다면 상당히 편하게 정보를 추출할 수 있을테지만 여러번 겹치게 입력을 해놨다면 검색이나 저장하는데 드는 비용등이 증가할 수 밖에 없다.

데이터베이스는 이를 통합하여 관리해 정보를 구조적, 효율적으로 저장한다.

지금까지의 내용을 살펴보면 데이터베이스도 자료구조처럼 데이터의 추상화 과정에서 나온 산물중 하나라는 사실을 눈치빠른 분들은 알아차렸을 것이다.

+.

파일 같은 경우 동시에 수정을 하려고 하는 경우에도 오류가 생길 가능성이 높다.

예) 파일 공유 충돌.

파일 공유 충돌[from Microsoft]

(출처 - https://black7375.tistory.com/19)

데이터베이스(Database, DB)란?

  • 데이터베이스를 한 마디로 정의하면 ‘데이터의 집합’이라고 할 수 있습니다.
  • 데이터베이스에는 일상생활 대부분의 정보가 저장되고 관리됩니다. 오늘 보내거나 받은 카카오톡 메시지, 인스타그램에 등록한 사진, 버스/지하철에서 찍은 교통카드, 카페에서 구매한 아이스 아메리카노 등의 정보가 모두 데이터베이스에 기록됩니다.

DBMS란?

  • 데이터베이스를 ‘데이터의 집합’이라고 정의한다면, 이런 데이터베이스를 관리하고 운영하는 소프트웨어를 DBMS(Database Management System)라고 합니다. 다양한 데이터가 저장되어 있는 데이터베이스는 여러 명의 사용자나 응용 프로그램과 공유하고 동시에 접근이 가능해야 합니다.
  • 가까운 예로 은행의 예금 계좌는 많은 사람들이 가지고 있습니다. 여러 명의 예금 계좌 정보를 모아 놓은 것이 데이터베이스입니다. 은행이 가지고 있는 예금 계좌 데이터베이스에는 여러 명이 동시에 접근할 수 있습니다. 예금 계좌 주인, 은행 직원, 인터넷 뱅킹, ATM 기기 등에서 모두 접근이 가능하니까요. 이러한 것이 가능한 이유는 바로 DBMS가 있기 때문입니다.

출처 - https://hongong.hanbit.co.kr/데이터베이스-이해하기-databasedb-dbms-sql의-개념/

DBMS의 종류

출처 - https://hongong.hanbit.co.kr/데이터베이스-이해하기-databasedb-dbms-sql의-개념/

DBMS의 분류

  • 계층형 DBMS
  • 망형 DBMS
  • 관계형 DMBS
    • 관계형 DBMS(Relational DBMS)는 줄여서 RDBMS라고 부릅니다. MySQL뿐만 아니라, 대부분의 DBMS가 RDBMS 형태로 사용됩니다. RDBMS의 데이터베이스는 테이블(table)이라는 최소 단위로 구성되며, 이 테이블은 하나 이상의 열(column)과 행(row)으로 이루어져 있습니다.

SQL: DBMS에서 사용하는 언어

  • SQL(Structured Query Language)은 관계형 데이터베이스에서 사용되는 언어로, ‘에스큐엘’ 또는 ‘시퀄’로 읽습니다. 관계형 DBMS 중 MySQL를 배우려면 SQL을 필수로 익혀야 합니다. SQL이 데이터베이스를 조작하는 ‘언어’이긴 하지만 일반적인 프로그래밍 언어(C, 자바, 파이썬 등)와는 조금 다른 특성을 갖습니다.출처 - https://hongong.hanbit.co.kr/데이터베이스-이해하기-databasedb-dbms-sql의-개념/

SQL vs NOSQL

출처 - k21academy

SQL (Relational Database)

데이터를 엑셀과 같이 정해진 틀(데이터 스키마)에 따라 테이블에 저장합니다.

  • 장점
    • 명확하게 정의된 스키마, 데이터 무결성 보장
    • 관계는 각 데이터를 중복없이 한번만 저장
  • 단점
    • 덜 유연함. 데이터 스키마를 사전에 계획하고 알려야 함. (나중에 수정하기 힘듬)
    • 관계를 맺고 있어서 조인문이 많은 복잡한 쿼리가 만들어질 수 있음
    • 대체로 수직적 확장만 가능함
  • 제품 : MySQL, PostgreSQL, Oracle 등

NoSQL

SQL 진영보다 데이터를 자유롭게 다양한 형태로 저장합니다. (일반적으로 Schema-less, 즉 정해진 구조가 없고, 관계도 없습니다)

  • 장점
    • 스키마가 없어서 유연함. 언제든지 저장된 데이터를 조정하고 새로운 필드 추가 가능
    • 데이터는 애플리케이션이 필요로 하는 형식으로 저장됨. 데이터 읽어오는 속도 빨라짐
    • 수직 및 수평 확장이 가능해서 애플리케이션이 발생시키는 모든 읽기/쓰기 요청 처리 가능
  • 단점
    • 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있음
    • 데이터 중복을 계속 업데이트 해야 함
    • 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수행해야 함 (SQL에서는 중복 데이터가 없으므로 한번만 수행이 가능)
  • 제품 : Firestore, MongoDB, Redis 등

DB Naming Convention

DB 스키마를 작성할때도 이름을 잘 지어야합니다!

변수 네이밍 참고 사이트 - https://www.curioustore.com/#!/

 

출처 - https://velog.io/@peppermint100/MySQL-Naming-Convention-번역

기본

  • 소문자를 사용한다. 실수할 일이 적고 MySQL은 대소문자를 구분하기에 통일해준다.
  • Space 즉 띄어쓰기는 Underscore _ 로 대체한다.
  • 숫자는 허용하지 않는다.
  • 컬럼의 의미를 설명가능한 이름이며 64자를 넘지 않는다.
  • prefix를 사용하지 않는다.

데이터베이스 이름

  • 단수형, 복수형 모두 사용할 수 있지만 데이터베이스 자체가 1개의 데이터들의 모음을 나타내게 되므로 단수형이 옳다.
  • 가능한한 prefix는 피한다.

테이블 이름

  • 소문자를 사용한다. 대소문자를 구분하는 리눅스 서버 위에 보통 MySQL을 호스팅한다. 또 MySQL과 함께 사용되는 많은 프레임워크들(php, JPA)이 자동 생성해주는 테이블이름은 소문자를 사용한다.
  • 테이블 이름은 단수형이다. 여러 형태의 데이터를 담고 있는 것이 테이블이라서 복수형이 될 것 같지만 테이블 자체는 하나의 독립체이다.
  • prefix를 사용한다. 테이블은 일반적으로 데이터베이스 혹은 프로젝트의 이름을 가지고 있다. 한 데이터베이스 내에서도 비슷한 역할을 하는 테이블이름이 겹칠 수 있으므로 테이블이름에 prefix를 사용할 수 있다.

필드 이름(컬럼명)

  • 소문자 사용, 띄어쓰기 금지, 숫자 사용 금지, prefix 금지
  • 짧아야 한다. 2개 단어를 넘지 않는다.
  • 이해하기가 쉬워야한다.
  • 기본키는 id 혹은 <table_name>_id의 형태를 따른다.
  • 단어를 거꾸로 쓰는 일은 피하자(date_signup(x), date_create(x), signup_date(o), created_date(o))
  • 컬럼명과 테이블이름을 동일하게 하는 피한다.
  • 축약형, 연결형, 두음형은 피한다.
  • 외래키를 사용한다.
  • 외래키 컬럼명에는 참조하는 테이블의 이름을 사용한다.

mysql naming convention 참고 링크

변수명 짓기 사이트 - https://www.curioustore.com/#!/

DB, User, Table 생성, 수정, 삽입, 삭제 연습!

  • DB버 설정(라인 넘버, 예약어 대문자로 변환)
    • 라인넘버 활성 비활성

  • User 생성 및 권한 부여보통 특정 user를 만들고 해당유저만 특정 db에 접속할 수 있도록 권한을 부여해줍니다! 우리는 유저 생성만 하지만 삭제나 다른 사용법은 아래 블로그를 참고하세요! (참고 - https://computer-science-student.tistory.com/514)
  • 유저 생성시 local host , % 차이 - https://chobopark.tistory.com/237
  • localhost로 하면 내부ip만 접속할 수 있고 localhost자리에 '%'로 표시하면 외부ip에서도 접속이 가능합니다!
  • 내부ip접속 : create user '계정아이디'@localhost identified by '비밀번호';
  • 외부ip접속 : create user '계정아이디'@'%' identified by '비밀번호';

 

  • 유저 생성시 패스워드 정책 오류시 해당 블로그를 읽어보세요 - https://junho85.pe.kr/1484
  • db 접속할때 유저는 mysql 설치할때 root 계정을 사용해도 되지만
  • DB 생성
  • DB 삭제
  • Table 생성
  • Table 삭제
  • 데이터 삽입
  • 데이터 삭제
  • 데이터 수정

'CS' 카테고리의 다른 글

소켓, 웹소켓  (0) 2022.12.26
22.12.09 / CS특강 / DataBase설계  (0) 2022.12.11
22.12.02 / CS특강 / TCP/IP  (1) 2022.12.11
22.12.02 / CS특강 / OSI 7계층  (0) 2022.12.11
22.12.01 / CS특강 / JavaScript 기초  (0) 2022.12.11