<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>techsolayw 님의 블로그</title>
    <link>https://livinghope7.tistory.com/</link>
    <description>techsolayw 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Wed, 10 Jun 2026 22:53:22 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>techsolayw</managingEditor>
    <image>
      <title>techsolayw 님의 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/8319845/attach/7f52058974c94cbd8e14d0a09dc3112a</url>
      <link>https://livinghope7.tistory.com</link>
    </image>
    <item>
      <title>UP DOWN 챌린지 게임</title>
      <link>https://livinghope7.tistory.com/91</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
&lt;title&gt;UP DOWN 챌린지&lt;/title&gt;

&lt;style&gt;
@import url('https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css');

*{
    margin:0;
    padding:0;
    box-sizing:border-box;
    font-family:'Pretendard',sans-serif;
}

body{
    background:#ffffff;
    color:#1e293b;
    min-height:100vh;
    padding:20px;
}

.container{
    max-width:700px;
    margin:0 auto;
}

.card{
    background:#fff;
    border:1px solid #e2e8f0;
    border-radius:20px;
    padding:25px;
    box-shadow:0 10px 30px rgba(0,0,0,.06);
}

h1{
    text-align:center;
    margin-bottom:25px;
    font-size:2rem;
}

.stats{
    display:grid;
    grid-template-columns:repeat(3,1fr);
    gap:12px;
    margin-bottom:20px;
}

.stat{
    background:#f8fafc;
    border-radius:14px;
    padding:15px;
    text-align:center;
}

.label{
    color:#64748b;
    font-size:13px;
}

.value{
    font-size:24px;
    font-weight:700;
    margin-top:5px;
}

.input-wrap{
    display:flex;
    gap:10px;
    margin-bottom:20px;
}

input{
    flex:1;
    height:55px;
    border:2px solid #cbd5e1;
    border-radius:12px;
    text-align:center;
    font-size:20px;
}

button{
    border:none;
    border-radius:12px;
    cursor:pointer;
    font-weight:700;
    transition:.2s;
}

button:hover{
    transform:translateY(-2px);
}

.guess-btn{
    background:#2563eb;
    color:white;
    width:140px;
}

.reset-btn{
    width:100%;
    margin-top:15px;
    height:50px;
    background:#16a34a;
    color:white;
}

.result{
    text-align:center;
    padding:25px;
    background:#f8fafc;
    border-radius:16px;
    font-size:30px;
    font-weight:800;
    margin-bottom:20px;
    min-height:90px;
    display:flex;
    justify-content:center;
    align-items:center;
}

.history{
    border:1px solid #e2e8f0;
    border-radius:16px;
    padding:15px;
}

.history h3{
    margin-bottom:10px;
}

.logs{
    max-height:250px;
    overflow-y:auto;
}

.logs div{
    padding:8px 0;
    border-bottom:1px solid #f1f5f9;
}

.win{
    animation:pulse .8s infinite alternate;
}

@keyframes pulse{
    from{transform:scale(1);}
    to{transform:scale(1.05);}
}

.footer{
    text-align:center;
    color:#94a3b8;
    margin-top:15px;
    font-size:13px;
}

@media(max-width:640px){

.stats{
    grid-template-columns:1fr;
}

.input-wrap{
    flex-direction:column;
}

.guess-btn{
    width:100%;
    height:55px;
}

}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;container&quot;&gt;

&lt;div class=&quot;card&quot;&gt;

&lt;h1&gt;  UP DOWN 챌린지&lt;/h1&gt;

&lt;div class=&quot;stats&quot;&gt;

&lt;div class=&quot;stat&quot;&gt;
&lt;div class=&quot;label&quot;&gt;남은 기회&lt;/div&gt;
&lt;div class=&quot;value&quot; id=&quot;chance&quot;&gt;10&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;stat&quot;&gt;
&lt;div class=&quot;label&quot;&gt;시도 횟수&lt;/div&gt;
&lt;div class=&quot;value&quot; id=&quot;tries&quot;&gt;0&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;stat&quot;&gt;
&lt;div class=&quot;label&quot;&gt;최고 기록&lt;/div&gt;
&lt;div class=&quot;value&quot; id=&quot;best&quot;&gt;-&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;div class=&quot;input-wrap&quot;&gt;
&lt;input
id=&quot;guessInput&quot;
type=&quot;number&quot;
min=&quot;1&quot;
max=&quot;100&quot;
placeholder=&quot;1~100&quot;&gt;
&lt;button class=&quot;guess-btn&quot; id=&quot;guessBtn&quot;&gt;
추측하기
&lt;/button&gt;
&lt;/div&gt;

&lt;div class=&quot;result&quot; id=&quot;result&quot;&gt;
숫자를 맞혀보세요!
&lt;/div&gt;

&lt;div class=&quot;history&quot;&gt;

&lt;h3&gt;  시도 기록&lt;/h3&gt;

&lt;div class=&quot;logs&quot; id=&quot;logs&quot;&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;button class=&quot;reset-btn&quot; id=&quot;resetBtn&quot;&gt;
새 게임 시작
&lt;/button&gt;

&lt;div class=&quot;footer&quot;&gt;
1 ~ 100 사이의 숫자를 맞춰보세요.
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;

const BEST_KEY = &quot;updown_best_record&quot;;

let answer;
let chances;
let tries;
let gameOver;

const chanceEl = document.getElementById(&quot;chance&quot;);
const triesEl = document.getElementById(&quot;tries&quot;);
const bestEl = document.getElementById(&quot;best&quot;);
const resultEl = document.getElementById(&quot;result&quot;);
const logsEl = document.getElementById(&quot;logs&quot;);
const inputEl = document.getElementById(&quot;guessInput&quot;);

function loadBest(){
    const best = localStorage.getItem(BEST_KEY);
    bestEl.textContent = best ? best + &quot;회&quot; : &quot;-&quot;;
}

function addLog(text){
    const div = document.createElement(&quot;div&quot;);
    div.textContent = text;
    logsEl.prepend(div);
}

function startGame(){

    answer = Math.floor(Math.random()*100)+1;
    chances = 10;
    tries = 0;
    gameOver = false;

    chanceEl.textContent = chances;
    triesEl.textContent = tries;

    resultEl.textContent = &quot;숫자를 맞혀보세요!&quot;;
    resultEl.classList.remove(&quot;win&quot;);

    logsEl.innerHTML = &quot;&quot;;
    inputEl.value = &quot;&quot;;

    loadBest();
}

function guess(){

    if(gameOver) return;

    const value = parseInt(inputEl.value);

    if(isNaN(value)){
        alert(&quot;숫자를 입력하세요.&quot;);
        return;
    }

    if(value &lt; 1 || value &gt; 100){
        alert(&quot;1~100 사이 숫자를 입력하세요.&quot;);
        return;
    }

    tries++;
    chances--;

    triesEl.textContent = tries;
    chanceEl.textContent = chances;

    if(value === answer){

        resultEl.innerHTML =
        `  정답! (${answer})`;

        resultEl.classList.add(&quot;win&quot;);

        addLog(&quot;정답 : &quot; + value);

        const best =
        localStorage.getItem(BEST_KEY);

        if(!best || tries &lt; Number(best)){
            localStorage.setItem(BEST_KEY, tries);
            loadBest();
            addLog(&quot;  최고 기록 갱신!&quot;);
        }

        gameOver = true;
        return;
    }

    if(value &lt; answer){
        resultEl.textContent = &quot;  UP&quot;;
        addLog(value + &quot; → UP&quot;);
    }else{
        resultEl.textContent = &quot;  DOWN&quot;;
        addLog(value + &quot; → DOWN&quot;);
    }

    if(chances &lt;= 0){

        resultEl.innerHTML =
        `  게임 오버&lt;br&gt;정답 : ${answer}`;

        gameOver = true;
    }

    inputEl.value = &quot;&quot;;
    inputEl.focus();
}

document
.getElementById(&quot;guessBtn&quot;)
.addEventListener(&quot;click&quot;, guess);

document
.getElementById(&quot;resetBtn&quot;)
.addEventListener(&quot;click&quot;, startGame);

inputEl.addEventListener(&quot;keydown&quot;, function(e){
    if(e.key === &quot;Enter&quot;){
        guess();
    }
});

startGame();

