Skip to content

Instantly share code, notes, and snippets.

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>๐Ÿ’ช ๋‹ค์ด์–ดํŠธ ์ฑŒ๋ฆฐ์ง€ 2025</title>
<!-- ํ•„์ˆ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: Chart.js ๋ฐ Date Adapter (์ˆœ์„œ ์ค‘์š”) -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdn.jsdelivr.net/npm/date-fns"></script>

๐ŸŽฎ ๊ฑฐ์น˜ํ˜• ์ฝ˜์†” ๊ฒŒ์ž„๊ธฐ ์„ธ๋Œ€๋ณ„ ์š”์•ฝ (์ˆ˜์ •๋ณธ)

์ œ๊ณตํ•ด์ฃผ์‹  ๋ฌธ์„œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ฝ˜์†” ๊ฒŒ์ž„๊ธฐ์˜ ์„ธ๋Œ€๋ณ„ ์ฃผ์š” ๊ธฐ์ข…, ์‹œ๊ธฐ, ๊ทธ๋ฆฌ๊ณ  ํ•ต์‹ฌ ๊ธฐ์ˆ  ๋ณ€ํ™”๋ฅผ ์š”์•ฝํ•œ ํ‘œ์ž…๋‹ˆ๋‹ค.

์„ธ๋Œ€ ์‹œ๊ธฐ ์ฃผ์š” ๊ธฐ์ข… (๋Œ€ํ‘œ/๊ฒฝ์Ÿ) ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ ๋น„๊ณ 
1์„ธ๋Œ€ 70๋…„๋Œ€ ์ดˆ๋ฐ˜ ๋งˆ๊ทธ๋‚˜๋ณต์Šค ์˜ค๋””์„ธ์ด, ํ ํƒœ๋™๊ธฐ CPU ์—†์Œ, ๊ฒŒ์ž„ ๋‚ด์žฅํ˜•
2์„ธ๋Œ€ 70๋…„๋Œ€ ํ›„๋ฐ˜ ์•„ํƒ€๋ฆฌ 2600, ์ธํ…”๋ฆฌ๋น„์ „ CPU & ์นดํŠธ๋ฆฌ์ง€ ๋กฌํŒฉ ๊ต์ฒด ๋ฐฉ์‹ ๋„์ž…, ์•„ํƒ€๋ฆฌ ์‡ผํฌ๋กœ ๋ชฐ๋ฝ
<!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="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

์ด ์Šคํฌ๋ฆฐ์ƒท์€ ๋ธ”๋ฆฌ์ž๋“œ์˜ MMORPG ์›”๋“œ ์˜ค๋ธŒ ์›Œํฌ๋ž˜ํ”„ํŠธ(World of Warcraft), ๊ทธ์ค‘์—์„œ๋„ ์ตœ์‹  ํ™•์žฅํŒฉ์ธ **๋‚ด๋ถ€ ์ „์Ÿ(The War Within)**์˜ ํ”Œ๋ ˆ์ด ํ™”๋ฉด์ž…๋‹ˆ๋‹ค.

์ƒ์„ธํ•œ ๋ถ„์„ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1. ์บ๋ฆญํ„ฐ ์ •๋ณด

  • ์ด๋ฆ„: ๋ฃจ๋‚˜๋ณด์Šค
  • ๋ ˆ๋ฒจ: 80 (๋‚ด๋ถ€ ์ „์Ÿ ํ™•์žฅํŒฉ์˜ ๋งŒ๋ ™์ž…๋‹ˆ๋‹ค.)
  • ์ง์—…: ์‚ฌ์ œ(Priest), ๊ทธ์ค‘์—์„œ๋„ **์•”ํ‘ ์‚ฌ์ œ(Shadow Priest / ์•”์‚ฌ)**์ž…๋‹ˆ๋‹ค.
    • ๊ทผ๊ฑฐ: ํ•˜๋‹จ ์Šคํ‚ฌ์ฐฝ(์•ก์…˜๋ฐ”)์— ๋ณด์ด๋Š” ์•„์ด์ฝ˜๋“ค์ด ์•”ํ‘ ์‚ฌ์ œ์˜ ์ฃผ์š” ์Šคํ‚ฌ์ธ '์–ด๋‘ ์˜ ํ˜•์ƒ', 'ํกํ˜ˆ์˜ ์„ ๋ฌผ', '๊ณ ํ†ต', 'ํŒŒ๋ฉธ์˜ ์—ญ๋ณ‘', '๊ณตํ—ˆ์˜ ๋ฐฉ์ถœ' ๋“ฑ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์บ๋ฆญํ„ฐ ์—ญ์‹œ ๋ณด๋ผ์ƒ‰ ์˜ค๋ผ๋ฅผ ํ’๊ธฐ๋Š” ์•”ํ‘ ํ˜•์ƒ์„ ์ทจํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ข…์กฑ: ์บ๋ฆญํ„ฐ์˜ ์™ธํ˜•(๊ท€, ์ฒดํ˜•)๊ณผ ์•”ํ‘ ์‚ฌ์ œ๋ผ๋Š” ํ…Œ๋งˆ๋ฅผ ๋ณผ ๋•Œ ๊ณตํ—ˆ ์—˜ํ”„ ํ˜น์€ ๋ธ”๋Ÿฌ๋“œ ์—˜ํ”„๋กœ ์ถ”์ •๋ฉ๋‹ˆ๋‹ค.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vintage Weekly Planner ๐Ÿ“œ</title>
<!-- ํฐํŠธ ๋กœ๋”ฉ ์ตœ์ ํ™” (Preload) -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

