Open-API
API란?
-API(Application Programming Interface, 응용프로그램 프로그래밍 인터페이스)는 응용프로그램에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다[출처:wikipedia]
API는 레스토랑의 '점원'

-레스토랑에서 손님에게 주문 가능한 메뉴판을 보여주고 손님이 고른 메뉴를 주방에 전달해준다.
- 전달 받은 메뉴를 주방에서 요리한 후 음식이 나오면 고객에게 전달하는 '점원'이 API이다.
그럼 Open-API란?
- 간단하게 말하자면 누구나 사용할 수 있도록 공개된 API를 말한다.
브라우저 요청 순서

- 브라우저에서 프론트엔드서버로 요청
- 프론트엔드에서 보내준 데이터를 브라우저에서 다운로드
- 다운받은 데이터를 브라우저에서 그려주기
- 백엔드서버로 useQuery 요청
- 백엔드서버에서 DB쪽으로 데이터 꺼내오기 요청
- 백엔드서버에서 요청받은 데이터를 백엔드서버로 보내주기
- DB에서 받아온 데이터를 백엔드서버 API에서 브라우저로 보내고 보여주기
- 프론트엔드서버(next)
- 프론트엔드에서는 브라우저에서 사용자가 주소를 입력하고 엔터까지 입력하기를 기다리고 있다
- HTML,CSS,JS를 브라우저에 그려준다
- 그려주는 동안 백엔드서버에 요청할 useQuery는 아직 미실행 상태이다
- 고정값을 가진 HTML,CSS,JS(하드코딩)들은 useQuery가 미실행 상태여도 브라우저에 그려주게 된다
- 그 후에 백엔드서버로 useQuery가 요청이 된다
- 백엔드서버(node.js)
- 백엔드서버는 API를 만들고 API요청을 기다리고 있으며 24시간 켜져 있어야한다(포트번호가 필요)
- 어떤 특정 프로그램이 실행되고 있다(백엔드서버프로그램: 4000,8000,8080) => 24시간동안 프로그램이 실행되고 있다
- 프론트엔드서버에서 받은 useQuery 요청을 DB로 보내준다
- 데이터베이스(DB)
- 데이터베이스 서버프로그램을 설치해줘야 한다(포트가 필요함)
- 포트번호는 마음대로 바꿀 수 있다
- 종류 : Postgres(5432), Oracle, MySQL, MsSQL
- 백엔드의 접속을 기다린다(24시간 실행되어 있는 상태)
현대 웹서비스
- 웹서비스를 개발하고 운영하기 위해선 최소 3대의 컴퓨터가 필요하다
- 한대의 컴퓨터에 3개의 프로그램(Front-end, Back-end, DB)을 설치해서 사용이 가능하나, 포트번호는 각각 다르게 중복되지 않게 활용해줘야 한다.
- 하지만 cpu, mem의 과부하를 방지해주기 위해 3대 이상으로 나눠서 사용해주는게 보편화 되었다
- 대형 서비스같은 경우 사용자가 접속을 하게 되면 해당하는 접속을 처리해줘야 하며
- 백엔드에 API요청이 왔다면 그 요청을 받고 DB쪽에서 요청에 해당하는 부분을 찾아줘야 한다
- 위 요청을 처리해주는 과정에서 cpu, mem가 사용이 된다(1번의 요청을 받을 때마다 사용)
- 하지만 동시 접속자가 많게 되면 cpu, mem가 과부하가 일어나게 된다
웹서비스 처리 과정
- 브라우저에서 프론트엔드서버로 접속해서 다운로드 시작
- 다운로드가 시작되면 프론트엔드서버에선 HTML,CSS,JS를 브라우저로 보내준다
- 받아온 데이터들(HTML,CSS,JS)로 브라우저 화면에 그림을 그려준다
- 브라우저에선 백엔드서버쪽으로 useQuery API 요청을 한다
- 백엔드서버에선 API 요청을 받고 DB에 useQuery 데이터를 요청하고 DB에서 받아온 데이터들을 브라우저로 다시 보내준다
데이터베이스 종류

1. SQL 데이터베이스(관계형데이터베이스: RDB)
- 종류 : MySQL, Oracle, Postgres, MsSQL
- 표를 여러개 만들고 표와 표사이에 관계를 이어줄 수가 있다.
2. NoSQL
- 종류 : MongoDB, Firebase
- 각 표마다 관계가 없고 독립된 속성을 가진다
3. 서버 사이드 렌더링(프론트엔드)
1) ODM(Object-Dcument-Mapping)
- document형 DB를 사용할 때
- MongoDB를 사용할 때 설치해준다
- 대표적인 프로그램: Mongoose
2) ORM(Object-Relation-Mapping): 관계형 데이터베이스를 사용할 때 설치해준다
- 대표적인 프로그램: typeorm(타입스크립트), sequalize(자바스크립트에서 제일 많이 쓰인다), prisma
DB 관리프로그램
- DBeaver(설치프로그램): 데이터베이스가 아니며 데이터베이스를 보여주는 관리프로그램이다
- MySQL-workbench
💥PostgresSQL을 선택한이유
- 데이터베이스에 이미 postgres가 설치 되어있다
- 24시간동안 작동하고 있다
깨알 지식
- ts-node : 소스코드가 완성되고 사용할 때(소스코드가 바뀌어도 리프레쉬 안됨)
- ts-node-dev : vscode 개발중일 때