웹 백엔드 (7) 썸네일형 리스트형 [서점 프로젝트] 서브 쿼리를 이용한 평점 업데이트 사용자는 책을 구매하고 그에 대한 별점을 남길 수 있습니다.별점이 남겨질 때마다 책의 평점은 변화합니다.오늘은 별점의 평균을 구해줄 서브 쿼리에 대해서 이야기해보겠습니다.🐸 서브 쿼리간단하게 설명하자면 쿼리 안에 있는 쿼리를 의미합니다.서브 쿼리는 괄호 안에 넣어서 작성하며메인 쿼리의 컬럼을 사용할 수 있습니다. 🐸 서브 쿼리의 위치서브 쿼리는 다양한 위치에서 사용할 수 있습니다.하지만 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개 .. [SQL] 데이터를 내 마음대로, DML 이전 포스트에서 CRUD를 언급한 적이 있습니다.관계형 데이터베이스에서는 매우 직관적인 키워드로 데이터의 처리를 돕고 있습니다.이러한 쿼리 언어를 SQL이라고 하고, 그 중 데이터를 조작하는 쿼리를 DML이라고 합니다.🔎 SELECTSELECT '컬럼명' FROM '테이블명';데이터베이스에 있는 데이터를 사용하는 가장 기본적인 명령어입니다.SELECT로 가져오고 싶은 컬럼을 선택하고 FROM으로 정보가 있는 테이블을 선택합니다. 🔎 INSERTINSERT INTO `테이블명` (`컬럼1`, `컬럼2`, `컬럼3`)VALUES (`값1`, `값2`, `값3`);테이블에 새로운 레코드를 입력하는 명령어입니다.삽입할 컬럼과 값을 동일한 개수로 입력해줍니다.만약, 모든 컬럼에 값을 추가할 시에는 컬럼을 생략.. [Express] Router 적용하기 애플리케이션이 커질수록 라우트 설정과 미들웨어가 복잡해집니다.라우터를 이용하면 각각을 모듈로 만들고,메인 애플리케이션에서 마운트하여 작은 단위로 관리할 수 있습니다.이번 포스트에서는 라우터의 사용법에 대해서 알아보겠습니다.🎯 모듈 분리예시로 쇼핑몰 애플리케이션에서는,사용자와 상품을 담당하는 엔드포인트가 나누어져 있을 수 있습니다.express.Router()를 사용하면 각 엔드포인트를 모듈식으로 관리할 수 있습니다.// users.jsconst express = require('express');const router = express.Router();// GET /usersrouter.get('/', (req, res) => { res.send('유저 리스트');});module.exports = .. [Express] 같은 경로의 핸들러 묶기 API는 같은 주소지만 HTTP 메소드를 다르게 하여 다양한 기능을 할 수 있습니다.동일한 주소를 하나로 묶어서 관리할 수는 없을까요?두 가지 예제를 보면서 알아보겠습니다.app.get('/event/:n', (req, res) => { // n회차 이벤트 당첨자 출력});app.post('/event/:n', (req, res) => { // n회차 이벤트 당첨자 생성});app.put('/event/:n', (req, res) => { // n회차 이벤트 당첨자 수정});app.delete('/event/:n', (req, res) => { // n회차 이벤트 당첨자 삭제});매우 직관적인 단일 라우트 방식입니다.동일한 경로에 대한 처리이다 보니 반복되는 코드가 많습니다.그럼 동일한 경로를 관.. 회원 API 설계하기 이제는 어느 웹 서비스를 방문해도 로그인 페이지가 있는 것을 확인할 수 있습니다.로그인, 회원 가입, 회원 정보, 회원 탈퇴는 어떻게 설계해야 할까요?🔗 HTTP 메소드데이터를 처리하는 방식을 보통 CRUD라고 부릅니다.서버에서 데이터를 어떻게 처리하는지에 따라서 메소드를 정의할 수 있습니다.CRUDReadCreateUpdateDeleteHTTP 메소드GETPOSTPUTDELETE로그인 기능은 어떤 메소드를 사용해야 할까요?로그인을 할 때는 아이디와 패스워드를 입력합니다.이 정보를 주소창에 노출하면 상대적으로 위험할 수 있으니 POST를 사용하겠습니다. 🔗 URL회원 가입: /join로그인: /login회원 정보: /users/{id}회원 탈퇴: /users/{id} 🔗 요청 파라미터회원 가입: 아.. [Postman] 편리한 API 호출 툴 사용해보자 개발한 API를 브라우저에서 테스트하기에는 부족함이 있습니다.예를 들어서, 요청하는 헤더와 바디를 수정하는 작업 등이 해당합니다.포스트맨은 이런 작업을 쉽게 할 수 있도록 인터페이스를 제공해줍니다.한 번 알아볼까요?📫 설치공식 사이트에서 설치가 가능합니다.다운로드를 하고 회원가입까지 마친 후에 사용이 가능합니다.유료 버전은 Collection Runners, Flows 등의 추가 기능이 생기네요.저는 무료 버전을 기준으로 테스트해보겠습니다. 📫 콜렉션 생성하기콜렉션은 하나의 북마크 기능입니다.테스트하기 위해 준비한 API 요청을 그룹화할 수 있습니다.좌측 콜렉션 탭에서 + 버튼을 눌러서 새로운 콜렉션을 만들어 사용합니다. 📫 API 요청생성한 콜렉션에서 더보기 탭을 눌러 새로운 API 요청을 생성합.. 이전 1 다음