분류 전체보기
-
CDN에 관하여Programming/etc. 2022. 3. 18. 23:04
기업 면접을 진행하던 도중 CDN의 동작 원리에 대한 질문을 받게되었는데, 막상 동작 원리는 생각해 본 적이 없었다는 것을 깨닫게 되었고, 공부 한 뒤 기록을 남긴다. 우선 CDN은 Content Delivery Network의 약자이며, 사용자에게 콘텐츠를 전송하는 기술이다. 정통(精通)적인 의미에서의 원리는 전세계에 설치된 서버를 이용해서 웹 페이지, 비디오, 이미지 등의 콘텐츠를 프록시 서버에 캐싱해둔뒤 이러한 유저가 요청하면 가장 가까운 곳에 있는 서버에서 캐싱되어 있던 데이터를 전송하는 것이라고 할 수 있다. 이러한 CDN의 장점으로는 원리만 보아도 파악할 수 있듯이 1.요청에 대한 빠른 응답(성능) 2.데이터 제공의 안정성(가용성) 3.트래픽의 감소로 서버 비용 절감 4.악의적인 공격 방어(보..
-
(Mac)M1 맥북 에어 디스플레이링크 Adapter 후기 & 버그 픽스etc. 2022. 3. 14. 17:20
현재 사용 중인 장비가 맥북 에어 M1 램 16GB + LG 4K 32인치 모니터인데 자꾸 직장에서 사용하던 셋업인 피봇 모니터가 아쉬워서 당근마켓을 살펴보던 도중 우연찮게도 직장에서 사용하던 녀석인 Dell p2417h 모델 18년 생산분을 판매 중 이길래 곧바로 업어왔습니다. 하지만 M1 프로세서는 외장 디스플레이를 한대 밖에 연결 할 수 없는 문제가 있었지만, 언제나 늘 그래왔듯이 답을 찾는 분들이 계셔서 해결 방안을 알 수 있었는데, 대략 외장 디스플레이를 USB 어댑터 내부의 디스플레이링크 칩이 가상의 모니터를 녹화하여 전송하면 이를 화면에 실제 모니터 처럼 뿌려주는 개념 입니다. 그렇기 때문에 DRM이 걸린 OTT등의 재생은 그저 블랙스크린이 출력되는 등 제한 사항이 존재하죠. 원래는 Disp..
-
Node Stream Read,Writable (대용량 파일 읽기-2-)Programming/NodeJs 2022. 3. 13. 10:30
지난 시간에 이어서 작성하는 글이다. Node에는 그냥 Stream 뿐만아니라 Readable, Writable Stream이라고하는 Node Ver0.10 부터 도입된 새로운 스트림 인터페이스가 존재한다. 해당 함수는 기존 data에 기반한 스트림이 가지는 읽을 타이밍과 한번에 얼마나 읽어들일 것인지에 대한 제어가 불가했다는 점을 개선한 기능이다. Readable 스트림은 대표적으로 데이터를 읽어들이기 위한 함수를 제공하는데, read(size) 함수라고 한다. 매개변수에서 추측 가능하듯 이는 읽어 들일 크기를 의미하며, 스트림에서 한번에 몇바이트를 읽을지 크기를 제공하는 함수이다. 이러한 편리한 함수들이 존재하는데 그 종류를 몇개만 나열해보자면, read([size]): 스트림에서 String, Bu..
-
Node Stream (대용량 파일 읽기)Programming/NodeJs 2022. 3. 3. 23:39
우연찮게 개발 직군 테크 인터뷰 도중 받은 질문에 대해 궁금증이 생겨서 찾아보게 되었다. 그동안 용량이 고만고만한 작은 파일들은 읽고 쓰기를 많이 해보았지만 아주 대용량인 파일을 어떻게 처리하겠느냐에 대한 질문을 막상 받자 드는 생각은 파일을 쪼개야하지 않을까 였는데, 구글링 해보니 5분만에 어찌해야하는지 알 수 있었기 때문에 블로그에도 정리를 해본다. 우선 기존의 Nodejs를 활용한 파일 읽어오기 방식은 파일 시스템을 이용하여 const fs = require('fs'); fs.readFile('example'(data,err) => {}); 대략 이런식으로 파일 자체를 읽어 오는 방식이였다면, 새로이 알게된 것은 바로 Stream 함수이다. 이를 활용한다면 바로 const fs = require('..
-
(mac)node 버전 관리하기.Programming/NodeJs 2022. 2. 11. 23:22
너무 시대를 앞서간 것일까 개발을 진행하는데 관련 패키지가 사용 중인 노드 버전에서 지원하지 않는다 하여 다운그레이드를 진행하게 되었다. 터미널을 오픈하여 node -v를 통하여 현재 노드 버전을 확인하고 brew search node를 통하여 현재 사용 가능한 노드 버전을 확인한다. 사용 중이던 노드의 버전을 brew unlink node를 통하여 해제하고 새로 사용할 노드를 brew install node@(희망 vesion 입력)하여 설치한다. 이후 brew link node@(희망 version 입력)하여 연결 하면 끝난다. could not symlink 어쩌고 하는 에러가 발생한다면 sudo chmod 776 /usr/local/lib를 입력한 다음 brew link --overwrite no..
-
Closure에 대하여Programming/javascript 2022. 2. 10. 21:13
앞서 작성한 Execution Context에 나온 개념을 이해하였다면 해당 개념의 예중 하나인 Closure(이하 클로저)에 대하여 알아보자. 클로저란, 함수와 함수가 선언된 어휘적인 환경(Lexical Environment)의 조합이라고 보면 된다. 여기서 필요한 개념은 JS가 변수의 Scope를 어떻게 지정하는지를 알아야하는데 Lexical Environment인 Lexical Scoping에 대하여 알아본다. 우선, 어휘적 범위 지정인 렉시컬 스코핑은 한 함수의 내부에 다시 선언된 함수의 케이스를 생각하면 쉽다. function human(){ // let elem = "test"; function name(){ // console.log(elem); }; name(); }; human(); 과 ..
-
Execution Context에 대하여Programming/javascript 2022. 2. 10. 21:10
실행 문맥(EC; Execution Context)는 JS에서 중요한 개념 원리 중 하나로, hoisting, this, scope, closure와 관련된 근본적인 개념이다. JS의 실행과 흐름 그리고 코드에 대한 정보가 EC를 통하여 관리되기 때문에 이를 이해하는 것이 몹시 중요하다고 할 수 있다. 우선, EC는 자바스크립트 엔진(인터프리터)이 로직으로 짜여진 코드의 함수와 변수, scope와 this 등 정보가 필요한데 이러한 것들이 실행되는 위치를 설명한다는 의미에서 Execution Context라고 한다. JS의 엔진은 EC를 객체로써 관리하며 코드를 EC 객체 내에서 실행 시킨다. •Call Stack이란, 실행 스택(execution stack), 제어 스택(control stack), 런..
-
CI/CD에 대한 이해Programming/etc. 2022. 2. 10. 21:09
CI / CD란, 지속적인 통합 및 배포는 신속하고 지속적인 소프트웨어 제공을 통한 고객 만족이라는 애자일 선언문(Agile Manifesto)의 12가지 원칙 중 첫번째 원칙이자 DevOps의 중요한 요소이기도 하다. 보통 DevOps에서 사용 되는 CI/CD의 경우 Monolithic Architecture(하나의 단일 시스템 구조) 보다 MSA(Micro Service Architecture, 모듈 느낌의 작은 시스템이 상호작용(API)하여 하나의 거대한 시스템을 이루는 구조)에 더 적합한 방식이라고 할 수 있는데, 구성된 마이크로 서비스 아키텍처에 API로 소프트웨어를 연결 하는 경우가 많다. 여기서 CI(Continuous Intergration; 지속적인 통합)은 애플리케이션의 코드가 변경 혹..