&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</description>
      <category>무료게임</category>
      <author>techsolayw</author>
      <guid isPermaLink="true">https://livinghope7.tistory.com/91</guid>
      <comments>https://livinghope7.tistory.com/91#entry91comment</comments>
      <pubDate>Mon, 8 Jun 2026 01:51:04 +0900</pubDate>
    </item>
    <item>
      <title>현대인의 인간 관계 : 왜 우리는 '적당한 거리' 를 두어야 하는가</title>
      <link>https://livinghope7.tistory.com/88</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;/span&gt;현대인의 인간 관계 : 왜 우리는 '적당한 거리'를 두어야 하는가 &lt;br /&gt;현대&amp;nbsp;사회를&amp;nbsp;살아가며&amp;nbsp;우리는&amp;nbsp;이전&amp;nbsp;시대보다&amp;nbsp;훨씬&amp;nbsp;더&amp;nbsp;많은&amp;nbsp;사람과&amp;nbsp;연결되어&amp;nbsp;있습니다.&amp;nbsp;스마트폰&amp;nbsp;하나로&amp;nbsp;지구&amp;nbsp;반대편에&amp;nbsp;있는&amp;nbsp;사람과&amp;nbsp;소통하고,&amp;nbsp;SNS를&amp;nbsp;통해&amp;nbsp;타인의&amp;nbsp;일상을&amp;nbsp;실시간으로&amp;nbsp;엿보며,&amp;nbsp;메신저를&amp;nbsp;통해&amp;nbsp;24시간&amp;nbsp;언제든&amp;nbsp;연락이&amp;nbsp;닿는&amp;nbsp;'초연결&amp;nbsp;사회'에&amp;nbsp;살고&amp;nbsp;있죠.&amp;nbsp;하지만&amp;nbsp;역설적이게도&amp;nbsp;오늘날&amp;nbsp;우리는&amp;nbsp;그&amp;nbsp;어느&amp;nbsp;때보다&amp;nbsp;더&amp;nbsp;큰&amp;nbsp;고독과&amp;nbsp;관계의&amp;nbsp;피로감을&amp;nbsp;느낍니다. &lt;br /&gt;&lt;br /&gt;이러한&amp;nbsp;시대적&amp;nbsp;맥락에서&amp;nbsp;에릭&amp;nbsp;프롬이&amp;nbsp;『사랑의&amp;nbsp;기술』에서&amp;nbsp;강조했던&amp;nbsp;'분리'와&amp;nbsp;'결합'의&amp;nbsp;개념은&amp;nbsp;지금&amp;nbsp;우리에게&amp;nbsp;매우&amp;nbsp;중요한&amp;nbsp;통찰을&amp;nbsp;줍니다.&amp;nbsp;진정으로&amp;nbsp;타인과&amp;nbsp;건강한&amp;nbsp;관계를&amp;nbsp;맺기&amp;nbsp;위해서는&amp;nbsp;역설적으로&amp;nbsp;'건강한&amp;nbsp;거리&amp;nbsp;두기'가&amp;nbsp;선행되어야&amp;nbsp;한다는&amp;nbsp;사실입니다.&amp;nbsp;왜&amp;nbsp;현대&amp;nbsp;사회에서&amp;nbsp;관계의&amp;nbsp;거리&amp;nbsp;두기가&amp;nbsp;필수적인지,&amp;nbsp;그&amp;nbsp;유익함을&amp;nbsp;네&amp;nbsp;가지&amp;nbsp;측면에서&amp;nbsp;살펴보고자&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;자아의&amp;nbsp;경계&amp;nbsp;회복과&amp;nbsp;정체성&amp;nbsp;확립 &lt;br /&gt;현대인은&amp;nbsp;타인의&amp;nbsp;시선과&amp;nbsp;기대라는&amp;nbsp;거대한&amp;nbsp;파도&amp;nbsp;속에서&amp;nbsp;자신의&amp;nbsp;본모습을&amp;nbsp;잃기&amp;nbsp;쉽습니다.&amp;nbsp;특히&amp;nbsp;SNS는&amp;nbsp;끊임없이&amp;nbsp;타인과&amp;nbsp;나를&amp;nbsp;비교하게&amp;nbsp;만들고,&amp;nbsp;사회가&amp;nbsp;규정한&amp;nbsp;'이상적인&amp;nbsp;인간관계'에&amp;nbsp;나를&amp;nbsp;맞추려&amp;nbsp;노력하게&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;관계에서의&amp;nbsp;거리&amp;nbsp;두기는&amp;nbsp;바로&amp;nbsp;이&amp;nbsp;'타인과&amp;nbsp;나&amp;nbsp;사이의&amp;nbsp;경계'를&amp;nbsp;다시&amp;nbsp;세우는&amp;nbsp;행위입니다.&amp;nbsp;우리가&amp;nbsp;타인과&amp;nbsp;과도하게&amp;nbsp;밀착되어&amp;nbsp;있으면,&amp;nbsp;내&amp;nbsp;감정과&amp;nbsp;상대의&amp;nbsp;감정이&amp;nbsp;뒤섞여&amp;nbsp;무엇이&amp;nbsp;진정한&amp;nbsp;내&amp;nbsp;욕구인지&amp;nbsp;파악하기&amp;nbsp;어렵습니다.&amp;nbsp;물리적,&amp;nbsp;심리적&amp;nbsp;거리를&amp;nbsp;확보할&amp;nbsp;때&amp;nbsp;비로소&amp;nbsp;우리는&amp;nbsp;타인의&amp;nbsp;목소리를&amp;nbsp;잠시&amp;nbsp;끄고&amp;nbsp;내면의&amp;nbsp;목소리에&amp;nbsp;집중할&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;됩니다.&amp;nbsp;내가&amp;nbsp;무엇을&amp;nbsp;좋아하는지,&amp;nbsp;어떤&amp;nbsp;가치관을&amp;nbsp;가지고&amp;nbsp;있는지,&amp;nbsp;어떤&amp;nbsp;관계를&amp;nbsp;지향하는지를&amp;nbsp;스스로&amp;nbsp;정의할&amp;nbsp;여유가&amp;nbsp;생기는&amp;nbsp;것이죠.&amp;nbsp;나라는&amp;nbsp;사람의&amp;nbsp;중심이&amp;nbsp;단단히&amp;nbsp;잡혀&amp;nbsp;있을&amp;nbsp;때,&amp;nbsp;비로소&amp;nbsp;타인과도&amp;nbsp;온전한&amp;nbsp;존중을&amp;nbsp;바탕으로&amp;nbsp;한&amp;nbsp;관계가&amp;nbsp;가능해집니다. &lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;관계의&amp;nbsp;피로도&amp;nbsp;감소와&amp;nbsp;'질적&amp;nbsp;향상' &lt;br /&gt;우리는&amp;nbsp;종종&amp;nbsp;'많은&amp;nbsp;사람과&amp;nbsp;두루두루&amp;nbsp;잘&amp;nbsp;지내는&amp;nbsp;것'을&amp;nbsp;성숙한&amp;nbsp;인간관계의&amp;nbsp;지표로&amp;nbsp;오해합니다.&amp;nbsp;그러나&amp;nbsp;좁고&amp;nbsp;얕은&amp;nbsp;관계가&amp;nbsp;무수히&amp;nbsp;많은&amp;nbsp;것보다,&amp;nbsp;좁더라도&amp;nbsp;깊고&amp;nbsp;신뢰할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;관계를&amp;nbsp;맺는&amp;nbsp;것이&amp;nbsp;현대인의&amp;nbsp;정신&amp;nbsp;건강에&amp;nbsp;훨씬&amp;nbsp;유익합니다. &lt;br /&gt;&lt;br /&gt;불필요한&amp;nbsp;관계의&amp;nbsp;다이어트는&amp;nbsp;에너지의&amp;nbsp;총량을&amp;nbsp;아껴줍니다.&amp;nbsp;에너지가&amp;nbsp;분산되지&amp;nbsp;않아야&amp;nbsp;정말&amp;nbsp;소중한&amp;nbsp;사람들에게&amp;nbsp;나의&amp;nbsp;마음을&amp;nbsp;온전히&amp;nbsp;쏟을&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;모든&amp;nbsp;연락에&amp;nbsp;즉각&amp;nbsp;반응하고,&amp;nbsp;모든&amp;nbsp;관계의&amp;nbsp;갈등에&amp;nbsp;감정을&amp;nbsp;소모하며,&amp;nbsp;타인의&amp;nbsp;기분을&amp;nbsp;끊임없이&amp;nbsp;살피는&amp;nbsp;일은&amp;nbsp;에너지를&amp;nbsp;고갈시키는&amp;nbsp;주범입니다.&amp;nbsp;적절한&amp;nbsp;거리&amp;nbsp;두기는&amp;nbsp;'모든&amp;nbsp;사람에게&amp;nbsp;좋은&amp;nbsp;사람'이기를&amp;nbsp;포기하는&amp;nbsp;용기이기도&amp;nbsp;합니다.&amp;nbsp;이를&amp;nbsp;통해&amp;nbsp;우리는&amp;nbsp;관계의&amp;nbsp;양을&amp;nbsp;줄이는&amp;nbsp;대신&amp;nbsp;관계의&amp;nbsp;질을&amp;nbsp;높일&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;거리를&amp;nbsp;두어&amp;nbsp;확보한&amp;nbsp;여유로움은&amp;nbsp;상대방을&amp;nbsp;더&amp;nbsp;너그럽게&amp;nbsp;바라보게&amp;nbsp;하고,&amp;nbsp;관계에서의&amp;nbsp;불필요한&amp;nbsp;마찰을&amp;nbsp;줄여주는&amp;nbsp;완충재&amp;nbsp;역할을&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;상호&amp;nbsp;독립성을&amp;nbsp;바탕으로&amp;nbsp;한&amp;nbsp;성숙한&amp;nbsp;사랑 &lt;br /&gt;에릭&amp;nbsp;프롬은&amp;nbsp;사랑을&amp;nbsp;'자신의&amp;nbsp;힘을&amp;nbsp;타인에게&amp;nbsp;쏟아붓는&amp;nbsp;능동적인&amp;nbsp;활동'이라고&amp;nbsp;정의했습니다.&amp;nbsp;그러나&amp;nbsp;많은&amp;nbsp;경우,&amp;nbsp;사람들은&amp;nbsp;외로움을&amp;nbsp;견디지&amp;nbsp;못해&amp;nbsp;타인을&amp;nbsp;'도구'처럼&amp;nbsp;사용하거나,&amp;nbsp;상대에게&amp;nbsp;의존함으로써&amp;nbsp;자신의&amp;nbsp;불안을&amp;nbsp;해소하려&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;건강한&amp;nbsp;거리&amp;nbsp;두기는&amp;nbsp;의존적인&amp;nbsp;사랑에서&amp;nbsp;독립적인&amp;nbsp;사랑으로&amp;nbsp;나아가는&amp;nbsp;징검다리입니다.&amp;nbsp;상대방과&amp;nbsp;물리적으로&amp;nbsp;떨어져&amp;nbsp;있거나,&amp;nbsp;혼자&amp;nbsp;있는&amp;nbsp;시간을&amp;nbsp;존중할&amp;nbsp;때&amp;nbsp;우리는&amp;nbsp;'나&amp;nbsp;자신의&amp;nbsp;힘으로&amp;nbsp;살아가는&amp;nbsp;법'을&amp;nbsp;익힙니다.&amp;nbsp;이렇게&amp;nbsp;독립적인&amp;nbsp;개인이&amp;nbsp;만났을&amp;nbsp;때&amp;nbsp;비로소&amp;nbsp;집착이&amp;nbsp;아닌&amp;nbsp;존중이&amp;nbsp;가능해집니다.&amp;nbsp;&quot;너&amp;nbsp;없이는&amp;nbsp;살&amp;nbsp;수&amp;nbsp;없어&quot;라는&amp;nbsp;말은&amp;nbsp;로맨틱하게&amp;nbsp;들릴지&amp;nbsp;모르지만,&amp;nbsp;실상은&amp;nbsp;상대에게&amp;nbsp;자신의&amp;nbsp;삶을&amp;nbsp;통째로&amp;nbsp;짊어지게&amp;nbsp;하는&amp;nbsp;무거운&amp;nbsp;짐이&amp;nbsp;될&amp;nbsp;수도&amp;nbsp;있습니다.&amp;nbsp;&quot;너와&amp;nbsp;함께여서&amp;nbsp;좋지만,&amp;nbsp;너&amp;nbsp;없이도&amp;nbsp;나는&amp;nbsp;나로서&amp;nbsp;충분히&amp;nbsp;온전하다&quot;는&amp;nbsp;독립적인&amp;nbsp;태도가&amp;nbsp;바탕이&amp;nbsp;될&amp;nbsp;때,&amp;nbsp;비로소&amp;nbsp;관계는&amp;nbsp;구속이&amp;nbsp;아닌&amp;nbsp;성장을&amp;nbsp;돕는&amp;nbsp;도구가&amp;nbsp;됩니다. &lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;사유하는&amp;nbsp;시간과&amp;nbsp;인간적&amp;nbsp;성숙 &lt;br /&gt;관계에&amp;nbsp;매몰되어&amp;nbsp;있을&amp;nbsp;때는&amp;nbsp;보이지&amp;nbsp;않던&amp;nbsp;것들이,&amp;nbsp;한&amp;nbsp;발짝&amp;nbsp;물러설&amp;nbsp;때&amp;nbsp;비로소&amp;nbsp;보이기&amp;nbsp;시작합니다.&amp;nbsp;우리가&amp;nbsp;숲속에&amp;nbsp;너무&amp;nbsp;깊이&amp;nbsp;들어가&amp;nbsp;있으면&amp;nbsp;숲&amp;nbsp;전체를&amp;nbsp;볼&amp;nbsp;수&amp;nbsp;없는&amp;nbsp;것과&amp;nbsp;같은&amp;nbsp;이치입니다. &lt;br /&gt;&lt;br /&gt;적당한&amp;nbsp;거리를&amp;nbsp;두고&amp;nbsp;타인과&amp;nbsp;나를&amp;nbsp;관조하는&amp;nbsp;시간은&amp;nbsp;우리를&amp;nbsp;한층&amp;nbsp;더&amp;nbsp;성숙하게&amp;nbsp;만듭니다.&amp;nbsp;갈등&amp;nbsp;상황에서&amp;nbsp;즉각적으로&amp;nbsp;반응하기보다&amp;nbsp;한&amp;nbsp;템포&amp;nbsp;쉬고&amp;nbsp;생각할&amp;nbsp;시간을&amp;nbsp;갖는&amp;nbsp;것,&amp;nbsp;타인의&amp;nbsp;말에&amp;nbsp;무조건&amp;nbsp;휘둘리지&amp;nbsp;않고&amp;nbsp;내&amp;nbsp;안에서&amp;nbsp;한&amp;nbsp;번&amp;nbsp;더&amp;nbsp;곱씹어&amp;nbsp;보는&amp;nbsp;것,&amp;nbsp;이러한&amp;nbsp;과정&amp;nbsp;자체가&amp;nbsp;인간적&amp;nbsp;성숙의&amp;nbsp;핵심입니다.&amp;nbsp;현대&amp;nbsp;사회의&amp;nbsp;빠른&amp;nbsp;속도&amp;nbsp;속에서&amp;nbsp;'거리&amp;nbsp;두기'는&amp;nbsp;우리가&amp;nbsp;잃어버린&amp;nbsp;'사유의&amp;nbsp;힘'을&amp;nbsp;되찾아줍니다. &lt;br /&gt;&lt;br /&gt;맺음말:&amp;nbsp;연결되기&amp;nbsp;위해&amp;nbsp;잠시&amp;nbsp;떨어지기 &lt;br /&gt;결국&amp;nbsp;현대&amp;nbsp;사회에서&amp;nbsp;인간관계의&amp;nbsp;거리&amp;nbsp;두기는&amp;nbsp;타인을&amp;nbsp;배척하는&amp;nbsp;것이&amp;nbsp;아니라,&amp;nbsp;타인과&amp;nbsp;나를&amp;nbsp;모두&amp;nbsp;살리기&amp;nbsp;위한&amp;nbsp;가장&amp;nbsp;배려&amp;nbsp;깊은&amp;nbsp;방식입니다. &lt;br /&gt;&lt;br /&gt;우리는&amp;nbsp;서로에게&amp;nbsp;너무&amp;nbsp;가까이&amp;nbsp;다가가&amp;nbsp;서로의&amp;nbsp;가시를&amp;nbsp;찌르고&amp;nbsp;있지는&amp;nbsp;않은지&amp;nbsp;돌아봐야&amp;nbsp;합니다.&amp;nbsp;너무&amp;nbsp;멀면&amp;nbsp;추위가&amp;nbsp;느껴지고,&amp;nbsp;너무&amp;nbsp;가까우면&amp;nbsp;가시가&amp;nbsp;찌르는&amp;nbsp;고슴도치처럼,&amp;nbsp;우리에게는&amp;nbsp;적절한&amp;nbsp;온기를&amp;nbsp;유지할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;지혜로운&amp;nbsp;거리가&amp;nbsp;필요합니다. &lt;br /&gt;&lt;br /&gt;지금&amp;nbsp;당장&amp;nbsp;주변의&amp;nbsp;모든&amp;nbsp;인간관계를&amp;nbsp;정리할&amp;nbsp;필요는&amp;nbsp;없습니다.&amp;nbsp;다만,&amp;nbsp;오늘&amp;nbsp;하루&amp;nbsp;내가&amp;nbsp;타인의&amp;nbsp;기대에&amp;nbsp;맞추느라&amp;nbsp;나&amp;nbsp;자신을&amp;nbsp;소홀히&amp;nbsp;하지는&amp;nbsp;않았는지,&amp;nbsp;혹은&amp;nbsp;외로움을&amp;nbsp;피하기&amp;nbsp;위해&amp;nbsp;의미&amp;nbsp;없는&amp;nbsp;관계에&amp;nbsp;에너지를&amp;nbsp;낭비하고&amp;nbsp;있지는&amp;nbsp;않은지&amp;nbsp;생각해보는&amp;nbsp;것만으로도&amp;nbsp;충분합니다.&amp;nbsp;혼자만의&amp;nbsp;시간을&amp;nbsp;확보하고,&amp;nbsp;적당한&amp;nbsp;심리적&amp;nbsp;거리를&amp;nbsp;유지하며,&amp;nbsp;나를&amp;nbsp;온전히&amp;nbsp;사랑하는&amp;nbsp;연습을&amp;nbsp;시작해&amp;nbsp;보세요.&amp;nbsp;그렇게&amp;nbsp;단단해진&amp;nbsp;내가&amp;nbsp;타인에게&amp;nbsp;손을&amp;nbsp;내밀&amp;nbsp;때,&amp;nbsp;그&amp;nbsp;관계는&amp;nbsp;비로소&amp;nbsp;더&amp;nbsp;깊고&amp;nbsp;아름다운&amp;nbsp;결실을&amp;nbsp;맺게&amp;nbsp;될&amp;nbsp;것입니다. &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;글의&amp;nbsp;내용&amp;nbsp;중&amp;nbsp;본인의&amp;nbsp;평소&amp;nbsp;생각이나&amp;nbsp;경험과&amp;nbsp;가장&amp;nbsp;일치하는&amp;nbsp;부분은&amp;nbsp;어느&amp;nbsp;지점인가요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;본 글은 에릭 프롬의 저서 『사랑의 기술』에서 영감을 받아 현대인의 인간관계에 대한 저의 생각을 정리한 글입니다.&quot;&lt;/p&gt;</description>
      <category>웰빙 라이프 &amp;amp; 헬스</category>
      <category>인간관계</category>
      <category>현대인의 인간관계</category>
      <author>techsolayw</author>
      <guid isPermaLink="true">https://livinghope7.tistory.com/88</guid>
      <comments>https://livinghope7.tistory.com/88#entry88comment</comments>
      <pubDate>Sun, 7 Jun 2026 21:19:14 +0900</pubDate>
    </item>
    <item>
      <title>숫자 기억력 테스트 게임</title>
      <link>https://livinghope7.tistory.com/87</link>
      <description>&lt;link rel=&quot;preconnect&quot; href=&quot;https://cdn.jsdelivr.net&quot; crossorigin&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css&quot;&gt;

