<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>키보드 깡패</title>
    <link>https://naa0.tistory.com/</link>
    <description>행복하자 ⛧</description>
    <language>ko</language>
    <pubDate>Sat, 22 Aug 2026 18:38:18 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>키깡</managingEditor>
    <image>
      <title>키보드 깡패</title>
      <url>https://tistory1.daumcdn.net/tistory/3216268/attach/08c5bc29cc5346748a48a76d12c406b7</url>
      <link>https://naa0.tistory.com</link>
    </image>
    <item>
      <title>[불교 서적] 진짜 나를 찾아라 (3) 사람이 미울 때 읽으면 좋을</title>
      <link>https://naa0.tistory.com/473</link>
      <description>&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;수많은 생을 두고 쌓은 인연&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;- 사람의 인연은 수많은 생을 두고 쌓은 인연&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;- 텅빈 마음을 가져야 한다. = 선입견을 버려야 한다.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- &lt;b&gt;상대방의 생각을 바꾸려 하지 말아야한다.&lt;/b&gt; 대화는 토론이 아니라 서로 의견을 나누는 것.&lt;br&gt;- 대화에는 이기고 지는 것이 없으며 내 마음을 상대방에게 전하고 상대방의 마음을 내가 받아들이는 것.&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot;&gt;&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;내 가족이 내 이웃이 나의 선지식&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;- &lt;b&gt;마음을 어떻게 먹고 생각을 어떻게 하느냐에 따라 많은 것이 달라짐&lt;/b&gt;. 업의 기준에서 보면 순간의 선택이 평생을 좌우함.&lt;br&gt;- 서로 기준이 언짢아지면 그게 업이 됨.&lt;br&gt;- 어떤 사회든 불합리한 점이 있고 부조리한 면도 있으며 백퍼센트 완벽한 세상은 어디에도 없음.&lt;br&gt;- “오늘 할 일은, 단 한사람이라도 좋으니 누구든 나에게 마음으로부터 ‘고맙습니다.’ 하고 인사하는 친구를 만드는 일입니다. 그게 내가 이루고자 하는 원입니다.” - 한 사업가가 다짐과도 같이 하는 염원&lt;br&gt;- &lt;b&gt;어떤 서람이 좀 얄밉다, 밉상이다, 그런 마음이 들면 오히려 그 사람을 위해서 기도하라. 내 마음과 생각을 돌이키게 하는 선지식이므로.&lt;/b&gt; 나에게 깨우침을 주면 그가 바로 선지식인 것.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- &lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;내 수양이 모자라 이렇듯 다툼에 빠지는 것을 알게 해주는 선지식.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Etc/Buddhism</category>
      <category>법정스님</category>
      <category>불교</category>
      <category>진짜 나를 찾아라</category>
      <category>책</category>
      <author>키깡</author>
      <guid isPermaLink="true">https://naa0.tistory.com/473</guid>
      <comments>https://naa0.tistory.com/473#entry473comment</comments>
      <pubDate>Fri, 20 Feb 2026 03:52:47 +0900</pubDate>
    </item>
    <item>
      <title>[불교 서적] 진짜 나를 찾아라 (2) 헤맬 때, 욕심이 많아질 때 읽으면 좋을</title>
      <link>https://naa0.tistory.com/472</link>
      <description>&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;부처님과 같은 공덕을 이루려면&lt;/h2&gt;&lt;blockquote data-ke-style=&quot;style2&quot;&gt;결국 전반적으로는 꼭 공덕을 이루기 위하여는 절을 가서 기도를 올리고 수행을 하는 이전에 일상생활에서 늘 불교의 가르침을 떠올리며 살아야함이 포인트 같다.&lt;/blockquote&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;- 경전은 올바르게 불교를 배우기 위해 꼭 읽어야함.&lt;br&gt;- 부처님과 같은 공덕을 이루려면 열가지 행원을 쌓아야함.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- &lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;예경제불&lt;/b&gt;&lt;/span&gt;: 집과 공공장소에서 이웃을 부처님처럼 예절을 갖춰 대하기&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- &lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;칭찬여래&lt;/b&gt;&lt;/span&gt;: 자신을 비우고 타인의 덕행을 부처님처럼 찬탄하기&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- &lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;광수공양&lt;/b&gt;&lt;/span&gt;: 여러가지를 공양하는 일. 그 중에서도 법공양이 가장 중함. (불경을 남에게 읽어 들려주거나 불경 따위를 보시하는 일)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- &lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;참회업장&lt;/b&gt;&lt;/span&gt;: 참은 지나간 허물을 뉘우친 것이고, 회는 다시는 되풀이하지 않겠다는 다짐. &lt;b&gt;진정한 참회는 변화하는 삶&lt;/b&gt;. 무언가를 바라기 위해 기도하고 염불한다면 그것은 진짜 불심이 아님. 자신을 내세우거나 바라는 마음이 있다면 선행을 했더라도 참다운 공덕이 아님. 천수경 - “죄는 자성이 없어 한 생각을 따라 일어난다. 한 생각이 사라지면 죄도 없어진다. 죄도 없고 생각도 쉬어 이 둘이 함께 공하면, 이를 가리켜 진짜 참회라 한다.”&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- &lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;수희공덕&lt;/b&gt;&lt;/span&gt;: 곧 남의 공덕을 함께 기뻐하는 것. 자기중심적 사고에서 벗어나 발보리심- 불도의 깨달음을 얻고 중생을 제도하려는 마음을 일으켜라.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- &lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;청전법륜&lt;/b&gt;&lt;/span&gt;: 설법하여 주시기를 청하라. 남의 말을 들으려명 인내력이 필요하나 남의 내부에서 나를 발견할 수 있음을 기억하라.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- &lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;청불주세&lt;/b&gt;&lt;/span&gt;: 부처님이 세상에 오래 계시기를 청하는 것. 누구와 함께할 수 있다는 것은 서로가 영향을 주고받으면서 인간이 되어간다는 것을 의미. 내 부모를 모시는 것도 스승을 모시는 것과 같다.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- &lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;상수불학&lt;/b&gt;&lt;/span&gt;: 늘 부처님을 본받아 배우는 것. 많이 알기보다는 제대로 알고 바르게 행하는 일이 소중하다. 뭐든지 가득 채우려고만 하지 말고 텅텅 비워라. 목적없는 생활에 휩쓸리지 말아야한다. 진리를 담은 사상이나 경전이 우리를 형성시킨다. 새로운 샘물만을 찾아 끝없이 찾아다니기보다 가장 맑은 샘물 하나만을 정하여 그곳에서 새로운 지혜를 길어 마시는 것이 좋다.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- &lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;항순중생&lt;/b&gt;&lt;/span&gt;: 늘 이웃에 따르라. 부자란 많이 가지고 있는 사람이 아니라 많이 나누는 사람이다. 누군가의 곤궁함에 손을 내밀지 않는 것은 그를 해치는 것과 다름이 없다. 이웃으로 큰 자비심을 일으키고, 자비심으로 보리심을 발하고, 보리심으로 깨달음을 이루는 것.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- &lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;보개회향&lt;/b&gt;&lt;/span&gt;: 모두 다 돌려보내는 것. 처음 예배하고 공경하는 것부터 이웃의 뜻에 따르기까지, 그 모든 공덕을 온 법계에 있는 모든 이웃에게 돌려보내라. 이웃들이 저지른 나쁜 업으로 인해 받게 되는 온갖 고통의 과보를 대신 받으라. 이웃들이 모두 해탈하고 보리를 성취하도록 모든 공덕을 돌려보내라.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- 종교는 자기로부터 시작하여 이웃과 세상에 도달하는 데서 그 뜻을 찾는 것이다. &lt;b&gt;우리들이 날마다 마주치는 구체적인 이웃이, 나를 깨우쳐주고 나를 형성시키는 고마운 선지식인 줄 알아야 함.&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot;&gt;&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;없는 것을 어찌 찾으려 하는가&lt;/h2&gt;&lt;blockquote data-ke-style=&quot;style2&quot;&gt;답은 자기 안에서 찾아야 한다.&lt;/blockquote&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;- “소수레가 움직이지 않을 때는 어떻게 해야겠느냐? 수레에 채찍질을 해야겠느냐, 아니면 소를 몰아야겠느냐? 선은 앉거나 눕는 것과 상관이 없는 것이며, 가만히 앉아 있는다고 부처가 되는 것도 아니다. 집착이 없는 것, 그리하여 취하고 버릴 게 없는 것이 진짜 선이다.”&lt;br&gt;- 선은 좌선으로써 행동의 근본을 삼지만, 좌선 뿐 아니라 일상의 기거동작마다 삼매의 정신으로 순화하고 통일해야 하는 것.&lt;br&gt;- 진정견해 (청정한 지혜)를 얻고 싶다면 타인으로부터 미혹을 얻지 말라. 부처를 만나면 부처를 죽이고, 조사를 만나면 조사를 죽이고, 아라한을 만나면 아라한을 죽이고, 친척 권속을 만나면 친척 권속을 죽여라. 그래야만 어떠한 것에도 구애받지 않고 자유자재하리라.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- 평상심이 바로 도이다.&lt;br&gt;- &lt;b&gt;선은 설명하거나 해석하지 않으며 자기에게서 나온 의문에 대한 답은 자기 자신 안에서 찾으라 한다.&lt;/b&gt; 답은 이미 질문 속에 있으며, 자기를 잊어버릴 때 모든 것이 진정한 자기가 된다. 언제나 전체인 자기 안에서 살 수 있어야 한다.&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot;&gt;&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;인간을 벗어나 자연으로 살아가라&lt;/h2&gt;&lt;blockquote data-ke-style=&quot;style2&quot;&gt;요즘들어 꼭 물욕 뿐 아니라 많은 부분에서 욕심이 많아지는 것 같다는 생각이 든다. 나이가 들면 내려놓기가 될 줄 알았는데 점점 더 욕심이 많아진다.&lt;br&gt;늘 내가 잠시 관리하고 있는 것 뿐이란 것을 기억하고, 정말 나에게 필요한 것만을 잠시 내가 갖고있자.&lt;/blockquote&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;- 거죽이 덧없다. 반드시 모든 것은 허물어지고 변한다. 문제는 어떻게 변하느냐의 문제. “나는 누구인가?”를 항상 물으며 각성해야.&lt;br&gt;- 공수래 공수거. &lt;b&gt;내가 가졌다고 생각하는 것은 내가 잠시 관리하고 있는 것 뿐이며 끝내는 모두 내려놓아야 함.&lt;/b&gt;&lt;br&gt;- &lt;b&gt;내가 무엇인가를 가지면 그 물건으로부터도 내 자신이 가짐을 당하는 것이며 물건에 집착하게 되면 그것이 인간 존재보다 훨씬 중요한 것이 돼버림.&lt;/b&gt;&lt;br&gt;- 소유라는 것은 정작 가지게 되면 아무것도 아닌 것이 되는 것. 정말 갖고 싶었는데 막상 그걸 가지고 나면 흥미를 잃어버리고 또 다른 물건에 집착하게 됨.&lt;br&gt;&lt;br&gt;- 이것이 필요인지 욕망인지 스스로 물어야함. 욕망하지 않으면 가질 필요가 없고, 가지지 않으면 홀가분 해진다.&lt;br&gt;- &lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;무소유는 아무것도 가지지 않는 것이 아닌 불필요한 것을 가지지 않는 것&lt;/b&gt;&lt;/span&gt;.&lt;br&gt;- 마음에 이것저것 채워져 있지 않아야 온 세상을 가질 수 있다. 무엇인가를 갖는 다는 건 결국 소유를 당하는 것임.&lt;br&gt;- “진리는 바로 그대 안에 있다. 그러나 그대 자신은 이것을 알지 못한 채 이 숲에서 저 숲으로 쉴 새 없이 헤매고 있다. 여기 바로 지금 이 자리에 있는 진리를 보라. 그대가 원하는 곳이면 어디든지 가 보라. 이 도시로 저 산속으로. 그러나 그들의 영혼을 찾지 못한다면 세상은 여전히 환상에 지나지 않으리라.”&lt;/p&gt;</description>
      <category>Etc/Buddhism</category>
      <category>법정스님</category>
      <category>불교</category>
      <category>진짜 나를 찾아라</category>
      <category>책</category>
      <author>키깡</author>
      <guid isPermaLink="true">https://naa0.tistory.com/472</guid>
      <comments>https://naa0.tistory.com/472#entry472comment</comments>
      <pubDate>Fri, 20 Feb 2026 03:15:41 +0900</pubDate>
    </item>
    <item>
      <title>[260219] 여행에 흥미가 없는 사람</title>
      <link>https://naa0.tistory.com/471</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;2/7 ~ 2/11은 일본여행을, 2/13 ~ 2/19 오늘까지 본가에 내려가있다가 올라가는 길이다.&lt;br&gt;&lt;br&gt;2/7 ~ 2/11은 하루에 최소 2만보씩 걸으며 이것저것 보고, 맛있는 것도 먹고, 쇼핑도 하면서 즐겼고, 2/13 ~ 2/18 기간 동안 하루에 300보 정도 걸으며 이불속을 즐겼다. (그 말은 즉 아무 데도 안 나가고 집콕했다.) &lt;br&gt;&lt;br&gt;둘을 비교해 보면? 솔직하게 여행보다 너무너무 행복했다.&lt;br&gt;물론 여행을 가야 추억이 남지만, 당시의 행복도만 놓고 보자면… 집콕이 너무너무 행복도가 높다.&lt;br&gt;&lt;br&gt;1. 걷는 걸 좋아하는 가? &lt;span style=&quot;background-color: #ee2323;&quot;&gt;&lt;b&gt;No&lt;/b&gt;&lt;/span&gt;&lt;br&gt;2. 체력이 좋은가? &lt;span style=&quot;background-color: #ee2323;&quot;&gt;&lt;b&gt;No&lt;/b&gt;&lt;/span&gt;&lt;br&gt;3. 새로운 걸 보는 것에서 행복도가 높은가? &lt;span style=&quot;background-color: #ee2323;&quot;&gt;&lt;b&gt;No&lt;/b&gt;&lt;/span&gt;… 뭐 신기하고 좋은데 행복도로 보면 그냥 눕는 게 최고!&lt;br&gt;4. 새로운 걸 경험하는 데에서 행복도가 높은가? &lt;span style=&quot;background-color: #f89009;&quot;&gt;&lt;b&gt;So So&lt;/b&gt;&lt;/span&gt;&lt;br&gt;5. 새로운 걸 먹어보는 걸 좋아하는가? &lt;span style=&quot;background-color: #f89009;&quot;&gt;&lt;b&gt;So So&lt;/b&gt;&lt;/span&gt;… 사실 정확히는 맛있는 걸 먹는 건 좋아함.&lt;br&gt;6. 쇼핑을 좋아하는가? &lt;span style=&quot;background-color: #ee2323;&quot;&gt;&lt;b&gt;No&lt;/b&gt;&lt;/span&gt;… 쇼핑자체를 별로 즐기지 않으며 갖고 싶은 게 생겨도 한 물건을 살까 말까 오래 몇 개월 고민하는 그 기간자체를 좋아하긴 함. 그러다가 구매하고 사용할 때 너무 좋고. 그래서인지 여행지에서의 / 오프라인에서의 물건구매는 너무 어렵다…;&lt;br&gt;&lt;br&gt;뭐 결론은 새로운 좋은 것에 별로 흥미가 없으며 체력도 거지이고 원체 눕는 게 너무너무 좋은 게으름 핑핑이라… 국내여행도 흥미가 크게 없지만 해외여행은 특히나 즐기기 어려운 것 같다.&lt;br&gt;혼자 여행 다니는 사람들이 너무 신기하다.&lt;br&gt;그나마 누군가 끌고 가면 누군가와의 추억을 만들기 위해 가는 거지 한 번도 여행을 와서 너무너무 행복하다 생각해 본 적이 없는 것 같다.&lt;br&gt;&lt;br&gt;&lt;br&gt;평소 취미가 없는 것의 연장선 같기도 하다…&lt;br&gt;나이가 먹을수록 더 심해지는 증상인데, 무언가를 했을 때 그리 크게 빠져들지 않는 것 같다.&lt;br&gt;&lt;br&gt;무언가를 깊이 있게 빠져 즐기는 사람들이 너무나 부럽다. 이불에 깊이 있게 빠져있긴 한데 다른 것들도 이만큼 좋다면 인생이 더 다채롭지 않을까…&lt;/p&gt;</description>
      <category>Etc/주저리</category>
      <category>일기</category>
      <category>주저리</category>
      <author>키깡</author>
      <guid isPermaLink="true">https://naa0.tistory.com/471</guid>
      <comments>https://naa0.tistory.com/471#entry471comment</comments>
      <pubDate>Thu, 19 Feb 2026 19:11:51 +0900</pubDate>
    </item>
    <item>
      <title>[260203] 성악설이 맞는 것 같은 요즘</title>
      <link>https://naa0.tistory.com/469</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;회사에 너무 책임없는 쾌락을 즐기는 팀이 많다. 나도 그런 곳으로 갔어야 했는데…&lt;br&gt;&lt;br&gt;괴롭다. 나도 방안만 내고 싶다.&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;근데 오늘은 좀 상당한 일못러였던 것 같음. 뭔가 꼼꼼하고 체계적이지 못한 면에 대한 보완이 필요한 것 같다.&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;오늘은 민갱찌 청모를 가는 날. 두고 온 일이 찝찝하긴 하지만 재밌게 놀자.&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2100&quot; data-origin-height=&quot;1576&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/doZjv5/dJMcafFuoAs/rSxPEb5hk8oKpD58Cw9Wt0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/doZjv5/dJMcafFuoAs/rSxPEb5hk8oKpD58Cw9Wt0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/doZjv5/dJMcafFuoAs/rSxPEb5hk8oKpD58Cw9Wt0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdoZjv5%2FdJMcafFuoAs%2FrSxPEb5hk8oKpD58Cw9Wt0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2100&quot; height=&quot;1576&quot; data-origin-width=&quot;2100&quot; data-origin-height=&quot;1576&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;케이크도 픽업함. 생각보다 매우 이뻐서 대만족!&lt;br&gt;&lt;br&gt;근데 생각보다 친한 친구가 떠나가니 결혼을 축하할 때 축하하는 마음 뿐 아니라 내 미래에 대한 불안감, 친구를 어찌됐든 무언가 빼앗긴다는 느낌(?)도 들어서 음… 뭔가 나에대한 성찰을 많이 하게 되는 계기였다. &lt;br&gt;&lt;br&gt;나쁜 일에 슬퍼하는 건 쉽지만 좋은 일에 100%의 감정으로 축하해주는 것은 참으로 어려운 일이구나. 나를 많이 수련해 나가야할 것 같다.&lt;/p&gt;</description>
      <category>Etc/주저리</category>
      <category>일기</category>
      <category>주저리</category>
      <author>키깡</author>
      <guid isPermaLink="true">https://naa0.tistory.com/469</guid>
      <comments>https://naa0.tistory.com/469#entry469comment</comments>
      <pubDate>Tue, 3 Feb 2026 01:02:54 +0900</pubDate>
    </item>
    <item>
      <title>[260202] AI 시대에서 방황하는 서른 살의 주저리</title>
      <link>https://naa0.tistory.com/467</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&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;이전의 내 생각들을 보게 되면 힘을 얻기도 하고, 요즘 같이 많은 생각들이 얽혀서 굳었을 때는 글을 써보는 게 도움이 되는 것 같아, 짬짬이 주저리들을 늘여놓아볼까 한다.&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;요새 부쩍 사실 자기 계발 및 회사 일에 대한 의욕을 잃은 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학생 때, 회사를 다니기 시작한 초까지만 해도 그저 성실함과 내 일에 대한 지고지순함이 그저 나를 어딘가로 데려다줄 것이라 믿었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;대 AI 로봇 시대, 내 방향성에 의문이 많이 생기는 요즘이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://youtu.be/6rTIon2QaiQ?si=GJMoo9jddxF4jfyr&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://youtu.be/6rTIon2QaiQ?si=GJMoo9jddxF4jfyr&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=6rTIon2QaiQ&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/vq2XO/dJMb9c9s4ZU/j8w65t2H4gO4iZJ5btee51/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=554_218_774_438,https://scrap.kakaocdn.net/dn/czScwB/dJMb9jgsk0r/9URZhSXVwAkRg6dXO8UUM0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=554_218_774_438&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;일론머스크 : 의대 가지 마세요, 어차피 AI가 다 해줍니다...이거 진짜임? / 스브스뉴스&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/6rTIon2QaiQ&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 이에게는 위와 같은 뉴스가 호재일 수도 있겠지만, 나와 같이 무언가에 그리 뛰어난 재능이 없는, 그저 무언가를 &lt;b&gt;'남들보다 느린 것 같지만 그래도 보다 열심히 하면 중간보단 잘하게 되더라'라는&lt;/b&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;과연 로봇과 AI가 인간을 대체하면 인간은 행복할까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 한두 시간 간격으로 &lt;b&gt;'때려칠거야 학씨'&lt;/b&gt;를 외치면서 다녀도, 혈압이 400치는 것만 같은 기분을 하루에 종종 느껴도, 막상 그만 다니라 하기에는... 금전적인 부분 외에도 회사라는 공간이 나에게 주고 있는 의미는 크다.&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;첫째, 나 같은 게으름뱅이에게는 어쨌거나 저쨌거나 강제적으로 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;규칙적인 생활&lt;/b&gt;&lt;/span&gt;을 하게 해 주고, (종종 늦잠은 자지만...) 결과적으로 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;성취&lt;/b&gt;&lt;/span&gt;를 하게 해주는 (1년의 뿌듯함을 주는) 공간이다. 극 P 침대 러버 인간으로서, 만약 지금 회사라는 강제적인 공간이 없다면 지금쯤 늘어져서 쇼츠나 주구장창 보고, 1년 동안 뭐 했을까만 되짚고 있겠지...&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강제로 아침에 일어나서 갈 곳이 있고, 꼭 기술적인 부분이 아니어도 1년마다 무언가 성장점이 있다는 부분에서 나에게 주는 의미가 가장 큰 것 같다.&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;둘째, 내가 가장 싫어해서 접촉하지 않았던 인간군상들과도 어쨌든 맞대고 살아가며 어쩌면 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;사람에 대한 편견을 깨 준 첫 공간&lt;/b&gt;&lt;/span&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항상 회사 이전에는 나와 다른 '부류'라는 생각이 들면, 굳이 가까이하지 않았다. 그런 인간관계가 굳이 필요하다고 생각해 본 적도 없고, 뭐가 어찌 됐든 오래 말을 섞어볼 일은 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기에 더 크게 크게 오해가 쌓이고 편견으로 자리 잡았던 것 같다. '나와 맞는 사람이 따로 있어'라는...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회사 생활을 하면서 내가 좋든 싫든 혐오하든 같이 일을 하면서, 어떤 포인트에서 '손절 마렵다'를 느껴도 손절할 수 없는 상황에 놓이면서 대화들을 나누다 보면, 물론 더욱더 싫어지는 사람도 있지만, 또 오래 보다 보면 내가 보지 못했었던 좋은 면을 가진 케이스도 있고... 어찌 됐든 내가 가졌던 안 좋은 특성을 많이 해소하게 된 계기이다. 그래도 100% 나쁜 사람은 없고 배울 점은 누구에게나 반드시 있다는 관점은 갖게 됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금도 내향인인지라 낯선 사람을 경계하는 것도 있고... 페르소나 쓰고 쉽사리 깊은 마음이나 생각까지 open the door 하지 않는 것은 똑같지만... 안 좋은 편견은 많이 내려놓았다고 스스로 생각한다. (남이 볼 땐 아닐 수도)&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;기본적으로 일을 점점 더 효율적으로 하는 방식을 얻는 것도 그렇고 인내심을 배우는 부분도 그렇고 회사가 자아를 성장시키기 좋은 공간이라는 것에 매우 동의를 하는 바인데 갑자기 '오늘부터 나오지 않아도 돼요' 하는, 회사에서 나가도 좋다는 시그널을 받으면 참 씁쓸할 것 같다.&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;뭐 비단 회사뿐 아니라 내가 옳다고 믿었던 여러 가지 들에 고민이 생긴다. 이런 시대에서 결혼을 하고, 아기를 낳는 것이 맞는가? 내 머릿속의 이러저러한 고통을 후세에 전달하는 것이 아닌가? 지폐가 휴지조각이 되고, 사회주의의 사회로 간다면 내가 이리 아등바등 일하고 또 투자 공부를 하며 알뜰살뜰 모으는 것이 맞는가? 등등등...&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;쓰다 보니, 뭐 무튼 너무 스트레스를 받으며 회사를 다니지 말아야겠다는 생각이 든다. 무슨 일이든 너무 스트레스받지 말자. 지나가면 어차피 결과만 남는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어쨌든 함께 하는 일에 피해를 주지 않을 만큼의 노력을 하는 것은 좋지만, 너무 아등바등하면서 스스로 스트레스받는 게 제일 손해라는 생각이 문득 든다. 하다 보니 점점 욕심이 생겼던 이번 1월이 스쳐 지나간다. 납기일에 맞추지 못할까 봐 전전긍긍, 또는 '이게 나중에 나에게 무슨 도움이 될까?', 누군가에 대한 미움 등이 결국 스스로를 괴롭혔던 것 같다.&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;이렇게 얽매이는 마음이 다 욕심인데, 지나고 보면 다 부질없을 것이 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;속세에 사는 사람이 욕심을 버리기란 참으로 어려운 일이나... 무튼 욕심인 것을 알아차리고 버리기 위해 노력해야겠다. 2월부터는 일본도 갔다 오니, 좀 다른 분야의 책도 읽고, 불교 교리도 슬쩍슬쩍 공부하고... 물건도 좀 치우고, 내 마음을 비우기 위해 노력해야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 미래가 오든 겸허히 받아들일 수 있는 마음을 갖자.&lt;/p&gt;</description>
      <category>Etc/주저리</category>
      <category>일기</category>
      <category>주저리</category>
      <author>키깡</author>
      <guid isPermaLink="true">https://naa0.tistory.com/467</guid>
      <comments>https://naa0.tistory.com/467#entry467comment</comments>
      <pubDate>Tue, 3 Feb 2026 00:26:52 +0900</pubDate>
    </item>
    <item>
      <title>[Linux/명령어] chwon, chgrp란</title>
      <link>https://naa0.tistory.com/466</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;chown&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;파일 또는 디렉터리의 소유자(owner) 및 그룹(owner group)&lt;/b&gt;을 변경할 때 사용하는 명령어&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용형태: chown&amp;nbsp;[옵션]&amp;nbsp;사용자명[&lt;b&gt;:&lt;/b&gt;그룹명] 파일명 (구분을 콜론으로 한다!)&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;715&quot; data-start=&quot;695&quot;&gt;user : 사용자만 변경&lt;/li&gt;
