✨ 5 Week - Codeit Boost BE Study

안녕하세요. 소시지입니다.
본 포스팅은 <2024.12.26 ~ 2025.01.23> 기간의 데이터베이스 / 백엔드 스터디 5주차 학습 내용을 기록했습니다.

Codeit Boost 백앤드 스터디 5주차 진행 (2025.01.23)

🗓️ 학습 주제

  1. 줌 클론코딩 - 노마드 코더 강의 수강
  2. 인프런 - Node.js / DB를 이용해 웹 애플리케이션 만들기 강의 수강
  3. 학습한 강의의 내용을 팀원과 공유하고, 각자가 이해한 내용을 발표하며 2차 복습 진행
  4. 간단한 발표 및 기록


📝 BE 스터디 내용

🔍 데이터베이스란?

가장 중요한 특성은 구조화된 데이터이다.
(ex. 엑셀에 정리되어 있는 정보들)
방대한 양의 데이터를 체계적으로 분류하고 보관할 수 있다.


데이터베이스와 MYSQL

데이터베이스의 종류

  • 관계형 데이터베이스(mysql)
  • nosql

웹 서비스는 웹 서버가 있고 그 웹 서버에 접근하는 클라이언트가 있다. 마찬가지로 데이터베이스에도 서버가 있어서 데이터를 저장하고, 그 저장된 데이터를 수정하거나 삭제하는 등의 관리 기능을 가지고 있다. 그 데이터베이스 서버에 요청해서 여러 가지 명령을 하거나 데이터를 가져오는 것들을 하게 해주는 것이 데이터베이스 클라이언트이다.


클라이언트

mysql-monitor

: mysql을 설치하면 기본적으로 같이 설치되는 프로그램

mysql query browser

: gui 환경으로, 기본적으로 설치가 안 되기 때문에 따로 다운 받아야 한다.

phpMyAdmin

: 사용자가 서버에 직접 설치하는 웹 프로그램이다. 웹 환경에서 데이터베이스를 제어할 수 있다는 장점이 있다.

: 유료


mysql monitor

  • mysql서버의 번들로 제공하는 기본 프로그램
  • 명령어 기반

사용법

mysql **-u**아이디 **-p**비밀번호
mysql **-h**호스트주소 **-p**포트번호 **-u**아이디 **-p**비밀번호

데이터베이스 생성

CREATE DATABASE music **CHARACTER** SET utf8 **COLLATE** utf8_general_ci;

데이터베이스 선택과 테이블 생성

테이블에 데이터 추가

title = Chasing Pavements
musician = 아델
duration = 3:30
album = 19

입력된 데이터 조회

select * **from** favorite_music;

종료

mysql> exit;


데이터관리 - SQL

SQL

: Structured Query Language 데이터베이스에서 데이터를 저장하거나 얻기 위해서 사용하는 표준화된 언어.

SQL 테이블

SQL 테이블은 관계형 데이터베이스의 기본 요소이다.
SQL 데이터베이스 테이블은 행과 열로 구성된다.
데이터베이스 엔지니어는 여러 데이터베이스 테이블 간의 관계를 생성하여 데이터 스토리지 공간을 최적화한다.
예를 들어, 데이터베이스 엔지니어가 스토어의 제품에 대한 SQL 테이블을 생성한다고 가정하자.

제품 ID 제품 이름 색상 ID
01 냉장고 색상 01
02 세탁기 색상 02

그런 다음 색상 ID를 사용하여 제품 테이블을 색상표에 연결한다.

색상 ID 색상 이름
색상 01 회색
색상 02 흰색

SQL과 MySQL 비교

SQL은 데이터베이스 생성 및 조작을 위한 표준 언어이다. (국제 표준에 의해 정의된다.)
MySQL은 SQL 쿼리를 사용하는 관계형 데이터베이스 프로그램이다.


Database

: 데이터가 실질적으로 적재되는 테이블들을 분류하는 상위 개념

생성

열람

삭제

사용


Table

: 데이터가 실질적으로 저장되는 저장소

스키마(schema)란?

: 테이블에 적재될 데이터의 구조와 형식을 정의 하는 것

테이블 생성

**`CREATE`** **`TABLE`** `table_name (` `칼럼명1 data_type,` `칼럼명2 data_type` `)`
**`CREATE`** **`TABLE`** ``student` (`
``id` tinyint NOT` `NULL` `,`
``**name**` **char**(4) NOT` `NULL` `,`
``sex` enum('남자','여자') NOT` `NULL` `,`
``address` **varchar**(50) NOT` `NULL` `,`
``birthday` datetime NOT` `NULL` `,`
`**PRIMARY**` **`KEY`** `(`id`)`
`);`