&lt;div id=&quot;memoryTest&quot;&gt;

  &lt;div class=&quot;game-card&quot;&gt;

    &lt;h2&gt;  숫자 기억력 테스트&lt;/h2&gt;

    &lt;p class=&quot;subtitle&quot;&gt;
      숫자를 기억하고 입력해보세요!
    &lt;/p&gt;

    &lt;div class=&quot;stats&quot;&gt;

      &lt;div class=&quot;stat-box&quot;&gt;
        &lt;span&gt;현재 레벨&lt;/span&gt;
        &lt;strong id=&quot;level&quot;&gt;1&lt;/strong&gt;
      &lt;/div&gt;

      &lt;div class=&quot;stat-box&quot;&gt;
        &lt;span&gt;최고 레벨&lt;/span&gt;
        &lt;strong id=&quot;bestLevel&quot;&gt;1&lt;/strong&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div id=&quot;display&quot;&gt;
      게임 시작 버튼을 눌러주세요
    &lt;/div&gt;

    &lt;input
      type=&quot;tel&quot;
      inputmode=&quot;numeric&quot;
      id=&quot;answer&quot;
      placeholder=&quot;숫자를 입력하세요&quot;
      autocomplete=&quot;off&quot;
    &gt;

    &lt;button id=&quot;submitBtn&quot;&gt;
      확인
    &lt;/button&gt;

    &lt;button id=&quot;startBtn&quot;&gt;
      게임 시작
    &lt;/button&gt;

    &lt;div id=&quot;result&quot;&gt;&lt;/div&gt;

  &lt;/div&gt;

&lt;/div&gt;

&lt;style&gt;

#memoryTest,
#memoryTest *{
  box-sizing:border-box;
  font-family:'Pretendard',sans-serif;
}

#memoryTest{
  max-width:800px;
  margin:30px auto;
}

#memoryTest .game-card{
  background:#fff;
  border-radius:24px;
  padding:24px;
  box-shadow:0 10px 30px rgba(0,0,0,.08);
}

#memoryTest h2{
  margin:0;
  text-align:center;
  font-size:clamp(28px,5vw,42px);
  font-weight:800;
}

.subtitle{
  text-align:center;
  color:#666;
  margin:12px 0 24px;
}

.stats{
  display:flex;
  gap:12px;
  margin-bottom:20px;
}

.stat-box{
  flex:1;
  text-align:center;
  padding:12px;
  background:#f8fafc;
  border:1px solid #e5e7eb;
  border-radius:14px;
}

.stat-box span{
  display:block;
  font-size:13px;
  color:#666;
}

.stat-box strong{
  display:block;
  margin-top:4px;
  font-size:24px;
}

#display{
  height:120px;
  border-radius:18px;
  background:#111827;
  color:#fff;

  display:flex;
  align-items:center;
  justify-content:center;
  text-align:center;

  font-size:clamp(20px,5vw,36px);

  font-weight:800;

  margin-bottom:20px;
  padding:10px;

  letter-spacing:3px;
  word-break:break-all;
}

