728x90
반응형

오늘 배운 것

알고리즘 풀이

스파르타코딩클럽 심화 2주차완료

 

쿠키 = 그냥 옮기는 시스템 매개체

토큰 = 서버가 기억하는 이상하게 생긴 텍스트 (ID카드처럼 서버에게 보여줘야 함)

JWT = 정보를 갖고 있는 토큰. DB없이 검증가능!

세션 = 요청받으면 서버에서 DB에 있는 데이터를 전달

유저 인증을 위해서는 JWT 혹은 세션을 사용할 수 있음

오늘 느낀 점

예전에 몽고디비 연결시

localhost 가 안되고 127.0.0.1 로 해야 됬었는데

이번에도 동일한 현상이 발생했다.

 

같은 실수를 또 반복하고 몇시간만에 겨우

연결했을때 허무함이란ㅠㅠ 다시 실수하지 않도록 각인된 것 같다.

728x90
반응형
728x90
반응형

참고영상 https://www.youtube.com/watch?v=tosLBcAX1vk 

 

쿠키 = 그냥 옮기는 시스템 매개체

토큰 = 서버가 기억하는 이상하게 생긴 텍스트 (ID카드처럼 서버에게 보여줘야 함)

JWT = 정보를 갖고 있는 토큰. DB없이 검증가능!

세션 = 요청받으면 서버에서 DB에 있는 데이터를 전달

 

유저 인증을 위해서는 JWT 혹은 세션을 사용할 수 있음

 

 

쿠키와 토큰은 모두 클라이언트와 서버 간에 정보를 저장하고 전송하는 데 사용할 수 있는 방법입니다. 그러나 둘 사이에는 몇 가지 주요 차이점이 있습니다.

  1. 저장 위치: 쿠키는 고객의 컴퓨터에 저장되고 토큰은 서버에 저장됩니다.
  2. 지속성: 쿠키는 여러 세션에 걸쳐 유지됩니다. 즉, 웹 사이트를 여러 번 방문하는 동안 유지해야 하는 정보를 저장하는 데 사용할 수 있습니다. 반면에 토큰은 일반적으로 수명이 짧고 단일 세션에만 유효합니다.
  3. 보안: 쿠키는 일반 텍스트로 저장되며 고객의 컴퓨터에 액세스할 수 있는 모든 사람이 액세스할 수 있습니다. 반면에 토큰은 일반적으로 암호화된 형태로 저장되며 더 안전합니다.
  4. 사용 사례: 쿠키는 일반적으로 사용자 기본 설정을 저장하고 웹 사이트에서 사용자 활동을 추적하는 데 사용됩니다. 토큰은 일반적으로 사용자를 인증하고 보호된 리소스에 대한 액세스 권한을 부여하는 데 사용됩니다.

요약하면 쿠키와 토큰은 모두 클라이언트와 서버 간에 정보를 저장하고 전송하는 방법입니다. 쿠키는 영구 데이터를 저장하는 데 사용되는 반면 토큰은 보안 인증 및 액세스 제어에 사용됩니다.

728x90
반응형
728x90
반응형

1) 쿠키 & 세션

 

쿠키 : 브라우저가 서버로부터 응답으로 Set-Cookie 헤더를 받은 경우

해당 데이터를 저장한 뒤 모든 요청에 포함하여 보냅니다.

 

세션 : 쿠키를 기반으로 구성된 기술입니다. 단, 클라이언트가 마음대로 데이터를 확인 할 수 있던 쿠키와는 다르게 세션은 데이터를 서버에만 저장하기 때문에 보안이 좋으나, 반대로 사용자가 많은 경우 서버에 저장해야 할 데이터가 많아져서 서버 컴퓨터가 감당하지 못하는 문제가 생기기 쉽습니다.

 

2) express - 미들웨어의 개념

express에서의 미들웨어는 어떠한 요청에 대해서 공통적으로 처리하는 로직을 모아둔 코드 덩어리입니다.

  • express.static(path): path에 입력한 경로에 있는 파일을 그대로 서빙해주는 기능을 수행하는 미들웨어입니다.
                                     router의 기능을 일부 가지고 있는것이죠!
  • express.json: HTTP Request에서 Body에 담긴 JSON 형식의 데이터를
                           express 서버에서 사용할 수 있게 해주는 미들웨어예요!
  • express.urlencoded: 이것도 HTTP Request에서 Body에 담긴 Form(URL Encoded) 형식의 데이터를
                                      express 서버에서 사용할 수 있게 해주는 미들웨어입니다

3) ES6 - 구조 분해 할당(Destructuring assignment) 문법

const { email, password } = req.body;

 

4) mongoose 사용법

https://mongoosejs.com/docs/guide.html 공식문서 참조

 

5) REST API

REST 아키텍쳐를 따라 구현된 API를 REST API라고 부릅니다.

간단히 말하면 원래 있던 방법보다 더 쉽고 사람이 읽기 편한 방식으로 원칙을 세워놨고,

개발자들의 생산성과 상호작용을 증진시키는것에 목적이 있습니다.

 

 

 

 

728x90
반응형
728x90
반응형

상황

예전에도 몽고디비가 연결안되서 고생했었는데, 그때 해결했던 방법이

