티스토리 뷰

카테고리 없음

6주차 백엔드 심화(1), (2)

파이썬 초보 파이리 2025. 3. 11. 19:08

백엔드 심화(1)

데이터베이스란?

: 데이터를 통합하여 효율적으로 관리하기 위한 데이터 집합체를 데이터베이스라고 합니다.

데이터 베이스의 장점 : 데이터를 구조화하여 관리함으로써 데이터 중복을 막고, 효율적으로 빠른 데이터 연산을 가능하게함.

 

DBMS

: 우리는 데이터베이스를 운영하고 관리하기 위한 DBMS를 통해 데이터베이스를 사용합니다.

 

DBMS의 종류

: RDBMS형태인지, 문서 저장소 형태인지 등등 종류가 여러가지

: 운영회사는 다르지만, 데이터베이스에 연산을 요청하기 위해 사용 되는 주요 명령어는 동일합니다.

 

SQL

:SQL은 데이터베이스에 연산을 요청하기 위해 사용 되는 언어로 데이터를 생성, 조회, 수정, 삭제 등과 같은 기능을 수행할 수 있습니다

 

  • 데이터 삽입 : INSERT
  • 데이터 조회 : SELECT
  • 데이터 수정 : UPDATE
  • 데이터 삭제 : DELETE

RDBMS를 쓰는 이유

: RDBMS(:데이터 간 관계)란 관계형 데이터베이스이다.

-데이터를 표(테이블) 형태로 저장하고 관리하는 데이터베이스 시스템

쓰는 이유는 마인드맵 같이

  • 데이터 정리하기 좋음
    • 데이터를 표(테이블) 형태로 정리해서 보기 쉽고, 필요한 정보를 빠르게 찾을 수 있음.
  • 데이터 꼬이지 않게 관리 가능
    • 여러 사람이 동시에 데이터를 수정해도 충돌이 안 나게 조절해 줌.
    • 실수로 잘못 입력하거나 삭제해도 복구할 수 있음.
  • 데이터 관계를 쉽게 연결할 수 있음
    • 예를 들어, 학생 정보와 성적 정보를 각각 저장하고 서로 연결해서 사용할 수 있음.
  • 빠르게 찾고 수정할 수 있음
    • SQL이라는 언어를 써서 원하는 데이터를 쉽게 검색하거나 수정할 수 있음.
  • 보안이 좋음
    • 권한을 설정해서 특정 사람만 데이터를 볼 수 있게 할 수 있음.
  • 백업과 복구가 가능함
    • 데이터가 날아가도 복구할 수 있어서 안전함.

 

- primary key : pk(기본키) : 해당 테이블의 각 row(행)을 유니크(=유일)하게 구별할 수 있는 key값

>>작성자가 동명이인인지 아닌지 아직 구별을 못함

 

cf.정규화 = 테이블을 쪼갠다

 

테이터 중복시 테이블 분리(정규화)

 

-Foreign key : FK(외래키) : A테이블에서 B테이블의 데이터를 찾아가고 싶을 때, 사용하는 key값

(최대한 B테이블의 PK값을 A테이블의 FK로 쓰는 것이 이상적)

 

정규화의 

장점 : 중복이 최소로 사라졌다.

단점 : 한눈에 모든 정보가 보이지않는다.

 

- 데이터베이스 연관관계는 1:1, 1:N, M:N이 있다. 

 

게시글 VS 사용자

1) 사용자 1명 당 -> 게시글 여러 개 쓸 수 있음 1:N

2) 게시글 1개 당 -> 사용자 1명  1:1

 

게시글 - 사용자 테이블 분리

- 게시글 테이블을 보고 사용자 데이터를 확인 : 연관관계

>> 게시글 테이블을 보고 사용자랑 어떤 관계인지 확인

//- 사용자 테이블을 보고 게시글 데이터를 확인 X

 

# 현업에 계신 분들? 설계를 잘하냐 : DBA

+ 구현을 들어가보면, SQL 꼬일 때, SQL이 길 때 

>> 설계를 뜯어 고치면 된다!

 

유튜브 실습 DB로 바꾸기

(백엔드 기초에서 유튜브 실습 하고 다시 듣기)

mysql workbench 소개 및 설치

백엔드 심화(2)