#answer{
  width:100%;
  padding:16px;
  border:2px solid #e5e7eb;
  border-radius:14px;
  font-size:18px;
  text-align:center;
  margin-bottom:12px;
}

#submitBtn,
#startBtn{
  width:100%;
  border:none;
  border-radius:14px;
  padding:15px;
  font-size:16px;
  font-weight:700;
  cursor:pointer;
}

#submitBtn{
  background:#111827;
  color:#fff;
  margin-bottom:10px;
}

#startBtn{
  background:#e5e7eb;
}

#result{
  margin-top:18px;
  text-align:center;
  font-size:20px;
  font-weight:800;
  min-height:30px;
}

@media(max-width:768px){

  #memoryTest .game-card{
    padding:18px;
  }

  .stats{
    gap:8px;
  }

  #display{
    height:100px;
    font-size:clamp(18px,6vw,30px);
    letter-spacing:2px;
  }

}

&lt;/style&gt;

&lt;script&gt;

(function(){

const levelEl =
document.getElementById('level');

const bestLevelEl =
document.getElementById('bestLevel');

const display =
document.getElementById('display');

const answer =
document.getElementById('answer');

const submitBtn =
document.getElementById('submitBtn');

const startBtn =
document.getElementById('startBtn');

const result =
document.getElementById('result');

let level = 1;
let currentNumber = '';
let playing = false;

let bestLevel =
parseInt(
localStorage.getItem('memory_best_level')
) || 1;

bestLevelEl.textContent =
bestLevel;

function randomNumber(length){

  let num='';

  for(let i=0;i&lt;length;i++){

    num +=
    Math.floor(
      Math.random()*10
    );

  }

  return num;
}

function startRound(){

  playing = true;

  answer.value='';

  result.textContent='';

  const length =
  level + 2;

  currentNumber =
  randomNumber(length);

  display.textContent =
  currentNumber;

  setTimeout(function(){

    display.textContent =
    '입력하세요';

    answer.focus();

  },3000);

}

function startGame(){

  level = 1;

  levelEl.textContent =
  level;

  startRound();

}

function checkAnswer(){

  if(!playing) return;

  if(
    answer.value.trim() ===
    currentNumber
  ){

    level++;

    levelEl.textContent =
    level;

    if(level &gt; bestLevel){

      bestLevel = level;

      bestLevelEl.textContent =
      bestLevel;

      localStorage.setItem(
      'memory_best_level',
      bestLevel
      );

    }

    result.textContent =
    '  정답! 다음 레벨';

    setTimeout(
      startRound,
      1000
    );

  }

  else{

    playing = false;

    display.textContent =
    '게임 종료';

    result.innerHTML =
    '❌ 오답!&lt;br&gt;정답 : ' +
    currentNumber;

  }

}

startBtn.addEventListener(
'click',
startGame
);

submitBtn.addEventListener(
'click',
checkAnswer
);

answer.addEventListener(
'keydown',
function(e){

  if(e.key==='Enter'){

    checkAnswer();

  }

});

})();
&lt;/script&gt;</description>
      <category>무료게임</category>
      <category>게임</category>
      <category>모바일 게임</category>
      <category>무료 게임</category>
      <category>숫자 기억력 게임</category>
      <author>techsolayw</author>
      <guid isPermaLink="true">https://livinghope7.tistory.com/87</guid>
      <comments>https://livinghope7.tistory.com/87#entry87comment</comments>
      <pubDate>Sun, 7 Jun 2026 07:59:40 +0900</pubDate>
    </item>
    <item>
      <title>행운의 룰렛 게임</title>
      <link>https://livinghope7.tistory.com/86</link>
      <description>&lt;link rel=&quot;preconnect&quot; href=&quot;https://cdn.jsdelivr.net&quot; crossorigin&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css&quot;&gt;

&lt;div id=&quot;rouletteGame&quot;&gt;

  &lt;div class=&quot;game-card&quot;&gt;

    &lt;h2&gt;  행운의 룰렛&lt;/h2&gt;

    &lt;p class=&quot;subtitle&quot;&gt;
      버튼을 눌러 오늘의 행운을 확인해보세요!
    &lt;/p&gt;

    &lt;div class=&quot;pointer&quot;&gt;▼&lt;/div&gt;

    &lt;div id=&quot;wheelWrap&quot;&gt;

      &lt;div id=&quot;wheel&quot;&gt;

        &lt;div class=&quot;icon i1&quot;&gt; &lt;/div&gt;
        &lt;div class=&quot;icon i2&quot;&gt; &lt;/div&gt;
        &lt;div class=&quot;icon i3&quot;&gt; &lt;/div&gt;
        &lt;div class=&quot;icon i4&quot;&gt; &lt;/div&gt;
        &lt;div class=&quot;icon i5&quot;&gt; &lt;/div&gt;
        &lt;div class=&quot;icon i6&quot;&gt; &lt;/div&gt;

      &lt;/div&gt;

    &lt;/div&gt;

    &lt;button id=&quot;spinBtn&quot;&gt;
      룰렛 돌리기
    &lt;/button&gt;

    &lt;div id=&quot;result&quot;&gt;
      행운을 시험해보세요!
    &lt;/div&gt;

    &lt;div class=&quot;history-box&quot;&gt;

      &lt;h3&gt;최근 결과&lt;/h3&gt;

      &lt;div id=&quot;historyList&quot;&gt;
        기록 없음
      &lt;/div&gt;

    &lt;/div&gt;

  &lt;/div&gt;

&lt;/div&gt;

&lt;style&gt;

#rouletteGame,
#rouletteGame *{
  box-sizing:border-box;
  font-family:'Pretendard',sans-serif;
}

#rouletteGame{
  max-width:900px;
  margin:30px auto;
}

#rouletteGame .game-card{
  background:#fff;
  border-radius:24px;
  padding:24px;
  box-shadow:0 10px 30px rgba(0,0,0,.08);
}

#rouletteGame h2{
  margin:0;
  text-align:center;
  font-size:clamp(28px,5vw,42px);
  font-weight:800;
}

.subtitle{
  text-align:center;
  color:#666;
  margin:10px 0 25px;
}

.pointer{
  text-align:center;
  font-size:34px;
  margin-bottom:-8px;
  color:#111827;
  font-weight:900;
}

#wheelWrap{
  display:flex;
  justify-content:center;
}

#wheel{

  position:relative;

  width:min(80vw,360px);
  height:min(80vw,360px);

  border-radius:50%;

  border:8px solid #111827;

  background:
  conic-gradient(
    #ef4444 0deg 60deg,
    #f59e0b 60deg 120deg,
    #22c55e 120deg 180deg,
    #3b82f6 180deg 240deg,
    #8b5cf6 240deg 300deg,
    #ec4899 300deg 360deg
  );

  transition:
  transform 5s cubic-bezier(.15,.75,.15,1);

}

.icon{

  position:absolute;

  width:40px;
  height:40px;

  display:flex;
  align-items:center;
  justify-content:center;

  font-size:28px;

  left:50%;
  top:50%;

  margin-left:-20px;
  margin-top:-20px;

}

/* 6등분 중앙 배치 */

.i1{
  transform:
  translate(0,-130px);
}

.i2{
  transform:
  translate(112px,-65px);
}

.i3{
  transform:
  translate(112px,65px);
}

.i4{
  transform:
  translate(0,130px);
}

.i5{
  transform:
  translate(-112px,65px);
}

.i6{
  transform:
  translate(-112px,-65px);
}

#spinBtn{
  display:block;
  margin:25px auto;
  border:none;
  border-radius:14px;
  background:#111827;
  color:#fff;
  padding:14px 30px;
  font-size:16px;
  font-weight:700;
  cursor:pointer;
}

#result{
  margin-top:15px;
  text-align:center;
  font-size:24px;
  font-weight:800;
  min-height:40px;
}

.history-box{
  margin-top:25px;
  text-align:center;
}

.history-box h3{
  margin-bottom:12px;
}

#historyList{
  display:flex;
  justify-content:center;
  flex-wrap:wrap;
  gap:8px;
}

.history-item{
  background:#f3f4f6;
  border-radius:999px;
  padding:8px 12px;
  font-size:14px;
  font-weight:700;
}

@media(max-width:768px){

  #rouletteGame .game-card{
    padding:18px;
  }

  .icon{
    font-size:24px;
  }

  .i1{transform:translate(0,-105px);}
  .i2{transform:translate(90px,-52px);}
  .i3{transform:translate(90px,52px);}
  .i4{transform:translate(0,105px);}
  .i5{transform:translate(-90px,52px);}
  .i6{transform:translate(-90px,-52px);}

  #result{
    font-size:20px;
  }

}

&lt;/style&gt;

&lt;script&gt;

(function(){

const prizes=[

{icon:' ',text:'대박'},
{icon:' ',text:'100점'},
{icon:' ',text:'50점'},
{icon:' ',text:'행운'},
{icon:' ',text:'꽝'},
{icon:' ',text:'보너스'}

];

const wheel=
document.getElementById('wheel');

const spinBtn=
document.getElementById('spinBtn');

const result=
document.getElementById('result');

const historyList=
document.getElementById('historyList');

let spinning=false;
let rotation=0;

function renderHistory(){

  const history=
  JSON.parse(
    localStorage.getItem('roulette_history')
    || '[]'
  );

  if(history.length===0){

    historyList.innerHTML='기록 없음';
    return;

  }

  historyList.innerHTML='';

  history.forEach(item=&gt;{

    const div=
    document.createElement('div');

    div.className='history-item';
    div.textContent=item;

    historyList.appendChild(div);

  });

}

function saveHistory(text){

  let history=
  JSON.parse(
    localStorage.getItem('roulette_history')
    || '[]'
  );

  history.unshift(text);
  history=history.slice(0,5);

  localStorage.setItem(
    'roulette_history',
    JSON.stringify(history)
  );

  renderHistory();

}

spinBtn.addEventListener(
'pointerdown',
function(){

  if(spinning) return;

  spinning=true;

  const index=
  Math.floor(
    Math.random()*6
  );

  const prize=
  prizes[index];

  const sector=60;

  const stopAngle=
  (index*sector)+30;

  rotation+=
  2160+
  (360-stopAngle);

  wheel.style.transform=
  'rotate('+rotation+'deg)';

  setTimeout(function(){

    result.innerHTML=
    '  결과 : '+
    prize.icon+
    ' '+
    prize.text;

    saveHistory(
      prize.icon+
      ' '+
      prize.text
    );

    spinning=false;

  },5000);

});

renderHistory();

})();

