Skip to main content

๐Ÿš€ PHP ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง - 300๋ฐฐ ์„ฑ๋Šฅ ๊ฐœ์„  ์‚ฌ๋ก€

ยท 5 min read
Bundaberg Man
Maintainer of Docusaurus

๐Ÿ“ ๊ฐœ์š”โ€‹

๋ ˆ๊ฑฐ์‹œ PHP ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ ๊ฐœ์„  ์‚ฌ๋ก€๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. 300๋ถ„์ด ๊ฑธ๋ฆฌ๋˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ž‘์—…์„ 5์ดˆ๋กœ ๋‹จ์ถ•ํ•œ ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ” ๋ฌธ์ œ ์ƒํ™ฉโ€‹

โŒ ๊ธฐ์กด ์‹œ์Šคํ…œ์˜ ๋ฌธ์ œ์ โ€‹

  • 300๋ช…์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ์•ฝ 300๋ถ„ ์†Œ์š” (1์ธ๋‹น 1๋ถ„)
  • ์šด์˜ํŒ€์˜ ์—…๋ฌด ํšจ์œจ์„ฑ ์ €ํ•˜
  • ๋ฐ์ดํ„ฐ๊ฐ€ ์ฆ๊ฐ€ํ• ์ˆ˜๋ก ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ์ฆ๊ฐ€

๐Ÿค” ์„ฑ๋Šฅ ์ €ํ•˜์˜ ์ฃผ์š” ์›์ธโ€‹

  1. ๋น„ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋ฐฉ์‹

    // ๊ธฐ์กด: ๋‹จ๊ฑด ์กฐํšŒ ๋ฐ˜๋ณต
    for($i = 0; $i < count($list); $i++) {
    $sql = "SELECT id, member_info FROM ๊ณ ๊ฐํ…Œ์ด๋ธ” WHERE id = '$user_id'";
    // ๋งค ๋ฐ˜๋ณต๋งˆ๋‹ค DB ์กฐํšŒ ๋ฐœ์ƒ
    // ๊ณ ๊ฐ์ด ์ž…๊ณผ ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์กฐํšŒ 1
    // for๋ฌธ ์•ˆ์—์„œ ๊ณ ๊ฐ ์ •๋ณด๊ฐ€ ์žˆ๋Š” ๋˜๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์กฐํšŒ
    // ๊ณ ๊ฐ ์ •๋ณด๊ฐ€ ์žˆ๋Š” ๋˜๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์กฐํšŒ

    // ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ ์กฐํšŒ๊ฐ€ ๋ฐ˜๋ณต๋˜์–ด ์„ฑ๋Šฅ ์ €ํ•˜
    }
  2. ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ฏธํก

    • ๊ฑด๋ณ„ ์ฒ˜๋ฆฌ ๋ฐ ์ปค๋ฐ‹์œผ๋กœ ์ธํ•œ ์˜ค๋ฒ„ํ—ค๋“œ
    • ๋ถ€๋ถ„ ์‹คํŒจ ์‹œ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ๋ฌธ์ œ

โšก ๊ฐœ์„  ๋ฐฉ์•ˆโ€‹

1. ๐Ÿ’พ ๋ฐ์ดํ„ฐ ์กฐํšŒ ์ตœ์ ํ™”โ€‹

// ๊ฐœ์„ : IN ์ ˆ์„ ํ™œ์šฉํ•œ ์ผ๊ด„ ์กฐํšŒ
$user_ids = array_column($list, 'user_id');
$sql = "SELECT * FROM ๊ณ ๊ฐํ…Œ์ด๋ธ” WHERE id IN (" . implode(',', $user_ids) . ")";
$result = sql_query($sql);

// ๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ ๊ตฌํ˜„
$user_map = [];
while($row = sql_fetch_array($result)) {
$user_map[$row['id']] = $row; // ์‚ฌ์šฉ์ž ID๋ฅผ ํ‚ค๋กœ ํ•˜๋Š” ์—ฐ๊ด€ ๋ฐฐ์—ด ์ƒ์„ฑ
}

// ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ ํ™œ์šฉ ์˜ˆ์‹œ
foreach($list as $item) {
$user_id = $item['user_id'];
if (isset($user_map[$user_id])) {
$user_info = $user_map[$user_id]; // DB ์กฐํšŒ ์—†์ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฆ‰์‹œ ์กฐํšŒ
// ์ถ”๊ฐ€ ์ฒ˜๋ฆฌ ๋กœ์ง...
}
}

๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ ํšจ๊ณผโ€‹

  • ๐Ÿš€ DB ์กฐํšŒ ํšŸ์ˆ˜: 300ํšŒ โ†’ 1ํšŒ๋กœ ๊ฐ์†Œ
  • ๐Ÿ’ก ์กฐํšŒ ์†๋„: O(n) โ†’ O(1) ๋ณต์žก๋„๋กœ ๊ฐœ์„ 
  • ๐Ÿ”„ ๋ฐ์ดํ„ฐ ์žฌ์‚ฌ์šฉ: ๋™์ผ ๋ฐ์ดํ„ฐ ๋ฐ˜๋ณต ์กฐํšŒ ์ œ๊ฑฐ

2. ๐Ÿ“ฆ Bulk Insert ๊ตฌํ˜„โ€‹

function bulk_insert($tableName, $columns, $values) {
$sql = "INSERT INTO {$tableName} (" . implode(',', $columns) . ") VALUES ";
$valueStrings = [];

foreach($values as $row) {
$valueStrings[] = "(" . implode(',', array_map('sql_escape', $row)) . ")";
}

$sql .= implode(',', $valueStrings);
return sql_query($sql);
}

3. ๐Ÿ”„ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๊ฐœ์„ โ€‹

sql_begin_transaction();
try {
// ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ
$validated_data = processValidate($input_data);

// Bulk Insert ์‹คํ–‰
bulk_insert('score_table', $columns, $validated_data);
bulk_insert('history_table', $columns, $validated_data);

sql_commit();
} catch (Exception $e) {
sql_rollback();
log_error($e->getMessage());
return ['success' => false, 'message' => '์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.'];
}

๐Ÿ“Š ๊ฐœ์„  ๊ฒฐ๊ณผโ€‹

๊ตฌ๋ถ„์ฒ˜๋ฆฌ ์‹œ๊ฐ„๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰DB ๋ถ€ํ•˜
๊ฐœ์„  ์ „300๋ถ„๋†’์Œ๋†’์Œ
๊ฐœ์„  ํ›„5์ดˆ์ตœ์ ํ™”๋‚ฎ์Œ

โœจ ์ฃผ์š” ๊ฐœ์„  ํฌ์ธํŠธโ€‹

  1. ๐Ÿ”‹ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ˜ธ์ถœ ์ตœ์†Œํ™”

    • 300 * 10ํšŒ โ†’ 10ํšŒ๋กœ ๊ฐ์†Œ
    • ๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ ํ™œ์šฉ
  2. โšก ์ผ๊ด„ ์ฒ˜๋ฆฌ ๋„์ž…

    • Bulk Insert๋กœ Insert ์ฟผ๋ฆฌ ์ตœ์†Œํ™”
    • ํŠธ๋žœ์žญ์…˜ ๋‹จ์œ„ ์ตœ์ ํ™”
  3. ๐Ÿ“ˆ ์ฝ”๋“œ ํ’ˆ์งˆ ํ–ฅ์ƒ

    • ๋ชจ๋“ˆํ™” ๋ฐ ํ•จ์ˆ˜ ๋ถ„๋ฆฌ
    • ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๊ฐ•ํ™”
    • ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ๋กœ์ง ์ฒด๊ณ„ํ™”

๐Ÿ’ซ ๋งˆ์น˜๋ฉฐโ€‹

์ด๋ฒˆ ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•ด ์–ป์€ ๊ตํ›ˆ:

  • ๐ŸŽฏ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋„ ์ ์ ˆํ•œ ๋ฆฌํŒฉํ† ๋ง์œผ๋กœ ํฐ ์„ฑ๋Šฅ ๊ฐœ์„ ์ด ๊ฐ€๋Šฅ
  • ๐Ÿ’ก ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—… ์ตœ์ ํ™”์˜ ์ค‘์š”์„ฑ
  • ๐Ÿ—๏ธ ์ฒด๊ณ„์ ์ธ ์ฝ”๋“œ ๊ตฌ์กฐ์˜ ํ•„์š”์„ฑ

์•ž์œผ๋กœ๋„ ์ง€์†์ ์ธ ์ฝ”๋“œ ๊ฐœ์„ ๊ณผ ํ•™์Šต์„ ํ†ตํ•ด ๋” ๋‚˜์€ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด๊ฐ€๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Legacy..Legacy..Legacy.. ๋‚ด๊ฐ€ ๋งŒ๋“ค๋• ์ง„์งœ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์•ˆ์ƒ๊ธฐ๋„๋ก ๋…ธ๋ ฅํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ์ฐธ๊ณ 

์‹ค์ œ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ๊ฒ€์ฆ๋œ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค. ์œ ์‚ฌํ•œ ์„ฑ๋Šฅ ์ด์Šˆ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ณ ๋ คํ•ด๋ณด์„ธ์š”.