백엔드 개발 (13) 썸네일형 리스트형 [What To Do] JWT 인가 미들웨어 제작하기 우리 팀은 애플리케이션에 로그인한 사용자만 추가 기능을 사용할 수 있도록 개발하고 싶었습니다.그러기 위해서는 인가 방식을 선택해야 했습니다.팀에서는 세션과 JWT 중 하나로 구현하자고 의견이 좁혀졌고,준비한 서버가 없는만큼 서버의 역할부담을 덜고 싶어, JWT를 최종적으로 채택하게 되었습니다.토큰 발급토큰은 구글의 OAuth 2.0을 통해 얻은 이메일을 데이터베이스에 생성하거나 이미 존재하면 생성합니다.const jwt = require('jsonwebtoken');const payload = { id: user.id};const options = { subject: 'user', expiresIn: '1h', issuer: process.env.JWT_ISSUER};const token = jw.. [서점 프로젝트] 서브 쿼리를 이용한 평점 업데이트 사용자는 책을 구매하고 그에 대한 별점을 남길 수 있습니다.별점이 남겨질 때마다 책의 평점은 변화합니다.오늘은 별점의 평균을 구해줄 서브 쿼리에 대해서 이야기해보겠습니다.🐸 서브 쿼리간단하게 설명하자면 쿼리 안에 있는 쿼리를 의미합니다.서브 쿼리는 괄호 안에 넣어서 작성하며메인 쿼리의 컬럼을 사용할 수 있습니다. 🐸 서브 쿼리의 위치서브 쿼리는 다양한 위치에서 사용할 수 있습니다.하지만 FROM 절에서 사용할 때는 AS 예약어를 사용해서 별칭을 주어야 합니다.SELECTFROMWHEREHAVINGORDER BYVALUESUPDATE 🐸 적용 예시책의 평점을 수정하는 쿼리는 간단합니다.UPDATE book SET rating = 평점 WHERE id = 1;이 평점을 우리는 서브 쿼리로 만들 수 있습.. [서점 프로젝트] Offset 페이지네이션 서비스가 커질수록 도서 데이터는 엄청 증가할 것입니다.도서 전체를 요청하면 대량의 데이터를 보내느라 서비스가 느려지는 것도 불가피해집니다.데이터의 용량을 나누기 위해서 페이지네이션을 구현하고자 하였습니다.페이지네이션에는 Offset과 Cursor 두 방법이 있습니다.이번에는 원하는 페이지를 바로 볼 수 있고 정렬에 유리한 Offset을 선택했습니다.📃 LIMIT, OFFSET기본적으로 테이블에서 제한된 양의 데이터를 출력하고 싶다면 LIMIT을 사용합니다.SELECT * FROM 테이블명 LIMIT 5; -- 가장 첫 데이터부터 5개를 출력 데이터가 시작하는 위치를 정하고 싶다면 OFFSET을 사용합니다.SELECT * FROM 테이블명 LIMIT 5 OFFSET 0; -- 0(처음)부터 데이터 5개 .. [서점 프로젝트] 줄거리 설명 컬럼의 자료형 고민 도서 정보를 관리하는 테이블을 만들다가 고민이 생겼습니다.책의 줄거리를 설명하는 컬럼은 그 수가 1000자가 넘어가기도 합니다.찾아보니까 표현할 수 있는 방법이 VARCHAR뿐만 아니라 TEXT도 있었습니다."왜 VARCHAR로도 표현이 가능한데 TEXT가 있을까?"최대 열 사이즈공식 문서에서는 MySQL 테이블은 65535 바이트까지 행 크기를 제한한다고 나와있습니다.큰 크기의 varchar 자료형을 남발하다보면 이 제한에 금방 도달하게 됩니다.그렇다면 text 타입으로 선언하면 어떨까요?text 타입을 여러 번 선언해도 에러가 발생하지 않습니다.이 객체는 Large Object라는 별도의 영역에 저장되고 행에는 주소값만 포함되기 때문입니다. 메모리 버퍼MySQL 엔진은 메모리 포인터를 이용해서 데이터.. [서점 프로젝트] ERD 설계 개인적으로 가장 어려웠던 시간인 것 같습니다.프로젝트를 위한 데이터베이스를 생성하기 전에 개체들의 관계를 명확하게 하고 싶었습니다.📋 회원이메일, 아이디, 비밀번호를 속성으로 가지고 있습니다.개발을 하면서 확장이 된다면 회원 별로 주소지를 넣는 것도 고민해보려고 합니다. 📋 카테고리카테고리 이름을 속성으로 가지고 있습니다. 📋 도서도서에 대한 정보(제목, 저자, 요약, 설명 등)을 속성으로 가지고 있습니다.카테고리 입장에서 도서는 하나도 없을 수도, 여러 권일 수도 있습니다.도서는 카테고리를 하나만 포함하도록 설계할 것이기 때문에 둘의 관계는 1:N으로 설계했습니다. 📋 후기같은 도서에 대하여 후기는 한 번만 작성할 수 있습니다.따라서, 회원과 도서의 FK 값을 PK 값으로 하여 각각 1:N 식별.. [서점 프로젝트] API 설계 이번에는 구성한 화면을 바탕으로 필요한 API를 설계하기 위해 포스팅을 하였습니다.리소스를 명확하게 분리하고 HTTP 메소드를 규칙에 맞게 사용하는 것에 중점을 두고 설계하고자 했습니다.📗 회원회원 가입과 탈퇴는 사용자 자원을 생성하고 삭제하는 작업이므로,각 메소드 규칙에 맞춰서 다음과 같이 생성했습니다.# 회원 가입POST /users# 회원 탈퇴DELETE /users 📗 인증처음에는 로그인과 로그아웃도 회원 가입과 같은 URL을 사용하려고 했습니다.하지만, 사용자 자원을 직접적으로 생성하고 삭제하지 않기 때문에별도의 인증이라는 자원을 만들어 사용하는 것이 적합하다고 생각했습니다.# 사용자 인증을 처리하는 요청POST /auth/login# 사용자 세션을 종료하는 요청DELETE /auth/log.. [서점 프로젝트] 프로젝트 목표 설정과 화면 설계 이번 포스트에서는 서점 프로젝트를 진행하기 위해서,프로젝트의 목표와 화면 설계에 대해서 기록하고자 합니다.🚀 프로젝트 목표도서를 장바구니에 담고 구매할 수 있는 웹 애플리케이션을 사용자가 이용하고 리뷰를 남길 수 있도록 구현하고자 합니다. 🚀 화면 설계메인상단바에는 로고, 검색창과 로그인, 회원가입 버튼을 배치합니다.로그인 후에 장바구니와 주문기록을 볼 수 있도록 메뉴를 구성합니다.인기 도서를 보여주는 섹션을 구성합니다.카테고리별로 도서를 볼 수 있도록 메뉴를 구성합니다.검색 도서를 검색하면 연관된 도서가 뜨게 합니다.책의 이미지, 제목, 저자, 평점을 간단하게 보여줍니다.도서 상세도서의 이미지는 가운데 크게 표시합니다.책의 제목, 저자, 가격을 이미지 오른쪽에 배치합니다.책의 평점, 리뷰수를 이.. [Express] 유효성 검사를 해보자 미니 프로젝트로 만든 API에 사용자의 아이디를 입력할 때,문자열이 아닌 정수형으로 입력해도 데이터가 전달되지만데이터베이스에서는 컬럼의 자료형과 달라서 에러를 뱉습니다.이처럼, 클라이언트에서 전달한 데이터를 서버에서 그대로 사용하면예기치 못한 문제가 생길 수 있습니다.이를 예방하기 위해서 전송받은 데이터를 검사하는 것을 유효성 검사라고 합니다.이번 포스트에서는 Express-validator를 써서 유효성 검사를 하는 방법을 알아보겠습니다.💡 express-validator 설치하기진행하고 있는 프로젝트에서 패키지 매니저를 통해 설치하면 됩니다.npm install express-validator 💡 유효성 검사 시작하기공식 문서에서는 express-validator가 Express 애플리케이션 뿐만.. 이전 1 2 다음