&lt;/script&gt;</description>
      <category>무료게임</category>
      <category>게임</category>
      <category>룰렛 게임</category>
      <category>모바일 게임</category>
      <category>무료 게임</category>
      <author>techsolayw</author>
      <guid isPermaLink="true">https://livinghope7.tistory.com/86</guid>
      <comments>https://livinghope7.tistory.com/86#entry86comment</comments>
      <pubDate>Sun, 7 Jun 2026 07:51:38 +0900</pubDate>
    </item>
    <item>
      <title>가위 바위 보 배틀 게임</title>
      <link>https://livinghope7.tistory.com/85</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

&lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css&quot;&gt;

&lt;title&gt;가위바위보 배틀&lt;/title&gt;

&lt;style&gt;

*{
  box-sizing:border-box;
  margin:0;
  padding:0;
  font-family:'Pretendard',sans-serif;
}

body{
  background:#f3f4f6;
  padding:30px 15px;
}

#rpsGame{
  max-width:900px;
  margin:0 auto;
}

.game-card{
  background:#fff;
  border-radius:24px;
  padding:24px;
  box-shadow:0 10px 30px rgba(0,0,0,.08);
}

h2{
  text-align:center;
  font-size:clamp(28px,5vw,42px);
  font-weight:800;
}

.subtitle{
  text-align:center;
  color:#666;
  margin:12px 0 24px;
}

.stats{
  display:flex;
  gap:10px;
  margin-bottom:20px;
}

.stat-box{
  flex:1;
  text-align:center;
  padding:12px;
  background:#f8fafc;
  border:1px solid #e5e7eb;
  border-radius:14px;
}

.stat-box span{
  display:block;
  color:#666;
  font-size:13px;
}

.stat-box b{
  display:block;
  margin-top:4px;
  font-size:24px;
}

.streak-wrap{
  display:flex;
  justify-content:center;
  gap:20px;
  margin-bottom:25px;
  font-weight:700;
}

.battle-area{
  display:flex;
  align-items:center;
  justify-content:center;
  gap:20px;
  margin-bottom:20px;
}

.player-box{
  flex:1;
  text-align:center;
}

.label{
  margin-bottom:10px;
  font-weight:700;
}

.hand{
  font-size:80px;
  min-height:100px;
  display:flex;
  align-items:center;
  justify-content:center;
}

.vs{
  font-size:24px;
  font-weight:800;
}

#result{
  text-align:center;
  font-size:22px;
  font-weight:800;
  margin-bottom:20px;
  min-height:35px;
}

.buttons{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:10px;
}

.choice-btn{
  border:none;
  border-radius:14px;
  background:#111827;
  color:#fff;
  padding:16px 10px;
  font-size:16px;
  font-weight:700;
  cursor:pointer;
  transition:.15s;
}

.choice-btn:hover{
  opacity:.9;
}

.choice-btn:active{
  transform:scale(.97);
}

#resetBtn{
  width:100%;
  margin-top:14px;
  border:none;
  border-radius:14px;
  padding:14px;
  background:#e5e7eb;
  cursor:pointer;
  font-weight:700;
}

#resetBtn:hover{
  background:#d1d5db;
}

@media(max-width:768px){

  .game-card{
    padding:18px;
  }

  .hand{
    font-size:60px;
    min-height:80px;
  }

  .streak-wrap{
    flex-direction:column;
    align-items:center;
    gap:6px;
  }

  #result{
    font-size:18px;
  }

  .choice-btn{
    font-size:15px;
    padding:14px 8px;
  }

}

&lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;

&lt;div id=&quot;rpsGame&quot;&gt;

  &lt;div class=&quot;game-card&quot;&gt;

    &lt;h2&gt;✊✋✌️ 가위바위보 배틀&lt;/h2&gt;

    &lt;p class=&quot;subtitle&quot;&gt;
      컴퓨터를 이기고 연승 기록에 도전하세요!
    &lt;/p&gt;

    &lt;div class=&quot;stats&quot;&gt;

      &lt;div class=&quot;stat-box&quot;&gt;
        &lt;span&gt;승리&lt;/span&gt;
        &lt;b id=&quot;wins&quot;&gt;0&lt;/b&gt;
      &lt;/div&gt;

      &lt;div class=&quot;stat-box&quot;&gt;
        &lt;span&gt;패배&lt;/span&gt;
        &lt;b id=&quot;losses&quot;&gt;0&lt;/b&gt;
      &lt;/div&gt;

      &lt;div class=&quot;stat-box&quot;&gt;
        &lt;span&gt;무승부&lt;/span&gt;
        &lt;b id=&quot;draws&quot;&gt;0&lt;/b&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class=&quot;streak-wrap&quot;&gt;
      &lt;div&gt;  현재 연승 : &lt;b id=&quot;currentStreak&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
      &lt;div&gt;  최고 연승 : &lt;b id=&quot;bestStreak&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;battle-area&quot;&gt;

      &lt;div class=&quot;player-box&quot;&gt;
        &lt;div class=&quot;label&quot;&gt;  플레이어&lt;/div&gt;
        &lt;div id=&quot;playerHand&quot; class=&quot;hand&quot;&gt;❔&lt;/div&gt;
      &lt;/div&gt;

      &lt;div class=&quot;vs&quot;&gt;VS&lt;/div&gt;

      &lt;div class=&quot;player-box&quot;&gt;
        &lt;div class=&quot;label&quot;&gt;  컴퓨터&lt;/div&gt;
        &lt;div id=&quot;computerHand&quot; class=&quot;hand&quot;&gt;❔&lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div id=&quot;result&quot;&gt;
      아래 버튼을 눌러 승부를 시작하세요.
    &lt;/div&gt;

    &lt;div class=&quot;buttons&quot;&gt;

      &lt;button class=&quot;choice-btn&quot; data-choice=&quot;rock&quot;&gt;
        ✊ 바위
      &lt;/button&gt;

      &lt;button class=&quot;choice-btn&quot; data-choice=&quot;paper&quot;&gt;
        ✋ 보
      &lt;/button&gt;

      &lt;button class=&quot;choice-btn&quot; data-choice=&quot;scissors&quot;&gt;
        ✌️ 가위
      &lt;/button&gt;

    &lt;/div&gt;

    &lt;button id=&quot;resetBtn&quot;&gt;
      기록 초기화
    &lt;/button&gt;

  &lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;

document.addEventListener('DOMContentLoaded',function(){

  const hands={
    rock:'✊',
    paper:'✋',
    scissors:'✌️'
  };

  const playerHand=document.getElementById('playerHand');
  const computerHand=document.getElementById('computerHand');
  const result=document.getElementById('result');

  const winsEl=document.getElementById('wins');
  const lossesEl=document.getElementById('losses');
  const drawsEl=document.getElementById('draws');

  const currentStreakEl=document.getElementById('currentStreak');
  const bestStreakEl=document.getElementById('bestStreak');

  let wins=parseInt(localStorage.getItem('rpsWins'))||0;
  let losses=parseInt(localStorage.getItem('rpsLosses'))||0;
  let draws=parseInt(localStorage.getItem('rpsDraws'))||0;
  let currentStreak=parseInt(localStorage.getItem('rpsCurrentStreak'))||0;
  let bestStreak=parseInt(localStorage.getItem('rpsBestStreak'))||0;

  function updateUI(){

    winsEl.textContent=wins;
    lossesEl.textContent=losses;
    drawsEl.textContent=draws;

    currentStreakEl.textContent=currentStreak;
    bestStreakEl.textContent=bestStreak;

    localStorage.setItem('rpsWins',wins);
    localStorage.setItem('rpsLosses',losses);
    localStorage.setItem('rpsDraws',draws);
    localStorage.setItem('rpsCurrentStreak',currentStreak);
    localStorage.setItem('rpsBestStreak',bestStreak);

  }

  function play(player){

    const choices=['rock','paper','scissors'];

    const computer=
      choices[Math.floor(Math.random()*3)];

    playerHand.textContent=hands[player];
    computerHand.textContent=hands[computer];

    if(player===computer){

      draws++;
      result.textContent='  무승부!';

    }else if(

      (player==='rock' &amp;&amp; computer==='scissors') ||
      (player==='paper' &amp;&amp; computer==='rock') ||
      (player==='scissors' &amp;&amp; computer==='paper')

    ){

      wins++;
      currentStreak++;

      if(currentStreak&gt;bestStreak){
        bestStreak=currentStreak;
      }

      result.textContent='  승리!';

    }else{

      losses++;
      currentStreak=0;

      result.textContent='  패배!';

    }

    updateUI();

  }

  document
    .querySelectorAll('.choice-btn')
    .forEach(btn=&gt;{

      btn.addEventListener('click',function(){

        play(this.dataset.choice);

      });

    });

  document
    .getElementById('resetBtn')
    .addEventListener('click',function(){

      wins=0;
      losses=0;
      draws=0;
      currentStreak=0;
      bestStreak=0;

      playerHand.textContent='❔';
      computerHand.textContent='❔';

      result.textContent='기록이 초기화되었습니다.';

      updateUI();

    });

  updateUI();

});

&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</description>
      <category>무료게임</category>
      <category>가위 바위 보 게임</category>
      <category>게임</category>
      <category>모바일 게임</category>
      <category>무료 게임</category>
      <author>techsolayw</author>
      <guid isPermaLink="true">https://livinghope7.tistory.com/85</guid>
      <comments>https://livinghope7.tistory.com/85#entry85comment</comments>
      <pubDate>Sun, 7 Jun 2026 07:47:35 +0900</pubDate>
    </item>
    <item>
      <title>주사위 배틀 게임</title>
      <link>https://livinghope7.tistory.com/84</link>
      <description>&lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css&quot;&gt;

&lt;div id=&quot;diceBattle&quot;&gt;

&lt;div class=&quot;game-card&quot;&gt;

&lt;h2&gt;  주사위 배틀&lt;/h2&gt;

&lt;p class=&quot;subtitle&quot;&gt;
컴퓨터보다 높은 숫자를 굴려 승리하세요!
&lt;/p&gt;

&lt;div class=&quot;scoreboard&quot;&gt;

&lt;div class=&quot;score-box&quot;&gt;
&lt;span&gt;승리&lt;/span&gt;
&lt;b id=&quot;winCount&quot;&gt;0&lt;/b&gt;
&lt;/div&gt;

&lt;div class=&quot;score-box&quot;&gt;
&lt;span&gt;패배&lt;/span&gt;
&lt;b id=&quot;loseCount&quot;&gt;0&lt;/b&gt;
&lt;/div&gt;