null이 no이므로 모든 값을 입력해야 하는 상태이다.

테이블 리스트

SHOW tables;


삽입(insert)

1.INSERT INTO table_name VALUES (value1, value2, value3,...)
2.INSERT INTO table_name (column1, column2, column3,...) **VALUES** (value1, value2, value3,...)


변경(update)

문법


삭제 (delete)

: 행단위로 데이터를 삭제

문법

TRUNCATE

  • 테이블의 전체 데이터를 삭제
  • 테이블에 외부키(foreign key)가 없다면 DELETE보다 훨씬 빠르게 삭제됨

DROP TABLE

: 테이블을 삭제한다.


조회 (select)

문법

💡 **`SELECT`** `칼럼명1, 칼럼명2`
`[**FROM**` `테이블명 ]`
`[**GROUP**` **`BY`** `칼럼명]`
`[**ORDER**` **`BY`** `칼럼명 [**ASC**` `| **DESC**]]`
`[LIMIT offset, 조회 할 행의 수]`
💡 **`SELECT`** `* **FROM**` `student;`

💡

SELECT **name**, birthday **FROM** student;


그룹핑 (group by)

: 특정 칼럼을 기준으로 데이터를 그룹핑함

문법


정렬 (order)

문법


index

: 색인, 조회할 때 원하는 행을 빠르게 찾을 수 있게 준비해둔 데이터

인덱스의 종류

  • primary: 중복되지 않는 유일한 키
  • normal : 중복을 허용하는 인덱스
  • unique : 중복을 허용하지 않는 유일한 키
  • foreign : 다른 테이블과의 관계성을 부여하는 키
  • full text : 자연어 검색, myisam에서만 지원

primary key

  • 테이블 전체를 통틀어서 중복되지 않는 값을 지정해야 한다.
  • where 문을 이용해서 데이터를 조회할 때 가장 고속으로 데이터를 가져올 수 있다.
  • 테이블마다 딱 하나의 primary key를 가질 수 있다.

여기에서는 id가 primary key

unique key

  • 중복을 허용한다.
  • primary, unique 보다 속도가 느리다.
  • 여러개의 키를 지정할 수 있다.

Full Text

  • mysql의 기본설정(ft_min_word_len)이 4로 되어 있기 때문에 최소 4글자 이상을 입력하거나 이 값을 조정해야 한다.
  • mysql은 전문 검색 엔진이 아니기 때문에 한글 검색이 잘 안된다.
  • 스토리지 엔진 중 myisam에서만 사용가능하다.

중복키

• 하나의 키에 여러개의 칼럼을 포함

인덱스의 정의 방법

  • 자주 조회되는 칼럼에 적용
  • 조회 시 오랜시간을 소모하는 컬럼에 적용
  • 데이터가 긴 경우 인덱스를 사용하지 않는다.

JOIN

여러개의 테이블 사용하기

: 데이터의 규모가 커지면서 하나의 테이블로 정보를 수용하기가 어려워지면 테이블을 분활하고 테이블 간의 관계성을 부여한다

address는 distnace와 관련되어 있기 때문에 location이라는 별도의 테이블로 분할 할 수 있다.

  • student 테이블과 location 테이블로 구분

address와 distance 컬럼이 사라지고 location_id 컬럼이 생겼다.

insert 후 결과

→ 이숙경은 location_id 값이 1이기 때문에 서울에 살고 집은 10km 떨어져 있다.

JOIN

: 테이블간의 관계성에 따라서 복수의 테이블을 결합, 하나의 테이블인 것처럼 결과를 출력

JOIN의 종류

  • OUTTER JOIN : 매칭되는 행이 없어도 결과를 가져오고 매칭되는 행이 없는 경우 NULL로 표시한다.LEFT JOIN과 RIGHT JOIN이 있다.
  • INNER JOIN : 조인하는 두개의 테이블 모두에 데이터가 존재하는 행에 대해서만 결과를 가져온다.

LEFT JOIN

가장 많이 사용되는 조인의 형태


사용자 관리

권한이란?

사용자에 따라서 접근할 수 있는 데이터와 사용할 수 있는 기능을 제한

사용자의 제한

데이터베이스 서버에 접속하는 사용자를 제한한다.


프로그래밍과 연동

프로그래밍과 데이터베이스의 관계

  1. 프로그래밍과 데이터베이스는 무관하다.
  2. 데이터베이스는 독립적인 시스템으로 프로그래밍과 상관없이 사용될 수 있다.
  3. 데이터베이스를 이해하고 있다면 여기에 프로그래밍을 결합해서 더 많은 일을 할 수 있다.

돌아가기: 2024 하반기 Python Coding Study