이제 막 슬픔 없이 십오 초 정도가 지났다
-
팀과제) 우리를 구한 지오서비스이제 막 슬픔 없이 십오 초 정도가 지났다 2022. 11. 25. 11:40
지오서비스 안내 GEOSERVICE-WEB – GIS Developer 소 개 GEOSERVICE-WEB은 지오서비스(지리, 지도, 위치 등과 관련된 서비스)를 웹에서 제공합니다. 지오서비스웹의 목표는 웹에서 누구나 쉽게 지도 기반의 비지니스를 효과적으로 해결하기 위한 서 www.gisdeveloper.co.kr 지오서비스 주소 http://www.geoservice.co.kr:777/ 이슈 1: 수만개의 주소정보를 위경도로 어떻게 변환할까? 지금 진행 중인 프로젝트에서 서비스의 질을 높일 수 있는 중요한 이슈였지만, 다른 기능구현들에 급급하여 디깅하지 못했다. 4만개의 주소정보에 대한 위경도를 어떻게 받아올 수 있을까? 카카오 맵 api 등에서 받아올 수도 있었겠지만, 호출량에 대한 제한이 있고 그 제..
-
팀과제: 시간복잡도 Big O 표기법이제 막 슬픔 없이 십오 초 정도가 지났다 2022. 11. 5. 13:32
https://www.youtube.com/watch?v=0xGJx6qsNCY&list=PLsMufJgu5933ZkBCHS7bQTx0bncjwi4PK&index=5 Big-O표기법 가장 안좋은 입력 worst case input 에 대한 기본 연산횟수를 측정. 알고리즘 수행시간 = 최악의 입력에 대한 기본연산횟수. 기본연산횟수에 대한 자세한 계산방법은 위의 강의영상을 보도록 하자. Big O 표기법은 함수값을 결정하는 최고차항만으로 간단하게 표기한다. 최고차항의 계수(상수)는 생략한다. O(1) O(n^0)를 표시한 것. 예컨대 이런 간단한 함수. function (a) => {return a+1} 기본연산이 항상 1번뿐이다. T(n) = 1 T(n) = O(1) O(n) T1(n) = 2n-1 T2(n..
-
팀과제 : refreshToken의 저장장소와 임시방편으로서의 session memory store이제 막 슬픔 없이 십오 초 정도가 지났다 2022. 10. 30. 19:37
조건1. 리프레시 토큰에 아무런 유저 정보도 들어있지 않다. 기존에 해오던 방식은 이러하다. 리프레시토큰을 DB의 유저 테이블에 넣는다. acess token이 만료된 유저가 refresh token을 제시하면 db를 조회하여 새 acess token을 발급한다. 굳이 그렇게 하는 이유는 다음 코드에 있다. const jwt = require('jsonwebtoken'); const env = require('../config.env'); class Jwt { sign = function(payload) { return jwt.sign(payload, env.JWT_KEY, { algorithm: 'HS256', expiresIn: 60*60*2 }); } verify = function(token) {..
-
팀과제 : MySQL 에 JSON 타입 자료를 넣기. JSON.stringify, JSON.parse이제 막 슬픔 없이 십오 초 정도가 지났다 2022. 10. 29. 18:05
자료를 넣을 모델 'use strict'; const { Model } = require('sequelize'); module.exports = (sequelize, DataTypes) => { class Order extends Model { static associate(models) { this.belongsTo(models.User, { foreignKey: 'userId', // targetKey: 'userId', }); this.belongsTo(models.Store, { foreignKey: 'storeId', // targetKey: 'storeId', }); } } Order.init( { orderId: { allowNull: false, autoIncrement: true, pri..
-
팀과제 : Promise.All이제 막 슬픔 없이 십오 초 정도가 지났다 2022. 10. 29. 17:41
몹시 껄끄러워보이는 코드 프로젝트를 하면서 반복문 안에 비동기 함수를 쓸 경우가 생겼다. findOneOrder = async (orderId) => { const foundOrder = await this.orderRepository.findOneOrder(orderId); console.log(foundOrder.get()); const { records } = foundOrder; console.log("records:", records); const parsedRecords = JSON.parse(records); console.log("parsedRecords:", parsedRecords); const menuList = []; for (let i = 0; i < parsedRecords.le..
-
팀과제 : ORM과 MySQL이제 막 슬픔 없이 십오 초 정도가 지났다 2022. 10. 15. 09:30
ORM (Object Relational Mapper)은 객체와 데이터베이스의 관계를 매핑(Mapping)하는 도구이며, 시퀄라이저는 이 ORM으로서의 라이브러리, 혹은 모듈이다. ORM을 통해 관계형 데이터베이스가 다루는 엔티티 (어떤 사물 혹은 개념의 뭉치. 그냥 SQL 테이블을 생각하면 된다.) 를 객체로 활용할 수 있다. ORM은 객체간 관계를 바탕으로 SQL을 자동생성한다. 이로써 객체 모델과 관계형 모델 간의 불일치를 해소하는 것이다. 이 효용은 그저 SQL 쿼리문을 직접 작성해야 하는 수고를 덜어주는 정도에 그치지 않는다. ORM의 매개로 말미암아 데이터 베이스와 에플리케이션은 "느슨하게 연결된, 테스트에 용이한" 관계를 맺게 된다. 혹은 DBMS(Database Management Syst..
-
개인과제 : 시퀄라이저 exclude이제 막 슬픔 없이 십오 초 정도가 지났다 2022. 10. 11. 16:24
attribute는 배열로 하나씩 불러낼 수도 있고, 그 안에서 exclude를 통해 일종의 부정신학을 할 수도 있다. //좋아요 게시글 조회 : 로그인 필요 router.get("/",authMiddleware, async (req, res) => { const {user} = res.locals; console.log(user.userId) // 1 (userId 숫자) try { const likeList = await Likes.findAll({ where: {userId : user.userId}, order: [['likes', 'DESC']], attributes: {exclude: ["createdAt", "updatedAt"]}, //attribute[]로 하나하나 배열 안에 열거해도 된..
-
개인과제 : 시퀄라이저 include이제 막 슬픔 없이 십오 초 정도가 지났다 2022. 10. 11. 16:06
include:[모델명] associate 되어 있는 모델을 따라 모든 정보가 다 나온다. const express = require("express"); const authMiddleware = require("../middlewares/auth-middleware"); const { Users } = require("../models"); const { Posts } = require("../models"); const router = express.Router(); //...생략 //게시글 상세 조회 : 토큰필요 없음. router.get("/:postId", async (req, res) => { try { const postNum = req.params.postId; if (!postNum) {..