Wecode - Foundation 1 (부트캠프)/Database(데이터저장소), ERD Modeling

Foundation 1- 데이터베이스 세션

Queen Julia 2023. 9. 28. 11:08

뭐든 나온 이유가 있음, 왜 나왔는지! 

이름에 집중 - 만든 사람 이름+ 중요한 거 


 Intro: 인터넷 역사

이전엔 유통을 CD로 했는데, worldwideweb 나오면서 우후죽순 인터넷 가능 

 

 

Markup language (html) 1세대 언어, 정적인 

vs. programming language (javascript) 2세대 언어= web2.0, 동적인

 

 

'동적인' 이란? 

Ex. 실시간 검색어 : 내가 새로고침을 하지 않아도 계속 업데이트 되는 것

1세대 인터넷에서는 실시간 검색어 보려면 내가 새로고침을 randering 했었어야 함. 

 

3세대 웹, 

  • SPA (single page application) : html 페이지 하나로 전체 사이트 구현/ 만드느 것 → 자바스크립트로 가능 
  • 2세대에선 정적인 건 html, 동적인걸 자바스크립트가 담당, 3세대에선 정적인 것 + 동적인 것 다 담당 → 하나에 다 담는
  • SPA = 프론트엔드 react. 
  • html이 담당하던 고객 데이터를 화면단의 데이터 (uxui) 한 화면에서 하다보니,한번만 전송하면 됨, 데이터는 실시간으로 전송 (계속 통신) → 그러면 따로 개발하자 (원래는 다같이 개발했음) → 프론트엔드(고객 앞단의, 눈에 보이는 화면단 데이터)/ 백엔드(고객 뒷단의, 데이터 처리 특화) 나뉘게 됨  
  • 데이터는 백엔드 담당 : 데이터 저장하는 데이터베이스 api → 프론트엔드는 백엔드 통해서 데이터 얻음. 직접 얻지 않음.백엔드가 처리한 데이터를 받아서 화면단 구현
  • 프론트엔드는 웹브라우저 많이 이용 (만든 화면 바로봐야 봐야하니) / 백엔드는 터미널, (ida) 많이 봄

 

 Intro: 백엔드/프론트 역할

 

자바스크립트가 중요해진 이유: 웹이 바로 이해할 수 있는 언어 

 

Web3.0은 3세대 웹 다음


'데이터베이스' 학습목차

  1. 데이터베이스(Database)의 개념을 이해합니다.
  2. 관계형 데이터베이스 (RDBMS)가 무엇이며, 왜 사용하는지 이해합니다.
  3. 테이블(Table)이 무엇인지 이해하고, Column, Row를 설명할 수 있습니다.
  4. 테이블(Table)의 관계 - One to One, One to Many, Many to Many 예시를 나열할 수 있습니다.
  5. Primary KeyForeign Key 의 관계를 설명하고, 테이블에 지정할 수 있습니다.
  6. 관계형 데이터베이스비관계형 데이터베이스의 차이를 알 수 있습니다.
  7. ERD 구성도로 데이터 관계를 모델링

 

  • 데이터베이스를 다루는 회사 가운데 가장 유명한 Oracle

 

1. 데이터베이스: = 데이터 저장소 

  • 컴퓨터 시스템에 저장된 정보나 데이터를 모두 모아 놓은 집합
  • 데이터를 많이 모아놓은 베이스

Ex. 카페 사장님 매출 데이터 저장 -> 엑셀 사용 → 엑셀 = 사장님을 위한 데이터베이스 (카페 사장에게 유용한 틀)

작가 -> 글 데이터 ‘워드에 저장' → 작가를 위한 데이터베이스 (글에 유용한 틀) 

컴퓨터 데이터를 서버의  ‘하드드라이브'에 저장 → 데이터 바로 저장 못하니까 → 데이터베이스 사용 

 

카페사장님, 작가도 데이터를 결국 하드드라이브에 저장해야하는데, 바로 저장 못하니까 

중간 매체로 사용하는게 ‘데이터베이스'




데이터베이스는 툴, 

정답은 없고, 내가 필요한 걸 쓰는것,

