SQL이란?

관계형 Database 관리 시스템(RDBMS)의 데이터를 관리하기위한 언어​

SQL 명령어​

  • DDL: 데이터베이스 or 테이블의 생성/변경/삭제 작업​
  • DML: 데이터의 검색, 삽입, 변경,삭제 작업  실질적 데이터 처리​
  • DCL: 데이터 접근 권한​
  • TCL: 트랜재견을 다룸​​

Data Type​

  • VARCHAR(size): 우리가 알고있는 String 타입이 이에 해당됨(MAX:255)​
  • INT(m): 표준 Integer [m은 자리수 개수]​
  • BIGINT(m)​
  • Float​
  • Date​
  • Time​ 이외에도 여러 타입들이 있다 ​

Data CRUD​

Create​,Read​,Update​,Delete​

본인이 설계한 데이터베이스의 ​각각 테이블에서 ​CRUD가 발생하는지 확인하기!

SQL vs NoSQL

관계형 DB vs 비관계형 DB​

주로 사용하는 DataBase -> Relation DB​

저장해야할 데이터가 많아지면서 도입되는 DB -> Non-relational DB​



Scalability: 데이터의 확장

SQL - Vertical Scaling(수직적 확장)​

HW Upgrade -> 성능 향상​

하나의 서버에는 향상의 한계 존재​


NoSQL - Horizontal Scaling(수평적 확장)​

Add Server -> 성능 향상​

서버의수를 늘리면 DB 증설(= 한계 X)​



Schema: DB에 어떤 구조로, 어떤 제약조건으로 저장되어야 하는지 정의하는 것​

SQL - strict schema​

테이블 구조(Field & Record)​

Field를 정의하지 않으면 데이터 저장 불가​


NoSQL - no schema​

Document 구조(key-value)​

Document -> Collection -> Database (Field 정의 X)​



Property

SQL - ACID​

ACID: DB의 Transaction의 안전성​

  • Atomicity(원자성)​ Transaction 작업이 부분 실행 or 중단 X​

  • Consistency(일관성)​ 미리 정의된 규칙에서만 수정 가능​

  • Isolation(고립성)​ Transaction 수행시 다른 작업 껴들지 X​

  • Durability(영구성)​ 수행된 Transaction은 영원히 반영​


NoSQL - CAP Theorm​ CAP: 분산 시스템은 CAP의 3가지 속성을 모두 만족시키는 것 불가능 (오직 2가지)​

  • Consistency(일관성)​ 모든 요청은 최신 데이터 or 에러 응답​ (분산된 DB의 하나의 특정 데이터 수정시 ​다른 DB에서도 수정된 데이터를 응답받음)​
  • Availability(가용성)​ 모든 요청은 정상 응답​ (특정 DB가 장애가 나도 서비스는 가능)​
  • Partitions Tolerance(분리 내구성)​ DB간 통신 실패하는 경우에도 시스템 정삭 작동​



ORM이란?

ORM(Object Relational Mapping)​

객체 - 관계 매핑​ OOP(Object Oriented Programming)의 객체와 RDB(Relational Database)의 테이블을 자동으로 연결​

  • Class와 Table은 호환가능성을 두고 만들어진 것이 아니기 때문에 불일치 발생 가능 -> SQL문으로 해결 가능​

ORM 장점​

  • 완벽한 객체 지향적 코드 (SQL없이 프로그래밍 메서드로만 조작 가능)​
  • 재사용, 유지보수, 리팩토링 용이성​
  • DMBS 종속성 하락​

ORM 단점​

  • ORM이 모든 것을 해결 불가  프로그램이 커지면 SQL 튜닝이 필요


객체-관계 불일치​

  • Granularity(세분성)​ 경우에 따라 DB Table보다 Class가 더 많은 모델이 생길 수 있음​
  • Inheritance(상속성)​ RDBMS는 PK를 이용해 동일성 정의 But Java 객체 식별 & 동일성 모두 정의​
  • Associations(연관성)​ OOP reference를 통해 연관성 표시 RDBMS 방향성없는 FK 사용​
  • Navigation(탐색)​ Java & RDB 객체 접근 방법 상이​


  • ORM Framework​

JPA/Hibernate(JAVA), Sequelize(Node.js), Django ORM(Django)​



​​​​​​GraphQL vs RESTful​

Server API (혹은 Server-side web API): 는 적절한 요청을 하였을 때, 그에 맞는 응답을 되돌려주는 창구 (Endpoint) 를 Web 을 통해 노출한 것 ​ 정보를 요청하고 수정하기위해 만들어지는 것​ 다양한 방법론​

  • REST​
  • GraphQL


REST(REpresentational State Transfer): 모든 Resource (자료, User, …) 들을 하나의 Endpoint 에 연결해놓고,​ 각 Endpoint 는 그 Resource 와 관련된 내용만 관리하게 하자는 방법론​

EX) 어떤 API 가 Community site 용 API 이며, 이 API 를 사용해 사용자들이 글을 작성/수정/삭제 할 수 있고,​ 각 글에 댓글을 작성/수정/삭제 가능​ 이때, API 의 Endpoint 를 다음과 같이 구성하면 REST 의 조건을 간략히는 만족하게 된다.​

  • 글 관련 API = /posts​
  • 글 작성 = POST /posts​
  • 글 수정 = PATCH /posts/[postid]​
  • 글 삭제 = DELETE /posts/[postid]​
  • 댓글 관련 API = /posts/[postid]/comments​
  • 댓글 작성 = POST /posts/[postid]/comments​
  • 댓글 수정 = PATCH /posts/[postid]/comments/[commentid]​
  • 댓글 삭제 = DELETE /posts/[postid]/comments/[commentid]​

이런 REST 의 조건을 만족하는 API 를 RESTful API라고 함​


GraphQL(Graph Query Language): GraphQL 은 이런 Query Language 중에서도 Server API 를 통해 정보를 주고받기 위해 사용하는 Query Language 이다.​

(Query Language 는 정보를 얻기 위해 보내는 질의문(Query)을 만들기 위해 사용되는 Computer 언어의 일종)​


GraphQL 방법론 도입 이유​

RESTful API 로는 다양한 기종에서 필요한 정보들을 일일히 구현하는 것이 어려움​ -> iOS 와 Android 에서 필요한 정보들이 조금씩 달랐고, 그 다른 부분마다 API 를 구현하는 것이 어려움​ -»정보를 사용하는 측에서 원하는 대로 정보를 가져올 수 있고, 보다 편하게 정보를 수정할 수 있도록 하는 표준화된 Query language 탄생​

GraphQL 장점​

  • HTTP 요청횟수 감소​
  • HTTP 응답사이즈 감소



선택 기준​

GraphQL​

서로 다른 모양의 다양한 요청들에 대해 응답할 수 있어야 할 때​ 대부분의 요청이 CRUD(Create-Read-Update-Delete) 에 해당할 때​

RESTful​

HTTP 와 HTTPs 에 의한 Caching 을 잘 사용하고 싶을 때​ File 전송 등 단순한 Text 로 처리되지 않는 요청들이 있을 때​ 요청의 구조가 정해져 있을 때​

그러나 더 중요한 것은, 둘 중 하나를 선택할 필요는 없다는 것이다.​