LunaTools ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ธฐ๋Šฅ์„ฑ, ์ฝ”๋“œ ํ’ˆ์งˆ/์•„ํ‚คํ…์ฒ˜, ์„ฑ๋Šฅ/์ตœ์ ํ™”, ๋ณด์•ˆ/ํ”„๋ผ์ด๋ฒ„์‹œ, UI/UX ๋””์ž์ธ ๋“ฑ 5๊ฐ€์ง€ ์ฃผ์š” ๋ถ„์•ผ๋กœ ๋‚˜๋ˆ„์–ด ๋ถ„์„ ๋ฐ ํ‰๊ฐ€๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์€ "์›น ๋ธŒ๋ผ์šฐ์ง•์„ ์œ„ํ•œ ๋งฅ๊ฐ€์ด๋ฒ„ ์นผ"์ฒ˜๋Ÿผ ๋งค์šฐ ๋‹ค์–‘ํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค. Manifest V3๋ฅผ ์ค€์ˆ˜ํ•˜๋ฉฐ, ๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ •๊ตํ•˜๊ฒŒ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


1. ๊ธฐ๋Šฅ์„ฑ ๋ฐ ์‚ฌ์šฉ์„ฑ (Functionality & Usability)

์ ์ˆ˜: 95 / 100

  • ๋ถ„์„:
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>๐ŸŒŸ ์Šต๊ด€ ํŠธ๋ž˜์ปค ๐Ÿš€</title>
<!-- Chart.js CDN ์ถ”๊ฐ€ -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style>
.heatmap-days,.heatmap-grid{grid-template-rows:repeat(7,16px)}.calendar-day.other-month,.dragging{opacity:.5}:root{--bg-gradient:radial-gradient(circle at top left, rgba(121, 151, 255, 0.2), transparent 40%),radial-gradient(circle at bottom right, rgba(255, 121, 238, 0.2), transparent 40%);--bg-color:#f5f5f7;--content-bg:rgba(255, 255, 255, 0.6);--secondary-bg:rgba(255, 255, 255, 0.4);--text-color:#1d1d1f;--text-secondary-color:rgba(60, 60, 67, 0.85);--primary-color:#007aff;--primary-hover-color:#006ee6;--border-color:rgba(0, 0, 0, 0.1);--shadow-color:rgba(0, 0, 0, 0.08);--success-color:#34c759;--missed-color:#ff3b30;--warning-color:#ff9500;--today-bg-color:rgba(0, 122, 255, 0.1);--modal-backdrop:rgba(0, 0, 0, 0.3);--saturday-color:#0
// manifest.json
{
"manifest_version": 3,
"name": "๋”๋ธ” ๊ฒ€์ƒ‰ (์ž๋™ ์ˆ˜์ •ํŒ)",
"version": "1.3",
"description": "์ฃผ์†Œ์ฐฝ์—์„œ ๊ตฌ๊ธ€ ๊ฒ€์ƒ‰ ์‹œ ์ž๋™์œผ๋กœ Google AI ๊ฒ€์ƒ‰ ํƒญ์„ ํ•จ๊ป˜ ์—ฝ๋‹ˆ๋‹ค.",
"permissions": [
"tabs"
],
"background": {
// ==UserScript==
// @name ๋ชจ๋“  ์‚ฌ์ดํŠธ ์šฐํด๋ฆญ/๋“œ๋ž˜๊ทธ/์„ ํƒ ์ฐจ๋‹จ ํ•ด์ œ
// @name:en Enable Right-Click, Drag, and Select for All Sites
// @namespace http://tampermonkey.net/
// @version 1.5
// @description ์›น์‚ฌ์ดํŠธ์—์„œ ๊ธˆ์ง€๋œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ํด๋ฆญ, ๋“œ๋ž˜๊ทธ, ํ…์ŠคํŠธ ์„ ํƒ์„ ์—ฌ๋Ÿฌ ๊ธฐ๋ฒ•์„ ํ†ตํ•ด ์ข…ํ•ฉ์ ์œผ๋กœ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.
// @description:en Comprehensive script to re-enable right-click, drag, and text selection on websites using multiple techniques.
// @author Gemini
// @match *://*/*
// @grant GM_addStyle

๋„ค, ์•„์ฃผ ์˜ˆ๋ฆฌํ•œ ๊ด€์ฐฐ์ž…๋‹ˆ๋‹ค! ์ด๋ฏธ ์ •๋ ฌ๋œ ์ƒํƒœ์—์„œ ๋‹ค์‹œ ์ •๋ ฌ์„ ์‹œ๋„ํ–ˆ์„ ๋•Œ ํƒญ ์ˆœ์„œ๊ฐ€ ๋˜ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์€ ๋ช…๋ฐฑํ•œ ๋ฒ„๊ทธ์ด๋ฉฐ, ์‚ฌ์šฉ์ž์˜ ์˜ˆ์ƒ๋Œ€๋กœ๋ผ๋ฉด ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์˜ ์›์ธ์€ background.js ํŒŒ์ผ์˜ ํƒญ ์ •๋ ฌ ๋กœ์ง, ํŠนํžˆ _sortAndMoveTabsInWindow ํ•จ์ˆ˜์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜๋ฉด, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํƒญ ์ด๋™(move) ๋ช…๋ น์„ ๋™์‹œ์— ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉด์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์Ÿ ์กฐ๊ฑด(Race Condition) ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ์˜ ์ฝ”๋“œ ๋ถ„์„ (background.js)

// background.js ๋‚ด์˜ TabManager._sortAndMoveTabsInWindow ํ•จ์ˆ˜