Last Sync: 2026-01-24 12:45 (Mobile)
This commit is contained in:
233
.trash/http, css, javascript, postgresql로 가계부 만들어 줘.md
Normal file
233
.trash/http, css, javascript, postgresql로 가계부 만들어 줘.md
Normal file
@@ -0,0 +1,233 @@
|
||||
HTTP, CSS, JavaScript, 그리고 PostgreSQL을 사용하여 간단한 가계부 웹 애플리케이션을 만들 수 있습니다. 이 애플리케이션은 수입 및 지출 데이터를 입력하고, 이를 PostgreSQL 데이터베이스에 저장하며, 화면에 표시하는 기능을 포함합니다.
|
||||
|
||||
### 프로젝트 구조
|
||||
```
|
||||
/gagyeebu
|
||||
├── index.html # 메인 페이지
|
||||
├── style.css # CSS 파일
|
||||
├── script.js # JavaScript 파일
|
||||
└── server.js # 서버 스크립트 (Node.js + Express)
|
||||
```
|
||||
|
||||
### 1. `index.html` - 메인 페이지
|
||||
HTML 구조를 만들고, 수입 및 지출을 입력하는 폼과 기록을 보여줄 테이블을 포함합니다.
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>가계부</title>
|
||||
<link rel="stylesheet" href="style.css">
|
||||
</head>
|
||||
<body>
|
||||
<h1>개인 가계부</h1>
|
||||
|
||||
<form id="transaction-form">
|
||||
<label for="date">날짜:</label>
|
||||
<input type="date" id="date" required>
|
||||
|
||||
<label for="description">항목:</label>
|
||||
<input type="text" id="description" placeholder="항목" required>
|
||||
|
||||
<label for="income">수입:</label>
|
||||
<input type="number" id="income" placeholder="수입 금액">
|
||||
|
||||
<label for="expense">지출:</label>
|
||||
<input type="number" id="expense" placeholder="지출 금액">
|
||||
|
||||
<button type="submit">추가</button>
|
||||
</form>
|
||||
|
||||
<table id="transactions-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>날짜</th>
|
||||
<th>항목</th>
|
||||
<th>수입</th>
|
||||
<th>지출</th>
|
||||
<th>잔액</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<!-- 기록이 여기에 표시됩니다 -->
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<script src="script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
### 2. `style.css` - 스타일링
|
||||
간단한 CSS로 페이지를 스타일링합니다.
|
||||
|
||||
```css
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
margin: 20px;
|
||||
padding: 0;
|
||||
background-color: #f4f4f4;
|
||||
}
|
||||
|
||||
h1 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
form {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
label {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
input {
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 5px 15px;
|
||||
background-color: #4CAF50;
|
||||
color: white;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: #45a049;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
th, td {
|
||||
padding: 10px;
|
||||
text-align: left;
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
```
|
||||
|
||||
### 3. `script.js` - 클라이언트 사이드 스크립트
|
||||
JavaScript로 폼 제출을 처리하고, 서버와 상호작용하는 코드를 작성합니다.
|
||||
|
||||
```javascript
|
||||
document.getElementById('transaction-form').addEventListener('submit', function(event) {
|
||||
event.preventDefault();
|
||||
|
||||
const date = document.getElementById('date').value;
|
||||
const description = document.getElementById('description').value;
|
||||
const income = document.getElementById('income').value || 0;
|
||||
const expense = document.getElementById('expense').value || 0;
|
||||
|
||||
const data = { date, description, income, expense };
|
||||
|
||||
fetch('/add-transaction', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(data)
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
addTransactionToTable(date, description, income, expense, data.balance);
|
||||
} else {
|
||||
alert('Error: ' + data.error);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function addTransactionToTable(date, description, income, expense, balance) {
|
||||
const table = document.getElementById('transactions-table').getElementsByTagName('tbody')[0];
|
||||
const newRow = table.insertRow();
|
||||
|
||||
const dateCell = newRow.insertCell(0);
|
||||
const descriptionCell = newRow.insertCell(1);
|
||||
const incomeCell = newRow.insertCell(2);
|
||||
const expenseCell = newRow.insertCell(3);
|
||||
const balanceCell = newRow.insertCell(4);
|
||||
|
||||
dateCell.textContent = date;
|
||||
descriptionCell.textContent = description;
|
||||
incomeCell.textContent = income;
|
||||
expenseCell.textContent = expense;
|
||||
balanceCell.textContent = balance;
|
||||
}
|
||||
```
|
||||
|
||||
### 4. `server.js` - 서버 사이드 스크립트 (Node.js + Express + PostgreSQL)
|
||||
Node.js와 Express를 사용해 서버를 구축하고, PostgreSQL과 연결하여 데이터를 저장합니다.
|
||||
|
||||
#### 4.1 `server.js` 파일 작성
|
||||
```javascript
|
||||
const express = require('express');
|
||||
const bodyParser = require('body-parser');
|
||||
const { Pool } = require('pg');
|
||||
|
||||
const app = express();
|
||||
app.use(bodyParser.json());
|
||||
app.use(express.static('public'));
|
||||
|
||||
const pool = new Pool({
|
||||
user: 'username',
|
||||
host: 'localhost',
|
||||
database: 'gagyeebu',
|
||||
password: 'password',
|
||||
port: 5432,
|
||||
});
|
||||
|
||||
app.post('/add-transaction', async (req, res) => {
|
||||
const { date, description, income, expense } = req.body;
|
||||
|
||||
try {
|
||||
await pool.query(
|
||||
'INSERT INTO transactions (date, description, income, expense) VALUES ($1, $2, $3, $4)',
|
||||
[date, description, income, expense]
|
||||
);
|
||||
|
||||
const result = await pool.query('SELECT SUM(income - expense) AS balance FROM transactions');
|
||||
const balance = result.rows[0].balance;
|
||||
|
||||
res.json({ success: true, balance });
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
res.json({ success: false, error: 'Database error' });
|
||||
}
|
||||
});
|
||||
|
||||
app.listen(3000, () => {
|
||||
console.log('Server is running on http://localhost:3000');
|
||||
});
|
||||
```
|
||||
|
||||
### 5. PostgreSQL 테이블 생성
|
||||
PostgreSQL에 테이블을 생성하는 SQL 명령어입니다.
|
||||
|
||||
```sql
|
||||
CREATE DATABASE gagyeebu;
|
||||
\c gagyeebu;
|
||||
|
||||
CREATE TABLE transactions (
|
||||
id SERIAL PRIMARY KEY,
|
||||
date DATE NOT NULL,
|
||||
description VARCHAR(255) NOT NULL,
|
||||
income NUMERIC(10, 2) DEFAULT 0.00,
|
||||
expense NUMERIC(10, 2) DEFAULT 0.00
|
||||
);
|
||||
```
|
||||
|
||||
### 요약
|
||||
- `index.html`: 사용자가 데이터를 입력할 수 있는 메인 페이지.
|
||||
- `style.css`: 페이지 스타일링을 위한 CSS 파일.
|
||||
- `script.js`: 폼 제출을 처리하고 서버와 통신하는 JavaScript 파일.
|
||||
- `server.js`: Node.js와 Express를 사용해 서버를 구성하고 PostgreSQL에 데이터를 저장하는 서버 스크립트.
|
||||
|
||||
이 구조를 활용해 웹 기반의 간단한 가계부를 구축할 수 있습니다. 로컬 환경에서 이 프로젝트를 실행하려면, Node.js, Express, PostgreSQL이 필요하며, 각 파일을 해당 서버에 배치하고 `server.js`를 실행해야 합니다.
|
||||
Reference in New Issue
Block a user