Skip to the content.

좋은 코드란 무엇인가.

읽기 쉬운 코드

중복이 없는 코드

테스트가 용이한 코드

객체지향프로그래밍

인간 중심적 프로그래밍 패러다임으로 현실 세계를 프로그래밍으로 옮겨오는 것을 말한다.

여기서 현실세계의 사물을 객체라고 보고 그 객체로부터 개발하고자 하는 애플리케이션에 필요한 특징들을 뽑아와 프로그래밍하는것을 추상화라고 부른다.

자바스크립트는 싱글-스레드 기반의 언어입니다.

즉 자바스크립트는 하나의 호출 스택을 가집니다. 하나의 호출 스택을 가진 단일 스레드로 동작하는 자바스크립트에서 어떻게 동시성을 지원할까요? 답은 이벤트 루프입니다. 자바스크립트는 이벤트 루프 기반의 비동기 방식으로 논-블로킹 IO를 지원합니다.

비동기 함수들이 실행될 때 task-queue에 등록되는데 이러한 함수들이 완료된 후에 콜스텍이 비워진 후 실행되게 됩니다.

이 과정에 call-stack에 남은 task가 있는지 task queue에 종료된 task가 있는지 확인하는 과정이 있습니다. 이건 while문처럼 매번 task-queue를 확인하는 형태를 띄고 있는데 이것을 event loop라고 합니다.

set-timeout에 숫자 0을 넣어 실행하는 경우가 가끔 있습니다. 얼핏보면 0초 후에 실행되니 바로 실행되는 것으로 보일 수 있지만 이것은 비동기 함수를 이용하여 task-queue에 등록하는 방법으로 모든 함수가 실행된 후에 실행되도록 하는 방법입니다.

var-중복 선언가능-함수 레벨 스코프

let-중복 선언 불가,값 재할당 가능-블록 레벨 스코프

const-중복 선언 불가,값 재할당 불가능, 선언과 동시에 값을 할당-블록 레벨 스코프

호이스팅-변수 선언이 어디에 있든 상관없이 다른 코드보다 먼저 실행되는 특징

Promise

자바스크립트 비동기 처리에 사용되는 객체

싱글 스레드인 자바스크립트는 기본적으로 동기식이지만, API에 요청을 보낼 때 응답이 올 때까지 마냥 기다리기만 할 수 없기 때문에 비동기 처리가 필요하다.

하지만 비동기 처리를 할 경우 의도하지 않은 순서로 함수가 실행될 수 있기 때문에 원하는 부분에서 동기방식으로 변환해줘야 한다.

Async/Await

Async는 비동기 실행을 의미하며 Await은 결과가 올때까지 기다리겠다는 의미이다.

ORM

객체-관계 매핑

객체지향적인 코드로 비즈니스 로직에 집중 가능

객체와 RDBMS간의 매핑을 하는 것

재사용 및 유지보수 용이

DBMS에 대한 종속성 감소

Node.js

자바스크립트 실행하는 부분에서는 싱글 스레드로 구성되고 논블로킹 I/O(비동기)와 이벤트 루프를 통해 동시에 여러 작업을 처리하기 용이하다.

여기서 논블로킹은 함수를 호출하면 호출된 함수에게 바로 제어권을 넘겨줘서 다른 작업을 바로 진행할 수 있도록 하는 방식이다.결국엔 호출된 함수가 실행되는 동안 다른 작업을 동시에 진행할 수 있다는것을 의미한다.

이벤트 루프

크롬 V8 자바스크립트 엔진과 여러 라이브러리가 있는데 그중 libuv 라이브러리는 이벤트 루프를 통해서 자바스크립트가 가지고 있는 싱글 스레드의 약접을 극복하고 효율적으로 작업을 처리할 수 있도록 고안되었다.

메모리 힙- 메모리 할당이 일어나는 컴포넌트

콜 스택- 코드 실행을 위한 컴포넌트

자바 스크립트는 처리해야할 작업은 콜 스택(FILO 선입후출)에 쌓고 하나씩 처리한다.

자바 스크립트는 콜 스택에서 실행한 비동기 함수는 Web APIs를 호출하고 Web APIs는 콜백 함수를 콜백 큐에 밀어 넣는다. 큐 자료 구조중에 하나로 FIFO(선입선출)의 규칙을 따른다.

이벤트 루프는 콜스택과 콜백 큐의 상태를 체크하고 콜스텍이 빈상태가 되면 콜백 큐의 첫번째 콜백 큐의 첫번째 콜백을 콜 스택으로 이동시킨다. 이러한 반복적인 작업을 tick이라고 한다.

NPM

node package manager로 개발된 수많은 자바스크립트 패키지가 등록되어있어서 개발자들이 쉽게 설치하고 사용하고 운영할 수 있도록 해주는 node.js 패키지 관리자이다.

1:1,1:N,N:M 관계

1:1-상대 엔티티와 반드시 단 하나의 관계를 가진다.

ex: 한 남자는 한 여자와, 한 여자는 한 남자와 밖에 결혼을 할 수 없다.

1:N-관계를 맺은 엔티티 쪽의 여러 객체를 가질 수 있다.