&lt;div class=&quot;score-box&quot;&gt;
&lt;span&gt;무승부&lt;/span&gt;
&lt;b id=&quot;drawCount&quot;&gt;0&lt;/b&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;div class=&quot;battle-area&quot;&gt;

&lt;div class=&quot;player&quot;&gt;
&lt;h3&gt;  플레이어&lt;/h3&gt;
&lt;div id=&quot;playerDice&quot; class=&quot;dice&quot;&gt; &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;vs&quot;&gt;VS&lt;/div&gt;

&lt;div class=&quot;computer&quot;&gt;
&lt;h3&gt;  컴퓨터&lt;/h3&gt;
&lt;div id=&quot;computerDice&quot; class=&quot;dice&quot;&gt; &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;div id=&quot;result&quot;&gt;
주사위를 굴려보세요!
&lt;/div&gt;

&lt;div class=&quot;button-wrap&quot;&gt;
&lt;button id=&quot;rollBtn&quot;&gt;
주사위 굴리기
&lt;/button&gt;

&lt;button id=&quot;resetBtn&quot;&gt;
기록 초기화
&lt;/button&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;style&gt;

#diceBattle,
#diceBattle *{
box-sizing:border-box;
font-family:'Pretendard',sans-serif;
}

#diceBattle{
max-width:900px;
margin:30px auto;
}

#diceBattle .game-card{
background:#fff;
border-radius:24px;
padding:24px;
box-shadow:0 10px 30px rgba(0,0,0,.08);
}

#diceBattle h2{
margin:0;
text-align:center;
font-size:clamp(28px,5vw,42px);
font-weight:800;
}

.subtitle{
text-align:center;
color:#666;
margin:10px 0 24px;
}

.scoreboard{
display:flex;
justify-content:center;
gap:12px;
margin-bottom:25px;
}

.score-box{
flex:1;
max-width:140px;
background:#f8fafc;
border:1px solid #e5e7eb;
border-radius:16px;
padding:12px;
text-align:center;
}

.score-box span{
display:block;
font-size:13px;
color:#666;
}

.score-box b{
display:block;
margin-top:4px;
font-size:26px;
font-weight:800;
}

.battle-area{
display:flex;
align-items:center;
justify-content:center;
gap:20px;
margin:30px 0;
}

.player,
.computer{
flex:1;
text-align:center;
}

.vs{
font-size:24px;
font-weight:900;
}

.dice{
width:120px;
height:120px;
margin:auto;
border-radius:20px;
background:#f8fafc;
border:2px solid #e5e7eb;
display:flex;
align-items:center;
justify-content:center;
font-size:70px;
}

.roll{
animation:spin .7s linear;
}

@keyframes spin{
0%{transform:rotate(0deg);}
100%{transform:rotate(720deg);}
}

#result{
text-align:center;
font-size:24px;
font-weight:800;
margin-bottom:20px;
}

.button-wrap{
display:flex;
justify-content:center;
gap:10px;
flex-wrap:wrap;
}

button{
border:none;
border-radius:14px;
padding:14px 24px;
font-size:15px;
font-weight:700;
cursor:pointer;
}

#rollBtn{
background:#111827;
color:#fff;
}

#resetBtn{
background:#e5e7eb;
}

@media(max-width:768px){

.dice{
width:90px;
height:90px;
font-size:55px;
}

#result{
font-size:20px;
}

}

&lt;/style&gt;

&lt;script&gt;

document.addEventListener('DOMContentLoaded',function(){

const diceFaces=[
'⚀','⚁','⚂','⚃','⚄','⚅'
];

const playerDice=
document.getElementById('playerDice');

const computerDice=
document.getElementById('computerDice');

const result=
document.getElementById('result');

const rollBtn=
document.getElementById('rollBtn');

const resetBtn=
document.getElementById('resetBtn');

const winCount=
document.getElementById('winCount');

const loseCount=
document.getElementById('loseCount');

const drawCount=
document.getElementById('drawCount');

let wins=
Number(localStorage.getItem('diceWins'))||0;

let loses=
Number(localStorage.getItem('diceLoses'))||0;

let draws=
Number(localStorage.getItem('diceDraws'))||0;

function updateBoard(){

winCount.textContent=wins;
loseCount.textContent=loses;
drawCount.textContent=draws;

localStorage.setItem('diceWins',wins);
localStorage.setItem('diceLoses',loses);
localStorage.setItem('diceDraws',draws);

}

updateBoard();

rollBtn.addEventListener('click',function(){

rollBtn.disabled=true;

playerDice.classList.add('roll');
computerDice.classList.add('roll');

setTimeout(function(){

const player=
Math.floor(Math.random()*6)+1;

const computer=
Math.floor(Math.random()*6)+1;

playerDice.textContent=
diceFaces[player-1];

computerDice.textContent=
diceFaces[computer-1];

if(player&gt;computer){

wins++;

result.innerHTML=
'  승리! ('+player+' : '+computer+')';

}else if(player&lt;computer){

loses++;

result.innerHTML=
'  패배! ('+player+' : '+computer+')';

}else{

draws++;

result.innerHTML=
'  무승부! ('+player+' : '+computer+')';

}

updateBoard();

playerDice.classList.remove('roll');
computerDice.classList.remove('roll');

rollBtn.disabled=false;

},700);

});

resetBtn.addEventListener('click',function(){

wins=0;
loses=0;
draws=0;

updateBoard();

playerDice.textContent=' ';
computerDice.textContent=' ';

result.textContent=
'기록이 초기화되었습니다.';

});

});

&lt;/script&gt;</description>
      <category>무료게임</category>
      <category>게임</category>
      <category>모바일 게임</category>
      <category>무료 게임</category>
      <category>주사위 게임</category>
      <author>techsolayw</author>
      <guid isPermaLink="true">https://livinghope7.tistory.com/84</guid>
      <comments>https://livinghope7.tistory.com/84#entry84comment</comments>
      <pubDate>Sun, 7 Jun 2026 07:29:51 +0900</pubDate>
    </item>
    <item>
      <title>카드 짝맞추기</title>
      <link>https://livinghope7.tistory.com/83</link>
      <description>&lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css&quot;&gt;

&lt;div id=&quot;memoryGame&quot;&gt;

  &lt;div class=&quot;game-wrap&quot;&gt;

    &lt;h2&gt;  카드 짝맞추기&lt;/h2&gt;

    &lt;p class=&quot;desc&quot;&gt;
      같은 이모지 카드를 모두 찾아보세요!
    &lt;/p&gt;

    &lt;div class=&quot;stats&quot;&gt;

      &lt;div class=&quot;box&quot;&gt;
        &lt;span&gt;이동 횟수&lt;/span&gt;
        &lt;b id=&quot;moves&quot;&gt;0&lt;/b&gt;
      &lt;/div&gt;

      &lt;div class=&quot;box&quot;&gt;
        &lt;span&gt;플레이 시간&lt;/span&gt;
        &lt;b id=&quot;timer&quot;&gt;00:00&lt;/b&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;button id=&quot;restartBtn&quot;&gt;
      새 게임
    &lt;/button&gt;

    &lt;div id=&quot;board&quot;&gt;&lt;/div&gt;

    &lt;div id=&quot;result&quot;&gt;&lt;/div&gt;

  &lt;/div&gt;

&lt;/div&gt;

&lt;style&gt;

#memoryGame,
#memoryGame *{
  box-sizing:border-box;
  font-family:'Pretendard',sans-serif;
}

#memoryGame{
  max-width:900px;
  margin:30px auto;
}

#memoryGame .game-wrap{
  background:#fff;
  border-radius:24px;
  padding:24px;
  box-shadow:0 10px 30px rgba(0,0,0,.08);
}

#memoryGame h2{
  margin:0;
  text-align:center;
  font-size:clamp(28px,5vw,42px);
  font-weight:800;
}

#memoryGame .desc{
  text-align:center;
  color:#666;
  margin:12px 0 20px;
}

#memoryGame .stats{
  display:flex;
  justify-content:center;
  gap:12px;
  margin-bottom:20px;
}

#memoryGame .box{
  min-width:130px;
  padding:12px;
  text-align:center;
  border-radius:14px;
  background:#f8fafc;
  border:1px solid #e5e7eb;
}

#memoryGame .box span{
  display:block;
  font-size:13px;
  color:#666;
}

#memoryGame .box b{
  display:block;
  margin-top:5px;
  font-size:24px;
  font-weight:800;
}

#restartBtn{
  display:block;
  margin:0 auto 20px;
  border:none;
  background:#111827;
  color:#fff;
  padding:12px 24px;
  border-radius:12px;
  font-size:15px;
  font-weight:700;
  cursor:pointer;
}

#board{
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:10px;
}

.card{
  aspect-ratio:1;
  background:#0f172a;
  border-radius:16px;
  cursor:pointer;
  user-select:none;

  display:flex;
  align-items:center;
  justify-content:center;

  font-size:36px;
  transition:.25s;
}

.card::before{
  content:&quot;❓&quot;;
  font-size:32px;
}

.card.flipped::before,
.card.matched::before{
  display:none;
}

.card.flipped{
  background:#fff;
  border:2px solid #e5e7eb;
}

.card.matched{
  background:#22c55e;
  color:#fff;
}

.card .emoji{
  display:none;
}

.card.flipped .emoji,
.card.matched .emoji{
  display:block;
}

#result{
  margin-top:20px;
  text-align:center;
  font-size:20px;
  font-weight:800;
}

@media(max-width:768px){

  #memoryGame .game-wrap{
    padding:18px;
  }

  #board{
    gap:8px;
  }

  .card{
    font-size:28px;
  }

  .card::before{
    font-size:28px;
  }

  #memoryGame .box{
    min-width:100px;
  }

}

&lt;/style&gt;

&lt;script&gt;

