반응형

분류 전체보기 63

JavaScript, Prototype

서론 ES6+ 이후 class 문법이 지원되면서 prototype을 직접 사용할 일이 드물겠지만, JavaScript 객체를 더 잘 이해하기 위해서는 prototype이 무엇인지 어떻게 동작하는지 어느정도 이해할 필요가 있다. 그래서 이번에는 JavaScript의 prototype에 대해 정리해보고자 한다. Prototype이란? JavaScript에서 prototype은 함수를 정의하자 말자 사용할 수 있는 속성이다. 이 만약 foo라는 함수를 생성하는 경우, foo라는 함수의 속성으로 prototype 이라는 이름의 속성도 함께 생성된다. 이 prototpye 속성은 함수 자체에는 아무런 영향을 미치지 않고, foo를 생성자로 호출(new foo())할 때 생성된 객체는 함수 foo의 속싱인 prot..

SIGNAL

signal은 UNIX 시스템에서 어떤 이벤트가 발생한 경우 그것을 프로세스에게 알리는데 신호라고 보면된다. signal의 종류는 터미널에서 다음과 같이 확인 가능하다. 아래는 docker를 사용한 것인데... 그냥 쉽게 설명하면 ubuntu image 상에서 kill -l 을 실행시키고 도커 프로세스를 종료 시킨 것이라 보면된다. # kill -l 을 입력한 것과 같다. $ docker container run --name ubuntu-signals --rm -i -t ubuntu kill -l HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU X..

Operating System 2020.10.29

HTTP와 HTTPS의 연결 과정

지난번 포스팅에서 HTTP와 TCP에 대해 간단히 살펴보았다. 이번에는 HTTP와 HTTPS의 연결과정을 비교하면서 정리한다. TLS가 어떻게 맺어지는 지도 지난 번에 정리한 적이 있고 더 자세한 것은 링크를 참고하면 될 것 같다. 우선 Network Protocol stack을 살펴보자. 우측이 HTTPS에 대한 것인데 TCP와 HTTP layer 사이에 TLS가 있음을 볼 수 있다. HTTPS는 HTTP over Secure socket layer의 약자로, 말과 그림대로 secure socket layer 위에 http가 성립된다고 이해하면 된다. 그렇다면 HTTP와 HTTPS의 연결과정을 비교하여 살펴보자. 왼쪽은 HTTP, 오른쪽은 HTTPS 과정을 나타낸다. HTTPS는 과정 2 TLS han..

Networks/HTTP 2020.09.18

HTTP의 TCP 연결 과정

network protocol 스택에서 TCP는 transport layer 반면, HTTP는 application layer이다. HTTP는 TCP 계층 상위에 존재하고, HTTP와 TCP는 인접해서 정해진 인터페이스로만 메시지를 주고 받는다. 이것은 HTTP와 TCP는 분리되어 있고, HTTP를 통해 클라이언트와 서버간에 메시지를 주고 받기 위해서는 우선 TCP가 확보되어야 함을 뜻한다. 그래서 웹 애플리케이션을 만들 때 어느 정도는 TCP를 이해하고 있어여 한다고 생각한다. 특히, TCP 연결 과정은 명확히 알고 있어야 한다고 본다. 고가용성(HA) 웹 애플리케이션을 만들기 위해서 말이다. 클라이언트와 서버간 HTTP를 통해 메시지를 주고 받기 위해 우선 TCP 연결이 확보되어야 하고, 메시지를 주..

Networks/HTTP 2020.09.18

TypeScript class를 JavaScript ES5, ES6 code로 변환하면서

서론 TypeScript code는 실행되기 위해 JavaScript code로 필수적으로 변환하는 과정(transpile)이 필요하다. TypeScript는 NodeJS에서 실행할 수 있는 언어가 아니라 JavaScript에 정적 type을 사용할 수 있도록 한 언어이기 때문이다. 이러한 이유로 개인적으로 TypeScript code가 JavaScript code로 어떻게 변환되는지 어느 정도는 이해하는 것이 필요하다고 생각한다. 나는 주로 TypeScript로 백엔드 개발을 하기 때문에 NodeJS를 실행시키는데 JavaScript의 버전 호환성에 크게 민감하지 않지만, 프론트엔드 개발을 한다면 이 부분은 매우 중요할 것이다. 그래서 가끔은 TypeScript Code가 JavaScript Code로..

TLS Certificates