localhost 부분을 127.0.0.1 로 변경해주어야 한다.

이번에도 같은 실수를 반복하고 고생했기에

다시는 똑같은 실수를 반복하지 말자는 의미에서 실수모음 카테고리를 생성했다!

 

 

이전 코드

mongoose.connect("mongodb://localhost:27017/todo-demo")

수정 코드

mongoose.connect("mongodb://127.0.0.1:27017/todo-demo")

 

이해를 돕기 위한 전체 코드

const express = require("express");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
const Todo = require("./models/todo");

const MongoConnect = async () => {
  await mongoose.connect("mongodb://127.0.0.1:27017/todo-demo", 
  {
    useNewUrlParser: true,
    useUnifiedTopology: true,
  })
      .then(() => console.log('MongoDB Connected...'))
      .catch(err => console.log(err));
  }
  MongoConnect()

const db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error:"));

const app = express();
const router = express.Router();

router.get("/", (req, res) => {
  res.send("Hi!");
});

// 입력
router.post("/todos", async (req, res ) => {
  const { value } = req.body;
  const maxOrderTodo = await Todo.findOne().sort("-order").exec();
  let order = 1;
  if (maxOrderTodo) {
    order = maxOrderTodo.order + 1;
  }
  const todo = new Todo({ value, order});
  await todo.save();
  res.send({ todo });
});

// 출력
router.get("/todos", async (req, res) => {
  const todos = await Todo.find().sort("-order").exec();

  res.send({ todos });
})

app.use("/api", bodyParser.json(), router);
app.use(express.static("./assets"));

app.listen(8080, () => {
  console.log("서버가 켜졌어요!");
});

 

728x90
반응형
728x90
반응형

function solution(numbers) {
    numbers.sort((a,b)=>b-a);
    return numbers[0]*numbers[1];
}

 

위를 이해하기 위해선 다음 예시 확인

var myArray = [5,3,4,1,2];
myArray.sort(function (a, b) { return a - b });
console.log(myArray);
// 결과: [1, 2, 3, 4, 5]
myArray.sort(function (a, b) { return b - a });
console.log(myArray);
// 결과: [5, 4, 3, 2, 1]

return 값 a-b는 배열을 오름차순, b-a는 내림차순으로 정렬한다.

그냥 .sort()만으로는 정렬이 안 되는 걸까? 안된다. 그 이유는 자바스크립트의 sort 함수는 기본적으로 배열을 문자열(String) 타입으로 간주하고 비교하기 때문이다. 문자는 잘 작동하나 숫자는 스트링으로 변경되면서 문제를 야기한다.

728x90
반응형
728x90
반응형

오늘 배운 것

알고리즘 풀이

스파르타코딩클럽 입문 복습

스파르타코딩클럽 심화 시작

오늘 느낀 점

vs코드를 쓰다가 서버를 실행했는데 실행이 안되길래

몇십분동안 왜 안될까? 하면서 문제를 찾아다녔는데

app.js 파일이 이상한 폴더안에 들어간 상태여서 실행이 안됬다ㅠㅠ

그래서 강사님이 쓰는 것처럼 명확하게 보이는 라이브러리를 설치했더니 보기 깔끔해졌다.

 

입문 복습끝내고 심화시작하니 초반부분이긴 하지만

이해를 하면서 따라가고 있다. 이제 조금은 마음이 편-안!

728x90
반응형

'일기 > TIL' 카테고리의 다른 글

TIL: Today I Learned 29일차 [Docker 설치오류]  (0) 2022.12.22
TIL: Today I Learned 28일차  (0) 2022.12.21
TIL: Today I Learned 26일차  (0) 2022.12.19
TIL: Today I Learned 25일차  (0) 2022.12.16
TIL: Today I Learned 23일차  (0) 2022.12.14
728x90
반응형

Validation이란 무엇인가?

Validation은 말 그대로 어떤것을 검증한다고 보면 됩니다.

 

검증을 위한 라이브러리 추천 joi (https://joi.dev/api/)

//예제코드
const Joi = require('joi');

const schema = Joi.object({
    username: Joi.string()
        .alphanum()
        .min(3)
        .max(30)
        .required(),

    password: Joi.string()
        .pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')),

    repeat_password: Joi.ref('password'),

    access_token: [
        Joi.string(),
        Joi.number()
    ],

    birth_year: Joi.number()
        .integer()
        .min(1900)
        .max(2013),

    email: Joi.string()
        .email({ minDomainSegments: 2, tlds: { allow: ['com', 'net'] } })
})
    .with('username', 'birth_year')
    .xor('password', 'access_token')
    .with('password', 'repeat_password');


schema.validate({ username: 'abc', birth_year: 1994 });
// -> { value: { username: 'abc', birth_year: 1994 } }

schema.validate({});
// -> { value: {}, error: '"username" is required' }

// Also -

try {
    const value = await schema.validateAsync({ username: 'abc', birth_year: 1994 });
}
catch (err) { }
728x90
반응형
728x90
반응형

function solution(numbers) {
    var answer = [];
    for(i=0; i<numbers.length; i++){
        answer[i] = numbers[i]*2
    }
    return answer;
}
728x90
반응형

+ Recent posts