ex: 한 유저(PK)는 여러 개의 게시글(FK)을 작성할 수 있다.

N:M-서로가 서로를 1:N 관계로 볼 수 있다.

ex: 학생은 여러 학원을 다닐 수 있으며 학원도 여러 학생을 접수할 수 있다.

REST API

www과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식으로 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반에 대한 패턴이다.

API 또는 애플리케이션 프로그래밍 인터페이스는 애플리케이션이나 디바이스가 서로 간에 연결하여 통신할 수 있는 방법을 정의하는 규칙 세트이다. REST API는 REST(REpresentatinal State Tranfer) 아키텍쳐 스타일의 디자인 원칙을 준수하는 API이다. REST API 또는 RESTful API라고 부른다.

하나의 애플리케이션이나 서비스가 다른 애플리케이션이나 서비스 내의 리소스에 액세스할 수 있도록 해주는 메커니즘이다.

엑세스를 수행하는 애플리케이션이나 서비르를 클라이언트라고 하며, 리소스가 포함된 애플리케이션이나 서비스를 서버라고 한다.

REST API는 거의 모든 프로그래밍 언어를 사용하여 개발이 가능하며 다양한 데이터 포맷을 지원할 수 있다. 유일한 요구사항은 이들이 아키텍쳐 제한사항으로도 알려진 다음의 6가지 REST 디자인 원칙에 맞아야 한다는 것이다.

  1. 균일한 인터페이스-요청이 어디에서 오는지와 무관하게 동일한 리소스에 대한 모든 API 요청은 동일하게 보여야 한다.
  2. 클라이언트-서버 디커플링-REST API 디자인에서 클라이언트와 서버 애플리케이션은 서로간에 완전히 독립적이어야 한다.
  3. Stateless-각 요청에서 이의 처리에 필요한 모든 정보를 포함해야 한다. 클라이언트 요청에 관련된 데이터를 저장할 수 없기때문이다.
  4. 캐싱 가능성-웹 표준 HTTP 프로토콜을 그대로 사용하므로 웹에서 사용하는 기존의 인프라를 그대로 활용할 수 있다. 즉 HTTP가 가진 강력한 특징중 하나인 캐싱 기능을 적용할 수 있다. 캐시 사용을 통해 응답시간이 빨라지고 REST Server 트랜잭션이 발생하지 않기 때문에 전체 응답시간,성능,서버의 자원 이용률을 향상시킬 수 있다.
  5. 계층 구조 아키텍쳐-REST API는 애플리케이션 또는 중개자와 통신하는지 여부를 클라이언트나 서버가 알 수 없도록 설계되어야 한다.
  6. 코드 온디맨드(옵션)-일반적으로 정적 리소스를 전송하지만 특정한 경우에는 응답에 실행코드를 포함할 수도 있다.

장점

open api를 제공하기 쉽다.

멀티플랫폼 지원 및 연동이 용이하다.

원하는 타입으로 데이터를 주고 받을 수 있다.

기존 웹 인프라(HTTP)를 그대로 사용할 수 있다.

단점

사용할 수 있는 메서드가 4가지 밖에 없다.

분산환경에는 부적합하다.

HTTP 통신 모델에 대해서만 지원한다.

HTTP

HTML문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다. 웹에서 이루어지는 모든 데이터 교환의 기초이며 클라이언트-서버 프로토콜이기도 한다. 클라이언트-서버 프로토콜이란(보통 웹브라우저) 수신자 측에 의해 요청이 초기화되는 프로토콜을 의미한다.

PUT vs PATCH 차이점

PUT- 데이터 전체를 바꾸는 경우의 메서드

PATCH- 데이터의 일부를 바꾸는 경우의 메서드

HTTP의 약점

-암호화되지 않은 통신이기 때문에 도청이 가능하다.

-통신 상대를 확인하지 않기 때문에 위장이 가능하다.

-완전성을 증명하지 않기 때문에 변조가 가능하다.

이를 보완하기 위해 HTTPS(HTTP+SSL)가 탄생하였는데 SSL프로토콜이 HTTP를 암호화 해준다.

SSL

인터넷 상에서 데이터를 안전하게 전송하기 위한 인터넷 암호화 통신 프로토콜을 의미한다.

SSL은 보안계층으로 응용 계층과 전송 계층 사이에 속한다.

TDD

Test-Drive-Development는 매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스이다.

우선 개발자는 요구되는 새로운 기능에 대한 자동화된 테스트케이스를 작성하고 해당 테스트를 통과하는 가장 간단한 코드를 작성한다.

일단 테스트에 통과하는 코드를 작성하고 상황에 맞게 리펙토링하는 과정을 거치는 것이다. 말 그대로 테스트가 코드 작성을 주도하는 개발방식이다.

MVC 패턴

모델-뷰-컨트롤러의 구조이며

모델- 데이터와 비즈니스 로직을 관리

뷰- 레이아웃과 화면 처리

컨트롤러- 명령을 모델괴 뷰 부분으로 라우팅한다.

Git

파일의 변경사항을 추적하고 여러 명의 사용자들간에 해당 파일들의 작업을 조율하기 위한 스냅샷 스트림 기반의 버전 관리 시스템이다.