개인서버에서 개발할 때는 잘돌아가기만 하면 즉, 로직을 잘 작성했는지는 개발을 하면서 확인 할수 있습니다. 가장 쉬운 방법으로 console.log()로 찍어가면서 데이터다 잘 들어오고 잘 사용되는지 확인 하는 방법이 있습니다. 하지만 하지만 운영서버( 프로덕션 서버 )에서는 한사람만 사용하지 않습니다. 10명, 100명, 1000명도 사용할수 있게 됩니다. 이렇게 되면 어느정도의 사람이 사용하면 문제가 생기는지, 서버의 허용치 테스트를 해야합니다. 기능을 잘 만든다해도 1001명이 들어왔을때 오류가 생긴다면 없는것이나 마찬가지이기 때문입니다. 이렇게 성능 테스트를 할때 실제 유저의 트래픽이 들어오는것처럼 테스트를 할수 있는 도구는 많습니다. 그중 하나인 k6로 테스트를 해보겠습니다. 저는 윈도우를 사용..
SQL(Structures Query Language) 이란? • 데이터를 공통적으로 관리할수 있는 표준언어입니다. • 관계대수와 관계해석을 기초로한 혼합 데이터 언어입니다. • 질의어지만, 질의 기능만 있는것이 아니라 데이터 구조의 정의, 데이터 조작, 데이터 제어 기능을 갖추고 있습니다. • 사용 용도에 따라 DDL( Data Define Language ) - 데이터 정의어, DML( Data Munipulation Language ) - 데이터 조작어, DCL( Data Control Language ) - 데이터 제어어, TCL( Transaction Control Language ) - 트랜잭션 제어어 로 구분됩니다. * 관계대수 : 관계형 데이터베이스에서 원하는 정보와 그 정보를 어떻게 유도..
Js 유효성 검증을 위한 라이브러리 Joi는 여러 타입과 규칙을 이용해 유효성을 검증할 수 있으며, 유효성 검증에 실패하면 오류를 발생시킵니다. Joi는 클라이언트가 요청한 정보들이 서버로 전달될 떄, 알맞은 형식인지 아닌지 검증하는 작업이 필요하게 되는데 그 때 유효성 검증 작업을 효과적으로 더쉽고 간결하게 작성하 처리할 수 있게 됩니다. Nest.js프레임 워크에서는 Pipe라는 이름으로 불리기도 합니다. Joi패키지 설치 # yarn을 이용해 Joi를 설치합니다. yarn add joi Joi를 이용한 문자열 길이 검증하기 // app.js const Joi = require('joi'); // Joi 스키마를 정의합니다. const schema = Joi.object({ // name Key는 문..
문제발생 router.post("/sign-in", async (req, res) => { // 이메일과 비밀번호로 로그인 요청 const { email, password } = req.body; // 해당 이메일을 가지고 있는 유저가 있는지 검색 const user = await prisma.users.findFirst({ where: { email } }); // 없다면 존재하지 않는 이메일입니다. if (!user) { return res.status(401).json({ message: "존재하지 않는 이메일 입니다." }); // 이메일은 있지만사용자가 입력한 비밀번호와 암호화된 비밀번호가 일치하지 않는다면 에러문구와 함께 return } else if (!(await bcrypt.compare..
웹 서버에서 요청을 받을 때, 모든 요청에 대한 공통적인 처리를 하고 싶을 때 필요한 것이 미들웨어(Middleware)입니다. 미들웨어 ■ 서버의 요청-응답 과정에서 중간에 위치하여 특정 기능을 수행하는 함수입니다. ■ 모든 요청에 대해서 로그(Logging)를 남기거나, 특정 사용자만 API를 접근(Authentication & Authorization)하게 하고 싶을 때도 미들웨어를 사용합니다. ■ 사용자가 웹페이지에서 Form을 통해 전송한 데이터를 서버에서 쉽게 파싱(Body Parser)하기위하여 사용할수도 있습니다. (express.js Middleware) ■ 다양한 백엔드 리소스에 대한 연결을 관리합니다. 백엔드 데이터베이스에 대한 빠르고 효율적인 액세스를 위해 연결 풀을 생성 할 수 있..
백엔드 설계 작업 REST API 1. 할일 추가하기 → POST / api / todos 2. 할일 목록 보기 → GET / api / todos 3. 할일 내용 변경하기 → PATCH / api / todos / :todoId 4. 할 일 순서 변경하기 → PATCH / api / todos / :todoId 5. 할 일 완료하기 → PATCH / api / todos / :todoId 6. 할 일 완료 해제하기 → PATCH / api / todos / :todoId 6. 할 일 삭제 → DELETE / api / todos / :todoId ※주의 ※ 더보기 경로 설정할 때 REST API 즉, 네트워크 표현 수단을 사람이 봐도 이해하기 쉬운 표현으로 정의 하기 위해 seememo, getmemo..
사용자 인증 미들웨어를 사용하는 이유 1. 클라이언트로부터 전달받은 쿠키를 검증하는 작업을 수행 2. 클라이언트의 요청이 인증되었는지 확인함으로써 애플리케이션의 보안을 강화 3. 특정 엔드포인트나 리소스에 대한 접근을 제어하기 위해 사용자의 인증 상태를 확인 4. 토큰의 유효성을 확인하고, 만료된 토큰이나 조작된 토큰에 대한 처리를 수행 커스텀 비즈니스 로직 1. 클라이언트로부터 쿠키를 전달받음 2. 쿠키가 Bearer 토큰 형식인지 확인 3. 서버에서 발급한 JWT가 맞는지 검증 4. JWT의 유저ID를 이용하여 사용자를 조회 5. req.user에 조회된 사용자 정보를 할당 6. 다음 미들웨어를 실행 • 클라이언트가 전달한 쿠키를 바탕으로 사용자를 검증 • 토큰이 만료되진않았느지, 토큰의 형식은 일치..
Js에서 MongoDB를 사용하려면 DB Client 역할을 하는 도구가 있어야 합니다. mongoose라이브러리 • MongoDB에 데이터를 쉽게 읽고 쓰게 해주는 Js라이브러리입니다. • ODM(Object Document Mapper)라고도 부릅니다. • Js의 객체(Object)와 MongoDB의 문서(Document)사이에서 매핑을 수행하는 도구입니다. • 객체를 MongoDB데이터베이스의 문서로 쉽게 변환 하거나, 문서를 객체로 변환해 주는 작업을 수행합니다. 관계형 DB 와 MongoDB mongoose의 컬렉션(Collection)이란? MongoDB에서 문서가 무엇인가 하면 관계형 데이터베이스에서의 하나의 튜플 , 즉 ROW를 의미 하는 것입니다. 또한 MongoDB의 collection..