&lt;li data-end=&quot;748&quot; data-start=&quot;716&quot;&gt;user:group : 사용자와 그룹 모두 변경&lt;/li&gt;
&lt;li data-end=&quot;770&quot; data-start=&quot;749&quot;&gt;:group : 그룹만 변경&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1506&quot; data-origin-height=&quot;94&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2pKg7/dJMcaaX6Zhn/dKoPI13NXnwru5uF97ovNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2pKg7/dJMcaaX6Zhn/dKoPI13NXnwru5uF97ovNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2pKg7/dJMcaaX6Zhn/dKoPI13NXnwru5uF97ovNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2pKg7%2FdJMcaaX6Zhn%2FdKoPI13NXnwru5uF97ovNk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;637&quot; height=&quot;40&quot; data-origin-width=&quot;1506&quot; data-origin-height=&quot;94&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기 naa0:staff로 설정 된 파일이 있다. 이를 아래와 같이 명령어 양식에 맞게 입력하면, test-user:dev-test와 같이 사용자와 그룹 모두 바뀐 것을 알 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1960&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FBd9c/dJMcachjJLc/PaNRpkuMc7hhsLVj0j0ikK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FBd9c/dJMcachjJLc/PaNRpkuMc7hhsLVj0j0ikK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FBd9c/dJMcachjJLc/PaNRpkuMc7hhsLVj0j0ikK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFBd9c%2FdJMcachjJLc%2FPaNRpkuMc7hhsLVj0j0ikK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;755&quot; height=&quot;93&quot; data-origin-width=&quot;1960&quot; data-origin-height=&quot;242&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;-R 옵션&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러가지 옵션이 있지만, 가장 요긴하게 쓰이는 옵션이다. recursive의 약자로, &lt;b&gt;디렉터리 내부의 모든 파일과 하위 디렉터리까지 동일하게 소유권을 바꾸는 옵션&lt;/b&gt;이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1948&quot; data-origin-height=&quot;194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mLLAn/dJMcac9p5iT/a91PeFFjaKLf6GdVNc3syK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mLLAn/dJMcac9p5iT/a91PeFFjaKLf6GdVNc3syK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mLLAn/dJMcac9p5iT/a91PeFFjaKLf6GdVNc3syK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmLLAn%2FdJMcac9p5iT%2Fa91PeFFjaKLf6GdVNc3syK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;760&quot; height=&quot;76&quot; data-origin-width=&quot;1948&quot; data-origin-height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1946&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bc2BOR/dJMcahiC1eR/ZYnOIR98aPRpYRtDo4il9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bc2BOR/dJMcahiC1eR/ZYnOIR98aPRpYRtDo4il9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bc2BOR/dJMcahiC1eR/ZYnOIR98aPRpYRtDo4il9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc2BOR%2FdJMcahiC1eR%2FZYnOIR98aPRpYRtDo4il9k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;727&quot; height=&quot;126&quot; data-origin-width=&quot;1946&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;chgrp&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그룹 소유권만&lt;/b&gt; 변경하고 싶을 때 사용하는 명령어로 보통 사용자 소유권은 유지하고, 그룹만 변경하는 경우 사용한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용형태: chgrp&amp;nbsp;[옵션]&amp;nbsp;그룹명&amp;nbsp;파일명&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 그룹만 간단하게 dev-test에서 staff로 변경됨을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1914&quot; data-origin-height=&quot;162&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYzAj6/dJMcacIoNrW/jZVNweJVk0PFzir9QGUOSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYzAj6/dJMcacIoNrW/jZVNweJVk0PFzir9QGUOSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYzAj6/dJMcacIoNrW/jZVNweJVk0PFzir9QGUOSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYzAj6%2FdJMcacIoNrW%2FjZVNweJVk0PFzir9QGUOSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;766&quot; height=&quot;65&quot; data-origin-width=&quot;1914&quot; data-origin-height=&quot;162&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;-h 옵션&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;테스트를 위해 아래와 같이 심볼릭 링크를 생성해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1718&quot; data-origin-height=&quot;342&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brXT0U/dJMcad1x2m8/LWhvKE8mwUHDDWAqKTAvF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brXT0U/dJMcad1x2m8/LWhvKE8mwUHDDWAqKTAvF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brXT0U/dJMcad1x2m8/LWhvKE8mwUHDDWAqKTAvF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrXT0U%2FdJMcad1x2m8%2FLWhvKE8mwUHDDWAqKTAvF1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;609&quot; height=&quot;121&quot; data-origin-width=&quot;1718&quot; data-origin-height=&quot;342&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 그룹 소유권이 변경됨을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1690&quot; data-origin-height=&quot;352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdtEe3/dJMcabbD7a3/XdePuEfbPzEEyQFHhWOYw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdtEe3/dJMcabbD7a3/XdePuEfbPzEEyQFHhWOYw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdtEe3/dJMcabbD7a3/XdePuEfbPzEEyQFHhWOYw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdtEe3%2FdJMcabbD7a3%2FXdePuEfbPzEEyQFHhWOYw1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;528&quot; height=&quot;110&quot; data-origin-width=&quot;1690&quot; data-origin-height=&quot;352&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>DevOps/  Linux</category>
      <category>chgrp</category>
      <category>chown</category>
      <category>리눅스 명령어</category>
      <category>소유권</category>
      <author>키깡</author>
      <guid isPermaLink="true">https://naa0.tistory.com/466</guid>
      <comments>https://naa0.tistory.com/466#entry466comment</comments>
      <pubDate>Wed, 10 Dec 2025 00:31:40 +0900</pubDate>
    </item>
    <item>
      <title>[Linux/개념] SetUID, SetGID 란</title>
      <link>https://naa0.tistory.com/465</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;SUID, SGID 개념을 한번 정리해두기 위해 포스팅을 하려한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;두 녀석 모두 유닉스/리눅스 시스템의 특수 권한 비트로, 파일을 실행할 때 일시적으로 파일 소유자(또는 그룹) 권한으로 실행할 수 있게 하는 기능이다. 이는 일반 사용자가 &lt;b&gt;특정 프로그램 실행 시 소유자의 권한으로 접근해야 하는 경우&lt;/b&gt;(예: 비밀번호 변경 프로그램) 에 유용하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;SetUID (Set User ID)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 파일에 이 권한이 설정되면, 파일을 실행하는 사용자가 &lt;b&gt;실행 파일의 소유자(Owner)의 권한&lt;/b&gt;으로 해당 프로세스를 실행하게 된다.&lt;br /&gt;예를 들어, /usr/bin/passwd 파일은 보통 root 소유로 setuid가 설정되어 있어, 일반 사용자가 실행해도 root 권한으로 비밀번호를 변경할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이, 처음의 소유자 항목이 rw's'로 설정돼있는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;699&quot; data-origin-height=&quot;52&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8Vbst/dJMcafZpJqU/lwjKKJJd5D47h6MVENBwj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8Vbst/dJMcafZpJqU/lwjKKJJd5D47h6MVENBwj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8Vbst/dJMcafZpJqU/lwjKKJJd5D47h6MVENBwj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8Vbst%2FdJMcafZpJqU%2FlwjKKJJd5D47h6MVENBwj0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;483&quot; height=&quot;36&quot; data-origin-width=&quot;699&quot; data-origin-height=&quot;52&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 소유자가 root인 /usr/bin/passwd 파일에 대해서 일반 사용자가 해당 파일을 실행 가능함을 알 수 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설정방법: chmod&amp;nbsp;u+s&amp;nbsp;filename&amp;nbsp;또는&amp;nbsp;chmod&amp;nbsp;4755&amp;nbsp;filename&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;SetGID&amp;nbsp;(Set&amp;nbsp;Group&amp;nbsp;ID)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SetGID 권한이 설정된 실행 파일을 사용자가 실행하면, 실행하는 사용자가 아닌 &lt;b&gt;파일 그룹 소유자의 권한&lt;/b&gt;으로 프로세스를 실행하게 된다. 디렉토리에 SetGID가 설정되면, 해당 디렉토리에 생성되는 새 파일이나 하위 디렉토리는 자동으로 부모 디렉토리의 그룹 소유권을 상속받게 된다. 여러&amp;nbsp;사용자가&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;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설정방법:&lt;span&gt; chmod&amp;nbsp;g+s&amp;nbsp;filename&amp;nbsp;또는&amp;nbsp;chmod&amp;nbsp;2755&amp;nbsp;filename&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;아래와 같이 기존 /usr/bin/passwd의 권한을 변경해보았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이번에는 중간의 그룹 항목이 'r-s'로 설정돼있는 것을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqcfAM/dJMcaiaLMba/IWD6S79YhJlPXqi65bKAGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqcfAM/dJMcaiaLMba/IWD6S79YhJlPXqi65bKAGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqcfAM/dJMcaiaLMba/IWD6S79YhJlPXqi65bKAGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqcfAM%2FdJMcaiaLMba%2FIWD6S79YhJlPXqi65bKAGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;519&quot; height=&quot;52&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>DevOps/  Linux</category>
      <category>sgid</category>
      <category>suid</category>
      <category>리눅스</category>
      <category>리눅스 명령어</category>
      <author>키깡</author>
      <guid isPermaLink="true">https://naa0.tistory.com/465</guid>
      <comments>https://naa0.tistory.com/465#entry465comment</comments>
      <pubDate>Tue, 9 Dec 2025 23:53:53 +0900</pubDate>
    </item>
    <item>
      <title>[업무 후 웹앱 공부] Vite + React + FastAPI 환경 구성</title>
      <link>https://naa0.tistory.com/464</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;목표&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업무 후에 Vite + React + FastAPI를 사용하면서 실질적으로 궁금한 것들을 테스트 해보는 용도로 환경을 만들어 두려한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;기본 환경 설정&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;frontend/&lt;/code&gt; 폴더에 Vite 기반 React + TypeScript 템플릿 생성.&lt;/li&gt;
