테스트 사이트 - 개발 중인 베타 버전입니다

클로드나 gpt로 사이트 첫 설계도 작성시..

· 4개월 전 · 360 · 1

# 📘 효율적인 시스템 설계서 작성법 - 실전 예시 기반

 

개발을 하다 보면 "정말 잘 짜여진 설계서"가 얼마나 중요한지 뼈저리게 느끼게 됩니다. 특히 **팀 단위 개발**, 또는 **B2B 서비스 운영**에서는 더더욱 그렇죠. 오늘은 제가 실제로 활용하는 설계 방식 중 일부를 응용하여, **"프레임워크 없이도 완전히 작동하는 시스템 설계서"** 작성법을 예시와 함께 소개해드릴게요.

 

---

 

## ✅ 핵심 원칙 5가지

 

1. **DB 테이블 스키마는 하나의 문서에서 모두 정의**

2. **모든 함수는 네이밍 규칙을 따름**

3. **ENUM 비교 시 문자열로만 처리 (`=== 'active'` 등)**

4. **리턴 포맷은 반드시 `['success' => true/false, ...]`**

5. **에러 발생 시 항상 이유가 포함된 메시지 반환**

 

---

 

## 📦 예시 설계 구조

 

> 아래는 예시 시스템 `MyBid`의 일부 설계입니다. 실제와 유사하나 구조만 참고용으로 제공합니다.

 

### 🔹 테이블 예시

 

```sql

CREATE TABLE my_user (

    id INT AUTO_INCREMENT PRIMARY KEY,

    login_id VARCHAR(50) UNIQUE NOT NULL,

    password VARCHAR(255) NOT NULL,

    email VARCHAR(100) UNIQUE NOT NULL,

    role ENUM('user', 'manager', 'admin') DEFAULT 'user',

    status ENUM('active', 'suspended') DEFAULT 'active',

    created_at DATETIME DEFAULT CURRENT_TIMESTAMP

);

```

 

### 🔹 함수 네이밍 규칙

 

- `my_user_create($data)` : 사용자 생성

- `my_user_get($id)` : 사용자 단건 조회

- `my_user_list($filter)` : 사용자 목록

- `my_user_update($id, $data)` : 수정

- `my_user_delete($id)` : 삭제

 

### 🔹 유틸 함수 예시

 

```php

function util_hash_password($plain) {

    return password_hash($plain, PASSWORD_BCRYPT);

}

 

function util_verify_password($plain, $hash) {

    return password_verify($plain, $hash);

}

```

 

---

 

## 🧩 실제 구현 함수 예시

 

```php

function my_user_get($id) {

    global $db;

 

    if (!is_numeric($id)) {

        return ['success' => false, 'error' => 'Invalid ID'];

    }

 

    $stmt = mysqli_prepare($db, "SELECT * FROM my_user WHERE id = ?");

    mysqli_stmt_bind_param($stmt, "i", $id);

    mysqli_stmt_execute($stmt);

    $result = mysqli_stmt_get_result($stmt);

 

    if ($row = mysqli_fetch_assoc($result)) {

        unset($row['password']); // 비밀번호 제거

        return ['success' => true, 'data' => $row];

    }

 

    return ['success' => false, 'error' => 'User not found'];

}

```

 

---

 

## 🗂 페이지 매핑 예시

 

| 페이지명 | 주요 기능 | 사용 함수 |

|----------------------|----------------------------------|-------------------------------------|

| `login.php` | 로그인 처리 | `my_user_get()`, `util_verify_password()` |

| `register.php` | 회원가입 | `my_user_create()`, `util_hash_password()` |

| `admin_users.php` | 관리자용 회원관리 | `my_user_list()`, `my_user_update()` |

| `profile.php` | 내 정보 조회/수정 | `my_user_get()`, `my_user_update()` |

 

---

 

## 📎 실전 팁

 

- 프레임워크를 쓰지 않아도, **규칙만 지키면 개발 속도가 훨씬 빨라집니다**.

- 함수 이름만 봐도 기능이 명확히 드러나야 합니다.

- 유틸리티 함수는 꼭 따로 모아서 관리하세요.

- 페이지마다 어떤 함수가 쓰이는지 매핑표를 만들면 협업이 쉬워집니다.

 

---

 

## ✅ 마무리

 

설계서가 명확하면, 개발 속도도 배가 됩니다.  

"한 명이 만든 구조"가 아니라, **"모두가 이해할 수 있는 체계"**로 작성해야 오랜 시간 안정적으로 운영할 수 있습니다.

 

저는 이런 방식으로 중소규모 웹서비스부터 꽤 정교한 분석 시스템까지 구축한 경험이 있는데요, 다음 포스팅에서는 **입찰 시뮬레이터처럼 특수 로직이 많은 시스템의 설계 방식**도 소개해드릴게요.

 

읽어주셔서 감사합니다.

 

문구는 잘 다듬어주긴 하네요.

 

[요약]

1. php로 정의할 함수 접두접미규칙 및 스키마랑 동일하게.

2. 커서같은 에이전트에게 항상 참조시켜서 자기 마음대로 못 만들게 강제 규칙을 적용.

3. 미리 정한만큼 디버깅시에도 용이.

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 1개

4개월 전

db sql 작성, 함수, 상수 작성, 등 프런트에서 백엔드까지 혼자서 해보고 있는데요

db table를 그때 그때 만들고, 함수도 그때 그때 만들다보니 나중에는 흥클어진 실타레처럼 되었습니다.

공감합니다.

처음에 큰틀에서 계획을 잡고 그기에 맞게 하는것이 좋은것 같습니다.

게시글 목록

번호 제목
1188
1187
1186
1185
1177
1176
1173
1152
1150
1146
1145
1141
1140
1138
1137
1136
1133
1132
1130
1128
1126
1121
1116
1114
1111
1094
1093
1089
1086
1084