본문 바로가기

분류 전체보기

(32)
Typescript - Generic Ts 를 공부하면서 느낀 점으로는 굉장히 '엄격'하다 였다. 그로인해 메서드를 만들어줄때도 타입을 일일히 지정을 해주고, 반환 값에 대한 타입도 명시해주는 일을 하다보니 무언가 비효율 적이란 생각도 들게 되었었다. 나는 특정 데이터를 받아 Null 값을 체크하는 메서드를 만들고 싶었다. 그럼 그 값이 string 일때, number 일때, boolean 일때 메서드를 일일히 다 만들어 줘야 하는걸까? 아니면 💩 과도 같은 any 타입을 지정해서 처리를 하면 될까? 이때 나온 해결책이 바로 Generic 이다. 타입 스크립트 특유의 엄격함을 유연하게 관리하게 해줄 녀석이다. function checkNullString( data : string ) : string { if ( data === undefin..
2023 - 07 - 05 TIL 🔸 Node.js 현재 개인 과제에 대한 ERD이다. 이중 Post를 보게되면 likewho 라는 필드가 존재한다. 이 필드는 배열 형태의 텍스트를 저장해두는 필드로 지정을 해둔 상태인데, 팀 과제 발표 당시 튜터님의 질문에 대한 답을 적어보려 한다. ❗️ 좋아요를 누르려는 사람이 동시다발적으로 발생할 경우 어떻게 해결을 할것인가? 👉 DB에서 ' 공유락 ' 과 ' 배타락 ' 에 대해서 먼저 알아야할 필요가 있다. 공유락은 SELECT 구문에서 ' FOR SHARE ' 을 붙임으로서 사용할 수 있다. 데이터에 한해 LOCK을 걸어주지만 읽는것에 한해서는 가능하게끔 해주는 것이다. 배타락은 ' FOR UPDATE ' 를 붙이는데, 이것의 경우 테이블 전체가 LOCK이 걸리기 때문에 특정 사용자가 배타락을 ..
2023 - 07 - 04 TIL Node.js 를 사용하며 정말 예상치도 못한 부분에서 헤매었다. 그것은 바로 " 순환참조 " 때문인데, 하나의 예시를 들어 게시판을 생각해보자 게시판의 구조를 위해 필요한 3가지 ( Post , Comment , User ) 를 있다 가정해보고, 각각의 연관관계를 생각해 보았을때 User는 여러개의 Post, 여러개의 Comment를 작성할 수 있고, Post는 여러개의 Comment를 갖고 있을 수 있다. 나는 Sequelize 라는 ORM 을 사용했는데, 시퀄라이즈 메서드 중에 hasMany 와 belongsTo 라는 메서드를 동시에 사용할 경우 발생할 수 있다. User.js 에서 hasMany 를 통해 Post, Comment 를 각각 연결 해주고, Post 와 Comment 에서도 belong..
2023-06-20 TIL 🔸 mongoose mongoose의 메서드들 중에 연결된 DB의 내용을 연계해서 불러와 보여주는 'populate' 를 다루려한다. 1. populate const post = new mongoose.Schema({ userId:{ type: mongoose.Schema.Types.ObjectId, required: true, ref:'user' }, nickname:{ type: String, required: true }, title:{ type: String, required: true }, password:{ type: String, required: true }, content:{ type:String } },{versionKey:false, timestamps:{createdAt:true,u..
2023-06-19 TIL 🔸 쿠키 & 세션 & JWT 👉 기본적으로 위 3가지는 클라이언트와 서버간의 소통에 있어서 인증을 하기위한 수단이라고 볼수있다. 우리는 현재 RESTful한 웹을 만들기 위해 노력을 하고있다. RESTful 중 Stateless가 중요 포인트이다. 각각 요청은 개별적인 상태로 서로의 요청에 대해 독립적이기 때문에 우리는 매번 인증을 해줘야 하는 번거로움이 존재하게 되는것이다. 그때 사용되어지는 인증수단이 무엇인가에 대해서 알아볼 필요가 있다. 위 인증수단 3가지는 만료시기를 정해줄 수 있고 그에따른 활용성이 존재한다. 그럼 각각의 특징이 무엇인지 알아보자. 쿠키 🔥 쿠키는 클라이언트 로컬에 저장되어 관리되어지는 것. 쿠키 최대 크기 지정해둔 시간 초과 혹은 클라이언트의 로그아웃 서버 저장소를 활용하기 때..
2023-06-13 TIL 🔸 Node.js 1. req.params vs req.query HTTP GET 요청으로 특정 데이터를 받아오는 요청이 있다고 가정을 해보자 // 1번 예시 app.get('/posts/:post-id',(req,res)=>{ console.log(req.params); }); // 2번 예시 요청 URL = http://www.yhjs1211.com/posts?post-id=1211 app.get('/posts',(req,res)=>{ console.log(req.query); }); 2. Schema & Model MongoDB 의 특성을 생각해보자. noSQL의 특성상 정형화 되어있지 않은 데이터들을 마구마구 집어넣을수 있다. 양날의 검과 같은 부분인데, 일단 알아야 할 포인트는 '데이터의 일관성..
2023-06-06 TIL 1. 오류 발생 아래 코드를 먼저 보자. const param = new URLSearchParams(location.search); const id = param.get('id'); getMovie(id); const getMovie = async(id)=>{ const movie = await fetch(`https://api.themoviedb.org/3/movie/${id}?api_key=${apiKey}&language=ko`,{method:'GET'}) .then(response=>response.json()) .catch(console.log); showContent(movie) } 위 코드를 보면 '스코프 오류' 에 대해서 알 수가 있다. getMovie 를 함수로 선언해주기 이전에 먼저 ..
2023-05-26 TIL JavaScript 🔸 async / await function fetchEgg(chicken) { return Promise.resolve(`${chicken} => 🥚`); } function fryEgg(egg) { return Promise.resolve(`${egg} => 🍳`); } function getChicken() { return Promise.reject(new Error('can not find 🐓')); } // Promise getChicken() .catch(() => '🐔') .then((chicken) => fetchEgg(chicken)) .then((egg) => fryEgg(egg)) .then((meal) => console.log(meal)) .catch((erro..