728x90

아래는 Vue.js + SQLiteCRUD(Create / Read / Update / Delete)를 구현하는 가장 보편적이고 실무적인 구조입니다.
(SQLite는 브라우저에서 직접 접근할 수 없으므로 Node.js API 서버를 반드시 거칩니다)


1️⃣ 전체 구조

[ Vue.js (Frontend) ]
        |
        | REST API (JSON)
        v
[ Node.js + Express ]
        |
        | sqlite3
        v
[ SQLite (.db 파일) ]

2️⃣ SQLite DB 구성

2.1 DB 파일 생성 (database.db)

CREATE TABLE users (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  name TEXT NOT NULL,
  email TEXT NOT NULL
);

3️⃣ Backend (Node.js + Express + SQLite)

3.1 패키지 설치

npm init -y
npm install express cors sqlite3

3.2 DB 연결 (db.js)

const sqlite3 = require('sqlite3').verbose();

const db = new sqlite3.Database('./database.db', (err) => {
  if (err) console.error(err.message);
  else console.log('SQLite connected');
});

module.exports = db;

3.3 API 서버 (server.js)

const express = require('express');
const cors = require('cors');
const db = require('./db');

const app = express();
app.use(cors());
app.use(express.json());

/* CREATE */
app.post('/users', (req, res) => {
  const { name, email } = req.body;
  db.run(
    'INSERT INTO users (name, email) VALUES (?, ?)',
    [name, email],
    function () {
      res.json({ id: this.lastID });
    }
  );
});

/* READ */
app.get('/users', (req, res) => {
  db.all('SELECT * FROM users', [], (err, rows) => {
    res.json(rows);
  });
});

/* UPDATE */
app.put('/users/:id', (req, res) => {
  const { name, email } = req.body;
  db.run(
    'UPDATE users SET name=?, email=? WHERE id=?',
    [name, email, req.params.id],
    () => res.sendStatus(200)
  );
});

/* DELETE */
app.delete('/users/:id', (req, res) => {
  db.run(
    'DELETE FROM users WHERE id=?',
    [req.params.id],
    () => res.sendStatus(200)
  );
});

app.listen(3000, () => {
  console.log('API server running on port 3000');
});

4️⃣ Frontend (Vue 3)

4.1 프로젝트 생성

npm create vue@latest
cd vue-project
npm install axios
npm run dev

4.2 API 유틸 (src/api.js)

import axios from 'axios';

export default axios.create({
  baseURL: 'http://localhost:3000'
});

4.3 CRUD 컴포넌트 (src/components/UserCrud.vue)

<template>
  <div>
    <h2>User CRUD</h2>

    <input v-model="name" placeholder="Name" />
    <input v-model="email" placeholder="Email" />
    <button @click="createUser">Add</button>

    <ul>
      <li v-for="u in users" :key="u.id">
        {{ u.name }} ({{ u.email }})
        <button @click="deleteUser(u.id)">Delete</button>
      </li>
    </ul>
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue'
import api from '../api'

const users = ref([])
const name = ref('')
const email = ref('')

const loadUsers = async () => {
  const res = await api.get('/users')
  users.value = res.data
}

const createUser = async () => {
  await api.post('/users', { name: name.value, email: email.value })
  name.value = ''
  email.value = ''
  loadUsers()
}

const deleteUser = async (id) => {
  await api.delete(`/users/${id}`)
  loadUsers()
}

onMounted(loadUsers)
</script>

4.4 App.vue

<template>
  <UserCrud />
</template>

<script setup>
import UserCrud from './components/UserCrud.vue'
</script>

5️⃣ 실행 순서

  1. Backend
node server.js
  1. Frontend
npm run dev

6️⃣ 실무 확장 포인트

  • SQLite WAL 모드
  • 트랜잭션 처리
  • 입력 검증 (Zod / Joi)
  • Composition API 분리
  • TypeScript 전환
  • Electron / Tauri 연계 (로컬 DB 앱)

원하시면 다음도 바로 이어서 설명 가능합니다:

  • Vue + SQLite (Electron 데스크톱 앱)
  • IndexedDB vs SQLite 비교
  • Vue + REST vs GraphQL
  • SQLite → MariaDB 마이그레이션

필요한 방향을 말씀해 주세요.

728x90

'ChatGPT 대답' 카테고리의 다른 글

Apache Software Foundation (ASF) 프로젝트  (0) 2024.07.21
프로그램 언어 표  (0) 2024.07.21
PHP 설명해줘  (0) 2024.07.21
엔진엑스 설명해줘  (0) 2024.07.21
자바스크립트 프레임워크 종류 전체 설명해줘  (0) 2024.07.19

+ Recent posts