Programming
-
[백준]2884번 알람시계 with Node.jsProgramming/Algorithm 2022. 3. 31. 23:16
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split(" "); // const input = require('fs').readFileSync('./testInput.txt').toString().trim().split(" "); function solution(H, M) { // let hour = Number(H); let minute = Number(M)-45; if(0 > minute){ //45를 뺀 값이 음수이면 시간을 빼고, 이때 시간이 음수가되면 24를 더해준다, 분 또한 음수면 60을 더해준다. hour--; if(hour < 0)hour += 24; minute += 60; console.log(ho..
-
Garbage Collector, Garbage Collection에 대하여Programming/etc. 2022. 3. 29. 23:20
가비지 콜렉터를 통하여 수집된 가비지 컬렉션은 스택 메모리 영역의 원시타입과 힙 메모리 영역의 참조타입 간의 차이를 고려하여 레퍼런스 카운팅, 메뉴얼 기법인 타임 베이스 혹은 이벤트 베이스 방식으로 수집되어 메모리에서 해제되게 된다. Garbage Collector: 메모리의 힙 영역에 할당 된 더 이상 사용되지 않는 객체를 제거하는 역할 Garbage Collection: 더 이상 필요없는 오브젝트, 참조하지 않는 오브젝트의 경우 가비지라 부르며, 수집이 가능하다. •래퍼런스 카운터를 이용하여 참조하는 오브젝트의 개수가 0이되면 수집한다. •순환 참조 되는 변수들은 메모리에서 해제가 되지 않으니(메모리 누수,릭) 특정 timeline(시간대) 안에서 참조가 안된 변수는 해제하는 방식도 있다. •Manu..
-
Twelve-Factor(트웰브 팩터) 방법론Programming/etc. 2022. 3. 28. 22:10
트웰브 팩터(Twelve-Factor App,방법론) 아래의 특징을 가진 SaaS 앱을 만들기 위한 방법론 1.설정 자동화를 위한 절차(declarative)를 체계화하여 새로운 개발자가 프로젝트에 드는 시간과 비용을 최소화한다. 2.OS에 따라 달라지는 부분을 명확히하고, 실행 환경 사이의 이식성을 극대화한다. 3.최근 등장한 클라우드 플랫폼 배포에 적합하고, 서버와 시스템의 관리가 필요없게 된다. 4.개발 환경과 운영 환경의 차이를 최소화하고 민첩성을 극대화하기 위해 지속적인 배포가 가능하다. 5.툴, 아키텍처, 개발 방식을 크게 바꾸지 않고 확장(scale up)을 할 수 있다. 트웰브 팩터 방법론은 어떤 프로그래밍 언어로 작성된 앱에도 적용 할 수 있고 백엔드 서비스(데이터베이스, 큐, 메모리 캐..
-
[백준]1003번 피보나치 함수 with Node.jsProgramming/Algorithm 2022. 3. 19. 17:05
//피보나치함수 // const input = require('fs').readFileSync('/dev/stdin').toString().trim().split("\n"); const input=[8,0,1,2,3,4,5,6,22];//첫번째 값은 테스트 케이스의 개수 T const T = input.shift(); for (let i = 0; i < T; i++) { //배열 맨 앞의 값을 가져와 그 크기 만큼 반복 //최소값은 0을 넣었을 때 0이 한번 나오기 때문에 디폴트 1로 세팅 let one = 0, zero = 1; for (let j = 1; j
-
CDN에 관하여Programming/etc. 2022. 3. 18. 23:04
기업 면접을 진행하던 도중 CDN의 동작 원리에 대한 질문을 받게되었는데, 막상 동작 원리는 생각해 본 적이 없었다는 것을 깨닫게 되었고, 공부 한 뒤 기록을 남긴다. 우선 CDN은 Content Delivery Network의 약자이며, 사용자에게 콘텐츠를 전송하는 기술이다. 정통(精通)적인 의미에서의 원리는 전세계에 설치된 서버를 이용해서 웹 페이지, 비디오, 이미지 등의 콘텐츠를 프록시 서버에 캐싱해둔뒤 이러한 유저가 요청하면 가장 가까운 곳에 있는 서버에서 캐싱되어 있던 데이터를 전송하는 것이라고 할 수 있다. 이러한 CDN의 장점으로는 원리만 보아도 파악할 수 있듯이 1.요청에 대한 빠른 응답(성능) 2.데이터 제공의 안정성(가용성) 3.트래픽의 감소로 서버 비용 절감 4.악의적인 공격 방어(보..
-
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..