자바스크립트를 허용해주세요.
[ 자바스크립트 활성화 방법 ]
from Mohon Aktifkan Javascript!
 

[보안] 2.웹 취약점 실습용 서버/클라이언트 + CRUD + HTTP GET/POST

728x90

1. 개념 정리

🔖 서버(Server) & 클라이언트(Client)

  • 클라이언트: 요청(Request)을 보내는 쪽 (브라우저, 맵 등)
  • 서버: 요청을 받아 처리하고 응답(Response)을 보내는 쪽
  • 통신 규약: HTTP/HTTPS
    • GET: 데이터 조회
    • POST: 데이터 생성
    • PUT/PATCH: 데이터 수정
    • DELETE: 데이터 삭제

✅ 2.Node.js + Express 버전

📂 폴더 구조

nr-crud/
 ├─ server.js
 ├─ package.json

 

📂 설치

npm init -y
npm install express body-parser

 

 📂 server.js

const express = require("express");
const bodyParser = require("body-parser");

const app = express();
const port = 3000;

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

let users = [];

// [C] Create 
app.post('/users', (req,res) =>{
    const { name, email } = req.body;
    const id = users.length + 1;
    users.push({ id, name, email })
    res.json({ message:"User created", user:{ id, name, email }});
})

// [R] Read All
app.get('/users', (req, res) => {
    res.json(users);
})

// [R] Read One
app.get('/users/:id', (req, res) => {
    const user = users.find(u => u.id == req.params.id);
    user ? res.json(user) : res.status(404).json({ error: "User not found"});
});

// [U] Update 
app.put('/users/:id', (req,res) => {
    const user = users.find(u => u.id == req.params.id);
    if (user) {
        user.name = req.body.name || user.name;
        user.email = req.body.email || user.email;
        res.json({ message: "User Updated", user });
    } else {
        res.status(404).json({ error: "User not found" });
    }
});

// [D] Delete
app.delete('/users/:id', (req,res) => {
    users = users.filter(u => u.id != req.params.id);
    res.json({ message: "User Deleted!" });
})

app.listen(port, () => {
    console.log(`Server running at http://localhost:${port}`)
})

 ✅ 3. Python + Flask 버전

📂 폴더 구조

flask-crud/
 ├─ app.py
 ├─ requirements.txt

 

📂 설치 

sudo apt install python3-venv -y
python3 -m venv venv
source venv/bin/activate
pip install flask

 

📂 간단한 Flask 서버 코드 만들기 

from flask import Flask, request, jsonify 

app = Flask(__name__)

users = []

# Create 
@app.route('/users', methods=['POST'])
def create_user():
   data = request.get_json()
   name = data.get('name')
   email = data.get('email')
   user = {'id': len(users) + 1, 'name': name, 'email': email}
   users.append(user)
   return jsonify({'message': 'User created', 'user': user}), 201


# Read All
@app.route('/users', methods=['GET'])
def get_users():
    return jsonify(users)


# Read One 
@app.route('/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
     user = next((u for u in users if u['id'] == user_id), None)
     if user:
         return jsonify(user)
     return jsonify({"error": "User not found"}),404

# Update
@app.route('/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
    data = request.get_json()
    user = next((u for u in users if u['id'] == user.id), None)
    if user:
        user['name'] = data.get('name', user['name'])
        user['email'] = data.get('email', user['email'])
        return jsonify({"message": "User updated", "user": user})
    return jsonify({"error": "User not found"}), 404


# Delete
app.route('/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
    global users
    users = [u for u in users if u['id'] != user_id]
    return jsonify({"message": "User deleted"}) 


if __name__ == "__main__":
    app.run(debug=True, host="0.0.0.0", port=5000)

 

📂 Flask 서버 실행

python3 app.py
  • 실행 후 http://localhost:5000 접속 가능
  • 같은 네트워크의 다른 장비에서도 http://<칼리_IP>:5000 접속 가능
  • PostMan 에서 API 요청 방법은 해당 링크에서 참고 (메소드는 동일)

✅ POST 요청 테스트

터미널에서도 curl로 테스트가 가능합니다.

curl -X POST http://localhost:5000/users \
     -H "Content-Type: application/json" \
     -d '{"name": "Alice", "email": "alice@example.com"}'

 

 

GitHub - Koras02/node-express-karl

Contribute to Koras02/node-express-karl development by creating an account on GitHub.

github.com

 

 

GitHub - Koras02/flask-crud-example

Contribute to Koras02/flask-crud-example development by creating an account on GitHub.

github.com

 

728x90
LIST