document.addEventListener('DOMContentLoaded',function(){

const board =
document.getElementById('board');

const movesEl =
document.getElementById('moves');

const timerEl =
document.getElementById('timer');

const restartBtn =
document.getElementById('restartBtn');

const result =
document.getElementById('result');

const icons = [
' ',' ',' ',' ',
' ','⚽',' ',' '
];

let flipped = [];
let lock = false;
let moves = 0;
let matchedPairs = 0;
let timer = null;
let seconds = 0;

function shuffle(arr){

  for(let i=arr.length-1;i&gt;0;i--){

    const j =
    Math.floor(Math.random()*(i+1));

    [arr[i],arr[j]] =
    [arr[j],arr[i]];
  }

  return arr;
}

function startTimer(){

  clearInterval(timer);

  seconds = 0;

  timerEl.textContent = '00:00';

  timer = setInterval(function(){

    seconds++;

    const min =
    String(Math.floor(seconds/60))
    .padStart(2,'0');

    const sec =
    String(seconds%60)
    .padStart(2,'0');

    timerEl.textContent =
    min + ':' + sec;

  },1000);

}

function createCard(icon){

  const card =
  document.createElement('div');

  card.className = 'card';

  card.dataset.icon = icon;

  const emoji =
  document.createElement('div');

  emoji.className = 'emoji';

  emoji.textContent = icon;

  card.appendChild(emoji);

  card.addEventListener(
    'click',
    flipCard
  );

  return card;

}

function createGame(){

  clearInterval(timer);

  board.innerHTML = '';
  result.innerHTML = '';

  moves = 0;
  matchedPairs = 0;
  flipped = [];
  lock = false;

  movesEl.textContent = '0';

  const cards =
  shuffle([...icons,...icons]);

  cards.forEach(function(icon){

    board.appendChild(
      createCard(icon)
    );

  });

  startTimer();

}

function flipCard(e){

  const card =
  e.currentTarget;

  if(lock) return;

  if(card.classList.contains('flipped'))
  return;

  if(card.classList.contains('matched'))
  return;

  card.classList.add('flipped');

  flipped.push(card);

  if(flipped.length !== 2)
  return;

  moves++;

  movesEl.textContent = moves;

  const first = flipped[0];
  const second = flipped[1];

  if(
    first.dataset.icon ===
    second.dataset.icon
  ){

    first.classList.add('matched');
    second.classList.add('matched');

    flipped = [];

    matchedPairs++;

    if(matchedPairs === icons.length){

      clearInterval(timer);

      result.innerHTML =
      '  게임 완료!&lt;br&gt;' +
      moves +
      '회 이동 · ' +
      timerEl.textContent;

    }

  }else{

    lock = true;

    setTimeout(function(){

      first.classList.remove(
        'flipped'
      );

      second.classList.remove(
        'flipped'
      );

      flipped = [];

      lock = false;

    },800);

  }

}

restartBtn.addEventListener(
  'click',
  createGame
);

createGame();

});

&lt;/script&gt;</description>
      <category>무료게임</category>
      <category>게임</category>
      <category>모바일 게임</category>
      <category>무료 게임</category>
      <category>카드 게임</category>
      <category>카드 짝 맞추기 게임</category>
      <author>techsolayw</author>
      <guid isPermaLink="true">https://livinghope7.tistory.com/83</guid>
      <comments>https://livinghope7.tistory.com/83#entry83comment</comments>
      <pubDate>Sun, 7 Jun 2026 07:27:08 +0900</pubDate>
    </item>
    <item>
      <title>반응속도 테스트 게임</title>
      <link>https://livinghope7.tistory.com/82</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;reaction-game&quot;&gt;
&lt;div class=&quot;card&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⚡ 반응속도 테스트&lt;/h2&gt;
&lt;p class=&quot;desc&quot; data-ke-size=&quot;size16&quot;&gt;화면이 초록색으로 바뀌는 순간 터치하세요!&lt;/p&gt;
&lt;div id=&quot;result&quot;&gt;평균적인 사람의 반응속도는 250~300ms 정도입니다.&lt;/div&gt;
&lt;button id=&quot;startBtn&quot;&gt; 테스트 시작 &lt;/button&gt;
&lt;div id=&quot;gameArea&quot;&gt;시작 버튼을 눌러주세요&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;style&gt;
#reaction-game,
#reaction-game *{
    font-family:'Pretendard',sans-serif;
    box-sizing:border-box;
}

#reaction-game{
    max-width:800px;
    margin:30px auto;
}

#reaction-game .card{
    background:#fff;
    border-radius:24px;
    padding:24px;
    box-shadow:0 10px 30px rgba(0,0,0,.08);
}

#reaction-game h2{
    text-align:center;
    margin:0;
    font-size:clamp(26px,5vw,40px);
    font-weight:800;
}

#reaction-game .desc{
    text-align:center;
    color:#666;
    margin:12px 0 20px;
}

#reaction-game #result{
    background:#f8fafc;
    border:1px solid #e5e7eb;
    border-radius:14px;
    padding:16px;
    text-align:center;
    margin-bottom:16px;
    font-weight:600;
}

#reaction-game #startBtn{
    display:block;
    margin:0 auto 20px;
    border:none;
    background:#111827;
    color:#fff;
    padding:14px 30px;
    border-radius:14px;
    cursor:pointer;
    font-size:16px;
    font-weight:700;
}

#reaction-game #gameArea{
    height:min(55vh,420px);
    min-height:280px;
    border-radius:20px;
    border:2px solid #e5e7eb;
    background:#ef4444;
    display:flex;
    align-items:center;
    justify-content:center;
    text-align:center;
    color:#fff;
    font-size:24px;
    font-weight:800;
    cursor:pointer;
    user-select:none;
    touch-action:manipulation;
    transition:.15s;
}

@media(max-width:768px){

    #reaction-game .card{
        padding:18px;
    }

    #reaction-game #gameArea{
        min-height:260px;
        font-size:20px;
    }
}
&lt;/style&gt;
&lt;/div&gt;
&lt;script&gt;
(function(){

const gameArea = document.getElementById('gameArea');
const startBtn = document.getElementById('startBtn');
const result = document.getElementById('result');

let startTime;
let timeout;
let waiting = false;
let ready = false;

startBtn.addEventListener('click', startGame);

function startGame(){

    clearTimeout(timeout);

    waiting = true;
    ready = false;

    gameArea.style.background = '#ef4444';
    gameArea.innerHTML = '초록색이 될 때까지 기다리세요';

    result.innerHTML = '준비 중...';

    const delay =
        Math.random() * 4000 + 2000;

    timeout = setTimeout(function(){

        waiting = false;
        ready = true;

        gameArea.style.background = '#22c55e';
        gameArea.innerHTML = '지금 터치!';

        startTime = Date.now();

    }, delay);
}

function handleClick(){

    if(ready){

        const reaction =
            Date.now() - startTime;

        ready = false;

        gameArea.style.background = '#3b82f6';
        gameArea.innerHTML = '다시 측정하려면 시작 버튼';

        let rank = '';

        if(reaction &lt; 180){
            rank = '  프로게이머급';
        }
        else if(reaction &lt; 250){
            rank = '  매우 빠름';
        }
        else if(reaction &lt; 320){
            rank = '  평균 이상';
        }
        else{
            rank = '  보통';
        }

        result.innerHTML =
            '반응속도 &lt;strong&gt;' +
            reaction +
            'ms&lt;/strong&gt;&lt;br&gt;' +
            rank;
    }

    else if(waiting){

        clearTimeout(timeout);

        waiting = false;

        gameArea.style.background = '#111827';
        gameArea.innerHTML = '너무 빨랐습니다  ';

        result.innerHTML =
            '초록색이 되기 전에 눌렀습니다.';
    }
}

gameArea.addEventListener('click', handleClick);
gameArea.addEventListener('touchstart', handleClick);

})();
&lt;/script&gt;</description>
      <category>무료게임</category>
      <category>게임</category>
      <category>무료 게임</category>
      <category>반응속도 게임</category>
      <author>techsolayw</author>
      <guid isPermaLink="true">https://livinghope7.tistory.com/82</guid>
      <comments>https://livinghope7.tistory.com/82#entry82comment</comments>
      <pubDate>Sun, 7 Jun 2026 07:22:49 +0900</pubDate>
    </item>
    <item>
      <title>30초 클릭 챌린지 게임</title>
      <link>https://livinghope7.tistory.com/81</link>
      <description>&lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css&quot;&gt;

&lt;div id=&quot;clickGame&quot;&gt;

&lt;div class=&quot;game-card&quot;&gt;

&lt;h2&gt;  30초 클릭 챌린지&lt;/h2&gt;

&lt;p class=&quot;subtitle&quot;&gt;
빨간 원을 최대한 많이 터치하세요!
&lt;/p&gt;

&lt;div class=&quot;info-wrap&quot;&gt;

&lt;div class=&quot;info-box&quot;&gt;
&lt;span&gt;점수&lt;/span&gt;
&lt;b id=&quot;score&quot;&gt;0&lt;/b&gt;
&lt;/div&gt;

&lt;div class=&quot;info-box&quot;&gt;
&lt;span&gt;남은 시간&lt;/span&gt;
&lt;b id=&quot;time&quot;&gt;30&lt;/b&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;button id=&quot;startBtn&quot;&gt;
게임 시작
&lt;/button&gt;

&lt;div id=&quot;playArea&quot;&gt;

&lt;div id=&quot;target&quot;&gt;&lt;/div&gt;

&lt;div id=&quot;message&quot;&gt;
START 버튼을 눌러주세요
&lt;/div&gt;

&lt;/div&gt;

&lt;div id=&quot;result&quot;&gt;&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;style&gt;

#clickGame,
#clickGame *{
box-sizing:border-box;
font-family:'Pretendard',sans-serif;
}

#clickGame{
max-width:900px;
margin:30px auto;
}

#clickGame .game-card{
background:#fff;
border-radius:24px;
padding:24px;
box-shadow:0 10px 30px rgba(0,0,0,.08);
}

#clickGame h2{
margin:0;
text-align:center;
font-size:clamp(28px,5vw,42px);
font-weight:800;
}

#clickGame .subtitle{
text-align:center;
color:#666;
margin:10px 0 20px;
}

#clickGame .info-wrap{
display:flex;
justify-content:center;
gap:12px;
margin-bottom:20px;
}

#clickGame .info-box{
min-width:130px;
text-align:center;
padding:12px;
border-radius:14px;
background:#f8fafc;
border:1px solid #e5e7eb;
}

#clickGame .info-box span{
display:block;
font-size:13px;
color:#666;
}

#clickGame .info-box b{
display:block;
margin-top:4px;
font-size:24px;
font-weight:800;
}

#startBtn{
display:block;
margin:0 auto 20px;
border:none;
border-radius:12px;
background:#111827;
color:#fff;
padding:14px 28px;
font-size:15px;
font-weight:700;
cursor:pointer;
}

#playArea{
position:relative;
height:min(60vh,500px);
min-height:320px;
border-radius:20px;
border:2px solid #e5e7eb;
background:#f8fafc;
overflow:hidden;
touch-action:manipulation;
}

