본문 바로가기

반응형

전체 글

(441)
TypeScript 타입스크립트 컴파일 과정 일반 프로그램이 실행되는 과정 1. 프로그래머가 다수의 텍스트 파일을 작성한다. 2. "compiler"라는 특별한 프로그램이 텍스트 파일을 파싱하여 추상 문법 트리 (AST, Abstract Syntax Tree) 자료구조로 변환시킨다. * AST는 공백, 주석, 탭 or 공백 등의 결과를 완전히 무시한다. 3. 컴파일러는 AST를 바이트코드 (bytecode)라는 하위 수준의 표현으로 변환한다. 4. 바이트코드가 만들어졌으면 런타임이라는 다른 프로그램에 바이트코드를 입력해 평가하고 결과를 얻을 수 있다. => 컴파일러가 소스 코드를 파싱해 AST로 만들고 다시 AST를 바이트코드로 변환한 것을 런타임이 평가하도록 지시하는 것 타입스크립트가 실행되는 과정 1. 소스 코드 작성 by 프로그래머 2. 타입..
[mac/ homebrew] nvm node 특정 버전으로 다운그레이드 현재 node 를 brew를 통해 이미 다운받은 상태인 경우 * 다운 받은 상태가 아니라면 바로 brew install node@version 을 입력해서 다운ㅇ 1. 현재 노드 버전 확인 node -v 2. 다운 가능한 node 찾기 brew search node -> 여기에 나오는 버전들 중 하나 선택 협업 중이라면 .nvmrc 파일에 적힌 버전으로 설치 3. 원하는 node 버전으로 설치 brew install node@14 or brew install node 14.17.1 --> 처음에 이렇게 했다가 오류가 나옴! 그냥 위에서 보인 그대로 node@14 요런식으로 다운해야함 => brew install v16으로 다시 깔음 @ 4. 기존 버전과의 연결을 끊고 새롭게 다운한 버전 연결시키기 br..
[Mongoose] virtual field만들어서 populate 사용하기 with options 모델 스키마에 virtual 필드를 생성 const MenuCategorySchema: Schema = new Schema( { // MySql 메뉴 카테고리 IDX idx: { type: Number, required: true, unique: true }, // MySql 매장 IDX restaurantIdx: { type: Number }, // 카테고리 명 name: { type: String, required: true }, // 노출 우선순위 priority: { type: Number, required: true }, // 삭제 여부 isDeleted: { type: Boolean, required: true, default: false }, // 카테고리 설명 description: { t..
[TypeScript] interface object 안 objects들 인터페이스, 배열 안 배열의 인터페이스 만들기 오브젝트 안 오브젝트들 인터페이스로 만들기 { name: "test", items: { "a": { id: 1, size: 10 }, "b": { id: 2, size: 34 } } } 위의 items를 인터페이스로 만들 때 [key: key의 type]을 사용한다. 위의 예제를 인터페이스로 작성할 때 아래처럼 작성한다. "a", "b" 는 string이므로 [key: string] 이렇게! export interface Item { id: number; size: number; } export interface Example { name: string; items: { [key: string]: Item }; } [ [ {1:1}, {2:2}, {3:3}, {4:4} ], [ {1:1} ], [ {2:..
[mongoDB] Operations updating... Query and Projection Operators Query Selectors $eq ( = equal ) 같은 value $gt ( = less than or equal) ~보다 작거나 같은 value $ne ( not equal ) ~와 같지 않은 value $nin ( not in an array ) 주어진 배열 요소들 중 하나라도 일치하지 않는 경우 Logical $and 여러 경우를 모두 포함한 경우 $not ~ 가 아닌 ( 해당 조건의 field가 없는 곳까지 모두 반환 ) db.inventory.find( { price: { $not: { $g..
[MongoDB] Replica set이란? A replica set in MongoDB 몽고디비에서 A replica set이란 똑같은 데이터 set을 유지하는 mongod processes의 한 그룹이다. Replica sets은 redundancy(중복)과 high availability(높은 사용성)을 제공하고 모든 production deployments의 기본이 된다.  Redundancy & Data Availability Replication은 redundancy와 data availability를 제공한다. 다른 데이터베이스 서버들의 여러개의 데이터 카피본들로, replication은 하나의 데이터베이스 서버의 손상에 대항할 수 있다. 어떤 경우에는 Replication은 읽기 능력을 향상시켜주기도 한다. clients가 다른 서..
[MongoDB] Mongoose Query 총 정리 updating...      Query()     Query.prototype.$where()      Query.prototype.Symbol.asyncIterator()for/ await/ of loop와 사용되는 asyncIterator 를 반환한다. find() 쿼리문과만 사용된다. 명시적으로 요 매서드를 부를 필요가 없다, 자바스크립트 런타임이 불러 준다. * asyncIterator() An AsyncIterator is an Object that returns a sequence of Promises. Since AsyncIterators are AsyncIterables, you can use for await (const value of iterable) {} to easily loop..
[MongoDB] options - lean, new, upsert MongoDB options 몽고디비 crud 를 하다가 자주 마주친 { lean: true, new: true, upsert: true } 옵션들 자세히 공부해보쟈~~~ 1. lean 디폴트 값으로 MongoDB 쿼리는 Mongoose Document class를 반환한다. 일반 바닐라 자바스크립트 objects 보다 훨씬 무겁다. 몽구스 도큐먼트 클래스는 아주 많은 change tracking 의 internal 상태를 가지고 있기 때문이다. { lean: true } 옵션값을 넣어주게 되면 몽고스에게 POJO (Plain Old JavaScript Object) 를 달라고 말하게 된다. mySQL의 { raw : true } 와 비슷하다. lean() 옵션을 준 return 값의 사이즈는 = 36,..
[DB] MongoDB Index 개념과 설계 전략 인덱스, Index 란? 책의 마지막 쪽에 있는 '인덱스', '찾아보기' 와 비슷하다. 책의 '인덱스'에 적힌 페이지 번호는 해당 데이터의 주소에 비유할 수 있다. DBMS도 사람이 책의 인덱스를 보고 해당 페이지를 찾는 것처럼 데이터를 찾는다. 데이터와 저장된 위치를 키와 값의 쌍 (key-value pair)으로 관리한다. DB의 검색을 신속하게 하기 위해 데이터의 순서를 미리 정해두는 과정이다. 특정 데이터 필드를 인덱스로 지정하여 검색 결과를 빠르게 얻을 수 있다. DBMS에서 인덱스는 데이터의 저장성능을 희생해서 상대적으로 데이터의 읽기 속도를 향상시키는 존재 -> 테이블에 인덱스 하나를 더 추가할지 말지는 데이터의 저장 속도를 얼마나 더 희생할 수 있는지, 읽기(조회) 속도를 얼마나 더 빠르게..
[MongoDB] DAS, NAS, SAN, HDD, SSD, 인덱스란? 저장매체의 종류와 특성 저장매체의 종류와 특성 내장디스크 (Internal Disk) PC 본체에 장착된 디스크, 장착 가능 개수가 적고, 용량도 부족한 경우가 많음 DAS (Direct Attached Storage) 스토리지의 한 종류로써 서버와 직접 연결되는 하드웨어, 서버와 하드웨어를 1:1로 연결, "서버의 외장하드" 와 비슷 내장디스크의 용량 문제 해결을 위해 주로 사용, 독자적으로 사용할 수 없으며 본체에 연결해서 사용 반드시 하나의 본체에만 연결해야하며 동시 공유는 불가 장점 : 확장이 용이하다. (계속 사서 붙이기) 단점 : 계속 확장하다 보면 서버 효율 저하 NAS (Network Attached Storage) 네트워크가 연결된 DAS, 여러 컴퓨터에서 동시 사용 가능, TCP/IP를..
[TEST CODE with mocha, should, sinon] stub mock spy before beforeEach after afterEach mocha - 테스트 주도 개발을 할 수 있는 대표적인 JavaScript 테스트 프레임워크 should.js - mocha에서 사용할 수 있는 assertion모듈 - node.js에서 사용할 수 있는 표현적인, 가독성 높은 단언문(assertion) 라이브러리 - 테스트 프레임워크에 의존적이지 않음 sinon - standalone test spies, stubs and mocks for js - works with any unit testing framework Test doubles ⊃ stubs mocks spies Test doubles ? -> We usually don't want anything external (such as database calls) to influence the o..
macOS 개발 환경 구축 2021.12.08ƒ m1으로 교체 / 개발환경 재구축 0. chrome 설치 1. web storm 다운로드 - email로 계정 로그인 - plugin 설치 * git flow integration - ??? 안나오는데 url타고 들어가서 다운하면 컴퓨터 손상 경고가 뜸 ! -> m1은 아직 지원 안할 수도 (?) * quokka - ??? 라이센스 등록 방법 * upsource integration - ssh 등록 을 어떻게 하는건지 (?) -> git clone은 일단 access token으로 진행함 - ssh 등록 방법 : https://rfriend.tistory.com/603 ssh 생성 및 등록 방법 1. terminal 에서 ssh 키 생성 $ ssh-keygen -t rsa -C "y..
[Git Flow] git flow 사용법 (feat. 생활코딩) git flow vs github-flow 개념 이해 git-flow : 5가지의 Branches 를 이용/운영하는 브랜치 전략 한달 이상의 긴 호흡으로 개발하여 주기적으로 배포 , QA, hotfix 수행할 수 있는 여력이 있는 팀의 경우 적합 github-flow : master 브랜치와 Pull request를 활용한 단순한 브랜치 전략 항상 릴리즈되어야 할 필요가 있는 서비스와 지속적으로 테스트하고 배포하는 팀이라면 github-flow와 같은 간단한 workflow가 적합 Git Flow model Main Branches = long-running branches : they remain in your project during its whole lifetime. 1) Master - 제품으로..
[MongoDB] Node.js express CRUD with mongoDB Node.js, express with mongoDB로 application 만들기 1. vsc 기본 세팅 - MONGODB_CRUD 폴더 > server.js 파일 생성 - 터미널 경로 MONGODB_CRUD에서 npm init npm init - 필요한 packages 다운 npm install express morgan nodemon ejs body-parser dotenv mongoose axios express : morgan : HTTP request logger middleware for node.js (It logs requests.) nodemon : 변경 사항있을 때 자동으로 server on (오직 js 파일 변경 시에만 ! html X ) ejs : 템플릿 엔진 (템플릿을 읽어 엔진..
[MongoDB] 몽고디비란? 기본 개념, 장점 단점 / CRUD MongoDB 출현 배경 알아보기 클라우드, 빅데이터 출현함으로써 이를 효율적으로 처리할 빅데이터 솔루션이 필요해짐 -> NoSQL(Not Only SQL) 의 등장 -> 대량의 데이터를 빠른 속도로 처리가능 (SQL의 부족한 점을 돕는 기능, 완벽하게 대체는 X) -> NoSQL의 종류 중 하나인 document key/value Store 의 대표 케이스가 MongoDB이다. 클라우드 - 클라우드 컴퓨팅 : 인터넷 기반 컴퓨팅 기술, 개인 단말기는 주로 입/출력만 이루어지고 정보 분석 및 처리, 저장, 관리, 유통 등은 클라우드 공간에서 이루어지는 컴퓨팅 시스템 - 인터넷 상의 유틸리티 데이터 서버에 프로그램을 두고 그때 그때 컴퓨터, 휴대폰 등에 불러와서 사용하는 웹 기반 소프트웨어 서비스 클라우드..
NoSQL 이란 ? NoSQL 장점 단점 / 데이터 모델링 기법 정리 NoSQL (Not Only SQL) 이란? - 기존 RDBMS 형태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술을 의미함 - NoSQL(원래 의미: non SQL 또는 non relational) 데이터베이스는 전통적인 관계형 데이터베이스 보다 덜 제한적인 일관성 모델을 이용하는 데이터의 저장 및 검색을 위한 매커니즘을 제공한다. NoSQL 등장 배경 2000년대 인터넷 발전과 함께 SNS 서비스 활성화 -> SNS 서비스 시스템은 전세계 사용자 대상의 서비스로 발전 -> 기존 기업 시스템에서 볼 수 없었던 대규모 데이터 생산 -> 이러한 대규모 데이터들은 기존 기업 데이터에 비해 매우 단순한 형태를 가짐 데이터의 패러다임이 한정된 규모의 복잡성 높은 데이터에서 단순한 대량의 데이터로 넘..
[124일차 복습] C++ 기초 / 백준 1000번, 1330번, 2439번, 2908번, 2164번 코딩테스트 풀어보기 그동안 써온 언어 JS의 node.js나 python은 build / compile 기능이 없다! 보통 node [파일명] / python [파일명] 명령어를 사용해서 실행시켰는데 요건 안에 이미 build를 자동으로 해주어서 ! C++ 로 간단한 기초 공부해보고 build 해서 리눅스에서 명령어 실행해보기 오늘 배운점 cin - 표준 입력 객체 Console Input 의 약자로 " 콘솔 입력"을 뜻한다. cout처럼 객체로 존재하며, C의 scanf()라고 생각하면 된다. C 언어에서 = standard input / output library 표준 입출력 라이브러리 이와 같이 C++에서는 = input / output stream C 언어에서 입출력 담당 : printf(), scanf() C++ ..
HTTP/0.9 HTTP/1.0 HTTP/1.1 HTTP/2 차이 HTTP (HyperText Transfer Protocol Version) TCP 연결 기반 위에서 동작하는 프로토콜 비연결성 프로토콜 - 한 번 연결로 한 번의 요청과 응답만 -> 연결을 끊어버림 1. HTTP/0.9 - in 1991 - 단순한 GET 통신 가능 - 초기 버전에는 '버전 정보가 없었다. (나중에 구분을 위해 0.9라고 불리게됨) - http header가 없어서 HTML 문서만 가능 (다른 유형은 전송 불가) - 상태 or 오류 코드가 없음 - 문제 상황 시 해당 파일 내부에 문제에 대한 설명을 추가하여 보냄 2. HTTP/1.0 - in 1996 - POST, HEAD 추가됨 - 상태코드가 응답 첫 줄에 포함되어 요청에대한 성공 / 실패를 바로 확인할 수 있음 - http head..
[124일차] basic C++ on Linux 코드작성 제외 IDE를 쓰지않고 build & 결과물 보는 것은 LINUX 환경에서 볼 것! node.js / python 파일 실행시킬 때 명령어 node [파일명] python [파일명] => build / compile을 해주지 않는다. C++ build하는 것만 다운받아서 코드를 build할 예정 ! 요 경로에 있는 파일들은 존재하는 것인가......... => 있다! 현재 경로에서 작업할 폴더 생성 mkdir workspace // 폴더 생성 cd workspace // 입 장 mkdir helloworld && cd helloworld // 생성 & 입장 code . // -> 비쥬얼스튜디오코드가 뜸 wow 코드는 vs 에서 작성 ! hello.cpp 파일 생성 메세지가 안뜨면 아래 수동 설치..
[블록체인 이더리움] ERC-20 & ERC-721 / dApp / 스마트 컨트랙트란? ERC 란 ? ERC : Ethereum Request for Comment - 뒤에 붙는 숫자는 리퀘스트의 숫자 Ethereum, 이더리움이란? 이더리움이란 자체 블록체인을 기반으로 다양한 탈중앙화 된 애플리케이션들이 작동할 수 있도록 고안된 하나의 플랫폼 네트워크이다. (플랫폼이자 이더리움 코인도 존재) Dapp은 이더리움 플랫폼 상에서 '스마트 계약'을 이용하여 쉽고 빠르게 토큰을 발행할 수 있다. 이더리움 블록체인에서는 ETH 이더가 사용되고 이더리움 블록체인 상의 Dapp에서는 또 다른 다양한 분야에 적용될 수 있는 각각의 솔루션으로 그에 맞는 토큰을 발행한다. ERC-20 - 2017년 당시 가장 많이 쓰였던 토큰 - ERC-20 토큰은 '스마트 계약'을 통해 생성 - 일반 거래소에서 거래하고..
[123일차] 블록체인 공개키 비밀키 만들기 src > wallet.js 파일 생성 secp256k1 - 암호화 알고리즘 위 암호 알고리즘을 사용하기 위해 package 설치 (경로 : src ) npm i elliptic wallet.js 에 가져오기 & console.log 찍어서 elliptic이 무엇인지 보기 const ecdsa = require('elliptic') console.log(ecdsa) 아래 ec 라는 아이를 사용할 것 ! const ecdsa = require('elliptic') console.log(ecdsa) const ec = ecdsa.ec("secp256k1") console.log(ec) const ecdsa = require('elliptic') const ec = ecdsa.ec("secp256k1") //..
[React Native Expo ERROR] expo start 보안 오류: (:) [], PSSecurityException UnauthorizedAccess expo start 명령어에서 처음 보는 오류 발생 + CategoryInfo : 보안 오류: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess 해결 방법 1. Windows PoweShell 열고 아래 명령어 입력 Set-ExecutionPolicy RemoteSigned ↓↓↓ 이제 잘 된다 !!
CPU vs GPU CPU & GPU 공통점 - 중요한 컴퓨팅 엔진 - 실리콘 기반 마이크로프로세서 - 데이터 처리 => 다른점 : 아키텍처와 만들어진 용도가 다름 CPU, Central Processing Unit (중앙처리장치) - CPU, 중앙처리장치 = 컴퓨터의 뇌 (컴퓨터의 성능에 있어 가장 결정적임, IQ 같은..) - 우리가 명령하는 모든 작업을 처리하고 연산 - 연산 - 제어부 & 레지스터(메모리)로 구성 - CPU는 연산 속도가 빨라 복잡한 명령을 처리하는 용도 - 수백만 개의 트렌지스터로 구축되어 있음 - 현대 컴퓨팅 시스템에 필수적인 요소 - 웹 서핑에서 스프레드 제작에 이르는 프로그램의 실행 속도 결정하는 중요한 역할 - 다양한 워크로드, 특히 대기 시간, 코어당 성능이 중요한 워크로드에 적합 - CP..
[122일차] 블록체인 작업증명 Proof of Work (POW) 오늘 작업증명 공부 예정 ! block.js 을 주로 수정할 예정 -> 블럭 생성할 때 쉽게 생성하지 못하도록 만들기 -> 요청한대로 블록이 바로 생성되는게 아니라 문제를 풀어서 생성하도록 작업증명이란 ? 컴퓨터 연산을 통해 일정한 hash를 찾도록 하는 작업증명(pow)과정을 거치도록 한다. 작업증명을 통해 특정 해시값을 찾기위해 수많은 반복연산을 수행하도록 함으로써 상당한 시간과 비용이 들게 해서 결국 대량 스팸메일을 보낼 수 없도록 하는게 최초 탄생 이유 (이후 비트코인에 적용됨 by 사토시 나카모토) 1. Header 기존 5가지 내용에 + 2 두 가지 추가 - 문제 난이도 설정 - 문제 몇번 풀었는지에 대한 block.js class BlockHeader { constructor(version ..
[121일차] WebSocket ws로 Server 구현 Http 서버 -> 인터페이스 기능을 수행한다 그동안 만든 js 역할 server.js => 인터페이스 기능 (리모콘과 비슷) network.js => 데이터 연결연결 해서 정보 공유, 소통할 수 있는 백앤드 block.js => 나의 블록들을 저장하는 형태 만드는 공간 오랫만에 js 연습 => console.log 찍히는 순서 1 2 45 src2 > network2.js const WebSocket = require('ws') // 내 자신을 websocket server로 만들겠다. function wsInit(){ const server = new WebSocket.Server({port:6005}) // 인자값을 ws로 받겠다. server.on('connection',(ws)=>{ ws.on(..
[120일차] 블록체인 ws WebSocket 서로의 정보를 공유할 수 있도록 만들기 지난 주 금요일 수업 이어서 1. src2 삭제 2. network.js // 20210906 수업 const MessageAction = { // 블록의 마지막 내용 QUERY_LAST:0, // 0 or "0" string도 상관없다! // 모든 블록의 노드 QUERY_ALL:1, // 실질적으로 추가할지 말지 결정하는 msg RESPONSE_BLOCK:2, } // type에 따라 처리 (reducer와 비슷) function initMessageHandler(ws){ ws.on("message",data =>{ const message = JSON.parse(data) switch(data.type){ case MessageAction.QUERY_LAST: ..
[119일차 복습] 블록체인 네트워크 웹소켓 http ws 웹서버 구축 1) Server - Client Server 구축하기 (Node.js / express) 1) 기본 server 구축 블록체인은 탈중앙화이지만 지금 구축하는 웹서버는 중앙 서버가 존재하는 하이브리드형 블록체인 p2p이다. 웹서버를 구축하는 이유 : 블록 가져오기 / peer / 간단한 기록 / 버전 / 중단 기능을 위함 ! p2p에 대한 자세한 포스팅 https://blckchainetc.tistory.com/333 [블록체인] P2P란? Peer-to-Peer Network 비트코인 처음 개발한 사토시 나카모토의 비트코인 논문에 보면 Peer to Peer 를 찾을 수 있다. P2P (Peer-to-Peer network) 란? = 동등 계층간 통신망으로도 불린다. 순수 P@P 파일 전송 네트워크는 ..
[블록체인] P2P란? Peer-to-Peer Network 비트코인 처음 개발한 사토시 나카모토의 비트코인 논문에 보면 Peer to Peer 를 찾을 수 있다. P2P (Peer-to-Peer network) 란? = 동등 계층간 통신망으로도 불린다. 순수 P@P 파일 전송 네트워크는 Client or Server의 역할을 동시에 수행한다. 보통 중앙 서버를 중심으로 통신하는 Client-Server 모델과 다르다. * 일반적인 중앙 서버 시스템 : ex. 인터넷에서 정보 검색하기 위해서는 '검색 웹사이트' = 중간에서 연결해주는 Server 가 필요 우리에게 일반적으로 익숙한 중앙 집중식 관리 시스템을 사용하지 않고 상호 연결된 Node(=peer = 사용자) 들이 서로 간에 자원을 공유할 수 있는 네트워크. 서버없이 동일/관련 프로그램에 접속한 사람들끼리 ..

반응형