본문 바로가기

분류 전체보기

(84)
Rust Closure 클로저는 바깥쪽 함수에 속한 데이터를 사용할 수 있다. 이것을 변수 캡처라고 말한다. 클로저를 사용할때는 ||기호를 붙인다. ||기호안에는 쓰고싶은 단어를 자유롭게 넣을수 있다 예를들어 |city|, |monster| 이렇게 eg) 1. City 스트럭트에 있는 변수 monster_attacks_risk: f64타입을 외부에서 사용하고 싶다 struct City { name: String, population: i64, country: String, monster_attacks_risk: f64, } struct Preference { acceptable_monster_risk: f64, } 2. fn타입은 함수만 받을 수 있는데 Fn트레이드를 사용하면 외부에서 함수와 클로저를 모두 받을 수 있다. fn..
mongoDB search INDEX 인데스란 전체 데이터 조회할때 속도를 높이는 것을 말한다 인덱스 구조는 B-TREE로 되어있고 지금부터 node js를 사용해 실습을 해보겠다. const MongoClient = require("mongodb").MongoClient; const url = "mongodb+srv://id:password@클러스터정보/test?(데이터베이스이름)retryWrites=true&w=majority"; const client = new MongoClient(url, { useNewUrlParser: true }); const express = require("express"); const app = express(); async function main() { try { await client.connect(..
MongoDB 연산자 모음 $set 연산자 = 도큐먼트의 속성값을 변결할 때 사용 $unset 연산자 = 도큐먼트의 속성값을 삭제할 때 사용 $rename 연산자 = 도큐먼트의 속성의 이름을 변경할 때 사용 $inc 연산자 = 필드의 값을 증가시킬 때 사용 $mut 연산자 = 필드의 값에 곱하기를 할 때 사용 $min 연산자 = 지정한 값과 현잿값 중 작은 값을 선택 $max 연산자 = 지정한 값과 현잿값 중 큰 값을 선택 $currentDate 연산자 = 현재 날짜와 시간을 필드에 업데이트 $addToSet 연산자 = 배열 필드가 아직 없는 경우 해당 필드에 값을 추가 $pop 연산자 = 배열 필드에서 첫 번째 혹은 마지막 값을 삭제 $pull 연산자 = 배열 필드에서 모든 값을 삭제 $push 연산자 = 배열 필드의 끝에 값을..
Node js [mongoose-crud 만들기] 몽고DB자체에는 스키마를 지정하는 기능이 없지만 몽구스 라이브러리를 사용하면 스키마를 지정할 수 있다. 1. 스키마 var mongoose = require("mongoose"); var Schema = mongoose.Schema; // 스키마 객체생성 const personSchema = new Schema({ name: String, age: Number, email: { type: String, required: true }, }); module.exports = mongoose.model("Person", personSchema); 스키마 객체를 생성하고 module.exports로 PersonSchema 스키마객체를 내보낸다. 2. 몽구스 CRUD const express = require("..
Node js mongoDB CRUD const { MongoClient } = require("mongodb"); const uri = "mongodb+srv://:^@/test(데이터베이스이름 test로 지정)?retryWrites =true&w=majority"; // useNewUrlParser: true 옵션은 몽고디비 드라이버 3.0버전이후로 생긴 새로운 URL파서를 사용한다는 옵션 const client = new MongoClient(uri, { useNewUrlParser: true }); async function main() { try { await client.connect(); console.log("MongoDB 접속 성공!!!"); //collection -> 관계형 데이터베이스의 테이블과 동일한 의미 const ..
쿠버네티스 개념 및 실습 개념 1. 쿠버네티스는 여러 컨테이너를 관리하기위한 오케스트레이션 도구이다. 2. 클러스터는 여러대의 서버가 모여 쿠버네티스같은 하나의 논리적 단위를 구성하는것을 의미한다. 클러스터 관리자는 노드라고 하는 각각의 서버를 관리한다. 3. 쿠버네티스 애플리케이션은 컨테이너에서 실행되고 한 컴포넌트를 여러 컨테이너에서 여러번 실행하여 스케일링을 구현( 처리능력)하고 가용성을 확보할수 있는 장점이 있다. 또 쿠버네티스트는 컨테이너 외에도 여러가지 리소스를 관리하는데 대표적인 3가지로는 1.애플리케이션 구성정보를 관리하기 위해 기술한것을 yaml(애플리케이션 매니페스트라고 한다.) 파일로저장할수 있고 2.스토리지제공 그리고 3.민감한 정보를 포함하는것도 안전하게 보관할수 있다. 실습 쿠버네티스는 어떻게 컨테이너를..
Node js 비동기 [promise, async await] 자바스크립트는 싱글스레드라 콜스택이 하나라서 한번에 하나의 작업만 가능하다 그런데 Node js의 비동기를 사용하면 임의의 순서로 또는 동시에 작업을 실행할수 있다. 비동기 중에서 가독성이 좋지 못한 콜백함수를 대체하려고 나온게 promise함수이다 function getResult(user) { return new Promise((resolve, reject) => { resolve(`success register ${user.name}`); }); } resolve(성공) reject(실패) promise의 단점은 프로미스 성공 실패처리 함수를 둘다 사용할 수 있다. 그리고 then()과 catch()함수를 연결하는 체이닝 방식(함수를 연결해서 계속 호출하는 방식)을 사용해서 로직이 길어져서 복잡해질..
러스트 impl 트레이트 반환타입 제네릭타입을 많이 쓰다보면 괄호가 많이 달린 반환 타입을 볼수 있다.use std::iter; use std::vec::IntoIter; fn cyclical_zip(v:Vec, u: Vec) -> iter: Cycle { v.into_iter().chain(u.into_iter()).cycle() } 이럴때 반환타입을 impl Trait으로 리펙토링하면 거기에서 구현하고 있는 트레이드만 지정할 수 있게 된다. use std::fmt::Display; fn print(val: impl Display) { println!("{}", val); } fn main() {} 하지만 단점도 존재하는데 함수에서 반환되는 Circle, Triangle, Rectangle 타입이 제각각일수 있어서 오류가난다. 명심해야..