Judaeng
210407_TIL(SQL, 데이터베이스) 본문
✅SQL
Part1-Quiz Practice, Part2-MySQL 설치 및 생성/조회/삭제, Part3-데이터베이스 연결과 스키마
이런 식으로 나눠서 스프린트를 진행했다.
Part1에서 퀴즈랑 연습을 통해 기억을 떠올렸던 것 같다.
퀴즈와 연습은 홈페이지가 따로 있었다 신기하게도!
그리고 MySQL설치와 데이터베이스 생성/조회/삭제는 연습으로 간단하게 해 봤다.
오늘의 마지막 Part-3는 Node.js에서 MySQL이랑 연동하는 문제였는데 1시간 정도 고민해봤는데도 안되다가 페어 분이 도와주셔서 해결했다.
비밀번호만 바꿔주면 해결되는 문제였다.
Achievement Goals
- 3 Tier Architecture 를 이해한다.
- 영속성의 개념을 이해하고, 데이터베이스의 필요성을 인지한다.
- 데이터베이스 종류를 이해한다.
- 관계형 데이터베이스와 NoSQL의 차이를 이해한다.
- 관계형 데이터베이스 및 NoSQL이 어떤 경우에 적합한지 이해한다.
Learn SQL
- SQL 주요 문법을 이해할 수 있다.
- 조회, 삽입, 갱신, 삭제 구문을 자유자재로 사용할 수 있다.
- 조회시 다양한 조건을 걸어 원하는 정보만 조회할 수 있다.
- 통계를 위한 쿼리를 만들 수 있다.
- 스키마 디자인을 할 수 있다.
- 앱에 필요한 테이블과 필드, 그리고 관계를 부여할 수 있다.
- 1:N, N:N 관계를 이해하고, 데이터베이스에서 테이블을 조작할 수 있다.
- Foreign Key, Primary Key에 대해 이해할 수 있다.
Cmarket Database
- SQL을 node.js 앱에서 쿼리할 수 있다.
- 클라이언트의 HTTP 요청에 따라 CRUD API를 구현할 수 있다. (CRUD: Create, Read, Update, Delete)
🍒Remember
✅3 계층 구조(3 Tier Architecture)

