[Part 2/50] Building Burnout Radar: 3,000+ Char Tech & Behavioral Architecture Breakdown
1. π― νλ‘μ νΈ κ°λ° λ°°κ²½ λ° λ¬Έμ μμ (Introduction & Background)
νλ λμ§νΈ μ¬νμμ μ§μ λ Έλμ, μ§μ₯μΈ, ν리λμ, κ°λ°μλ€μ λ§€μΌκ°μ΄ μλ§μ μ 보μ μ 무 μ€νΈλ μ€, μ μμ κ³ κ° μμμ μ΄μκ°κ³ μμ΅λλ€. λ¨μν κΈ°λ₯μ± μΉ μλΉμ€λ κ±°λν λ¨μΌ(Monolithic) SaaS μμ€ν μ μ μ μκ² λ³΅μ‘ν νμκ°μ κ³Ό κ³Όλν κ°μΈμ 보 μ λ ₯, λ¬΄κ±°μ΄ μ€ν¬λ¦½νΈ λ‘λ© μκ°μ μꡬνκ³€ ν©λλ€.
μ΄λ¬ν λ¬Έμ μμ μμμ Burnout Radar νλ‘μ νΈκ° νμνμ΅λλ€. μ΄ νλ‘μ νΈλ "λ¨μν¨(KISS μμΉ)κ³Ό κ°μΈμ 보 보νΈ, 0.3μ΄ μ΄κ³ μ λΈλΌμ°μ μ°μ°"μ μ§ν₯νλ©°, μ¬μ©μκ° λ‘κ·ΈμΈμ΄λ μ€μΉ μμ΄ μ¦μ μμ μ μ±ν₯κ³Ό μνλ₯Ό λ€κ°λλ‘ μ§λ¨ν μ μλλ‘ μ€κ³λ λ§μ΄ν¬λ‘ μΉ μ ν리μΌμ΄μ μ λλ€.
λΌμ΄λΈ μλΉμ€ λ°λ‘κ°κΈ°: https://burnout-radar.pomyjo.com
2. π§ ν΅μ¬ μ¬λ¦¬ν / νλμ¬λ¬΄ν / κΈ°μ μ΄λ‘ νλ μμν¬ (Core Theoretical Framework)
Burnout Radarμ λ¨μν μΌνμ± ν΄μ¦λ κ°λ²Όμ΄ μ¬λ¦¬ ν μ€νΈμ 머무λ₯΄μ§ μκ³ , κ²μ¦λ νμ λͺ¨λΈκ³Ό νλ νλκ³Όν λ° μμ μ¬λ¦¬ν λ°μ΄ν°λ₯Ό μ κΈ°μ μΌλ‘ μ‘°ν©νμ¬ μ€κ³λμμ΅λλ€.
π μ£Όμ μ§λ¨ 5λ μΆ λ° μ λ° μ€μ½μ΄λ§ λͺ¨λΈ
- μ μμ μ£Όλμ± λ° λͺ°μ λ μ§μ (Proactivity & Engagement): μ 무λ μΌμ κ³Όμ μ μν λ μμ μ΄ μ€μ€λ‘ μ£ΌλκΆμ μ₯λμ§, μΈλΆ μκ·Ήμ λ°μνλμ§ μΈ‘μ ν©λλ€.
- μ€νΈλ μ€ λμ² λ° ν볡 νλ ₯μ± (Stress Resilience): κ³Όλν μ 무 λ° λμΈκ΄κ³ κ°λ± μν©μμ μ μμ κ³ κ°μ μ΅μννκ³ λ³Έλ μνλ‘ λ³΅μλλ λ₯λ ₯μ νκ°ν©λλ€.
- μμ¬κ²°μ λ° κ°μ νΈν₯ μ‘°μ¨ (Decision-Making Bias): κ³Όλν νμ , μμ€ ννΌ, μΆ©λμ νλ¨ λ± λ¬΄μμμ νλ μ€λ₯λ₯Ό μκ°νν©λλ€.
- λμΈκ΄κ³ μν΅ λ° κ°μ μνΈμμ© (Interpersonal Dynamics): μμ¬, λλ£, μ°μΈ, μλ λ± νμΈκ³Όμ λν ν¨ν΄ λ° μ μ°© μ νμ λ€μ°¨μμΌλ‘ ν¬μν©λλ€.
- μ₯κΈ°μ μ±μ₯ λ° λΌμ΄ν λ£¨ν΄ μ΅μ ν (Long-Term Growth Roadmap): κ°μ μ κ·Ήλννκ³ μ½μ μ 보μν μ μλ μ€μ©μ νλ μ§μΉ¨μ μ μν©λλ€.
3. π» νλ‘ νΈμλ μκ³ λ¦¬μ¦ & μ½λ μν€ν μ² μ¬μΈ΅ ν΄μ€ (Technical Implementation)
λ³Έ νλ‘μ νΈλ λ¬΄κ±°μ΄ 3rd-party νλ μμν¬(React/Vue/Angular λ±)μ 50MB λ²λ€ νμΌ λμ , μμ μΉ νμ€(Vanilla HTML5, CSS3, ES6+ JavaScript)λ§μ μ¬μ©νμ¬ κ΅¬μΆλμμ΅λλ€.
β‘ μμ μλ°μ€ν¬λ¦½νΈ λ€μ°¨μ μ€μ½μ΄λ§ λ° λ Έλ©λΌμ΄μ μ΄μ μκ³ λ¦¬μ¦
function calculateNormalizedScores(userAnswers, weightMatrix) {
const dimensions = { dimensionA: 0, dimensionB: 0, dimensionC: 0, dimensionD: 0, dimensionE: 0 };
userAnswers.forEach((answerValue, index) => {
const weights = weightMatrix[index];
if (weights) {
Object.keys(weights).forEach(dimKey => {
dimensions[dimKey] += answerValue * weights[dimKey];
});
}
});
const normalizedResults = {};
Object.keys(dimensions).forEach(key => {
const rawVal = dimensions[key];
normalizedResults[key] = Math.min(100, Math.max(0, Math.round(rawVal)));
});
return normalizedResults;
}
μ΄ μκ³ λ¦¬μ¦μ μλ²λ‘ μ¬μ©μμ μλ΅ λ°μ΄ν°λ₯Ό λ¨ 1λ°μ΄νΈλ μ‘μ νμ§ μκ³ , 100% μ¬μ©μμ μΉ λΈλΌμ°μ λ©λͺ¨λ¦¬μμμ μ€μκ° κ³μ°λ©λλ€. λ°λΌμ κ°μΈμ 보 μ μΆ μνμ΄ μμ² μ°¨λ¨λλ©°, λ€νΈμν¬ μ§μ°(Latency)μ΄ μ ν μλ μ΄κ³ μ λ°μμ±μ 보μ₯ν©λλ€.
4. π¨ κΈλμ€λͺ¨νΌμ¦(Glassmorphism) UI μμ€ν & HTML5 Canvas μκ°ν (Design & UX)
μ¬μ©μμ μκ°μ λͺ°μ κ°μ κ·ΉλννκΈ° μν΄ modern μΉ λμμΈ νλ μμν¬μΈ Glassmorphism λμμΈ μμ€ν μ CSS λ³μ κΈ°λ°μΌλ‘ μ§μ ꡬννμμ΅λλ€.
π μ£Όμ UI/UX μ€κ³ κΈ°μ μ§ν
- Ambient Mesh Glow Orbs: CSS radial-gradientμ filter: blur(140px)λ₯Ό κ²°ν©νμ¬ μμνκ² μΌλ μ΄λ κ°μ λ°°κ²½ κ΄μ ꡬν
- Backdrop Filter & Frosted Glass: backdrop-filter: blur(24px) λ° λ°ν¬λͺ ν λ리λ₯Ό κ²°ν©νμ¬ λͺ½νμ μ΄κ³ μΈλ ¨λ μ 리 μ§κ° μ°μΆ
- HTML5 Canvas Pure Geometry Radar: Chart.js κ°μ μΈμ° λΌμ΄λΈλ¬λ¦¬ μμ΄ μΌκ°ν¨μ(Math.sin, Math.cos)λ₯Ό νμ©νμ¬ λ€κ°ν λ μ΄λ μ°¨νΈλ₯Ό μμ μΊλ²μ€ μ’νκ³μ λ€μ΄λ΄λ―Ή λ λλ§
5. π 1μΈ κ°λ° λΌμ΄νμ¬μ΄ν΄ νκ³ λ° λ°°ν¬ μ΄μ μ±κ³Ό (Lessons & Conclusion)
13κ° μ΄μμ λ§μ΄ν¬λ‘ μ§λ¨ μ±μ Vercel Edge Network μμ λ©ν° μλΈλλ©μΈ(.pomyjo.com) κ΅¬μ‘°λ‘ κ΅¬μΆνκ³ μ΄μνλ©΄μ μ»μ κ°μ₯ ν° μ±κ³Όλ *"κ³Όλν ν΄μ λ°°μ (YAGNI μ μ )κ° μ½λμ μλͺ μ κ·Ήλννλ€"**λ μ¬μ€μ΄μμ΅λλ€.
- μ΄κ³ μ μΉ μ±λ₯: Lighthouse μ±λ₯ μ μ 99~100μ λ¬μ±
- μ μ§λ³΄μ μ λ‘(Zero Debt): νλ μμν¬ λ²μ μ κ·Έλ μ΄λλ‘ μΈν μ½λ νμ μν μ λ‘
- ν΅ν© κ΄μ ν μλμ§: λ©μΈ νλΈμΈ pomyjo.comκ³Όμ μ κΈ°μ μ°κ²°λ‘ μνΈ λλ©μΈ νμ μ¦κ°
λΌμ΄λΈ κ΄μ νμ μ μνμ
μ 17κ° μ κ°λ μλΉμ€λ₯Ό μ§μ κ²½νν΄ λ³΄μΈμ:
π POMYJO ν΅ν© κ΄μ ν λ°λ‘κ°κΈ° (https://pomyjo.com)
Top comments (0)