TIL 111

23/11/30 TIL __ prisma 에서 테이블 조인하기

프리즈마의 경우 테이블 조인은 어떻게 해야할까? 아래처럼 간단하게 불러올 수 있다. 아래 예시는 1:1 관계의 두 테이블을 불러오는 경우이다. router.get("/users", authMiddleware, async (req, res, next) => { console.log(req.cookies.authorization); const { userId } = req.user; const user = await prisma.users.findFirst({ where: { userId: +userId }, select: { userId: true, email: true, createdAt: true, updatedAt: true, //조인 하는것과 동일. 함께 조회 가능. 이게 바로 셀렉트 조인 문법 U..

TIL 2023.12.01

23/11/29 TIL __ prisma 사용하기

🚍 상황 지난번 orm으로 시퀄라이즈를 사용해 봤는데, 이번에는 타입스크립트에서도 사용 가능한 프리즈마에 대해 알아보았다. 어떤점들이 다르고 어떻게 사용하는건지 간략히 알아보자. 📷 프리즈마 일단 프리즈마는 자바스크립트, 타입스크립트, 그리고 미약하지만 mongodb도 지원한다. 또 시퀄라이즈는 테이블을 생성하는 마이그레이션 파일과, 연결하는 모델 파일이 있어 두 파일 다 설정을 해줘야만 한다. 이와 다르게 프리즈마는 index.js 파일 에서 prisma client를 가져와 설정하고, schema.prisma 파일에서 테이블을 설정, 관리할 수 있다. 일단 셋팅 작업은 아래와 같다. # yarn 프로젝트를 초기화. yarn init -y # express, prisma, @prisma/client 라..

TIL 2023.11.30

23/11/28 TIL __ 트랜잭션 이란?

🐣 상황 오늘은 강의를 듣다가 트랜잭션 이라는 단어가 나와 몰라서 찾아봤다. 찾다보니 블로그에 글이 잘 정리되어 있어서 공부하는데 많은 도움이 되었다. 이부분에 대한 내용을 정리해 두려고 한다. 🚍 트랜잭션 db 상태를 변환시키는 기능을 수행할 때에, 병행제어 및 회복 작업시 처리되는 작업의 단위. 예를 들어 송금 시스템을 생각해 보자. a가 b에게 50000을 보내는데, a의 통장에서 50000을 차감하고, b의 통장에서 50000을 더해줄 것이다. 이 일련의 과정을 각각 처리한다면 어떻게 될까? 어떠한 에러를 만났을때, 제대로 동작하지 않고 중간에 멈춰버릴 수 있을것이다. 이런 경우를 방지하기 위해, 하나의 트랜잭션으로 관리를 해서 잘 돌아가도록 설계하는 것이다. 트랜잭션 하면 ACID 를 빼놓을 수..

TIL 2023.11.29

23/11/27 TIL __ passport로 카카오톡 로그인 하기 2 (멘붕)

🚍 상황 밤새 카카오톡 로그인 기능구현을 하고 정말 뿌듯했다. 팀원분들께서 아침에 나오셔서 함께 기능 테스트를 해봤는데,, 이럴수가.... ㄴ ㅇ ㄱ 탈퇴 기능이 제대로 작동하지 않았다. 🚗 과정 멘붕.. 알고보니 카카오톡 회원탈퇴 기능의 경우. 카카오 쪽에다 요청을 따로 보내야 했던것... 그것도 모르고 그냥 테이블에 데이터만 지워버렸는데,,, 그걸로 끝이 아니였던 것이다..... 발표시간은 다가오고 있었고, 발표준비나 정리 및 배포과정을 아직 처리하지 않았기 때문에 시간이 정말 없었다.. 1일만 더 있었더라도.. 싶었지만 다들 같은 상황이였다. 어쨋던 시간이 얼마 남지 않아 카카오를 더 붙잡을 수 없었다. ㅠㅠㅠ 발표준비를 하고 제출을 위한 배포를 하는데.. 배포가 정상적으로 이루어 졌지만, 이부분도..

TIL 2023.11.28

23/11/26 TIL __ passport 로 카카오 로그인 기능 구현하기 1

🏞️ 상황 나는 사실 아주 예전부터 카카오톡 로그인 기능 과 같은 소셜 로그인기능을 꼭 해보고 싶었다. 사용자로서도 너무 편리한 기능이였고, 앞으로도 많이 구현하게 될 기능 같아 필수적이라고 생각했다. 물론 그 전에 기초적인 쿠키, 토큰, 세션, refreshToken 등등을 알아야 했지만, 코딩을 처음 시작하던 그때에는 겁이 없었고, 일단 사이트에서 뒤져봤었다. 하지만 그 당시에는 기초지식이 부족해 잘 알아듣지 못했고, 결국 못했다. 부트캠프를 통해 공부하면서, 인증 인가와 같은 개념들을 배우고 나니, 이제 진짜 할 수 있을 것 같았다. 그래서 팀프로젝트 필수기능은 모두 구현을 한 뒤에, 밤을 새면서라도 구현을 해야겠다 마음 먹었다. 일단 지금까지 정리된 내용을 적어보겠다. 공부는 생활코딩님 강의와, ..

TIL 2023.11.26

23/11/25 TIL __ array hash 자료구조란 어떤걸까?

오늘은 hash와 array 라는 자료구조에 대해 적어보겠다. 🏞️ array 메모리의 연속적인 공간에 데이터를 저장 인덱스를 통한 접근을 하며, 인덱스를 안다면 데이터를 찾는게 매우 빠르다. 한번 생성된 배열의 크기를 변경할 수 없다. 크기가 고정되어 있기 때문이다. JavaScript의 `push()` 같은 메소드를 사용하여 배열에 요소를 추가할 때, 배열의 크기가 부족하면 새로운 배열을 생성하고 기존의 요소를 새 배열로 복사한 후, 새로운 요소를 추가한다. 이러한 과정은 내부적으로 일어나는 것이므로 개발자가 직접 인지하기 어렵다고 한다. 특정 값을 찾기 위해서 처음부처 차례대로 검색하기 때문에 속도를 O(n)으로 본다. 🚗 hash 키와 값을 한 쌍으로 데이터를 저장한다. 키를 입력하면 해시함수를 ..

TIL 2023.11.26

23/11/24 TIL __ ejs를 이용해 express 환경에서 설계된 내용을 보여주자 2

🏞️ 상황 프로젝트를 진행할 때에 ejs를 활용해서 데이터를 보여주는데 성공했다. 그리고 버튼을 클릭했을때, 파람스로 값을 전달하면서 router를 동작시키는 데에도 성공했다. 근데 문제는 post나 get 요청이 아닌 이외의 요청이였다. 그부분에 대해 찾아보았다. 📷 ejs 로 delete 요청 , put , patch 요청하기. form 태그로 전송하는 방식을 사용했는데, 문제는 form태그는 put 요청이나 patch 요청, delete 요청을 처리할 수 없었다. 아무리 적어도 계속 작동하지 않아서 당황햇는데, 원래 처리할 수 없는걸 적고 있었던 것.!! 이에대한 방법을 찾다보니 꼼수를 발견했다. 임시용_회원 탈퇴하기d form 태그에는 post로 요청을 보내주고, 그 안에 input태그를 주어서,..

TIL 2023.11.25

23/11/23 TIL __ ejs 를 이용해 express 환경에서 설계된 내용을 보여주자

🏞️ 상황 프로젝트를 진행함에 있어서 사실 보여지는 부분은 꽤나 중요하다. 내일배움캠프 같은 경우, 백엔드 과정 진행자끼리 모여서 프로젝트를 하기 때문에, 프론트와의 협업 경험이 없어 좀 걱정이였다. 이전까지는 html, css, js를 이용해 기초적인 부분을 진행했기 때문에, 크게 어려움은 없었지만, express를 활용해 데이터를 주고 받는 상황에서 어떻게 값을 전달해야 할지 정말 막막했다. 일단 공식문서와 여러 활용 예시들을 보았다. 📷 ejs 사용하기 가장 중요한 숙제중 하나는 보여진 화면에서, 버튼을 눌렀을 경우였다. 파람스 값으로 유저 id나, post id가 전달이 되어야 하는 상황인 경우 어떻게 값을 넣어줘서 원하는 router를 실행되도록 할지 말이다. 단순히 값을 보여주면서 화면을 보여..

TIL 2023.11.23

23/11/22 TIL __ express validator 사용기

🏞️ 상황 팀과제를 진행하면서, 유효성 검사 라이브러리를 이번에는 express validator를 사용하기로 했다. 지난번 개인과제때 joi를 사용해 봤는데 굳이 다른 라이브러리를 사용한 이유는, 아무래도 express 환경에서는 express validator가 효율이 좋다는 말이 있어서 사용해 보고 싶었다. 처음 사용하는 라이브러리다 보니 공부가 필요했고, 시간이 좀 걸렸다. joi랑은 사용법이 좀 달랐다. 🐣 express validator 일단 공식문서와 많은 블로그들을 뒤져가며 다양한 사용법들을 보았다. 보통 router 의 미들웨어로 넣어주던데, 나는 따로 미들웨어로 빼고 싶어서 좀더 찾아봤다. 그게 좀 더 보기 편할듯 해서 다른 파일에 두려고 했던것! const { body, validat..

TIL 2023.11.22

23/11/21 TIL __ ESM과 CommonJs 차이 및 ESM방식으로 변경 실패.

🐣상황 오늘부터 뉴스피드 프로젝트가 시작되었다. 첫날이라 초기 셋팅과 방향에 대한 회의를 오래 진행했는데, 지난번 과제들에서 require를 이용해 express와 sequelize 를 사용했기 때문에, 이번 과제에서는 모듈을 사용해 보고 싶었다. 🐣액션 모듈을 사용하기 위해 나는 아래와 같은 행동을 했다. package.json 파일에 type:module 을 설정했다. index.json 파일에 있는 require 로 사용한 애들을 모두 export로 바꿨다. config.json 파일에서 dotenv를 가져올때 export로 가져와 환경변수로 사용했다. config.js 파일로 파일 형식을 바꾼 뒤에, 안에 내용물을 js 타입으로 변경했다. 그러나 예상과 달리 DB를 생성하는 아래의 명령어는 작동하..

TIL 2023.11.22