3 티어 구조란 Client Side-server-database로 구성된 구조라고 한다.
3 티어 구조의 작동 방식은 클라이언트가 서버에 데이터를 요청하고, 서버는 그 요청에 맞는 데이터를 데이터베이스에 요청한다.
데이터베이스가 요청에 알맞은 데이터를 서버로 보내주고 다시 서버는 클라이언트에 데이터를 보내준다.
✅영속성 데이터(Persistent Data)란?
우리가 페이스북이나 인스타그램 같은 앱을 쓸 때 정보를 입력하면 다음 방문 때 입력한 정보가 사용될 수 있도록 어딘가에 저장되는 것을 영속성 데이터라고 한다.
반대로 앱이 종료되면 없어지는 데이터를 일시적인 데이터라고 한다.
영속적인 데이터는 앱이 사용하는 단기 메모리가 아닌 데이터베이스 또는 파일 시스템에 저장이 되어 앱을 종료하여도 데이터는 계속해서 저장돼있는 영속성을 갖게 된다.
✅데이터베이스란?
데이터는 어떤 것들을 기록한 정보이고, 데이터를 모아 둔 것을 데이터베이스라고 한다.
✅SQL 소개
하나의 언어인 SQL 혹은 Structured Query Language 은 데이터베이스 언어의 기준으로 주로 관계형 데이터베이스에서 사용된다. 예를 들어 MySQL, Oracle, SQLite, PostgreSQL 등 다양한 데이터베이스에서 볼 수 있다.
SQL 은 구조화된 쿼리 언어이다.
✅ACID란?
SQL은 ACID 특성을 따른다.
ACID(원자성, 일관성, 고립성, 지속성)는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다.
트랜잭션이란 여러 작업들을 하나로 묶은 단위이고, 하나로 묶인 작업들은 모두 실행되거나, 실행되지 않는다. (all-or-nothing)
원자성(Atomicity) : 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다.
예를 들어, 자금 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다.
원자성은 이와 같이 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다.
일관성(Consistency) : 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다. 무결성 제약이 모든 계좌는 잔고가 있어야 한다면 이를 위반하는 트랜잭션은 중단된다.
독립성(Isolation) : 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다.
이것은 트랜잭션 밖에 있는 어떤 연산도 중간 단계의 데이터를 볼 수 없음을 의미한다.
은행 관리자는 이체 작업을 하는 도중에 쿼리를 실행하더라도 특정 계좌 간 이체하는 양 쪽을 볼 수 없다.
공식적으로 고립성은 트랜잭션 실행 내역은 연속적이어야 함을 의미한다.
성능 관련 이유로 인해 이 특성은 가장 유연성 있는 제약 조건이다.
지속성(Durability) : 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다.
시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다.
전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다.
트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.
✅SQL과 NoSQL의 차이점
데이터 저장(Storage)
- 관계형 데이터베이스는 SQL을 이용해서 데이터를 테이블에 저장합니다. 미리 작성된 스키마를 기반으로 정해진 형식에 맞게 데이터를 저장해야 합니다.
- NoSQL은 위에서 설명된 것처럼, key-value, document, graph, wide-column 형식 등의 방식으로 데이터를 저장할 수 있습니다.
스키마(Schema)
- SQL을 사용하려면 형식이 고정된 스키마가 필요합니다. 처리하려는 데이터 속성별로 열(column)에 대한 정보가 미리 정해져야 한다는 의미입니다. 스키마는 나중에 변경할 수 있지만, 그럴 경우 전체 데이터베이스를 수정하거나 오프라인(down-time)으로 전환할 필요가 있습니다.
- NoSQL은 스키마의 형태가 보다 동적입니다. 행을 추가할 때 즉시 열을 함께 추가할 수 있고, 개별 속성에 대해서 모든 열에 대한 데이터를 반드시 입력하지 않아도 된다는 장점이 있습니다.
쿼리(Querying)
- 쿼리는 데이터베이스에 대해서 정보를 요청하는 행동을 의미합니다. 관계형 데이터베이스는 테이블의 형식과 테이블 간의 관계에 맞춰서 데이터를 요청합니다. 그래서 SQL과 같은 구조화된 쿼리 언어를 정보 요청에 사용합니다.
- 비 관계형 데이터베이스의 쿼리는 데이터 그룹 자체를 조회하는 것에 초점을 두고 있습니다. 그래서 구조화되지 않은 쿼리 언어로도 데이터 요청이 가능합니다. UnQL(UnStructured Query Language)이라고 말하기도 합니다.
확장성(Scalability)
- SQL 기반의 관계형 데이터베이스는 보통 수직적으로 확장합니다. (높은 메모리, CPU를 사용하는 확장) 데이터베이스가 구축된 하드웨어의 성능을 많이 이용하기 때문에 고비용이 들게 됩니다. 복수의 서버에 걸쳐서 데이터베이스의 관계를 정의할 수 있지만 매우 복잡하고 시간이 많이 소모되는 것이 보통입니다.
- NoSQL로 구성된 데이터베이스는 수평적으로 확장됩니다. (보다 값싼 서버 증설, 또는 클라우드 서비스 이용하는 확장) 많은 트래픽을 처리할 수 있도록 NoSQL 데이터베이스를 위한 서버를 추가적으로 구축하는 것이 편합니다. 또한 저렴한 범용 하드웨어나 클라우드 기반의 인스턴스에 NoSQL 데이터베이스를 호스팅 할 수 있어서, 수직적 확장보다 비용 효율성이 높습니다.
🍒More Study
✅SQL 좀 더 알아보기
✅기본 쿼리문 알아보기 ex) SELECT, WHERE
'Daily > TIL(Today I Leared)' 카테고리의 다른 글
210409_TIL(Cmarket Database 마무리) (0) | 2021.04.12 |
---|---|
210408_TIL(Learn SQL, Cmarket Database) (0) | 2021.04.08 |
210406_TIL(Redux 이해) (0) | 2021.04.08 |
210405_TIL(Redux, Cmarket) (0) | 2021.04.08 |
210402_TIL(Solo Study(2)) (0) | 2021.04.05 |