#target{
position:absolute;
width:70px;
height:70px;
border-radius:50%;
background:#ef4444;
display:none;
cursor:pointer;
user-select:none;
-webkit-tap-highlight-color:transparent;
box-shadow:0 10px 25px rgba(239,68,68,.35);
transition:transform .08s;
}

#target:active{
transform:scale(.9);
}

#message{
position:absolute;
inset:0;
display:flex;
align-items:center;
justify-content:center;
color:#888;
font-size:18px;
font-weight:600;
text-align:center;
padding:20px;
}

#result{
margin-top:20px;
text-align:center;
font-size:22px;
font-weight:800;
}

@media(max-width:768px){

#clickGame .game-card{
padding:18px;
}

#clickGame .info-box{
flex:1;
min-width:auto;
}

#target{
width:64px;
height:64px;
}

}

&lt;/style&gt;

&lt;script&gt;

document.addEventListener('DOMContentLoaded',function(){

const scoreEl =
document.getElementById('score');

const timeEl =
document.getElementById('time');

const target =
document.getElementById('target');

const startBtn =
document.getElementById('startBtn');

const playArea =
document.getElementById('playArea');

const message =
document.getElementById('message');

const result =
document.getElementById('result');

let score = 0;
let timeLeft = 30;
let timer = null;
let playing = false;

function moveTarget(){

const maxX =
playArea.clientWidth -
target.offsetWidth;

const maxY =
playArea.clientHeight -
target.offsetHeight;

const x =
Math.random() * maxX;

const y =
Math.random() * maxY;

target.style.left =
x + 'px';

target.style.top =
y + 'px';

}

function hitTarget(){

if(!playing) return;

score++;

scoreEl.textContent =
score;

moveTarget();

}

target.addEventListener(
'click',
hitTarget
);

function startGame(){

clearInterval(timer);

score = 0;
timeLeft = 30;
playing = true;

scoreEl.textContent = '0';
timeEl.textContent = '30';

result.innerHTML = '';

message.style.display =
'none';

target.style.display =
'block';

moveTarget();

timer = setInterval(function(){

timeLeft--;

timeEl.textContent =
timeLeft;

if(timeLeft &lt;= 0){

clearInterval(timer);

playing = false;

target.style.display =
'none';

message.style.display =
'flex';

message.innerHTML =
'게임 종료  &lt;br&gt;다시 플레이하려면 게임 시작 버튼을 누르세요';

result.innerHTML =
'  최종 점수 : ' +
score +
'점';

}

},1000);

}

startBtn.addEventListener(
'click',
startGame
);

});

&lt;/script&gt;</description>
      <category>무료게임</category>
      <category>30초 클릭 게임</category>
      <category>게임</category>
      <category>모바일 게임</category>
      <category>무료게임</category>
      <author>techsolayw</author>
      <guid isPermaLink="true">https://livinghope7.tistory.com/81</guid>
      <comments>https://livinghope7.tistory.com/81#entry81comment</comments>
      <pubDate>Sun, 7 Jun 2026 07:18:39 +0900</pubDate>
    </item>
    <item>
      <title>2026 IT 인프라 전략: 온프레미스 vs 클라우드 심층 분석</title>
      <link>https://livinghope7.tistory.com/80</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;2026 IT 인프라 전략: 온프레미스 vs 클라우드 심층 분석&lt;/title&gt;
    &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css&quot; /&gt;
    &lt;style&gt;
        body { margin: 0; background-color: #ffffff; font-family: 'Pretendard', sans-serif; color: #1e293b; line-height: 1.8; padding: 20px; }
        .full-width-container { width: 100%; max-width: 900px; margin: 0 auto; }
        h1 { color: #0f172a; font-size: 2.8rem; text-align: center; margin-bottom: 50px; }
        h2 { color: #2563eb; border-bottom: 2px solid #2563eb; padding-bottom: 10px; margin-top: 60px; font-size: 1.8rem; }
        p { font-size: 1.15rem; margin-bottom: 25px; text-align: justify; }
        .dashboard-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 40px 0; }
        .card { background: #f8fafc; border: 1px solid #e2e8f0; padding: 30px; border-radius: 12px; }
        .stat { font-size: 2.5rem; font-weight: 800; color: #2563eb; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class=&quot;full-width-container&quot;&gt;
    &lt;h1&gt;2026 IT 인프라 트렌드: 온프레미스 vs 클라우드, 무엇이 정답인가?&lt;/h1&gt;
    
    &lt;div class=&quot;dashboard-grid&quot;&gt;
        &lt;div class=&quot;card&quot;&gt;
            &lt;h3&gt;클라우드 비용 효율성 지표&lt;/h3&gt;
            &lt;div class=&quot;stat&quot;&gt;68%&lt;/div&gt;
            &lt;p&gt;전년 대비 하이브리드 인프라 도입 기업의 운영 효율성 증대 수준&lt;/p&gt;
        &lt;/div&gt;
        &lt;div class=&quot;card&quot;&gt;
            &lt;h3&gt;데이터 주권 및 보안 만족도&lt;/h3&gt;
            &lt;div class=&quot;stat&quot;&gt;92%&lt;/div&gt;
            &lt;p&gt;금융/공공 섹터의 온프레미스 유지 결정에 대한 만족도&lt;/p&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;h2&gt;1. 서론: 인프라 전략의 패러다임 변화&lt;/h2&gt;
    &lt;p&gt;2026년 현재, 기업 IT 인프라의 중심축이 요동치고 있습니다. 지난 10년간 '클라우드 우선 전략(Cloud-First)'은 거스를 수 없는 대세였습니다. 그러나 기술의 성숙과 함께 클라우드 구독 모델의 비용 효율성에 대한 의문이 제기되기 시작했습니다. 저는 SI 프로젝트를 수행하며 요구사항 정의 단계에서 인프라 구성을 고민할 때, 항상 '확장성'과 '비용' 사이의 딜레마를 마주합니다. 클라우드로의 전환은 초기 구축의 민첩성을 제공하지만, 프로젝트 규모가 커질수록 기하급수적으로 늘어나는 데이터 전송 비용과 구독료는 기업의 재무적 부담으로 직결됩니다.&lt;/p&gt;

    &lt;h2&gt;2. 클라우드 비용의 함정과 FinOps의 필요성&lt;/h2&gt;
    &lt;p&gt;클라우드 서비스 제공자(CSP)들의 과금 체계는 매우 복잡합니다. 사용한 만큼 지불한다는 원칙은 매력적이지만, 실제 엔터프라이즈 환경에서는 '예측 불가능한 청구서'라는 리스크를 동반합니다. 특히 고성능 데이터 처리를 요하는 AI 모델 학습이나 대규모 배치 작업 시 클라우드 비용은 예산 범위를 훌쩍 넘어서기 일쑤입니다. 따라서 2026년의 핵심 역량은 클라우드를 도입하는 능력이 아니라, 클라우드 비용을 통제하는 'FinOps(Financial Operations)' 능력입니다. 인프라 설계 시점에 데이터의 특성을 분류하고, 캐싱 전략을 최적화하며, 컴퓨팅 파워의 낭비를 제거하는 세밀한 설계가 뒷받침되지 않으면 클라우드는 '비용의 블랙홀'이 될 수 있습니다.&lt;/p&gt;

    &lt;h2&gt;3. 온프레미스의 재발견: 물리적 제어권과 장기적 가치&lt;/h2&gt;
    &lt;p&gt;데이터 주권과 보안이 강조되는 시대에 온프레미스는 다시금 핵심 자산으로 떠오르고 있습니다. 특히 금융, 의료, 제조 등 민감 데이터를 다루는 산업군에서는 보안 사고 시의 책임 소재와 데이터 통제권 측면에서 온프레미스를 고집하는 경향이 뚜렷합니다. 5년 이상의 장기적인 TCO(총소유비용) 관점에서 볼 때, 고사양 서버 하드웨어를 직접 도입하여 운영하는 비용이 클라우드의 월 구독료를 상쇄하고도 남는 경우가 많습니다. 이는 기업의 자산 구조를 운영비(OpEx)가 아닌 자본비(CapEx)로 전환하여 기업 가치를 방어하려는 경영적 판단이기도 합니다.&lt;/p&gt;

    &lt;h2&gt;4. 2026년의 정답: 전략적 하이브리드 인프라&lt;/h2&gt;
    &lt;p&gt;온프레미스냐 클라우드냐의 이분법적 사고는 이제 과거의 유물이 되었습니다. 2026년의 성공적인 기업들은 '전략적 하이브리드 아키텍처'를 채택합니다. 핵심 비즈니스 로직과 민감 데이터는 온프레미스 환경에서 견고하게 관리하고, 트래픽 변화가 심하거나 실험적인 서비스는 클라우드를 활용하는 방식입니다. 인프라 담당자들은 이제 클라우드만을 바라보는 것이 아니라, 기업 내부의 온프레미스 환경과 외부 클라우드를 하나의 유기체처럼 통합 관리할 수 있는 가시성(Visibility) 확보에 집중해야 합니다.&lt;/p&gt;

    &lt;h2&gt;5. 맺음말: 인프라 아키텍트의 미래 역량&lt;/h2&gt;
    &lt;p&gt;결국 IT 인프라는 비즈니스의 성장 속도에 맞춰 끊임없이 변주해야 합니다. 앞으로의 인프라 아키텍트는 단순한 서버 운영자가 아닌, 비즈니스 가치와 기술 인프라 사이의 비용-성능 균형을 설계하는 전략가여야 합니다. 현재 어떤 인프라 고민을 하고 계신가요? 그 고민이 깊어질수록 당신의 프로젝트는 더 단단해질 것입니다.&lt;/p&gt;
  &lt;div class=&quot;disclaimer&quot;&gt;※ 본 포스팅은 작성자의 개인적인 견해와 분석을 바탕으로 작성되었으며, 특정 투자나 사업 결정을 권유하는 목적이 아닙니다. 모든 의사결정의 책임은 본인에게 있음을 알려드립니다.&lt;/div&gt;
&lt;div class=&quot;footer&quot;&gt;&amp;copy; 2026 kr.techsolayw. All Rights Reserved.&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>IT High Tech</category>
      <category>IT 인프라</category>
      <category>온프레미스</category>
      <category>클라우드</category>
      <author>techsolayw</author>
      <guid isPermaLink="true">https://livinghope7.tistory.com/80</guid>
      <comments>https://livinghope7.tistory.com/80#entry80comment</comments>
      <pubDate>Sun, 7 Jun 2026 07:12:29 +0900</pubDate>
    </item>
  </channel>
</rss>