전체 288

[NestJS] JWT 인증과 Role 적용하기

JWT인증과 Role인증을 동시에 적용하는 로직을 만드는 연습을 해 보았다. JWT인증에 대해서 정리한 글은 아래의 링크에 나와 있다. https://tre2man.tistory.com/321 로그인 인증 부수기 최근들어 유저의 인증 로직 관련해서 보완해야 할 점이 보여서 수정 중, 이참에 로그인 인증 관련해서 한번 정리해 보고자 글을 작성한다. 배경 지식 먼저 인증과 인가에 대해서 구분을 하자. 인 tre2man.tistory.com JWT인증을 하기 전에 공식 문서를 잘 읽어 보자. NestJS는 공식문서가 잘 되어 있어서 꼼꼼하게 읽어 보는것이 좋다. https://docs.nestjs.com/security/authentication Documentation | NestJS - A progress..

template database "template1" does not exist 에러 해결하기

실수로 postgres의 기본 db를 지워버렸다. 그 이후에 새 db를 만들려고 하니 자꾸 아래와 같은 오류가 나왔다. template database "template1" does not exist 알고보니 postgresql은 db를 수동으로 새로 만들때 템플릿이 있어야 하는 것 같았다. 그래서 기존의 template0, template1 db를 다시 살려야 하는 상황에 왔다. 구글에 검색하니 템플릿 데이터베이스를 따로 만들수 있다고 한다. 아래 명령어를 치니 템플릿이 새로 생성되었다. create database template0 TEMPLATE postgres; update pg_database set datistemplate=true where datname='template0'; 확인하니 기본..

서버 인프라/DB 2022.11.21

웹사이트 접속 시에 무슨 일이 벌어지는가?

이미 다른 블로그에서 한번씩 정리한 것 같지만, 직접 정리하는 편이 낫다고 생각해서 따로 정리해본다. 용어정리 DNS : 도메인 네임 (시스템) 서버는 URL들의 이름과 IP주소를 저장하고 있는 DB이다. 아이피 주소와 URL을 매핑시켜준다. TCP/IP : 데이터가 웹을 이동하는 방법을 나타내는 통신 규격이다. HTTP : 클라이언트와 서버가 통신할 수 있게 하기 위한 언어를 정의하는 어플리케이션 규약. 이제 웹사이트 접속 시에 일어나는 일들을 차례대로 정리해 보자. 브라우저가 해당 도메인주소와 대응하는 IP주소를 확인 먼저 해야할 것은 나의 IP주소, DNS서버의 IP주소를 찾아야 한다. 위 작업을 하기 위해서는 LAN 밖으로 나가는 Gateway Router를 찾아야 한다. 이것의 IP를 얻기 위해..

개발 지식/웹 2022.11.19

대학생은 무슨 노트북을 사용해야 할까?

얼마전에 다나와에서 나온 설문조사를 보았다. 다나와에서 만 14세 이상을 대상으로 노트북 브랜드 선호도를 조사한 결과가 있었다. https://dpg.danawa.com/news/view?boardSeq=64&listSeq=5189216 10대 절반이 '맥북' 노트북 선호... 30대는 삼성전자 노트북 다나와가 오픈서베이에 의뢰해 만 14세 이상 300명(10대부터 50대 각 연령대 별 60명)을 대상으로 노트북 브랜드에 대한 선호도를 조사한 결과 연령대 별로 브랜드 선호 차이가 큰 것으로 나타났다. dpg.danawa.com 결과를 간단히 말하면, 10대 학생들의 맥북 선호도가 50% 정도로 상당히 높은 비율에 속해 있었다. 다나와 사이트 특성상 전자기기에 관심이 많은 사람들이 주로 사용한다는 점과 표..

잡다한 이야기 2022.11.19

슬랙 점심 추천기 만들기

직장에 있을 때 가장 고민을 많이 했던 시간은 역시 점심 먹을 때다. 매번 똑같은 회사생활에서 점심은 색다른 이벤트이며, 점심을 잘 먹였느냐에 따라서 오후 컨디션이 결정될 때가 있다. 여튼 점심을 먹기 위해 고민하는 시간이 길어질수록 점심시간은 짧아졌기에, 이런 현상을 어느정도 줄여줄 수 있는 점심 추천기를 만들어 보기로 했다. 목표 슬랙과 연동하여 점심시간 10분전에 추천을 받았으면 좋겠다. 식당 추가 및 삭제 가능 혹시 모르니 즉시 추천 가능 해당 조건들을 가지고 점심을 추천할 수 있는(사내 직원들만 이용 가능한) 간단한 서비스를 만들어 보기로 했다. 구상 먼저 비용이 적게 들고 빨리 제작할 수 있어야 한다. 이것은 예전에 만들었던 람다를 사용해서 만들어 보기로 했다. 하지만 람다를 사용하게 되면 함..

