데이터베이스 관리 시스템으로 사용자가 데이터에 관한 정보를 가능한 한 효율적으로 구성, 복원 및 검색 할 수 있도록 도와주는 소프트웨어입니다.
서버와 분리되어있기 때문에 보안성이 좋고, 서버가 다운될 경우 DB도 영향받을 경우가 낮습니다. 스토리지 크기를 쉽게 확장할 수 있습니다.
서버에 직접 접속이 불가능하여 로그확인이 어렵습니다
기본 스토리지 액세스보다 더 빠르게 요청을 처리하기위해 사용됩니다
자주 사용하는 경우 별도의 공간에 저장하여, 데이터 검색 성능을 향상시킵니다
자바, C#, 자바스크립트 등에 사용되는 걸로 메모리 사용기법중의 하나로 / 프로그램이 동적으로 할당했던 메모리 영역중에서 필요없게된 영역을 자동으로 해체하느 ㄴ기능입니다.
Atomicity 원자성 : 부분적으로 실행되거나 중단되지않는 것
Consistency 일관성 : 성공적으로 완료되면 일관적인 DB상태를 유지
Isolation 격리성 : 다른 트랜잭션 작업이 끼어들지 못하도록 보장되는 것
Durability 지속성 : 성공적으로 수행된 트랜잭션은 영원히 반영되야함
Read Uncommitted : 어떤 트랜잭션에서 처리한 작업이 완료되지않았는데, 다른 트랜잭션에서 볼 수 있는 현상을 ‘더티 리더'라고 하는데 이게 허용되는 격리단계입니다.
Read Committed : 더티리더와 같은 현상이 발견되지않지만, NON-REPEATABLE READ라는 부정합 문제가 발생하는 격리단계입니다. 부정합은 처음과 끝의 데이터 응답이 다른 걸 의미합니다.
Repeatable Read : 트랜잭션이 범위 내에서 조회한 데이터 내용이 항상 동일함을 보장, mysql이 기본적으로 사용됩니다. ‘PHANTOM READ’ 문제가 발생합니다. insert에 발생
Serializable : 가장 엄격한 격리 수준입니다. 처리 성능이 대신에 떨어집니다
객체와 관계형 데이터베이스 데이터를 자동으로 연결해주는 걸 말합니다.
복잡한 쿼리의 경우 작성할 수 없고, 로우 쿼리보다 비용이 많이 듭니다.
세로, 테이블을 컬럼 단위로 나누어서 관리하는 기법을 말합니다.
장점은 insert, update 작업이 분산되어 향상되지만
테이블간 join 비용이 증가합니다, 테이블과 인덱스를 별도로 파티션할 수 없습니다.
가로로 테이블을 분산하여 저장하는 방법입니다. 규칙을 나누는 key가 중요합니다.
key-value형태의 데이터를 사용하는 in-memory cache입니다.
주 메모리에 데이터를 저장하는 데이터베이스로, 프로그램을 실행할려면 RAM에서 찾은 뒤 메모리에 올리고 CPU에서 실행하지만, 이러한 과정을 생략하므로 빠르게 응답할 수 있습니다.
그러나 데이터가 휘발성이므로 임시 데이터에서 주로 사용됩니다
스키마가 없기 때문에 유연하며, 자유로운 데이터 구조를 가질 수 있습니다. 데이터 분산이 용이하며 성능 향상을 위한 Scale-up뿐만 아니라 Scale-out도 가능합니다. 스키마가 존재하지않기 떄문에 명확한 데이터 구조를 보장하지않습니다.
FROM - WHERE-GROUP BY-HAVING-SELECT-ORDER BY
데이터 테이블의 검색 속도를 향상 시키기 위한 자료구조, insert나 delete 테이블에 변형을 가할 때 별도의 과정이 추가로 발생합니다.
칼럼의 값과 해당 레코드가 저장된 주소를 키와 값의 쌍으로 삼아 인덱스를 만들어둡니다
관계형 데이터베이스에서 중복을 최소화하기 위해서 데이터를 구조화하는 작업을 의미합니다.
비정규화 (읽는 시간 최적화)
Injection
악의적인 사용자가 보안상의 취약점을 이용하여 ,임의의 SQL 문을 넣어서 실행, 데이터베이스가 비정상적 동작을 하도록 조작하는 행위입니다.
Web APPlication Server줄임말, 클라이언트로 요청을 받으면 애플리케이션에 대한 로직을 실행하여 웹서버로 다시 반환해주는 소프트웨어
동적인 데이터를 제공하기 위한 서버, 웹서버에서 처리할 수없는 동적인 정보를 처리하여 웹서버에 정적 정보를 제공합니다. tomcat, jeus가 있습니다.
정적인 파일을 제공하기 위한 서버로 바로 요청을 처리합니다. apache와 nginx가 있습니다.
객체지향 프로그래밍, 객체를 기준으로 코드를 나누어 구현하는 프로그래밍 기법, 객체들의 유기적인 관계를 통해 프로세스가 진행
캡슐화 : 하나의 객체에 대해 객체가 특정한 목적을 위해 필요한 변수나 메소드를 하나로 묶는 것
추상화 : 객체들의 공통된 특징을 파악해 정의해놓은 설계 기법
다형성 : 형태가 같은데 다른 기능을 하는 것, 메소드 이름을 낭비하지않아도됨
상속성, 재사용 : 기존 상위 클래스에 근거하여 새롭게 클래스와 행위를 정의할 수 있게 도와주느 ㄴ개념
RESTful API (clear)
REST의 원리에 따라 자원을 주고받는 걸 의미합니다.
REST는 http url를 통해 자원을 명시하고, http method를 통해 해당 자원에 대해서 CRUD operation을 적용하는 걸 의미합니다.
교차출처 리소스 공유는 기존 출처의 웹에서 다른 출처의 자원에 접근할 수 있는 권한을 부여한 것입니다.
웹 브라우저 보안을 위해서 Same-origin의 서버로만 리소스를 주고받도록 상호작용을 제한하는 보안방식입니다.
same-origin이란 프로토콜, host, port가 같은 url을 의미합니다.
웹브라우저와 서버 간에 정보를 주고받기 위한 규약입니다.
암호화 프로토콜을 사용하여 http 통신을 안전하게하는 프로토콜 입니다.
https에는 도청, 위장, 완전성이 보장이 안되는 문제가 있었는데 이를 해결하기위해 https SSL, TLS등을 사용합니다.
http는 상태와 연결에 대한 정보를 저장하지않아서, 이를 도와주는 것입니다.
쿠키는 클라이언트에 저장되는 됩니다. 세션은 서버에 인증정보를 저장합니다. 브라우저가 종료될 떄까지 정보가 유지, 보안이 좀더 강합니다.
PDNTSPA
TCP
연결지향 프로토콜로 패킷의 순서를 보장하고 신뢰성 있는 전송이 가능합니다.
‘가상회선 패킷 교환 방식’은 가상회선 식별자가 포함되며 모든 패킷을 전송하면 가상회선이 해제되고 패킷들은 전송된 순서대로 도착하는 방식을 말합니다.
순서를 보장하지않고 수신여부를 확인하지 않는 ‘데이터그램 패킷 교환방식'을 사용합니다.
데이터그램패킷 교환방식이란 패킷이 독립적으로 이동하여 최적의 경로를 선택해가는데, 도착한 순서가 서로 다를 수 있는 방식을 말합니다.
GET :보안에 취약, 데이터를 받는 용도로 사용, POST 내용을 갱신하거나 서버로 데이터를 전송할 때 적합
도메인 주소를 IP주소로 변환해주는 시스템을 말합니다.
url을 입력 ⇒ DNS에 물어봐서 IP주소를 가져옵니다. ⇒ HTTP request메세지를 만든 다음에 ⇒ 프로토콜 스택에 전송을 의뢰합니다 ⇒ LAN 송출 ⇒ 허브, 스위치, 라우터 ⇒ 프로바이더 ⇒ POP ⇒ 인터넷 핵심부 ⇒ 방화벽 ⇒ 캐쉬 서버 ⇒ 웹서버 ⇒ WAS 응답메세지를 만들고 client에 전달합니다
NodeJS가 논 블로킹 작업을 수행하기 위해서, 이 이벤트 루프를 통해 비동기적 작업을 수행합니다
Node.js : Chrome v8엔진을 이용해서 서버에서 javascript를 동작할 수 있도록 하는 플랫폼입니다. 비동기식 이벤트 기반 모델을 사용하므로 데이터 집약적인 애플리케이션에 적합합니다
클로저 (clear)
외부함수 안에 내부함수를 선언했을 때, 내부함수가 자신이 선언됐을 때의 환경인 스코프를 기억하여, 자신이 선언 됐을 때 밖에서 호출되어도 그 환경에 접근할 수 있는 함수를 말합니다.
var 나 function 선언문이 해당 스코프의 선두로 옮긴 것처럼 동작하는 특성을 말합니다.
let으로 선언한 변수는 스코프 시작에서 변수의 선언까지 TDZ에 빠지게 됩니다.Temporal Dead Zone var의 경우 선언과 초기화가 함께 이루어져서 undefined라고 뜨지만 let은 선언단계와 초기화 단계가 분리되어 진행되기 때문에 없는 것처럼 인식합니다.
함수의 매개변수로 전달된 함수로, 함수 안에서 어떤 특정한 시점에 다시 호출되는 함수를 말합니다.
비동기적으로 함수를 받아올 경우에, callback 함수를 연속해서 부를 경우, callback 지옥에 빠지게됩니다. 이렇게 되면 가독성이 떨어지고 유지보수가 어려워집니다. 이러한 문제의 해결과, 비동기 결과를 받아오기 위해 사용하는 객체 입니다.
비동기 함수를 동기적 코드인 것처럼 동작하도록 구현할 수 있습니다.
boolean, number, string, null, undefined, symbol / object
자바, C#, 자바스크립트 등이 있습니다. 메모리 관리 기법 중의 하나로 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게된 영역을 자동으로 해체하는 기능입니다.
데이터를 순서대로 쌓아서 마지막에 삽입된 자료가 가장 먼저 나가는 구조입니다(LIFO)
스택과 다르게 가장 먼저 들어온 데이터가 먼저나가는 ‘선입선출' 자료구조입니다.
(FIFO)
최대값 혹은 최소값을 빠르게 찾기위한 이진트리입니다.
logN의 시간복잡도를 갖습니다.
key와 value로 데이터를 저장하는 자료구조, 제일 빠르게 데이터를 검색할 수 있는 자료구조
해시함수를 사용해서, 인덱스를 생성해 데이터를 저장
가상머신은 하나의 서버를 여러대의 서버로 나누는 물리적 하드웨어입니다. Hypervisor을 이용해 하나의 OS에 여러개의 OS를 사용하는 방법입니다. 그러다보니 여러개의 운영체제를 가지다보니 느리고 무겁습니다
하나의 OS위에 Docker를 설치, 그 위에 각각의 서비스 환경들을 설치/운영하는 방법입니다. 그래서 상대적으로 가볍습니다.
Model-view-controller 약자로 애플리케이션을 세 가지 역할로 구분한 개발 방법론입니다. Controller를 조작하면 Model을 통해 데이터베이스에 접근 데이터를 가져오고 데이터를 바탕으로 view를 통해 사용자에게 보여줍니다.
하나의 비밀키를 이용한 암호화 방식
공개키와 개인키를 이용한 암호화 방식입니다
암호화 후 복호화 할 수 없음
암호화 복호화 모두 가능한 것이 특징
데이터들이 순서대로 늘어선 배열의 형식을 취하고 있습니다.
배열의 크기를 재조정 하는 것은 많은 연산이 필요합니다.
자료의 주소값으로 서로 연결된 형식을 가지고 있습니다.
크기에 영향 없이 데이터를 추가할 수 있습니다.
서버로부터 HTML문서를 받으면 HTML문서를 파싱하여 DOM Tree를 구축하고 css파일과 함께 스타일 요소를 파싱합니다.
DOM Tree에 위의 결과물을 합쳐서 렌더 트리를 구축합니다.
렌더 트리 각 노드에 대해 화면에 배치할 곳을 결정하고 ui백엔드에서 렌더 트리의 각노드를 그립니다.
브라우저는 동기적으로 HTML, CSS, Javascript를 처리합니다. 각단계에서 javascrpit를 파싱하면 display가 지연되고 트리가 생성되기전에 생성되지도 않은 dom의 조작을 시도합니다. 그래서 js코드를 body태그 하단에 위치시킵니다.
Virtual DOM
DOM은 브라우저가 화면에 그려내기 위해 객체 트리방식으로 변환하는 걸 의미합니다. 이 방식은 DOM에 변화가 일어날 때, 매번 css를 재연산하고 레이아웃을 구성하고 페이지를 리페인트하면 연산의 증가로 이어집니다
이러한 업데이트를 최소화하기위해 리액트는 virtual dom을 사용합니다. 실제 dom과 virtual dom을 비교하여 필요한 부분만 update를 하여 update 소요를 줄입니다.
어떠한 태그를 클릭했을 떄, 해당 태그에 이벤트만 감지하는게 아니라 그 태그를 감싸고 있는 부모 태그들도 클릭 이벤트를 인식하고 반응하는 걸 이벤트 버블링이라고 합니다.
기본적으로 정의된 이벤트를 작동하지 못하게하는 메서드입니다.
props를 부모 컴포넌트에서 자식컴포넌트로 계속해서 데이터를 전달하는 과정을 말합니다. 이를 해결하기위해 redux가 있습니다.
javascript코드의 확장으로 자바스크립트 내부에서 마크업 코드를 작성해줄 수 있습니다.
state 렌더링 결과물에 영향을 주는 정보입니다. 데이터가 바꼈을시 바로 결과물을 보여주기 위해서 사용합니다.
Server side Rendering으로 서버에서 데이터까지 모두 포함하여 페이지를 구성한 후에 브라우저에 전달합니다.
불필요한 부분까지 렌더링,
전체 화면에 구성을 먼저 그린다음, 서버에서 데이터가 도착하면 나머지를 그리는 방식입니다.
필요한 데이터만 갱신하면 되기 때문에 서버 부하가 덜합니다.
id
하나의 요소에만 스타일을 적용합니다
class
복수의 요소에 스타일을 적용합니다
selector
해당 태그에 지정한 속성들을 일괄로 적용합니다.
px
가장 기본적으로 사용되는 값으로, 화면의 크기나 변화에 상관없이 고정된 값을 말합니다.
em
부모 요소를 기준으로 자식 요소의 크기를 정하는 걸 말합니다.
부모요소가 12px이고 자식요소가 1.2em이라면 자식요소는 12px* 1.2em = 14.4px이됩니다
rem
root em의 약자로, 최상단 기준으로 크기를 정하는 걸 말합니다
vh
vertical height의 약자로 화면의 높이에 비례합니다. 반응형 페이지에 만들때 유용합니다
vw
vertical width의 약자로 화면의 너비에 비례합니다.
자바스크립트 코드에서 css를 작성하는 방식을 말합니다.
사용하는 이유는, 네이밍의 중복을 피하기위해서, 별도의 명명 규칙이 필요없습니다. 컴포넌트와 css가 동일한 구조로 관리되므로 수정과 삭제가 쉽습니다.
별도의 라이브러리를 설치해야하므로 번들의 크기가 증가, 최초 로딩 시간을 지연시킬 수 있습니다.
시스템의 자원과 동작을 관리하는 소프트웨어입니다. 프로세스 저장장치, 네트워킹, 사용자, 하드웨어를 관리합니다.
운영체제컴퓨터 하드웨어와 컴퓨터 소프트웨어가 동신하고 작동하는 걸 도와주는 소프트웨어 프로그램입니다.
RAM은 code, data, heap, stack으로 나누어져있습니다.
사용자가 프로그램을 실행하면 운영체제를 거쳐서 메모리에 올려지고 cpu 를 사용하여 작동합니다.
코드 : 실행할 프로그램 코드가 저장되는 텍스트 영역입니다
데이터 : 전역 변수와 정적 변수가 이에 해당됩니다.
스택 : 지역 변수와 매개변수가 저장되는 영역입니다. 함수의 호출과 함께 할당됩니다 (컴파일에 크기 결정)
힙 : 사용자가 직접 관리할 수 있는 메모리 영역입니다. 사용자에 의해 메모리 공간이 동적으로 할당되고 해제됩니다. (런타임에 크기가 결정)
cpu 스케줄러 (clear)
준비 큐에 있는 프로세스에 대해 cpu를 할당하는 방법을 말합니다.
선점 스케줄링 : 하나의 프로세스가 CPU를 할당받아 우선순위가 높은 프로세스가 cpu를 강제로 빼앗아 사용할 수 있는 스케줄링 기법
비선점 스케줄링 : 이미 할당된 cpu를 다른 프로세스가 강제로 빼앗아 사용할 수없는 스케줄링 기법입니다.
프로세스
컴퓨터에서 실행되고 있는 프로그램을 프로세스 라고합니다.
프로세스는 각각 독립된 메모리영역(code, data, stack, heap구조)를 할당받습니다.
cpu 사용의 기본단위로 프로세스 내에서 실행되는 여러 흐름의 단위를 말합니다
두 개 이상의 프로세스나 스레드가 서로 자원을 기다리면서 무한히 기다리게 되는 상태를 말합니다. 서로 상대방의 작업이 끝나기만을 기다리고 있기 떄문에 다음 단계로 진행하지못하는 상태를 의미합니다.
메모리가 실제 메모리보다 많아 보이게 하는 기술로, 어떤 프로세스가 실행될 때 메모리에 해당 프로세스 전체가 올라가지 않더라도 실행이 가능하게 합니다
메모리의 빈 공간이 여러 개의 조각으로 생기는 걸 말합니다.
Continuous Integration 지속적 통합
작업을 할때 마다 pr과 merge를 하는 행동자체
Continuous Deployment 지속적 배포
끊임없이 패치하는 과정, 애플리케이션이 자동으로 해줌