데이터베이스(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 |