SQL

1. "board"스키마 생성

CREATE DATABASE Board;

USE Board;

2. 사용자 테이블 생성

CREATE TABLE users

(

   id INT NOT NULL AUTO_INCREMENT,

   name VARCHAR(30) NOT NULL,

   job VARCHAR(100),

   birth DATE,

   PRIMARY KEY (id)

); 

 

** DESC는 DESCRIBE의 약어로, 테이블의 구조를 확인

3. 사용자 데이터 삽입

INSERT INTO users (name, job, birth)

VALUES("gongu", "actor", "800123");

 

800102를 넣으면 자동으로 1980년이 되지만 그렇게 하지 않기 위해서는 정확히 써주어야한다.

 

4. 게시글 테이블 생성

CREATE TABLE posts

(

   id INT NOT NULL AUTO_INCREMENT,

   title VARCHAR(100) NOT NULL,

   content VARCHAR(2000),

   create_at TIMESTAMP DEFAULT NOW(), 

   PRIMARY KEY (id)

); 

?? 강사님은 create_at이 NOT NULL인데 왜 나는 NULL이 나오지?

?? : ALTER TABLE posts MODIFY create_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;을 추가

TIMESTAMP 컬럼에 기본값을 설정했지만 NULL 값이 허용되는 이유는 MariaDB의 버전이나 설정 차이에 따른 동작일 수 있습니다. NOT NULL을 명시적으로 추가하는 것이 가장 확실한 방법입니다.

 

** TIMESTAMP DEFAULT NOW(), >>현재 시각

5. 게시글 데이터 삽입

INSERT INTO posts(title, content)

VALUES("title", "content");

created_at을 안넣었는데도 날짜, 시간이 적혀있음

 

6. 게시글 테이블에 수정일자 추가

ALTER TABLE posts

ADD COLUMN updated_at DATETIME

DEFAULT NOW()

ON UPDATE NOW();

created_at과 updated_at이 같다

7. 게시글 테이블 id2 수정

UPDATE posts

SET content = "updated!"

WHERE id = 2;

created_at과 updated_at이 다르다

 

8. 게시글 테이블에 작성자 컬럼 FK 추가

ALTER TABLE posts

ADD FOREIGN KEY(user_id)

REFERENCES users(id);

--- 여기 까지 하면 user_id가 없다는 오류가 뜬다.

--- 그래서 먼저 user_id를 추가를 해줘야함

ALTER TABLE posts

ADD COLUMN user_id INT; <<6번에서 설명

 

mul이라는 것은 사용자번호(FK)가 중복이 가능하기 때문

9. JOIN

- 게시글을 분리함으로써 한번에 보이지 않는 불편함이 있었다.

- 게시글을 기준으로 사용자를 붙여서 출력

SELECT * FROM posts LEFT  <<왼쪽에 붙여서 출력해줘 일반적인 join방법

JOIN users ON posts.user_id = users.id; <<  ON posts.user_id = users.id 을 기준으로 잡음

join을 걸면 user_id만 보였는데 다른것들도 추가되어 나온다.

SELECT posts.id, title, content, create_at, updated_at,

name, job, birth FROM posts LEFT

JOIN users ON posts.user_id = users.id; 

MySQL날짜/시간 타입

1. DATE

-날짜만

-YYYY-MM-DD

-1000-01-01~9999-12-31

 

2. DATETIME

-날짜+시간

-YYYY-MM-DD HH:MM:SS(24시간제)

 

3. TIME

-시간

- HH:MM:SS

 

4. TIMESTAML : 자동입력

-날짜+시간

-YYYY-MM-DD HH:MM:SS(24시간제)

 

시스템 시간대 정보에 맞게 일시를 저장한다.

 

**  DATETIME과 TIMESTAML의 차이 :  TIMESTAML : 자동입력

cf, UTC : 한국시간 - 9

 

Not Null vs Default

Not Null 

- 직접 null이라고 작성해서 넣는 것도 안됨

 

Default

- 값이 안 들어올 때, 기본 값으로 셋팅

-공란으로 insert -> Default설정 해둔 기본 값이 insert

- 직접  null이라고 작성해서 넣으면 null로 셋팅됨

 

 

** 공식 문서에서 예시보기

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함