[NestJS] 데이터 요청과 응답 사이의 Request lifecycle

NestJS를 쓰면서 갑자기 느낀 게 있었다. 바로 NestJS 내부에서 데이터의 흐름이 어떻게 되는지 궁금했다. Service단 에서의 데이터 흐름뿐 아니라 클라이언트에서 데이터를 요청한 이후 데이터를 응답할 때 까지의 흐름을 알고 싶었다. 그래서 공식 문서를 보며 정리하기로 했다. 공식 문서는 Request lifecycle이라고 하는데, 왠지 Data lifecycle이라는 이름이 더 맞는다. 참고로 express는 use 메서드에 온갖 미들웨어를 넣어버리는데, 이 때 데이터 흐름을 개발자가 직접 제어해 주어야 한다. express는 자유도는 매우 높은 프레임워크이나, 견고하고 가독성 좋은 코드를 만들기 힘들다. 데이터 흐름 1. 가드 미들웨어 다음으로 오는 가드는 데이터가 들어올 때 처음으로 데이..

This is not the tsc command you are looking for 에러 해결하기

Express를 JS에서 TS로 마이그레이션을 하는 도중, tsc를 사용해 js로 컴파일 할려고 tsc 명령어를 치니 다음과 같은 에러 메시지가 나왔다. This is not the tsc command you are looking for To get access to the TypeScript compiler, tsc, from the command line either: - Use npm install typescript to first add TypeScript to your project before using npx - Use yarn to avoid accidentally running code from un-installed packages 검색을 해보니, 해당 문제는 tsc 패키지와 typ..

[NestJS] Dependency Injection과 NestJS

최근들어 비교적 삶이 한가해져서, 미루기만 했던 지식들을 정리하는 시간을 가지기로 했다. 이번 포스트에서는 DI (Dependency Injection)과 NestJS에서 해당 기능을 사용하는 방법에 대해서 정리해 볼려고 한다. Dependency Injection 이란? 정의부터 알기 전에, 각 단어에 대해서 알아보자. Dependency는 의존성, Injection은 주입 이라는 단어이다. 각 단어에 대해서도 간단히 정리하자. 의존성 의존 관계를 가지는 것이다. 아래 TS 코드로 확인해 보자. class Human { meal = new Meal(); } class Meal {} 위 코드에서 Human 클래스는 Head 클래스를 내부에서 사용하게 되므로, Human 클래스는 Meal 클래스에 의존 관..

CORS 정리하기

얼마전에 제작한 웹사이트에서 다른 사이트에 axios 요청을 보낼 때 마다 "axios has been blocked by CORS policy" 에러가 계속 떠서 난감했던 적이 있다. 찾아보니 CORS에 관한 문제였는데, MDN을 보고 간단히 정리해 보려고 한다. MDN에 설명이 잘 되어 있드라. 정의 교차 출처 리소스 공유 (Corss-Origin Resouece Sharing)의 약자이다. 이게 생긴 배경부터 정리하면, A.com 사이트에서 B.com에 있는 데이터를 요청할 때 두 개의 사이트는 다른 도메인을 가지고 있으므로, 정상적으로 A.com 사이트에서 B.com 사이트에 데이터를 요청할 수가 없다. 이는 아래 그림으로 잘 설명이 되어 있다. domain-a 사이트에서 domain-a의 웹서버..

개발 지식/웹 2022.10.24

로그인 인증 부수기

최근들어 유저의 인증 로직 관련해서 보완해야 할 점이 보여서 수정 중, 이참에 로그인 인증 관련해서 한번 정리해 보고자 글을 작성한다. 배경 지식 먼저 인증과 인가에 대해서 구분을 하자. 인증(Authentication)은 클라이언트가 주장하는 사용자가 맞는가를 검증하는 과정이다. 인가(Authorization)은 인증 이후에 하는 작업으로, 인증된 사용자가 접근할 수 있는 자원의 확인 절차이다. 예를 들자면 로그인 자체는 인증에 해당된다. 내가 이 서비스의 회원이다는 것을 서버에 요청하고, 이를 확인하는 것이 인증이다. 인증 이후에 내가 게시물을 작성한다면, 나와 관리자를 제외한 다른 유저는 내 게시물을 수정하거나 삭제할 수 없다. 이것이 인가이다. 다음으로 HTTP의 비연결성과 무상태성에 대해서 정리..

개발 지식/웹 2022.10.23