February 10, 2021
GraphQL 이란 Server API를 구성하기 위해 페이스북에서 만든 Query Language 입니다.
Server API란 요청을 하면 요청에 따른 응답을 주는 Endpoint(API가 서버에서 리소스에 접근할 수 있도록 가능하게 하는 URL, 주소)를 웹을 통해 노충하는것을 말합니다.
요청 ----> 응답
Server API를 만드는 방법론으로 REST API가 있으며 RESTful API에관해서는 이전에 정리를 하였습니다.
Application Programming Interface 즉 응용프로그램 프로그래밍 인터페이스 입니다.
응용프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 의미합니다.
또한 데이터베이스 관리 시스템과 같은 시스템 프로그램과 통신할 때 사용되는 언어나 메시지 형식을 가지며,
주로 파일 제어, 창 제어, 화상 처리, 문자 제어등을 위한 인터페이스를 제공합니다.
REpresentational State Transfer
말 그대로 셀프서술식이며 모든 리소스들을 하나의 엔드포인트에 연결해놓고, 각각의 엔드포인트들은 해당 리소스와 관련된 내용만 관리하며
엔드포인트를 리소스 관련해서 이름을 짓고 http 메소드로 행위를 정의하는 방식입니다.
Graph Query Language의 줄임말 입니다.
쿼리 랭귀지란 말 그대로 정보를 얻기 위해 질의문(쿼리)을 만들기 위해 사용되는 컴퓨터 언어의 일종입니다.
둘의 차이로 인하여 각각의 장단점이 생기게 됩니다.
즉 어느 하나가 좋다라고 할 수 없고, 주어진 환경에 따라서 어떤 조건에서 쓰는지, 어떠한 목표를 가지고 사용하는지에 따라서 각각의 방식의 장단점에 맞춰서 사용하는것이 중요합니다.
데이터를 저장 및 보존하는 시스템입니다. 어플리케이션에서는 데이터가 메모리 상에서 존재하고 메모리에 존재하는 데이터는 보존이 되지 않습니다. 따라서 어플리케이션이 종료되면 메모리에 있던 데이터는 다시 읽을 수 없습니다.
기존에 파일로 데이터를 저장할때는 파일저장 특성상 성능, 보안, 편의성에 한계가 있습니다. 이 한계를 극복하기 위해 고안된것이 데이터베이스 입니다.
비관계형 타입의 데이터를 저장할때 주로 사용되는 데이터베이스 시스템입니다.
비관계형이기에 데이터들을 저장하기 전에 정의할 필요가 없습니다.
관계형 데이터 모델에 기초를 둔 데이터베이스 시스템을 말합니다. 데이터들 끼리 서로 상호관련성을 가진 형태료 표현하며, 모든 데이터들은 테이블로 표현되고, 각각의 테이블은 로우와 컬럼으로 구성됩니다.
테이블의 연결은 3가지 종류가 있습니다.
Structured Query Language
Mysql과 같은 관계형 데이터베이스에서 데이터를 읽거나 생성 및 수정하기위해 사용하는 언어입니다.
cd /usr/local/mysql/bin 해당 디렉토리 이동
MySQL 서버 활성화 (환경설정)
./mysql -urrot -p (패스워드)
show databases;
DROP DATABASE [dbname]
USE [dbname]
show tables;
CREATE TABLE topic(
id INT(11) NOT NULL AUTO_INCREMENT,
-- 아이디 정수 11글자까지 보여줌 공백허용안함 자동으로 증가시키는옵션
title VARCHAR(100) NOT NULL,
-- 100글자에서 자른다
-- NULL 은 값이없는걸허용
description TEXT NULL,
created DATETIME NOT NULL,
author VARCHAR(30) NULL,
profile VARCHAR(100) NULL,
PRIMARY KEY(id));
-- 아이디를 프라이머리 키(메인 키 , 중복방지)로 지정
DESC [table_name]topic 테이블 구조를 보여줌
INSERT INTO topic (
title, description, created, author, profile)
VALUES(‘’Mysql”, “MySQL is …”, NOW(), “재영”, “devloper”)
-- NOW()는 현재시간 아이디는 오토인크리먼트 값지정안하면 자동으로 올라감
SELECT * from [table_name]topic;
-- 해당 테이블의 모든 데이터를 가져옴
SELECt [column](id, title) FROM topic;
SELECT id, title, created, author FROM topic WHERE author=‘재영’ ORDER BY id DESC LIMIT 2;
U
UPDATE [table_name](topic) SET title=‘’Oracle”, description=“Oracle is …” WHERE id=2;
-- 아이디가 2번인 토픽테이블의 로우의 타이틀과 디스크립션을 업데이트
DELETE FROM topic Where id = 5;
-- 토픽에서 아이디가 5번인 로우 삭제
RENAME TABLE table_name TO changed_name(topic_backup);
한 테이블이 아닌 양쪽(여러) 테이블에서 로우를 읽고 싶을 떄는 join문을 사용해서 Foreign Key(외부키)로 걸려있는 2개의 table들을 연결해서 읽습니다. 교집합의 느낌과 비슷합니다.
SELECT
테이블별칭.조회할칼럼,
테이블별칭.조회할칼럼
FROM 기준테이블 별칭
INNER(LEFT, ...) JOIN 조인테이블 별칭 ON 기준테이블별칭.기준키 = 조인테이블별칭.기준키
위 외에도 몇가지 조인들이 더 있으나, 주로 위의 조인들만 사용됩니다.
SELECT * FROM [table_name]topic LEFT JOIN [table]author ON topic.author_id = author.id
토픽의 author 아이디와 author의 아이디가 같은것들끼리 같은 행에 두고 토픽테이블을 기준으로 author 테이블을 걸어서 레프트 조인합니다..
SELECT topic.id, title, description, created, name FROM [table_name]topic LEFT JOIN [table]author ON topic.author_id = author.id
author도 아이디가있고, 토픽도 아이디가 있어서 그냥 id 하면 애매하다고 에러가납니다. topic.id AS topicid 라고하면 컬럼명을 topicid라고 보여줍니다.
SELECT [ALL | DISTICT | DISCTICT ROW]
usage에서 대괄호로 묶여있으면 생략이 가능하다는 뜻