Introduce 쿠버네티스 공부를 하다가 PKI라는 것을 접하게 됐다. 쿠버네티스는 서로서로 안전하게 통신하기 위해 PKI 구조를 사용한다. PKI란 Public Key Infrastructure의 약자로 CA, Client, Server로 구성되어 있고 각각이 public key와 certificate둘을 이용해 데이터를 교환하게 위해 인증과정을 거친다. TLS Certificates가 어떻게 구성되는지 살펴보기 전에 다음의 사전 지식이 요구된다. Prior knowledge Symmetric encryption "대칭 암호화"라고 번역된다. 대표적으로 AES 방식이 있다. Asymmetric encryption 보다 암호화/복호화 속도가 빠르다. key 하나로 암호화/복호화를 하기 때문에 key가 ..

인증&보안 2020.08.20

OAuth 2.0

1. OAuth 2.0 이란? OAuth 2.0 은 authorization을 위한 industry standard 프로토콜로써, resource owner를 대신해 3rd party 애플리케이션이 API를 통해 access 할 수 있게 한다 앱에 로그인 할 때 구글 로그인을 해본 경험이 있을 것이다. 이 때, 사용되는 것이 OAuth 2.0 이다. 앱에 로그인 할 때 앱 대신 구글에 로그인 함으로서, 3rd party 앱에게 access token을 전달하고, 앱은 access token을 통해 구글로부터 나에 대한 정보(email, 이름)등을 가져올 수 있다. OAuth 2.0을 이해하기 위해 role의 정의, 전체적인 flow를 이해하는 것이 중요하다. 이것들에 대해 조금 더 자세히 알아보자. 2...

인증&보안 2020.08.11

AsyncHooks로 context에 DB connection 저장하기

서론 Node 13.X 버전부터 AsyncHooks라는 것이 도입되었다. AsyncHook이란, 쉽게 설명하자면, 실행 context마다 고유한 id를 줘서 callback후에도 callback 전의 context를 알 수 있게 해주는 것이다. 더 자세한 내용은 공식 문서(https://nodejs.org/api/async_hooks.html)에 설명이 잘 되어 있는 편이니 참고하기 바란다. 현재 14.X 버전에서도 experimental이지만, stable이 된다면 production에서도 context 당 db connection을 저장할 때 사용하면 될 것 같다. 아래 설명은 node 14.x 버전에서 진행한 것이다. 설명에 대한 소스코드를 참고하려면 여기를 보면 된다. https://github...

NodeJS 2020.06.14

내가 자주 사용하는 git 명령어

서론 업무 때문에 여러 사람과 함께 git을 사용한지 일 년 정도 된 것 같다. 그 기간 동안 git을 사용하면서 느꼈던 점, 현재 자주 사용하는 커맨드 라인, 앞으로 사용하면 좋을 것 같은 커맨드 라인 등을 남기면서 정리하는 것이 좋을 것 같아 이렇게 쓴다. git은 가볍지만 빠르고 강력하다고 생각한다. 소스코드를 저장하기 위해 git 데이터 크기가 너무 커서 곤란에 빠져본 엔지니어는 거의 없을 것이다. 파일이 달리지지 않으면 새로 저장하지 않고 이전 상태에 대한 링크만 저장하기 때문이다. 조회도 빠른 편인데 이유는 대부분의 명령어가 원격 서버와 통신하지 않고 로컬에서 수행하기 때문이다. 여러 사람이 한 프로젝트를 동시에 병렬적으로 작업할 수 있고 히스토리 조회가 쉽다는 점, 강제로 덮어 쓰지만 않는다..

GIT 2020.05.30

Observer pattern, 옵저버 패턴

Observer Pattern 이란 어떤 객체에서 데이터의 변경이 발생했을 때, 그 객체에 의존하지 않고 데이터의 변경을 통보할 때 사용한다. 그래서 통보 받는 대상은 수평적으로 비교적 쉽게 기능을 확장 될 수 있다. Observer Pattern 적용 아래는 스타크래프트의 테란 Factory가 벌쳐, 탱크 그리고 골리앗을 생산완료 했을 때, 인구수가 늘어나는 것을 보여주는 SupplyViewService와 생산이 완료 됐음을 알려주는 Notification Service에 생산이 완료됐음을 통보해 인구수를 업데이트, 생산된 직후 사용자에게 알림을 하는 것을 구현한 것이다. 보통 보면 observer를 구현하는 객체가 Subject를 구체화한 클래스의 객체를 가져아 하는 것 같은데 생략하고 notify할..

Design Pattern 2020.05.18
반응형