백엔드(Backend)

[MongoDB] 카테고리별로 필터링하기
이전 시간에는 Mongoose와 Express를 사용하여 기본적인 CRUD 기능을 구현하는 방법을 살펴보았습니다. 이번 시간에는 더 나아가 상품을 카테고리로 필터링하는 기능을 추가해보겠습니다. 사용자가 카테고리를 선택하면 해당 카테고리에 속한 상품만 보여지도록 만들어 보겠습니다. 1. 카테고리별 링크 생성 먼저, 각 상품의 카테고리에 해당하는 링크를 생성하여 사용자가 클릭할 수 있도록 만들겠습니다. show.ejs 파일에서 해당 링크를 추가합니다. Price: Category: 위 코드에서는 각 상품의 카테고리에 해당하는 링크를 생성하고 있습니다. 이 링크를 클릭하면 해당 카테고리의 상품만 보여지는 페이지로 이동할 것입니다. 2. 카테고리에 따른 상품 필터링 이제 Express 서버에서는 해당 카테고리에..

[MongoDB] 프로덕트 삭제하기
CRUD의 마지막 단계, 삭제(Delete) 기능을 구현해보겠습니다. 상품을 삭제하기 위한 버튼을 추가하고, 해당 버튼을 클릭하면 서버로 Delete 요청을 보내어 상품을 삭제할 것입니다. 이를 위해 적절한 라우트를 설정하고, 삭제된 상품에 대한 확인 및 리다이렉션을 구현하겠습니다. 1. 삭제 버튼 및 폼 생성 먼저, show.ejs 파일에서 삭제 버튼과 해당 기능을 수행할 폼을 생성합니다. Delete 위 코드에서는 폼을 통해 /products/:id 라우트에 Delete 요청을 보내고 있습니다. 2. Delete 라우트 설정 Express 서버에서는 해당 Delete 요청을 처리할 라우트를 설정합니다. // index.js app.delete('/products/:id', async (req, res..

[MongoDB] 카테고리 셀렉터 위의 탄젠트
이번 글에서는 편집용 폼의 Select Category에 설정된 값을 디폴트로 표시하여, 값을 편집하지 않아도 일일이 수정할 필요가 없도록 하는 방법을 알아보겠습니다. 1. 선택 옵션 동적으로 설정하기 Express를 사용하지 않는 경우, 일반적으로 태그에 불리언 속성인 selected를 추가하여 디폴트 값을 설정합니다. 이를 통해 옵션이 제공되면 해당 옵션을 선택하게 됩니다. fruit vegetable dairy 위 코드에서는 카테고리 값이 product.category와 같으면 selected 속성을 추가하여 해당 옵션을 선택하도록 동적으로 설정합니다. 2. 카테고리 목록 동적 생성 index.js 파일에서 카테고리 목록을 동적으로 생성하는 루프를 사용하여 옵션을 생성합니다. // index.js ..

[MongoDB] 프로덕트 업데이트하기
이번 시간에는 개별 상품을 업데이트하는 방법에 대해 알아보겠습니다. 1. Get 요청 라우트 생성 개별 상품을 업데이트하기 위해 편집용 폼을 처리하는 Get 요청 라우트를 만들어야 합니다. 아래 코드와 비슷한 코드를 사용합니다. app.get('/products/:id/edit', async (req, res) => { const { id } = req.params; const product = await Product.findById(id); res.render('products/edit', { product }) }) 2. Edit.ejs 파일 생성 Edit 페이지를 위한 폼을 만들기 위해 edit.ejs 파일을 생성합니다. New Product 폼을 복사하되, action에는 /products/를 ..

[MongoDB] 프로덕트 만들기: 새로운 상품 추가하기
새로운 상품을 추가하는 방법을 배워보도록 합시다. 이를 위해 폼과 폼을 제출할 두 개의 라우트가 필요합니다. 먼저, '/products/new' 경로로 GET 요청이 들어왔을 때 폼을 렌더링하고, '/products'로 POST 요청이 들어왔을 때 새로운 상품을 생성하는 라우트를 만들어보겠습니다. GET 라우트: '/products/new' app.get('/products/new', (req, res) => { res.render('products/new'); }); 이 코드에서는 '/products/new' 라우트를 설정하고, 해당 경로로 GET 요청이 오면 'products/new' 템플릿을 렌더링하여 새 상품 추가 폼을 사용자에게 보여줍니다. 'products/new.ejs' 템플릿 Add A p..

[MongoDB] Express와 Mongoose로 상품 상세 정보 라우트 만들기
Express와 Mongoose를 사용하여 상세 정보를 위한 라우트를 만들어 보겠습니다. 이 라우트를 통해 특정 상품의 상세 페이지를 보여줄 수 있습니다. 여기서는 MongoDB의 ID를 활용하여 각 상품을 식별하고 해당 상품의 상세 정보를 렌더링하는 방법을 살펴보겠습니다. Get 라우트 정의 먼저, '/products/:id' 경로로 GET 요청이 들어왔을 때 해당 상품의 ID를 활용하여 상세 정보를 조회하는 라우트를 정의합니다. app.get('/products/:id', async (req, res) => { const { id } = req.params; const product = await Product.findById(id) console.log(product); // 터미널에서 조회한 상품..

[MongoDB] 프로덕트 인덱스(Products Index) 라우트 만들기
이번 시간에는 실제 라우트를 정의하여 MongoDB에 보낼 쿼리를 만들어보겠습니다. 이는 간단한 인덱스 페이지 또는 현재 상품 목록과 같은 정보를 제공하는 라우트입니다. RESTful 관례를 따르는 패턴을 사용해보겠습니다. 이는 하나의 패턴에 불과하며 필수적이지는 않지만 이번에는 이를 활용해보겠습니다. // 기존 index.js 사용 app.get('/products', async (req, res) => { try { const products = await Product.find({}); res.render('products/index', { products }); } catch (error) { console.error(error); res.status(500).send('Internal Serve..

[MongoDB] 모델 만들기
개요 이번 섹션에서는 우리의 애플리케이션에 사용될 모델을 만들어보겠습니다. 목표는 완전한 CRUD(생성, 읽기, 갱신, 삭제)가 가능한 애플리케이션을 구현하는 것입니다. 여기에는 MongoDB에 연결된 사용자 인터페이스 및 HTML이 포함되어야 합니다. 현재까지는 리소스 및 모델에 대한 언급이 없었는데, 이제 농장 판매대 애플리케이션을 위한 'product' 모델을 만들어 볼 것입니다. 농장 판매대 애플리케이션 농장 판매대 애플리케이션은 주로 농장에서 생산한 식품을 관리하고 판매하는 데 사용됩니다. 저는 서울을 떠나 시골에 살면서 농장에서 직접 판매하는 상품을 관리하고자 합니다. 이 애플리케이션은 재고를 관리하고 각 상품이 얼마나 남았는지, 팔렸는지 등을 추적하는 데 도움이 될 것입니다. product ..