&lt;li&gt;아래 커맨드를 실행해준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;cd &amp;lt;원하는 폴더&amp;gt;
npm create vite@latest frontend -- --template react-ts
cd frontend
npm install
npm run dev&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 이렇게 기본 5173 포트로 React Template이 담긴 페이지가 뜬다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1912&quot; data-origin-height=&quot;870&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VkoND/btsQBvbyJWh/NM3LTzWaxmV6Sr6H9ODSvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VkoND/btsQBvbyJWh/NM3LTzWaxmV6Sr6H9ODSvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VkoND/btsQBvbyJWh/NM3LTzWaxmV6Sr6H9ODSvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVkoND%2FbtsQBvbyJWh%2FNM3LTzWaxmV6Sr6H9ODSvk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1912&quot; height=&quot;870&quot; data-origin-width=&quot;1912&quot; data-origin-height=&quot;870&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프론트-백엔드 연동 환경설정&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;frontend/&lt;span&gt;&amp;nbsp;&lt;/span&gt;폴더에 Vite 기반 React + TypeScript 템플릿이 있고, backend/ 폴더에 파이썬으로 된 기본적인 백엔드가 있으며, docker-compose.yml 이용하여 간단하게 빌드하는 환경 만들기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;파일&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 해보는 실습의 코드는 아래 레포에 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드에서 알 수 있는 주요한 특징만 글로 정리하고자 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/i-zro/react-250701/tree/gh-pages/250923-base&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/i-zro/react-250701/tree/gh-pages/250923-base&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1758620256254&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;react-250701/250923-base at gh-pages &amp;middot; i-zro/react-250701&quot; data-og-description=&quot;Contribute to i-zro/react-250701 development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/i-zro/react-250701/tree/gh-pages/250923-base&quot; data-og-url=&quot;https://github.com/i-zro/react-250701/tree/gh-pages/250923-base&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xiBLl/hyZJ0Zjiqz/2DpVLMiU7X54lnKlHkkfJk/img.png?width=1200&amp;amp;height=600&amp;amp;face=988_131_1040_189,https://scrap.kakaocdn.net/dn/EYm52/hyZJUdJONV/vQfudZpo3sL6EEii89NZo0/img.png?width=1200&amp;amp;height=600&amp;amp;face=988_131_1040_189&quot;&gt;&lt;a href=&quot;https://github.com/i-zro/react-250701/tree/gh-pages/250923-base&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/i-zro/react-250701/tree/gh-pages/250923-base&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xiBLl/hyZJ0Zjiqz/2DpVLMiU7X54lnKlHkkfJk/img.png?width=1200&amp;amp;height=600&amp;amp;face=988_131_1040_189,https://scrap.kakaocdn.net/dn/EYm52/hyZJUdJONV/vQfudZpo3sL6EEii89NZo0/img.png?width=1200&amp;amp;height=600&amp;amp;face=988_131_1040_189');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;react-250701/250923-base at gh-pages &amp;middot; i-zro/react-250701&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to i-zro/react-250701 development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Docker로 빌드 구성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 docker로 기본 빌드 구성을 만들어줬으며, 아래는 각각 프론트/백엔드 Dockerfile이다.&lt;/p&gt;
&lt;pre id=&quot;code_1758620178028&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 프론트엔드 Dockerfile
FROM node:20-alpine

