WIL- 다시금 휘발되지 않도록

이병관·2021년 12월 26일
0
post-custom-banner

SQL NoSQL

SQLNoSQL
주로 관계형 데이터베이스비관계형, 분산형
테이블기반, 스키마를 엄격히 준수문서기반, 스키마 정의를 지키지 않아도 됨
정규화된 스키마 선호비정규화된 스키마 선호
높은 트랜젝션에 알맞음트랜잭션 구현이 힘듬
MySQL, Oracle, MS-SQL, SQLite.MongoDB, Apache CouchDB, Redis

SQL, NoSQL

SQL 장점:

  • 명확하게 정의 된 스키마, 데이터 무결성 보장
  • 관계를 통해 각 데이터를 중복없이 한 번만 저장가능

SQL의 단점:

  • 상대적으로 덜 유연하며, 데이터 스키마는 미리 알고 계획해야함.
  • JOIN문이 많은 매우 복잡한 쿼리가 만들어 질 수 있습니다.
  • 수평 확장이 어렵고, 보통 수직 확장만 가능

NoSQL장점:

  • 스키마가 없기때문에, 유연성이 높다.. 즉, 저장된 데이터를 언제든지 조정하고 새로운 "필드"를 추가가능
  • 데이터는 애플리케이션에 필요한 형식으로 저장된다. 데이터를 가져오는 속도가 증가.
  • 수직 및 수평 확장이 가능하므로 데이터베이스가 애플리케이션에서 발생시키는 모든 읽기 / 쓰기 요청을 처리 할 수 있습니다.

NoSQL의 단점:

  • 유연성 때문에, 데이터 구조 결정을 늦어질 수 있습니다.
  • 복사된 데이터가 변경되면 여러 콜렉션과 문서를 수정해야 합니다.

Nodejs

Node JS는 싱글 스레드 이벤트 논블로킹 모델이다

  • 동시에 많은 요청들을 비동기로 수행함으로써 싱글스레드일지라도 논블로킹이 가능하다.

그런데 싱글스레드인데 어떻게 논블로킹 모델일까?

  • 스레드: 프로세스 내에서 실행되는 여러 흐름의 단위

NodeJS는 이벤트 리스너에 등록해둔 콜백 함수를 실행하는 방식으로 동작하기 떄문. 즉 이벤트 루프가 이를 가능하게 만들어준다.

  • I/O 작업들은 OS 커널 혹은 libuv 내의 스레드 풀에서 담당한다.
  • libuv 의 스레드 풀은 멀티 스레드로 이루어져있다.

NodeJS의 특성인 이벤트 기반, 논 블로킹 I/O 모델들은 모두 libuv 라이브러리에서 구현된다

코딩에서도 많이 느꼇지만, Nodejs의 거의 모든 코드들은 콜백함수 안에서 이루어진다.
콜백 함수들은 libuv 내에 위치한 이벤트 루프에서 관리 및 처리되는데,
이벤트 루프는 라운드 로빈 방식으로 노드 프로세스가 종료될 때까지 여러 페이지들을 계속 순회한다.

라운드 로빈: 각각의 프로세스들에게 일정한 시간을 주고 각 프로세스는 부여받은 시간이 끝나면 차례를 다음 프로세스에게 넘겨준다. 다음 프로세스는 또다시 부여받은 시간동안만 동작하고 다시 다음프로세스가 실행된다.

이벤트 루프

출처
아직은 잘 모르겠다... 근데 이렇게 깊게 깊게 물어볼지는 모르겠다...


이벤트 루프는 여러 개의 페이즈(Phase)들을 갖고 있으며,
해당 페이즈들은 각자만의 큐(Queue)를 갖습니다. 이벤트 루프는 라운드 로빈(round-robin) 방식으로 노드 프로세스가 종료될때까지 일정 규칙에 따라 여러개의 페이즈들을 계속 순회합니다. 페이즈들은 각각의 큐들을 관리하고, 해당 큐들은 FIFO(First In First Out) 순서로 콜백함수들을 처리합니다.


...정리와 이해중...

Express, MiddleWare

express는 가볍고 개방적인 웹프레임 워크중 하나.
그중 미들웨어는 express의 특징중 하나인데,

익스프레스 내에서 웹 요청과 응답에 대한 정보를 사용해서 필요한 처리를 진행할 수 있도록 분리된 독립적인 함수들의 모임을 미들웨어라 칭한다.

브라우저 저장소 차이

HTML5에 Web Storage가 생기면서 데이터 지속성을 위해
Session Storage와 Local Storage가 존재한다.

WebStorage

  • 쿠키는 매번 서버로 자동 전송되지만 웹스토리지는 전송이 일어나지않는다
  • 구조화된 객체를 저장 가능
  • 용량의 제한이 없음
  • 영구 데이터 저장 가능