(엑셀 워드 정답 없고, 내가 필요하면 쓰는거고, 엑셀 쓰다가 워드 쓸 수 있는거고. 

그거처럼  (RDBMS)쓰다가 nosql 쓸 수 있는거고 

 

2. 데이터베이스 기능 (CRUD)

Create

Read 

Update

Delete 



Web client -> web application server → database server (정보 요청, 응답)

스타벅스 사이트에서 음료 선택 → database에 요청 

  • 프론트엔드: web client (눈에 보이는 부분)
  • 백엔드; web application server, database server (데이터) 

백엔드는 그래서 데이터베이스를 배워야 하고, 데이터베이스 직접 운영, 관리 / 데이터 API 시스템 개발해야해서 배워야 함

프론트는 백엔드와 소통 협업 위해 (데이터는 백엔드가 정보 주지만, 백엔드에 정보 요청 시+ 백엔드가 주는 걸 알아야 해)

 

3. 데이터베이스 종류 

데이터를 어떤 형태로 저장할 것인가 = 데이터 모델링 

 

데이터를 막 저장하는게 아니라, 잘 저장해야 함. 

 

데이터 모델링이 어떻게 이루어지는가에 따라, 

 

  1. 관계형 데이터베이스(RDBMS)
  2. NoSQL Database (비관계형 데이터베이스 관리 시스템(DBMS)) 
 

NoSQL 종류, 활용, 모델 (비관계형 데이터베이스 관리 시스템(DBMS))

전통적인 관계형 데이터베이스 관리 시스템(RDBMS)과는 다르게 설계된 비관계형(non-relational) DBMS로, 대규모의 데이터를 유연하게 처리할 수 있는 것이 강점 테이블-컬럼과 같은 스키마 없이, 분산

pm-developer-justdoit.tistory.com

 

데이터베이스는 데이터 저장하는 tool 매체일 뿐

그걸 어떤 형태로 저장하느냐

 

4. 관계형 데이터 베이스 (RDBMS)

데이터를 관계해서 저장 

모든 데이터를 엑셀처럼 2차원 테이블로 구성 (column 열, 항목/ 행 row, 항목들의 값) 

 

4-1. Column, Row 

  • Column: 항목 (ex.책제목, 작가, 출판사, 가격)
  • Row : 실제값 

 

4-2.  Id (Primary Key)

각 row 나타내는 고유의 키

(학급의 출석번호) 각자의 자기 이름이 있는데도 불구하고 번호 또 있는 

  • 이름이 같을 수 있으니까/ 책제목이 같을 수 있으니까 
  • 고유하게 절대 변하지 않는 값이라는 건 없음 (주민등록번호도 바뀔 수 있음) 

그래서 id는 각 값과 관련이 없는 ‘숫자'로 많이 표시한다. 

 

4-3. 테이블들은 상호 관련성을 갖고 연결

  • 테이블은 여러 개 저장 가능
  • 이 테이블들은 서로 연결

4-4. PK 와 FK 

Pk = id ( 이건 erd 에서 무조건 나와야 함)

Fk =  다른 테이블의 pk

4-5.  3가지 관계

 1:1 one to one 

테이블 A의 row 하나가 테이블B 의 하나에 연결/ 해당 

데이터를 이렇게 저장하는게 관계형 데이터 베이스 

데이터가 2개 테이블에 나눠 있지만 하나의 데이터로 통합해서 알 수 있다 

 

- FK를 이용해서 연결 

 

Ex. 사이트의 아이디, 주민등록번호, 프로필 이미지 (유저하나당 하나의 프로필만 올릴 수 있다고 하면)

 

 

1:다 / one to many / (1 to N)

한 유저가 애완동물 여러 개 가질 수 있을 때

Ex. 고객이 갖고 있는 애완동물 관계, 신용카드 (한고객이 여러 카드), 스벅 주문 (한 고객이 여러 개 주문할 수 있으니)

 

 

다:다 / many to many  / (N to N)

 

테이블 A의 여러 row 와

테이블 B의 여러 row가 연결

  • 한 명의 저자가 여러 책을 가질 수 (쓸 수) 
  • 하나의 책은 여러 저자 가질 수 (공동 저자)

 

단순히 column 추가로는 연결하기 어렵고, 연결해주는 제3의 테이블 존재 : 꼭 ‘중간 테이블’ 존재! 

 

 

→ 김코드가 쓴 책



우리가 직접 3 종류 중에 무엇을 할지 정해야 - 정답은 없음

데이터 구성 시, 정답 없고 내가 어떻게 하느냐에 따라.

N to N은 표현하기 위해 무조건 중간테이블 필요하니,

 중간테이블 없이도 가능한지로 1 to N, N to N 구분 가능

 

 4-6. RDBMS 언제 사용?

  • 실제 서비스 대부분 데이터는 구조가 명확함. 
  • 실제 서비스 대부분 정형화 요구됨.  → 그래서 일반적으로 RDBMS를 많이 씀
  • 데이터 무결성 보존 가능 
  • 데이터 검색, 분류, 정렬 유리 

 

4-7. 어떻게 테이블과 테이블을 연결하는가?

  • Foreign key(외부키)라는 개념을 사용하여 주로 연결
  • 위 one to one 에서 user_profiles 테이블user_id 컬럼users 테이블에 걸려있는 fk라고 지정합니다.
  • 데이터베이스에게 user_id의 값은 users 테이블의 id 값이며 , users 테이블의 id 컬럼에 존재하는 값만 생성될 수
  • 만일 users 테이블에 없는 id 값이 user_id 에 지정되면 에러가 발생합

 

4-5. 왜 테이블들을 연결하는가?

왜 정보를 여러 테이블에 나누어서 저장하는가?

위 one to many의 경우, 그냥 하나의 테이블에 고객 정보와 구입한 제품 정보 모두를 저장 하면 안되는가?

  • 하나의 테이블에 모든 정보를 다 넣으면 동일한 정보들이 불필요하게 중복되어 저장됩니다.

예를 들어, 고객의 id는 동일한데 이름이 다른 rows이 있다면 어떻게 해야 할까요? 어떤 이름이 정확할까요?

  • 여러 테이블에 나누어서 저장한 후 필요한 테이블 끼리 연결 시키면 위의 두 문제가 사라집니다.

 

4-6. 설계 만드는 방법

  1. 데이터 없이 coulumn으로만 만들어놓고, 
  2. 어떤 게 어디에 연결되는지 arrow로 연결 해놓음

→ 개발자들이 몇개의 테이블, 어떤 관계가 있구나 알게 됨 

 


Cf. NoSQL 데이터베이스 

  • 관계형 데이터베이스에 반대되는 개념/ 직접적으로 반대되는 구조 
  1. Table 없음
  2. Schema (구조) 없음
  3. 관계 Relations 없음 

 

테이블 없으니 테이블로 저장 안 함

JSON과 같은 key- value형태로 저장 (데이터 그대로 저장)

 

 

스키마 없으니, 각 데이터가 통일될 필요 없음

관계형 데이터 베이스에서는, Name, email, number 테이블이 있으니 그 외 데이터 (age, gender)는 들어올 수 없음. 

Nosql 데이터베이스는은 age, gender, 

막 저장 가능 schemaless

 

관계 없기에 원하는 대로 저장 가능

 

  • 관계 중심이 아니라 document (= 데이터)  중심 
  • 문서와 비슷함

Ex. mongo DB(최초 NoSQL 데이터베이스), redis

 

NoSQL 언제 사용? (지켜야 할 게 없으니, 확장과 속도가 빨라진다. )

  • 비정형화 데이터 저장해야할 때 (ex.로그 데이터) _ 구조 없으니 
  • 데이터 처리 속도 중요할 떄  (관계형 데이터 하려면 테이블 짜고 들어가야 하니) 이런거 skip 하고 바로 개발할 수 있으니 빠르게 개발 가능 
  • 수평적 확장 중요할 때(관계형데이터는 관계 있고, 서로 구조 맞아야 하니 제약이 많음→ 확장이나 속도에서 희생을 해야 함, 대신 데이터 구조/안정성/온전성 가져갈 수) , big data처리 중요할 떄 

 


이 데이터들을 왜 굳이 데이터베이스에 저장할까요?

 

1. 데이터를 오랜기간 저장 및 보존하기 위해서 데이터 베이스를 사용합니다.

작은 어플리케이션에서도 물론 데이터를 잠깐동안 임시로 저장할 수는 있습니다. 그러나 우리가 저장하지 않은 데이터는 컴퓨터를 껐다 켜면 사라지죠? 메모리에 존재하는 데이터는 오래 보존이 되지 않습니다. 어플리케이션이 종료되면 메모리에 있던 데이터들은 다시는 읽어들일 수 없습니다. 따라서, 필요한 자료를 계속 보존하기 위해 데이터베이스를 사용합니다.

 

2. 데이터를 체계적으로 보존하고 관리하기 위해 사용합니다.

데이터는 많이 오래 저장한다고만해서 좋지 않습니다. 필요할 때 언제든 내가 원하는 자료를 쉽게 읽어낼 수 있어야만 의미 있는 정보라고 할 수 있습니다.

데이터베이스에는 데이터가 아무렇게나 어질러 저장되지 않고 체계적으로 정리되어 입력됩니다. 다시 찾고자 할 때 어렵지 않게 정보를 얻을 수 있습니다. 위 영화 데이터도 표 모양으로 깔끔하게 날짜별로 저장되어 있죠? 이렇듯 데이터를 체계적으로 정리하여 보관하기 위해 데이터베이스를 사용



3. 관계형 데이터베이스 (RDBMS, Relational DataBase Management System)

관계형 데이터베이스에서 모든 데이터는 2차원 테이블(table)로 표현할 수 있습니다.

- 행(row)과 열(column)

- 각 row는 저만의 고유 키(Primary Key)가 있습니다.

- 테이블의 가장 첫 컬럼은 언제나 id

 

관계형 데이터베이스는 각각의 테이블들이 서로 상호관련성 

 

테이블 사이 관계의 종류

테이블끼리의 연결에는 3가지 종류가 있습니다.

One to One, One to Many, Many to Many 한국어로는 일대일, 일대다, 다대다 관계

 

관계형 데이터베이스 내부에 테이블 A와 테이블 B가 있을 때, 이 두 테이블은 무조건 세가지 가운데 한가지 관계에 해당

이 세가지만 이해한다면, 관계형 데이터베이스의 관계를 모두 이해할 수 있습니다