# 작업 디렉토리 설정
WORKDIR /app

# package.json과 package-lock.json 복사
COPY package*.json ./

# 의존성 설치
RUN npm install

# 소스 코드 복사
COPY . .

# 포트 노출
EXPOSE 5173

# 개발 서버 실행
CMD [&quot;npm&quot;, &quot;run&quot;, &quot;dev&quot;, &quot;--&quot;, &quot;--host&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1758620324967&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 백엔드 Dockerfile
FROM python:3.11-slim

# 작업 디렉토리 설정
WORKDIR /app

# 의존성 파일 복사
COPY requirements.txt .

# 의존성 설치
RUN pip install --no-cache-dir -r requirements.txt

# 소스 코드 복사
COPY . .

# 포트 노출
EXPOSE 8000

# FastAPI 서버 실행
CMD [&quot;uvicorn&quot;, &quot;main:app&quot;, &quot;--host&quot;, &quot;0.0.0.0&quot;, &quot;--port&quot;, &quot;8000&quot;, &quot;--reload&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker-compose.yml은 아래와 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1758620388735&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;version: '3.8'

services:
  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile
    ports:
      - &quot;8000:8000&quot;
    volumes:
      - ./backend:/app
    environment:
      - PYTHONPATH=/app
    networks:
      - app-network
    restart: unless-stopped

  frontend:
    build:
      context: ./frontend
      dockerfile: Dockerfile
    ports:
      - &quot;5173:5173&quot;
    volumes:
      - ./frontend:/app
      - /app/node_modules
    environment:
      - VITE_API_URL=http://localhost:8000
    networks:
      - app-network
    depends_on:
      - backend
    restart: unless-stopped

networks:
  app-network:
    driver: bridge&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프론트 톺아보기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 먼저 진입하는 파일은 index.html 파일이다.&lt;/p&gt;
&lt;pre id=&quot;code_1758620481385&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!doctype html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot; /&amp;gt;
    &amp;lt;link rel=&quot;icon&quot; type=&quot;image/svg+xml&quot; href=&quot;/vite.svg&quot; /&amp;gt;
    &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot; /&amp;gt;
    &amp;lt;title&amp;gt;Vite + React + TS&amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;div id=&quot;root&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;script type=&quot;module&quot; src=&quot;/src/main.tsx&quot;&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;react 화면 자체는 tsx 속 function의 return으로 반환&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시, 이 index.html 파일은 /src/main.tsx를 본다. 다시 main.tsx를 가보면 App.tsx를 반환함을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;App.tsx에서 먼저 return을 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알 수 있는 점은, return을 통해 우리가 보는 화면을 렌더해준다는 것이다.&lt;/p&gt;
&lt;pre id=&quot;code_1758620710496&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  return (
    &amp;lt;&amp;gt;
      &amp;lt;div&amp;gt;
        &amp;lt;a href=&quot;https://vite.dev&quot; target=&quot;_blank&quot;&amp;gt;
          &amp;lt;img src={viteLogo} className=&quot;logo&quot; alt=&quot;Vite logo&quot; /&amp;gt;
        &amp;lt;/a&amp;gt;
        &amp;lt;a href=&quot;https://react.dev&quot; target=&quot;_blank&quot;&amp;gt;
          &amp;lt;img src={reactLogo} className=&quot;logo react&quot; alt=&quot;React logo&quot; /&amp;gt;
        &amp;lt;/a&amp;gt;
      &amp;lt;/div&amp;gt;
      &amp;lt;h1&amp;gt;Vite + React + FastAPI&amp;lt;/h1&amp;gt;
      &amp;lt;div className=&quot;card&quot;&amp;gt;
        {error &amp;amp;&amp;amp; &amp;lt;p style={{ color: 'red' }}&amp;gt;{error}&amp;lt;/p&amp;gt;}
        &amp;lt;p&amp;gt;현재 카운트: &amp;lt;strong&amp;gt;{count}&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
        &amp;lt;div style={{ display: 'flex', gap: '10px', justifyContent: 'center' }}&amp;gt;
          &amp;lt;button onClick={incrementCount} disabled={loading}&amp;gt;
            {loading ? '로딩...' : '카운트 증가'}
          &amp;lt;/button&amp;gt;
          &amp;lt;button onClick={resetCount} disabled={loading}&amp;gt;
            {loading ? '로딩...' : '리셋'}
          &amp;lt;/button&amp;gt;
          &amp;lt;button onClick={fetchCount} disabled={loading}&amp;gt;
            {loading ? '로딩...' : '새로고침'}
          &amp;lt;/button&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;p&amp;gt;
          백엔드 API와 연동된 카운터입니다
        &amp;lt;/p&amp;gt;
      &amp;lt;/div&amp;gt;
      &amp;lt;p className=&quot;read-the-docs&quot;&amp;gt;
        Click on the Vite and React logos to learn more
      &amp;lt;/p&amp;gt;
    &amp;lt;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로, count라는 변수를 쓴 게 보일 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;const [현재 state, state 를 변경하기 위한 함수] = useState()&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;const [count, setCount] = useState(0)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주로 이런 식으로 쓰는데, &lt;b&gt;[현재 state, state 를 변경하기 위한 함수]&lt;/b&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;백엔드 통신함수는 아래와 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1758621387639&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  const fetchCount = async () =&amp;gt; {
    try {
      setLoading(true)
      const response = await fetch(`${API_URL}/api/count`)
      if (!response.ok) throw new Error('Failed to fetch count')
      const data = await response.json()
      setCount(data.count)
      setError(null)
    } catch (err) {
      setError('백엔드 연결에 실패했습니다')
      console.error('Error fetching count:', err)
    } finally {
      setLoading(false)
    }
  }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2439&quot; data-start=&quot;2375&quot;&gt;setLoading(true): 버튼을 &lt;b&gt;비활성화&lt;/b&gt;하고 &amp;ldquo;로딩&amp;hellip;&amp;rdquo; 문구를 보이게 함(사용자 연타 방지).&lt;/li&gt;
&lt;li data-end=&quot;2476&quot; data-start=&quot;2440&quot;&gt;fetch(url): 브라우저의 표준 HTTP 요청 함수.&lt;/li&gt;
&lt;li data-end=&quot;2538&quot; data-start=&quot;2477&quot;&gt;response.ok: 상태코드 200~299면 true. 아니면 throw로 에러 처리 진입.&lt;/li&gt;
&lt;li data-end=&quot;2615&quot; data-start=&quot;2539&quot;&gt;await response.json(): JSON 본문 파싱.&lt;/li&gt;
&lt;li data-end=&quot;2683&quot; data-start=&quot;2616&quot;&gt;성공 시 setCount(data.count)로 UI 업데이트, setError(null)로 에러 문구 제거.&lt;/li&gt;
&lt;li data-end=&quot;2770&quot; data-start=&quot;2684&quot;&gt;실패 시 사용자에게 보여줄 한글 에러 메시지를 setError(...)에 저장하고, 상세 원인은 console.error에 남김.&lt;/li&gt;
&lt;li data-end=&quot;2828&quot; data-start=&quot;2771&quot;&gt;finally: 성공/실패와 무관하게 &lt;b&gt;항상&lt;/b&gt; loading을 false로 돌려놓음.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 백엔드에 현재 count 변수를 주면,&amp;nbsp; 백엔드에서는 해당 변수를 기반으로 돌려주는 식으로 초기 실습을 구성하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1534&quot; data-origin-height=&quot;1160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Onvr2/btsQLefYQjK/IGhs7uLsHHX4eSUEWVRu60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Onvr2/btsQLefYQjK/IGhs7uLsHHX4eSUEWVRu60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Onvr2/btsQLefYQjK/IGhs7uLsHHX4eSUEWVRu60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOnvr2%2FbtsQLefYQjK%2FIGhs7uLsHHX4eSUEWVRu60%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1534&quot; height=&quot;1160&quot; data-origin-width=&quot;1534&quot; data-origin-height=&quot;1160&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category> Web/  React.js</category>
      <category>Fast API</category>
      <category>React</category>
      <category>Vite</category>
      <category>웹앱</category>
      <author>키깡</author>
      <guid isPermaLink="true">https://naa0.tistory.com/464</guid>
      <comments>https://naa0.tistory.com/464#entry464comment</comments>
      <pubDate>Tue, 23 Sep 2025 19:05:09 +0900</pubDate>
    </item>
    <item>
      <title>25년 DB 공부 (2) MySQL 기본 DML 해보기</title>
      <link>https://naa0.tistory.com/463</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;이전글&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://naa0.tistory.com/462&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://naa0.tistory.com/462&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1755331427528&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;25년 DB 공부 (1) 환경설정, 로컬에 docker로 MySQL 띄우기&quot; data-og-description=&quot;서론회사에서 aws 위의 Aurora MySQL cluster의 업그레이드를 준비하면서, DB 자체에 대한 공부가 부족한 것을 느꼈다.늘 공부해도 다른 부분에서 부족한 것 같은 느낌이 든다.무튼, 매번 새로운 걸 하&quot; data-og-host=&quot;naa0.tistory.com&quot; data-og-source-url=&quot;https://naa0.tistory.com/462&quot; data-og-url=&quot;https://naa0.tistory.com/462&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bZvNDh/hyZygPrUbf/2TDcpS8Xj1gc3La9sxwr4K/img.png?width=800&amp;amp;height=397&amp;amp;face=0_0_800_397,https://scrap.kakaocdn.net/dn/o1upw/hyZypZT73q/EXxa8jcHXpSqdnyK3HN9I1/img.png?width=800&amp;amp;height=397&amp;amp;face=0_0_800_397,https://scrap.kakaocdn.net/dn/mY99m/hyZyi0Opdt/gap3uDdjsmmvfsjbk22WbK/img.png?width=1612&amp;amp;height=1272&amp;amp;face=0_0_1612_1272&quot;&gt;&lt;a href=&quot;https://naa0.tistory.com/462&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://naa0.tistory.com/462&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bZvNDh/hyZygPrUbf/2TDcpS8Xj1gc3La9sxwr4K/img.png?width=800&amp;amp;height=397&amp;amp;face=0_0_800_397,https://scrap.kakaocdn.net/dn/o1upw/hyZypZT73q/EXxa8jcHXpSqdnyK3HN9I1/img.png?width=800&amp;amp;height=397&amp;amp;face=0_0_800_397,https://scrap.kakaocdn.net/dn/mY99m/hyZyi0Opdt/gap3uDdjsmmvfsjbk22WbK/img.png?width=1612&amp;amp;height=1272&amp;amp;face=0_0_1612_1272');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;25년 DB 공부 (1) 환경설정, 로컬에 docker로 MySQL 띄우기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;서론회사에서 aws 위의 Aurora MySQL cluster의 업그레이드를 준비하면서, DB 자체에 대한 공부가 부족한 것을 느꼈다.늘 공부해도 다른 부분에서 부족한 것 같은 느낌이 든다.무튼, 매번 새로운 걸 하&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;naa0.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실습용 스키마 및 계정 생성&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;primary DB 접속&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 먼저, &lt;b&gt;docker exec -it mysql1 mysql -uroot -prootpass&lt;/b&gt; 로 primary DB에 접속해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실습용 스키마 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, 실습용으로 사용할 스키마를 생성해준다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;CREATE DATABASE binlog_test;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실습용 계정 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계정 및 패스워드를 생성해주고, 해당 계정에 위의 스키마에 대한 전체 권한을 부여한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CREATE USER 'naa0'@'%' IDENTIFIED BY 'skdud';&lt;/li&gt;
&lt;li&gt;GRANT ALL PRIVILEGES ON binlog_test.* TO 'naa0'@'%';&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;866&quot; data-origin-height=&quot;306&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qybwi/btsPWemkzA0/4cBQ8h0znUYIX9kQticGKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qybwi/btsPWemkzA0/4cBQ8h0znUYIX9kQticGKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qybwi/btsPWemkzA0/4cBQ8h0znUYIX9kQticGKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqybwi%2FbtsPWemkzA0%2F4cBQ8h0znUYIX9kQticGKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;385&quot; height=&quot;136&quot; data-origin-width=&quot;866&quot; data-origin-height=&quot;306&quot;/&gt;&lt;/span&gt;&lt;/figure&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;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;DML 날려보기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;테이블 생성하기&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스키마 사용하기
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;USE binlog_test;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;CREATE TABLE orders (&lt;br /&gt;&amp;nbsp;&amp;nbsp;id&amp;nbsp;BIGINT&amp;nbsp;AUTO_INCREMENT&amp;nbsp;PRIMARY&amp;nbsp;KEY,&lt;br /&gt;&amp;nbsp;&amp;nbsp;product&amp;nbsp;VARCHAR(64)&amp;nbsp;NOT&amp;nbsp;NULL,&lt;br /&gt;&amp;nbsp;&amp;nbsp;qty&amp;nbsp;INT&amp;nbsp;NOT&amp;nbsp;NULL,&lt;br /&gt;&amp;nbsp;&amp;nbsp;price&amp;nbsp;DECIMAL(10,2)&amp;nbsp;NOT&amp;nbsp;NULL,&lt;br /&gt;&amp;nbsp;&amp;nbsp;updated_at&amp;nbsp;TIMESTAMP&amp;nbsp;DEFAULT&amp;nbsp;CURRENT_TIMESTAMP&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;ON&amp;nbsp;UPDATE&amp;nbsp;CURRENT_TIMESTAMP&lt;br /&gt;)&amp;nbsp;ENGINE=InnoDB;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 명령어를 수행하고 나면, SHOW TABLES; 및 SHOW COLUMNS ~; 명령어를 통해 잘 생성되었는지도 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;406&quot; data-origin-height=&quot;248&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lYxD5/btsPWrMGWX0/VrMI3yiEQe2fxJTwk0Xck0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lYxD5/btsPWrMGWX0/VrMI3yiEQe2fxJTwk0Xck0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lYxD5/btsPWrMGWX0/VrMI3yiEQe2fxJTwk0Xck0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlYxD5%2FbtsPWrMGWX0%2FVrMI3yiEQe2fxJTwk0Xck0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;283&quot; height=&quot;173&quot; data-origin-width=&quot;406&quot; data-origin-height=&quot;248&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1602&quot; data-origin-height=&quot;376&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EsjmJ/btsPVg5W3SJ/3EhPuQ9sAHP8bcN3XWYKk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EsjmJ/btsPVg5W3SJ/3EhPuQ9sAHP8bcN3XWYKk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EsjmJ/btsPVg5W3SJ/3EhPuQ9sAHP8bcN3XWYKk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEsjmJ%2FbtsPVg5W3SJ%2F3EhPuQ9sAHP8bcN3XWYKk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;792&quot; height=&quot;186&quot; data-origin-width=&quot;1602&quot; data-origin-height=&quot;376&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;CUD 수행 해보기&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;-- INSERT (3개 데이터 추가)&lt;br /&gt;INSERT&amp;nbsp;INTO&amp;nbsp;orders(product,&amp;nbsp;qty,&amp;nbsp;price)&lt;br /&gt;VALUES ('pen', 10, 1.20), ('notebook', 5, 3.50), ('eraser', 3, 0.80);&lt;/li&gt;
&lt;li&gt;-- UPDATE (특정 조건 수행)&lt;br /&gt;UPDATE orders SET qty = qty + 2 WHERE product='pen';&lt;/li&gt;
&lt;li&gt;-- DELETE (1행)&lt;br /&gt;DELETE FROM orders WHERE product='notebook' LIMIT 1;&lt;/li&gt;
&lt;li&gt;-- 전체 가격 10% 인상 (여러 행 UPDATE)&lt;br /&gt;UPDATE&amp;nbsp;orders&amp;nbsp;SET&amp;nbsp;price&amp;nbsp;=&amp;nbsp;price&amp;nbsp;*&amp;nbsp;1.10;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1100&quot; data-origin-height=&quot;710&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTtv4E/btsPTyfwAUw/uX3BrfW6gpqDAsZkZMPvKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTtv4E/btsPTyfwAUw/uX3BrfW6gpqDAsZkZMPvKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTtv4E/btsPTyfwAUw/uX3BrfW6gpqDAsZkZMPvKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTtv4E%2FbtsPTyfwAUw%2FuX3BrfW6gpqDAsZkZMPvKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1100&quot; height=&quot;710&quot; data-origin-width=&quot;1100&quot; data-origin-height=&quot;710&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIMVos/btsPTQG1f7e/E6AdPpc6Y4i0u6abGRWMw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIMVos/btsPTQG1f7e/E6AdPpc6Y4i0u6abGRWMw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIMVos/btsPTQG1f7e/E6AdPpc6Y4i0u6abGRWMw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIMVos%2FbtsPTQG1f7e%2FE6AdPpc6Y4i0u6abGRWMw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;624&quot; height=&quot;350&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;438&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;롤백해보기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;트랜잭션 후에 롤백을 해보고, 추후에 이게 어떤 식으로 binlog에 남는 지 보려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SET autocommit=0;&lt;br /&gt;START&amp;nbsp;TRANSACTION;&lt;br /&gt;INSERT&amp;nbsp;INTO&amp;nbsp;orders(product,&amp;nbsp;qty,&amp;nbsp;price)&amp;nbsp;VALUES&amp;nbsp;('pencil',&amp;nbsp;4,&amp;nbsp;0.50);&lt;br /&gt;UPDATE&amp;nbsp;orders&amp;nbsp;SET&amp;nbsp;qty&amp;nbsp;=&amp;nbsp;qty&amp;nbsp;-&amp;nbsp;1&amp;nbsp;WHERE&amp;nbsp;product='eraser';&lt;br /&gt;ROLLBACK;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;START&amp;nbsp;TRANSACTION;&lt;br /&gt;INSERT&amp;nbsp;INTO&amp;nbsp;orders(product,&amp;nbsp;qty,&amp;nbsp;price)&amp;nbsp;VALUES&amp;nbsp;('marker',&amp;nbsp;2,&amp;nbsp;2.40);&lt;br /&gt;COMMIT;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br /&gt;SET&amp;nbsp;autocommit=1;&lt;/p&gt;</description>
      <category>DevOps</category>
      <category>DML</category>
      <category>MySQL</category>
      <category>롤백</category>
      <category>스키마</category>
      <category>실습</category>
      <author>키깡</author>
      <guid isPermaLink="true">https://naa0.tistory.com/463</guid>
      <comments>https://naa0.tistory.com/463#entry463comment</comments>
      <pubDate>Sat, 16 Aug 2025 17:48:40 +0900</pubDate>
    </item>
    <item>
      <title>25년 DB 공부 (1) 환경설정, 로컬에 docker로 MySQL 띄우기</title>
      <link>https://naa0.tistory.com/462</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;서론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회사에서 aws 위의 Aurora MySQL cluster의 업그레이드를 준비하면서, DB 자체에 대한 공부가 부족한 것을 느꼈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;늘 공부해도 다른 부분에서 부족한 것 같은 느낌이 든다.&lt;br /&gt;무튼, 매번 새로운 걸 하더라도 할 때 제대로 공부하고 넘어가는 게 중요하다고 느끼게 돼서 광복절을 낀 휴가기간 동안 로컬에 mySQL을 띄워보고 과정에서 궁금했던 것들을 공부해보려 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실습용 mysql DB docker로 생성&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;docker-compose.yml 파일 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 mysql 뼈대를 생성하기 위해, 원하는 폴더에 아래와 같이 docker-compose.yml 파일을 생성해준다.&lt;br /&gt;Primary, Replica 각 한대씩을 만들 예정이며, 각각 mysql1, mysql2로 이름 붙였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프라이머리 DB의 포트는 13306으로 빼줬고, 레플리카 DB 포트는 13307로 빼주려한다.&lt;/p&gt;
&lt;pre id=&quot;code_1755143983439&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;version: &quot;3.8&quot;

services:
  mysql1:
    image: mysql:8.4     # MySQL LTS
    container_name: mysql1
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
    ports:
      - &quot;13306:13306&quot;
    volumes:
      - ./mysql1/conf.d/my.cnf:/etc/mysql/conf.d/my.cnf:ro
      - ./mysql1/data:/var/lib/mysql

  mysql2:
    image: mysql:8.4
    container_name: mysql2
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
    ports:
      - &quot;13307:13306&quot;
    depends_on:
      - mysql1
    volumes:
      - ./mysql2/conf.d/my.cnf:/etc/mysql/conf.d/my.cnf:ro
      - ./mysql2/data:/var/lib/mysql&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;mysql1 설정값 파일 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysql1을 Primary DB로 사용할 것으로, DB에 설정할 값들을 모아뒀다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;bin log는 활성화하며, INSERT/UPDATE/DELETE가 실제로 어떤 행이 어떻게 바뀌었는지 기록을 남기고, 실습해보기 위해 &lt;b&gt;ROW&lt;/b&gt;로 설정한다.&lt;/li&gt;
&lt;li&gt;ROW 이미지 수준은 &lt;b&gt;FULL&lt;/b&gt;로 하였는데, 이렇게 하면 DML 전후 모든 칼럼이 기록에 남는다고 한다. MINIMAL과 추후 비교 예정이다.&lt;/li&gt;
&lt;li&gt;binlog 보관주기는 하루(86400초)로 하였다. 실습용이기에 하루로 잡았고, 회사 운영으로 보았을 때 보통 3일~7일로 두는 게 정석인 것 같다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경로는 &lt;b&gt;mysql1/conf.d/my.cnf 이다.&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755144696723&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[mysqld]
server_id=1
# --- binlog 기본 ---
log_bin=/var/lib/mysql/binlog
binlog_format=ROW
binlog_row_image=FULL
binlog_checksum=CRC32
# --- GTID ---
gtid_mode=ON
enforce_gtid_consistency=ON
# --- 유지/회전 ---
binlog_expire_logs_seconds=86400
# --- 보기 편하게 (한국시간) ---
default_time_zone='+09:00'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;mysql2 설정값 파일 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경로는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;mysql2/conf.d/my.cnf 이다.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755145148747&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[mysqld]
server_id=2
log_bin=/var/lib/mysql/binlog
relay_log=/var/lib/mysql/relay-bin
gtid_mode=ON
enforce_gtid_consistency=ON
default_time_zone='+09:00'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐️ 오류 및 해결&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에 첫 설정부터 read only 및 super read only를 ON으로 하고 띄웠더니 ERROR 1290 (HY000):&lt;b&gt; The MySQL server is running with the --super-read-only option so it cannot execute this statement&lt;/b&gt; 와 같은 오류를 뱉으면서 컨테이너가 바로 죽어버렸다. 이는 처음부터 read only로 해두면 초기에 서버 설정을 하지 못해 벌어지는 일로, 처음에는 read only 설정을 빼고 해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이렇게 이미 돌린 후 다시 돌릴 땐 반드시 data를 지우고 돌려야한다. 즉, 아래처럼 down을 하고 data 부분을 날리고 돌려야 처음부터 적용이 되어 뜬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. docker compose down&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. rm&amp;nbsp;-rf&amp;nbsp;./mysql2/data&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. docker compose up&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;docker 실행 및 확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 상태로 &lt;b&gt;docker compose up -d&lt;/b&gt; 를 해 준다.&lt;br /&gt;그럼 아래와 같이 이미지 땡겨와서 컨테이너가 뜨고 있다. (기차라... 넘 느림...)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1708&quot; data-origin-height=&quot;848&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGLelC/btsPRsNKj3F/oT5G8ugESuvNvcn74wm6k1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGLelC/btsPRsNKj3F/oT5G8ugESuvNvcn74wm6k1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGLelC/btsPRsNKj3F/oT5G8ugESuvNvcn74wm6k1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGLelC%2FbtsPRsNKj3F%2FoT5G8ugESuvNvcn74wm6k1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1708&quot; height=&quot;848&quot; data-origin-width=&quot;1708&quot; data-origin-height=&quot;848&quot;/&gt;&lt;/span&gt;&lt;/figure&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;무튼, 완료되면 아래와 같이 컨테이너 두개가 뜨는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2070&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSFgmq/btsPUlTimSZ/DSHVlLw7Hfty0aHxZxNNAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSFgmq/btsPUlTimSZ/DSHVlLw7Hfty0aHxZxNNAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSFgmq/btsPUlTimSZ/DSHVlLw7Hfty0aHxZxNNAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSFgmq%2FbtsPUlTimSZ%2FDSHVlLw7Hfty0aHxZxNNAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2070&quot; height=&quot;220&quot; data-origin-width=&quot;2070&quot; data-origin-height=&quot;220&quot;/&gt;&lt;/span&gt;&lt;/figure&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;아래와 같이, docker exec 통해서 mysql 접속 명령어를 쳐보면, 제대로 올라왔는 지도 확인 가능하다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;docker exec -it mysql1 mysql -uroot -prootpass&lt;/li&gt;
&lt;li&gt;docker&amp;nbsp;exec&amp;nbsp;-it&amp;nbsp;mysql2&amp;nbsp;mysql&amp;nbsp;-uroot&amp;nbsp;-prootpass&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1612&quot; data-origin-height=&quot;1272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3A1Qz/btsPTxGUUIz/VPTs7qA0CA7U1Dm3ewgZ5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3A1Qz/btsPTxGUUIz/VPTs7qA0CA7U1Dm3ewgZ5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3A1Qz/btsPTxGUUIz/VPTs7qA0CA7U1Dm3ewgZ5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3A1Qz%2FbtsPTxGUUIz%2FVPTs7qA0CA7U1Dm3ewgZ5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1612&quot; height=&quot;1272&quot; data-origin-width=&quot;1612&quot; data-origin-height=&quot;1272&quot;/&gt;&lt;/span&gt;&lt;/figure&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;무튼, 여기까지 하면 초기 MySQL 환경 설정 완료!&lt;/p&gt;</description>
      <category>DevOps</category>
      <category>db</category>
      <category>docker</category>
      <category>MySQL</category>
      <category>primary</category>
      <category>Replica</category>
      <category>공부</category>
      <author>키깡</author>
      <guid isPermaLink="true">https://naa0.tistory.com/462</guid>
      <comments>https://naa0.tistory.com/462#entry462comment</comments>
      <pubDate>Thu, 14 Aug 2025 14:27:08 +0900</pubDate>
    </item>
  </channel>
</rss>