LocalStorage

저장한 데이터를 명시적으로 지우지 않는 이상 영구적으로 보관이 가능하다. 앞서 말한대로 도메인마다 별도로 로컬 스토로지가 생성된다. Windows 전역 객체의 LocalStorage라는 컬렉션을 통해 저장과 조회가 이루어진다.

  • 브라우저가 종료되도 데이터가 보관되어 다음에도 사용 가능
  • 도메인만 같으면 전역적으로 공유

SessionStorage

SessionStorage는 데이터의 지속성과 액세스 범위에 특수한 제한이 존재한다. SessionStorage는 windows 전역 객체의 sessionStorage라는 컬렉션을 통해 저장과 조회가 이루어진다.

  • 브라우저 종료시 데이터도 사라진다
  • 도메인별로 별도 생성

GET과 Post

GET으로 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와야 한다는 것을 의미한다.
필요한 데이터를 Body로 보내지 않고 쿼리 스트링을 통해 전달한다.

이에 따라 GET은 설계원칙에 따라 서버의 데이터나 상태를 변경시키지 않아야하기에 주로 조회를 할 때에 사용해야한다. 예를 들어, 브라우저에서 웹페이지를 열어보거나 게시글을 읽는 등 조회를 하는 행위는 GET으로 요청하게된다.

반대로 POST는 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있습니다.
이에 따라 POST는 서버의 상태나 데이터를 변경시킬 때 사용됩니다. 게시글을 쓰면 서버에 게시글이 저장이 되고, 게시글을 삭제하면 해당 데이터가 없어지는 등 POST로 요청을 하게 되면 서버의 무언가는 변경되도록 사용됩니다.

쿠키와 세션

CookieSession
저장위치ClientServer
저장형식TextObject
만료시점쿠키 저장시 설정
(설정 없으면 브라우저 종료 시)
정확한 시점 모름
리소스클라이언트의 리소스서버의 리소스
용량제한한 도메인 당 20개, 한 쿠키당 4KB제한없음

데이터 베이스

트랜젝션

데이터베이스 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위
즉 쪼갤수 없는, 일부만 동작해서는 안되는 수행작업이기 때문에 모두 반영되야하거나 오류발생시 다시 원상태로 복구해야한다.

ACID

  • 원자성(Atomicity) : 모든 작업이 커밋되거나 롤백되어야함

  • 일관성(Consistency) : 트랜잭션의 작업 처리 결과는 항상 일관성이 있어야 한다
    ex. 계좌 A에서 계좌 B로 돈을 보낼 때, A에서 출금된 돈과 B에서 받은 돈이 같아야 된다는 뜻.

  • 독립성(Isolation) : 각각의 트랜젝션은 서로 간섭없이 독립적으로 수행되어야 한다. 동시에 실행하는 트랜잭션으로 인한 문제를 피하기 위한 방법은 순차적으로 트랜잭션을 실행하는 것이다.

  • 영속성(Durability) : 트랜잭션이 성공적으로 완료 되었으면 결과는 영구적으로 반영되어야 한다.

DML vs DDL vs DCL

  • DML : 데이터베이스에 들어있는 데이터를 조작, 조회, 검색하기 위한 명령어
    [ SELECT, DELETE, UPDATE, INSERT ]

  • DDL: 테이블 구조를 정의하는데 사용되는 명령어
    [CREATE, ALTER, DROP, TRUNCATE(초기화) ]

  • DCL: 데이터베이스에 접근하거나 객체에 권한을 주는 등 역할을 하는 언어 [ COMMIT, ROLLBACK, GRANT, REVOKE ]

JOIN

  • INNER JOIN: 2개 이상의 테이블에서 교집합만을 추출

  • LEFT JOIN: 2개 이상의 테이블에서 FROM에 해당하는 부분을 추출

  • RIGHT JOIN: 2개 이상의 테이블에서 FROM과 JOIN하는 테이블에 해당하는 부분을 추출

  • OUTER JOIN : 아웃터 조인 or 풀조인이라고 불림
    2개 이상의 테이블에서 모든 테이블 해당하는 부분을 추출

트리거

DML이 수행되었을때 데이터 베이스가 자동적으로 동작하도록 만든 프로그램

정규화

데이터베이스의 중복을 최대한 줄이기 위해 테이블을 분리하는 작업
정처기생각난다... 제1정규화,2정규화,3정규화,BCNF,4정규화,5정규화

  • 도메인이 전부 원자값
  • 부분적 함수 종속 제거
  • 이행적 함수 종속 제거
  • 결정자중 후보키가 아닌것 제거
  • 다치 종속 제거
  • 조인 종속 제거
    도부이결다줘 ㅋㅋㅋ
profile
뜨겁고 매콤하고 화끈하게
post-custom-banner

0개의 댓글