<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>뽀미의 개발노트</title>
    <link>https://bbomicoding.tistory.com/</link>
    <description>판교 찍고 미국 가자!!</description>
    <language>ko</language>
    <pubDate>Mon, 11 May 2026 05:04:54 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>산타는 뽀미</managingEditor>
    <image>
      <title>뽀미의 개발노트</title>
      <url>https://tistory1.daumcdn.net/tistory/6227772/attach/19ac3c4c25034b4a94d649c30e88f31f</url>
      <link>https://bbomicoding.tistory.com</link>
    </image>
    <item>
      <title>낮에는 직장인, 밤에는 대학생으로 사는 개발자 사이버대 후기</title>
      <link>https://bbomicoding.tistory.com/114</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;어느날 문득 내가 비전공자라서 개발을 못하는게 당연하다는 변명 속에 숨고 있다는 느낌이 들었다. 업무에는 점차 익숙해져 갔지만 새로운 업무를 받을 때마다 기초가 없어서 헤맸다. 클로드와 함께라면 일처리를 그럭저럭 해낼 수는 있지만 핵심을 놓친다는 느낌이 들었다.&lt;br&gt;업무 외에 공부가 필요했다. 공부할 방법은 넘쳤다. 싼값에 질좋은 강의를 들을 수도 있고 유튜브만 들어도 충분할 수 있었다. 또는 사이드 프로젝트를 하면 더 많은 것을 배울 수도 있다. 문제는 내가 자발적으로 쉬는 시간을 내어 공부할 마음이 없다는 것이었다. 가끔씩 개발공부를 해야겠다는 마음이 불타올랐지만 서너시간도 유지하지 못했다. 슬프게도 나는 쉬는 날에도 하고싶은 프로젝트를 개발하며 쉬는 오타쿠는 아니었다. 강제성이 필요했고 나한테 맞는 방법이 필요했다. 내가 뭘 잘하나 생각해보았는데,, 나는 대학 다니는걸 좋아하고(대학다닐때 행복했었음), 단기간에 암기해서 시험 보는걸 잘한다. 인정욕구가 많아서 1등 하고싶은 욕심도 크고 말이다. 이런 내게 적절한게 뭐가 있을까 했는데 직장과 병행할 수 있는 사이버대를 발견했다! ٩(◕ᗜ◕)و&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;534&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cs0Jft/dJMcabbNgot/4zWJnD0boQFSQmqqGrxbj1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cs0Jft/dJMcabbNgot/4zWJnD0boQFSQmqqGrxbj1/img.jpg&quot; data-alt=&quot;대학 합격문자 보고 기뻤다. 10년 전 만큼은 아니지만.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cs0Jft/dJMcabbNgot/4zWJnD0boQFSQmqqGrxbj1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcs0Jft%2FdJMcabbNgot%2F4zWJnD0boQFSQmqqGrxbj1%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;632&quot; height=&quot;256&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;534&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;대학 합격문자 보고 기뻤다. 10년 전 만큼은 아니지만.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터공학에 대한 기초를 배울 수 있으면서도 원래 관심있던 분야인 보안에 대해 배우고 싶었다. 보안 분야 쪽으로 유명한 사이버대가 어딘지 검색해서, 가장 먼저 나왔던 세종사이버대에 지원했다. 다행히 붙었다. 나는 이제 낮직밤대(낮에는 직장인 밤에는 대학생) 생활을 하게 되었다.&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;1. 등록금&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2592&quot; data-origin-height=&quot;636&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brrsaX/dJMcagjRKOb/hwtXKKjAiVfjGk3xpoKqBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brrsaX/dJMcagjRKOb/hwtXKKjAiVfjGk3xpoKqBk/img.png&quot; data-alt=&quot;등록금 : 0원&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brrsaX/dJMcagjRKOb/hwtXKKjAiVfjGk3xpoKqBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrrsaX%2FdJMcagjRKOb%2FhwtXKKjAiVfjGk3xpoKqBk%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;2592&quot; height=&quot;636&quot; data-origin-width=&quot;2592&quot; data-origin-height=&quot;636&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;등록금 : 0원&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5과목 듣는데 0원 들었다. (듣는 학점과 등록금은 비례함) 사이버대는 등록금이 싸고, 여러가지 장학금을 많이 준다. 나는 학교에서는 무슨 다시도전 장학금이던가,,? 그런거 좀 받고, 나라에서는 내가 셋째라서 국가장학금(다자녀 전형)을 받아서 결국 등록금을 안 냈다. 아 근데 국장은 20대때 국장을 안 받았어서 지금 받을 수 있었을지도? 뭐 그건 잘 모르겠다. 어쨌든 돈 내고서라도 공부해야겠다고 다짐하고 들어온건데 막상 공짜로 다닐 수 있게 되니 좋았다. 내가 받은 장학금 말고도 매우 많은 종류의 장학금이 있어서 대부분 매우 적은 금액 또는 공짜로 다닐 수 있다. 그리고 나처럼 이미 이전에 다른 대학을 다닌 적 있는 사람이면 1학년 신입 말고 3학년으로 편입학 하면 된다. 그럼 2년만 다니면 된다. 그래서 사이버대는 전체적으로 금액 부담은 없는 편.&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;2. 강의 방식&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3728&quot; data-origin-height=&quot;5709&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZwcyb/dJMcahpyEzX/IF3zCt4Ymz1bgewkLAFPU0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZwcyb/dJMcahpyEzX/IF3zCt4Ymz1bgewkLAFPU0/img.jpg&quot; data-alt=&quot;2배속으로 보면서 교수님 말 너무 빠르다고 생각하기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZwcyb/dJMcahpyEzX/IF3zCt4Ymz1bgewkLAFPU0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZwcyb%2FdJMcahpyEzX%2FIF3zCt4Ymz1bgewkLAFPU0%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;475&quot; height=&quot;727&quot; data-origin-width=&quot;3728&quot; data-origin-height=&quot;5709&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2배속으로 보면서 교수님 말 너무 빠르다고 생각하기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;100% 온라인제다. 중간 기말 시험도 온라인으로 본다. 한 학기동안 학교에 찾아갈 일 한번도 없었다. 강의는 각 과목당 1주일에 한번씩, 하나에 1시간 30분쯤 한다.(그치만 항상 2배속으로 들으므로 하나당 45~50분쯤 걸린다고 보면됨) 나는 이번에 5개를 들어서 평일에 퇴근하고 하나씩 듣거나 주말에 몰아듣고는 했다. 교수님들이 강의 한번만 찍고 천년만년 우려먹을까봐 걱정했는데 3년마다 한번씩은 꼭 갱신하도록 규칙이 있다고 한다. 최신 기술이 중요한 IT 분야에서 1년전 강의를 듣는것조차도 아깝지만 뭐 어쩔 수 없지. 한 과목당 한 학기에 3~4번쯤 줌 라이브 강의를 한다. 참석이 필수는 아니지만 참여도 점수에 포함된다고 해서 거의 참석했다. 일주일 안에 강의도 5개나 듣고 라이브 강의도 2개나 듣고 하려면 좀 빡세다;;&lt;br&gt;강의 질은?? --&amp;gt; 이거 솔직히 좀 걱정했는데 예상보다 너무너무 좋았다. 사이버대가 일반 4년제 대학보다 내용이 너무 쉽거나 수준이 낮으면 어쩌지 걱정했었다. 근데 사이버대 수업은 영상으로 '박제'되는 것이고, 정해진 시간 내에 꼭 오늘 할 주제를 마쳐야 했기 때문에 내용이 알차고 적절했다. 20대 때 대학 다닐때는 가끔 교수님이 수업 내용이 아닌 딴 얘기로 새서 TMI 듣느라 진도가 늦어지기도 했었는데 이건 편집이 가능한 녹화 영상이므로 쓸데 없는 부분이 없다. 일반 대학이랑 차이나는건,,, 음,,, 두꺼운 전공 서적을 안 쓰고 강의에서 영어를 안 쓴다 정도? 이전 대학 다닐땐 분명히 한국어 수업인데도 강의 자료고 용어고 뭐고 다 영어였었는데, 사이버대 수업은 한글 위주인 것 같다.&amp;nbsp;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;3. 시험&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zzqNm/dJMcahb0kmA/U7i6Ub6A82WV37yGUd29q1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zzqNm/dJMcahb0kmA/U7i6Ub6A82WV37yGUd29q1/img.jpg&quot; data-alt=&quot;모의 시험 창&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zzqNm/dJMcahb0kmA/U7i6Ub6A82WV37yGUd29q1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzzqNm%2FdJMcahb0kmA%2FU7i6Ub6A82WV37yGUd29q1%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;450&quot; height=&quot;338&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;모의 시험 창&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시험도 온라인으로 본다. 온라인으로 보는 시험이라 그냥 오픈북이라고 보면 된다. 위의 사진은 진짜 시험이 아니라 모의 시험 창인데 시험보는 창을 최소화하거나 다른 창으로 넘어가면 무조건 저 경고가 뜨게 되어있다. 그래서 ai 사용을 공개적으로는 막아놨다. 노트북을 하나 더 쓰는건 막을 수 없으므로 ai를 사용하려면 충분히 할 수는 있다. 오픈북이라서 성적대가 대체로 높기 때문에 시험 시간이 굉장히 짧다. 시험문제 20개인데 20분 준다. 암기 과목이면 1문제당 1분도 안 걸리기 때문에 이 시간마저도 충분하다. 그러나 계산이 필요한 과목의 경우 쪼금 시간이 부족하다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1193&quot; data-origin-height=&quot;794&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ejjxNj/dJMcagxoAlU/5S1xpprbkHXvuFWIibQCl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ejjxNj/dJMcagxoAlU/5S1xpprbkHXvuFWIibQCl1/img.png&quot; data-alt=&quot;공부하기 싫어 죽겠는데!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ejjxNj/dJMcagxoAlU/5S1xpprbkHXvuFWIibQCl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FejjxNj%2FdJMcagxoAlU%2F5S1xpprbkHXvuFWIibQCl1%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;433&quot; height=&quot;288&quot; data-origin-width=&quot;1193&quot; data-origin-height=&quot;794&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;공부하기 싫어 죽겠는데!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시험 공부는 벼락치기로 하긴 했지만 진짜 열심히 했다. 회사 일 바쁘게 하고 퇴근해서 또 책을 펴기가 쉽지 않았다. 중간기말 시험기간에는 주말도 반납하고 공부에 매진했다. 회사 일이 특히 바쁠 때는 현타 오기도 했다. 내가 이거 왜 한다고 했지,,? 이런 생각도 하구,, 이번에 대학 등록하면서는 예전처럼 너무 열심히 하지 말고 대충 해야지(?) 다짐했는데 잘 안됐다. 답답한 모범생의 삶을 살아온 나로서는,, 시험 전날 내용이 완벽하게 숙지가 안된 상황을 견디기가 어려웠다. 사실 학점 좋아도 딱히 쓸모도 없는데 왜 시험 좀 못 보는게 그렇게 마음에 걸리던지,, 뭐 어쨌든. 암튼 공부 너무 하기 싫을때는 두쫀쿠 먹으면서,, 스스로를 달래가며 했다,,, 30살 딸의 사서고생+징징거림을 받아줘야 했던 엄마도 힘들었을듯,,&lt;br&gt;난이도는?? --&amp;gt; 이거에 대해서도 좀 걱정이 많았다. 나는 시험이 너무 쉬운걸 극혐한다. 그건 열심히 하는 사람과 열심히 안 한 사람 그 누구에게도 도움되지 않는 일이다. 혹시 사이버대는 너무 난이도가 쉬울까 걱정했었다. 흠,, 내가 들은 5개중 2과목은 너무 쉬웠고, 2과목은 적절했고, 1과목은 굉장히 어려웠다. 너무 쉬운 과목 2개는 내가 공부를 열심히 한게 현타올 정도로 자존심 상하는 난이도였다. 조금 더 성의 있게 내줬으면 좋았을 듯 싶다. 시험이 어려웠던 1과목은 제일 잘하고 싶었는데 제일 점수가 낮다. 암기 과목이 아니라 여러 도구를 써서 분석하고 계산하는 과목이라 아주 어려웠고,, 재밌었고,, 퀴즈랑 과제까지 다이나믹하게 내주셔서 정말 좋았다. 공부 개열심히 햇는데 시험 잘 못 봐서 속상하다.&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;4. 성적&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;1806&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eMasK5/dJMcaf6kJxm/yzyFkbaMBYK6Fqk0EATmA1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eMasK5/dJMcaf6kJxm/yzyFkbaMBYK6Fqk0EATmA1/img.jpg&quot; data-alt=&quot;20대에도 못 받아본 올 에이쁠,,&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eMasK5/dJMcaf6kJxm/yzyFkbaMBYK6Fqk0EATmA1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeMasK5%2FdJMcaf6kJxm%2FyzyFkbaMBYK6Fqk0EATmA1%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;377&quot; height=&quot;516&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;1806&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;20대에도 못 받아본 올 에이쁠,,&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성적은 뭐,, 공부를 열심히 했기 땜에 당연히 잘 나왔다. 20대 때는 그렇게 죽어라 해도 올 에이쁠은 한번도 안 나왔었는데,, 매번 한두 과목은 꼭 A0가 나와서 까비였는데 올에이쁠을 30살에 처음 받았다. 근데 사실 학점 좋아도 딱히 쓸모는 없고,, 자랑할 데도 없다,, 아 근데 국가장학금에 C학점 경고제인가? 뭐 그런거 있는 것 같았다. 그래서 C만 조심하면 될 듯 하다.&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;5. 회사랑 병행 가능한지?&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1514&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/urg5v/dJMb9957mQt/FEk75xwMxlit5a3xzLFOu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/urg5v/dJMb9957mQt/FEk75xwMxlit5a3xzLFOu0/img.png&quot; data-alt=&quot;25년 깃 잔디,, 평일에는 일하고 주말에는 거의 공부를 한다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/urg5v/dJMb9957mQt/FEk75xwMxlit5a3xzLFOu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Furg5v%2FdJMb9957mQt%2FFEk75xwMxlit5a3xzLFOu0%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;1514&quot; height=&quot;400&quot; data-origin-width=&quot;1514&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;25년 깃 잔디,, 평일에는 일하고 주말에는 거의 공부를 한다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;힘들긴 하지만 가능하다. 퇴근후 or 주말에 강의 들으려고 노트북 켜놓으면 강의 다 듣고 일도 쫌쫌따리 하게 되고,, 시험 기간에는 꼭 칼퇴를 해야했기에 6시까지 업무를 다 끝내려고 더 집중해서 일했던 거 같다. 누군가는 나한테 '대학 다닐 시간에 일을 더 열심히 하는게 낫지 않냐'라고 할 수도 있지만,, 대학 안 다녀도 여가 시간에 내가 일을 막 추가로 할 것 같지는 않아서,, 상관없다. 일할 시간을 쪼개서 하는건 아니고 쉬는 시간을 쪼개서 공부하는 거라 일에는 영향이 없다. 흠 근데 나는 딱히 취미도 없고 인간관계도 없어서 가능했을지도?(또르륵,,ㅠ) 퇴근하고 나서 저녁먹고 뭐 하다보면 밤 8시~9시 쯤이고, 강의 한두개 들으면 바로 잘 시간이다. 만약 야근하느라 강의 못 들었으면 주말에 강의 다 들어야하고,, 보통 평일에 강의 2개 듣고, 주말에 3개 몰아서 들었다. 하나 듣는데 40~50분이라 몰아서 들으려면 꽤나 고역이다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1106&quot; data-origin-height=&quot;859&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nU9GE/dJMcaaYgwCI/naLIeDGOgFi46CwfIKkTG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nU9GE/dJMcaaYgwCI/naLIeDGOgFi46CwfIKkTG0/img.png&quot; data-alt=&quot;이 회사에 다닌지도 벌써 1년!!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nU9GE/dJMcaaYgwCI/naLIeDGOgFi46CwfIKkTG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnU9GE%2FdJMcaaYgwCI%2FnaLIeDGOgFi46CwfIKkTG0%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;309&quot; height=&quot;240&quot; data-origin-width=&quot;1106&quot; data-origin-height=&quot;859&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이 회사에 다닌지도 벌써 1년!!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어쩌면 내가 20대때 컴퓨터 공학을 전공하는 것보다, 30대에 회사 다니면서 컴공을 전공하는게 더 나은 것 같다. 부족한 채로 이미 현업에 뛰어들어서 일하면서 그간 궁금했는데 미처 못짚고 넘어간 개념들이 많았는데, 그게 수업을 들으면서 하나씩 풀리고 있다. 실무가 뭔지 하나도 모르고 강의를 들었다면 코파면서 들었을 것 같은데 실무를 경험하고 거꾸로 돌아와서 들으니까 이해도 잘되고 잼나는 느낌이다.&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;6. 26년은?&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;1049&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QL75z/dJMcabCQ7uP/kqKToa08aDbwvQGRq2zIjK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QL75z/dJMcabCQ7uP/kqKToa08aDbwvQGRq2zIjK/img.jpg&quot; data-alt=&quot;저는 29~31살입니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QL75z/dJMcabCQ7uP/kqKToa08aDbwvQGRq2zIjK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQL75z%2FdJMcabCQ7uP%2FkqKToa08aDbwvQGRq2zIjK%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;296&quot; height=&quot;235&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;1049&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;저는 29~31살입니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 곧 만으로도 30살이 되는 사람으로서 멋찐 어른이 되고 싶다만, 이 나이 먹고 낮에는 직장, 밤에는 대학 다닐려니 좀 힘들다.ㅠ 이번에 5과목 듣는게 좀 힘들었어서 다음 학기 때는 4과목 들을거다. 그리고 이번에 너무 비효율적으로 공부 열심히 한거 같아서 다음 학기때 좀 요령 피우면서 대충 할거다. 1과목 덜 들어서 시간적 여유가 생기면 디지털포렌식 2급 자격증을 도전해볼까,,? 싶기도 함. 흠 암튼 26년도 귀찮지만 일도 공부도 잘 해보자!!&lt;/p&gt;</description>
      <category>개발자가 되는 과정</category>
      <category>개발자 사이버대</category>
      <category>사이버대</category>
      <category>사이버대 등록금</category>
      <category>사이버대학교</category>
      <category>세종사이버대 정보보호학과</category>
      <category>세종사이버대학교</category>
      <category>정보보호학과</category>
      <category>직장 병행</category>
      <category>직장인 사이버대</category>
      <author>산타는 뽀미</author>
      <guid isPermaLink="true">https://bbomicoding.tistory.com/114</guid>
      <comments>https://bbomicoding.tistory.com/114#entry114comment</comments>
      <pubDate>Sat, 3 Jan 2026 15:21:48 +0900</pubDate>
    </item>
    <item>
      <title>2년차 개발자의 새로운 회사 적응기</title>
      <link>https://bbomicoding.tistory.com/113</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;사실 굳이 연차로 따지자면 3년차다. 내가 23년 10월에 처음 개발자가 되었고 지금은 25년 7월이니까,,? 그치만 만 2년도 안 되었는데 3년차 개발자라는 수식어가 어울리지 않아 그냥 2년차 개발자라고 할거다 내맘이니까^^&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 첫 직장이 망해서 울고불고 난리치며 그만둔지 한 달 만에 새로운 직장에 취업했고, 벌써 다닌지 7개월이 조금 넘었다. 시간 참 빨라,,,,!! 새로운 직장에 다닌지 초반에는 너무너무 행복했고 적응도 잘 하는 듯 싶었으나 갑자기 나에게 마음의 병이 찾아왔다. 너무 좋은 직장에 다니고, 돈도 잘 벌고, 동료들도 좋고, 대장님도 좋고, 일도 재밌고, 모든 것이 내가 꿈꾸던 상황이었는데 갑자기 내 마음이 무너졌다. 그래서 갑자기 모든 인간관계를 끊고 일에도 집중 못 하고 죽상으로 회사를 다녔다. 회사도 가기 싫고 일이 너무너무 하기 싫어서 차라리 죽고 싶을 정도라는 생각까지 들었는데 도무지 날 괴롭게 하는 원인을 알 수 없어 괴로웠다. 일을 안하거나 직장을 그만둔다고 해서 내가 나아질지도 의문이었다(애초에 직장이 원인이 아니니까). 번아웃이라기엔,,, 내가 'burn'의 기준이 높은건지 나는 그렇게까지 열정적으로 살지는 않아서 번아웃의 자격이 없다고 생각했다. 아무튼 이대로라면 내가 죽을것만 같아서 지금은 도움을 받고 있고, 많이 나아져서 이제 예전의 나로 많이 돌아왔다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이제서야 좀 정신 차리고 나의 회사생활을 돌아보니, 모든 것이 선물이다. 물론 마음에 안 드는 부분도 있고 불만도 조금이야 있지만은 나는 너무 좋은 환경에서 행복하게 일하고 있는 것 같다. 이걸 캐치하지 못하면 내가 얼마나 행복한지도 모르고 부정적으로 살 것만 같아서 나의 7개월간의 일상을 블로그에 기록하려고 한다. 그럼 아직도 응애개발자인 나의 포매 적응기 시작--!!! &amp;gt;0&amp;lt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-15 015.jpeg&quot; data-origin-width=&quot;959&quot; data-origin-height=&quot;732&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RTl0F/btsPgyM6EYp/w82aX8006ggf50cx7E1oeK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RTl0F/btsPgyM6EYp/w82aX8006ggf50cx7E1oeK/img.jpg&quot; data-alt=&quot;이렇게 생각한다는건 아니고;;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RTl0F/btsPgyM6EYp/w82aX8006ggf50cx7E1oeK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRTl0F%2FbtsPgyM6EYp%2Fw82aX8006ggf50cx7E1oeK%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;284&quot; height=&quot;217&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-15 015.jpeg&quot; data-origin-width=&quot;959&quot; data-origin-height=&quot;732&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이렇게 생각한다는건 아니고;;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 원래 프론트엔드 개발자였다. 그런데 이 회사에 들어올때 대표님은 나를 기획자(?)로 쓰고 싶어 뽑았고, 결과적으로 지금 백엔드 개발자(?)를 하고 있다. 어쨌든 내가 원래 갖고 있던 기술력이나 지식보다는 나라는 사람을 믿고 대표님께서 뽑아주셨기에, 그 기대에 보답해야한다는 마음이 컸다. 그래서 초반 3개월은 스스로 그 부담감에 갇혀 많이 힘들었다. 아무도 부담을 준 적이 없는데 혼자서 만들어냈달까;; 그러다가 어느순간 정신 차리고 나는 내가 보여주고 싶은 그 이상향에 도달할 수 없을 거라는 생각이 들었다. 인정욕구가 너무 커서, 내가 항상 1등이고 항상 제일 예쁨 받아야만 직성이 풀렸는데 이제 안 그러기로 했다. 나이도 30인데 이제 남에게 눈을 돌리기보단 내 자신에게 눈을 돌리기로 했다. 일할 때도 칭찬 받기 위해 or 업무 시간 늘리기 위해 하는 의미없는 야근과 주말 출근을 많이 줄였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-15 016.jpeg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0Gsdo/btsPfsAInfE/QKeYvqnD0wdPL6coKcSDn0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0Gsdo/btsPfsAInfE/QKeYvqnD0wdPL6coKcSDn0/img.jpg&quot; data-alt=&quot;예쁜 우리집 홈카페&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0Gsdo/btsPfsAInfE/QKeYvqnD0wdPL6coKcSDn0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0Gsdo%2FbtsPfsAInfE%2FQKeYvqnD0wdPL6coKcSDn0%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;273&quot; height=&quot;364&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-15 016.jpeg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;예쁜 우리집 홈카페&lt;/figcaption&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-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-30 006.jpeg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;960&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pvXNs/btsPgc4CBIz/VrC2ZGAsRAkDwK5aUvLWw1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pvXNs/btsPgc4CBIz/VrC2ZGAsRAkDwK5aUvLWw1/img.jpg&quot; data-alt=&quot;일하는 멋찐 내모습--!!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pvXNs/btsPgc4CBIz/VrC2ZGAsRAkDwK5aUvLWw1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpvXNs%2FbtsPgc4CBIz%2FVrC2ZGAsRAkDwK5aUvLWw1%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;443&quot; height=&quot;295&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-30 006.jpeg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;960&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;일하는 멋찐 내모습--!!&lt;/figcaption&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-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-15 006.jpeg&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;1388&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XtF3A/btsPf2833Nv/A5xDXvNpP4A30Sv2VTPpNK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XtF3A/btsPf2833Nv/A5xDXvNpP4A30Sv2VTPpNK/img.jpg&quot; data-alt=&quot;ㄹㅇ 내 성격 압축 짤;;;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XtF3A/btsPf2833Nv/A5xDXvNpP4A30Sv2VTPpNK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXtF3A%2FbtsPf2833Nv%2FA5xDXvNpP4A30Sv2VTPpNK%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;298&quot; height=&quot;313&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-15 006.jpeg&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;1388&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ㄹㅇ 내 성격 압축 짤;;;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 말이 정말 많은 편이다. 이전 회사에서는 핵 슈퍼 인싸였고, 이 회사에 와서도 초반에는 그렇게 지냈다. 그러다가 마음의 여유가 없어지자 점점 사람들이 하는 의미없는 한마디에 상처받고, 내가 했던 말을 집에 와서 후회하는 등 사람들을 대하는게 조금 힘들어졌다. 그래서 회사 사람들과 함께 밥을 먹지 않고 혼자 먹은지 지금 한 5개월째다. 초반에는 엄청 밝았다가 갑자기 너무 흑화한 나를 걱정해주시는 분들도 계셨지만 나도 나를 통제할 수가 없었다ㅠㅠ 회사동료 뿐 아니라 친구들이나 아는 사람들을 만나는 것도 너무 힘들어서 인간관계 다 망가졌다. 근데 이제 좀 나아져서 회사 사람들 밥 먹는데 따라가기도 하고, 친구들도 조금씩 만나고 있다. 사람들과 교류하니 다시 예전의 나로 돌아온 것 같아서 기분이 좋다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-16 023.jpeg&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkmlMA/btsPfJokYIA/v3bccK9Ki3miSpOCOdayM0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkmlMA/btsPfJokYIA/v3bccK9Ki3miSpOCOdayM0/img.jpg&quot; data-alt=&quot;기억에 남을 식사&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkmlMA/btsPfJokYIA/v3bccK9Ki3miSpOCOdayM0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkmlMA%2FbtsPfJokYIA%2Fv3bccK9Ki3miSpOCOdayM0%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;263&quot; height=&quot;467&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-16 023.jpeg&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;기억에 남을 식사&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 이상하다는걸 깨달은건 3월이었다. 그날은 토요일이었고 여느때처럼 일하러 카페 갔다가, 갑자기 너무 힘들고 우울해서 버스를 탔는데, 그 버스가 서울역을 지나간다는걸 깨달았다. 그때 '그냥 이대로 대전 가서 엄마랑 놀까?'라는 생각이 들자 갑자기 버스 안에서 눈물이 쏟아졌다. 내가 맘만 먹으면 2시간 안으로 갈 수 있는 거리를 왜 그동안 자주 못 갔지 하는 후회도 들고, 갑자기 서울에서 혼자 사는게 너무 서럽고 버거웠다. 버스에서도 울고 ktx 기차를 타고 대전을 가는 중에도 눈물이 멈추지 않았다. 엄마랑 만나서 저 비빔칼국수랑 고추장보쌈을 먹었는데 그게 어찌나 맛있던지. 그 이후로 매주 주말마다 대전을 가고 있다. 주말에 가족을 만나면 힐링되는 느낌이라 시간과 돈을 투자해서(한달에 대충 교통비만 20만원)라도 대전을 가는 중이다. 엄마가 너무 좋아한다. 이제는 전처럼 안 힘들지만 그래도 앞으로도 매주 갈거다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-15 019.jpeg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKWera/btsPf0QUtSK/pSVcW2oTxC6U4ImB6vcx6K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKWera/btsPf0QUtSK/pSVcW2oTxC6U4ImB6vcx6K/img.jpg&quot; data-alt=&quot;백송한우 == 한국 최고 소고기 맛집&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKWera/btsPf0QUtSK/pSVcW2oTxC6U4ImB6vcx6K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKWera%2FbtsPf0QUtSK%2FpSVcW2oTxC6U4ImB6vcx6K%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;271&quot; height=&quot;361&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-15 019.jpeg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백송한우 == 한국 최고 소고기 맛집&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 내가 월급 받아서 가족들한테 사준 소고기다. 20만원 넘었는데 너~~~~~~~~~~무 맛있어서 40만원 넘어도 먹을 것 같다. 대전에 있는 백송한우라는 곳인데 대전 사는 분들은 꼭 가보시길. 내가 30년 살면서 그동안 가족들이랑 좋은거 정말 많이 먹고 다녔는데 소고기는 여기가 압도적으로 1위다. 원래 그전까지는 도쿄에서 먹은 야키니쿠가 1위였는데 이걸 먹는 순간 단번에 순위가 바뀌었다. 직원분들도 친절하시고 그 뒤에 한번 더 갔는데 우릴 알아보셔서 넘 신기했다ㅋㅋ 아무튼 돈 벌어서 소고기도 쏠 수 있고 너무 행복했다는 소리~~~!!!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-30 004.jpeg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKAwyD/btsPgWmCYD7/4A2ZlxKIDYfpHAdQ9P10k0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKAwyD/btsPgWmCYD7/4A2ZlxKIDYfpHAdQ9P10k0/img.jpg&quot; data-alt=&quot;설날에 소고기 주는 회사 쵝오bb&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKAwyD/btsPgWmCYD7/4A2ZlxKIDYfpHAdQ9P10k0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKAwyD%2FbtsPgWmCYD7%2F4A2ZlxKIDYfpHAdQ9P10k0%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;298&quot; height=&quot;397&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-30 004.jpeg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;설날에 소고기 주는 회사 쵝오bb&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소고기 하니까 생각난거. 우리 회사는 명절에 소고기 주는 좋은 회사다. 이전 회사에 다닐때는 이런거 못 받아봤는데!!!! 나보다도 우리 가족들이 더 좋아해서 소고기 구우면서 영상도 찍고, 언니가 계속 대표님한테 감사하다고ㅋㅋ 하면서 먹었다. 그래서 따로 감사인사도 드렸다. 와 우리 회사 직원도 엄청 많은데(대충 90명 이상,,?) 어케 전부 다 이걸 챙겨주셨지?? 진짜 너무 감사하다 하 진짜 충성해야지 회의 맨날 한다고 불만이었는데 나는 진짜 배은망덕한 놈이다. 아 낼부터 진짜 열심히 해야겠다 (낼부터,, ㅎㅎ)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-15 008.jpeg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAHttW/btsPfv4UAhQ/kdH7IEQ4F0aEvZLCCxkZdK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAHttW/btsPfv4UAhQ/kdH7IEQ4F0aEvZLCCxkZdK/img.jpg&quot; data-alt=&quot;The 든든&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAHttW/btsPfv4UAhQ/kdH7IEQ4F0aEvZLCCxkZdK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAHttW%2FbtsPfv4UAhQ%2FkdH7IEQ4F0aEvZLCCxkZdK%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;242&quot; height=&quot;323&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-15 008.jpeg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;The 든든&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 우리 회사 바로 앞 건물에 있는 the 든든 이라는 밥집인데 내가 픽한 구디 최고 맛집이다. 메뉴 이름은 소고기 해장국이고 맛은 소고기 무국이랑 비슷한데, 고기도 많이 들어가고 진~~~~~짜 너무너무 맛있다!!!! 국밥 땡길때는 무조건 여기로 간다. 세상 모든 사람들한테 전파할 수 없어서 아쉬울 지경. 구디 사는 분들은 여기 꼭 가보시길. 여기랑 우리 회사 건물에 있는 한우 해장도 진짜 맛있다. 그리고 타코디스코도 내 인생 맛집이었는데 거긴 없어졌다 흐앙ㅠㅠㅠ 나한테 허락도 안 받고 폐업하면 어떡해요 사장님 어디 가셨나요&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-15 017.jpeg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvARx9/btsPfgtpQce/V0NB1J3yRJB299P1ijQ5k1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvARx9/btsPfgtpQce/V0NB1J3yRJB299P1ijQ5k1/img.jpg&quot; data-alt=&quot;성심당 홍보대사 ^^&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvARx9/btsPfgtpQce/V0NB1J3yRJB299P1ijQ5k1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvARx9%2FbtsPfgtpQce%2FV0NB1J3yRJB299P1ijQ5k1%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;315&quot; height=&quot;420&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-15 017.jpeg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;성심당 홍보대사 ^^&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;너무 먹을 것만 나온다고 생각하시나요? 먹을 것이 '행복'과 직결되기 때문. (그래서 당연한거임;;;) 암튼 이건 내가 성심당에서 회사 사람들 먹으라고 사온 빵들이다. 명색이 직원중에 대전 사람이 있는데 회사 사람들이 성심당 빵을 한번도 못 먹어봤다,,,? 이건 대전인으로서 너무 존심 상하지. 그래서 한번 화끈하게 사왔다. 사실 저렇게 많이 산거에 비해 한 12만원,,?밖에 안 나와서 와 역시 갓심당 이러고 사왔는데, 회사 분들께는 응애인 내가(회사에서 어린 편) 이렇게 대량의 빵을 사온 것이 많이 신선(?)했나 보다. 그 뒤로 내가 부잣집 딸이라고 소문나서 아놬ㅋㅋㅋ 맨날 나 보시면 옆에서 그~~ 성심당 사온 부잣집 딸~~ 이러면서 옆사람에게 나를 소개하신다ㅋㅋㅋ 흥. 이번에는 너무 좀 관광용 빵으로만 사다드렸는데 다음에는 찐 대전인들이 먹는 빵 더 맛있는걸로 한번 더 왕창 사다드려야지. 부잣집 딸이 한번 더 크게 쏠테니까 기대하슈.&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-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-15 010.jpeg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p8PIk/btsPfJhybaK/yxbxkBjV08yT5K6ywP9YM0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p8PIk/btsPfJhybaK/yxbxkBjV08yT5K6ywP9YM0/img.jpg&quot; data-alt=&quot;내 취향을 어케 아시구,,,&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p8PIk/btsPfJhybaK/yxbxkBjV08yT5K6ywP9YM0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp8PIk%2FbtsPfJhybaK%2FyxbxkBjV08yT5K6ywP9YM0%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;291&quot; height=&quot;388&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-15 010.jpeg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;내 취향을 어케 아시구,,,&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 나의 옆자리에 있는 아기천재님께서 주신 스티커다. 구글 커뮤니티 운영진으로 활동중이신 우리 아기천재님은 여러 깜찍한 굿즈가 많다. 내가 이런걸 좋아한다는걸 어케 아시구 나한테 자꾸만 선물해주신다. 아기천재님은 참고로 엄청엄청 어리신,, 내가 가르쳤던 학생들보다도 훠얼씬 어리신 분인데, 개발을 너무너무너무 잘하고 성격도 좋고 진짜 최고다. 나를 또 반성하게 하는 인물이다,, 흑흑 초6때부터 개발 했다길래 내가 역시 7년차 개발자는 다르다면서 놀리면 좀 싫어하시는 것 같다,, (그래서 더 놀리고 싶음;;;) 암튼 실력도 인성도 10살 이모인 나보다 쩔어버리는 당신은,,, 그저 goat,,,,⭐️&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-14 003.jpeg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5TvkA/btsPg7uLudk/47l6Qu0DmIu9TdfHspig20/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5TvkA/btsPg7uLudk/47l6Qu0DmIu9TdfHspig20/img.jpg&quot; data-alt=&quot;대장님이 주신 선물,, 무덤까지 간직하겟으&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5TvkA/btsPg7uLudk/47l6Qu0DmIu9TdfHspig20/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5TvkA%2FbtsPg7uLudk%2F47l6Qu0DmIu9TdfHspig20%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;263&quot; height=&quot;351&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-14 003.jpeg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;대장님이 주신 선물,, 무덤까지 간직하겟으&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 나의 god, 대장님께서 주신 선물이다 (자꾸 주변에서 굿즈들을 충전해주셔,,, 고맙게) 내 대장님은 진짜진짜진짜 너무 좋은 분이다. 전부터 느꼈던 건데 나는 '사수 운'이 정말 좋은 것 같다. 이것도 참 능력이여. 어떻게 내 대장님들은 왜 다 좋은 분이지? 특히 지금 대장님이 그중 압도적으로 최고다. 일단 우리 대장님은 감정기복이 없고, 빡대갈인 나에게 화도 잘 안 내신다. 그러기 힘들 텐데,,, 저번에 내가 진짜 대박적인 큰 실수를 한 적이 있는데, 얼굴 새파랗게 질려서 이러저러한 상황을 설명했더니 대장님은 놀라지도 않고 '음,, 큰일이네 ㅎㅎ' 하시더니 갑자기(?) 일을 해결해주셨다. 어떠한 상황에서도 평정심을 잃지 않고 조곤조곤 말씀해주신다. 흑흑ㅠㅠ 그리고 실력이 진짜 슈퍼개짱이라서 나는 약간,, 약간 무슨 생각 드냐면 내가 앞으로 살면서 내 대장님보다 더 잘하는 개발자를 만날 가능성이 있을까? 의문이 드는데 아마 없지 싶다. 개발은 분야가 다양하고, 자기 분야에서 전문가가 되기도 힘든 법인데 대장님은 모든 분야에서 전문가만큼의 지식과 실력을 갖고 있다,, 근데 너무너무 바쁘셔서 가끔은 막 회사에서 3일동안 밤새기도 하시는데 진짜 제발 건강좀 챙기셨음 좋겠다. 대장님만 생각하면 눈물이 난다,,, 도와드리기엔 내가 너무 응애인걸,, 하 빨리 성장해야지&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-30 007.jpeg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xVKUH/btsPgzZBWzB/Cmp3W8IJDDSHA8kMcLSSb1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xVKUH/btsPgzZBWzB/Cmp3W8IJDDSHA8kMcLSSb1/img.jpg&quot; data-alt=&quot;가입환영문자가 이렇게 큐티뽀짝?&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xVKUH/btsPgzZBWzB/Cmp3W8IJDDSHA8kMcLSSb1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxVKUH%2FbtsPgzZBWzB%2FCmp3W8IJDDSHA8kMcLSSb1%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;516&quot; height=&quot;123&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-30 007.jpeg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;가입환영문자가 이렇게 큐티뽀짝?&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 우리 회사 서비스 가입하면 오는 가입문자이다. 내가 처음 오자마자 맡은 일이 로그인+회원가입 이어서 이 문자를 자주 봤다ㅋㅋ (아니 저처럼 응애 신입한테 이리 중요한 일을 맡기시오면,,,ㅠㅠ) 암튼암튼. 이 문자가 말투가 좀 큐티뽀짝한데, 아기천재님이 이 가입문자를 보시고는 문구를 내가(??) 쓴거냐고 물어보는데 진짜 웃겨 뒤지는줄 알았다. 아니 말투가 이런데 그게 왜 제가 썼을 거라고 생각하시죠??? 하 개웃겨. 근데 사실 내가 말투가 저렇긴ㅠㅠ 함ㅠ 나는 딱딱하게 말하는건 잘 못하겠다. 이전 회사에서도 말투가 좀 포멀하지 못했는데, 아무도 지적하지 않았고,, 이게 개발자라는 직업의 장점이라고 생각하고 있었당,, 이 회사에 와서도 처음엔 좀 눈치 봤다가, 나의 직속 대장님 말고 다른 대장님의 말투도 귀염뽀짝한 것을 보고 용기를 얻어(?) 나도 내 말투대로 살고 있다. 누군가는 회사가 장난이냐 뭐 이러면서 안좋게 볼 수도 있지만 음,,, 그냥,,, 그냥 제가 알아서 할게요,,,,, (아무도 뭐라고 안 했는데 괜히 찔린 MZ)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-15 013.jpeg&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;321&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQnKAq/btsPfvjwz4i/cDg4hq5d9k2w1vZZbPv530/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQnKAq/btsPfvjwz4i/cDg4hq5d9k2w1vZZbPv530/img.jpg&quot; data-alt=&quot;자세히 보면 웃고 있어요&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQnKAq/btsPfvjwz4i/cDg4hq5d9k2w1vZZbPv530/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQnKAq%2FbtsPfvjwz4i%2FcDg4hq5d9k2w1vZZbPv530%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;713&quot; height=&quot;289&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-15 013.jpeg&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;321&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;자세히 보면 웃고 있어요&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 우리 회사에서 홍보용으로 사진 찍는데 거기 등장한 나이다. 시험 문제를 푸는 척만 하라 그랬는데, 앞번호고 그냥 진짜 쉬운 미분 문제길래 풀었는데 주변에서 오오~~ 역시 수학강사 출신 이래서 너무너무!!!!!! 민망했다. 진짜 그냥 f(x) 주고 f'(1) 구해라 이런 수준이었다구요!!!! ㅋㅋㅋ 아니 누구나 풀수 있는건뎈ㅋㅋ 하 웃겨 홍보용 사진을 많이 찍었는데 하필 내가 찍힌 사진이 등장해서 엄청 재밌었당 암튼 꿀잼 경험~~!! 룰루랄라&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-15 021.jpeg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;291&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5tWlG/btsPghdKdwf/ArcSPO2bNzoMwElCiXYjEk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5tWlG/btsPghdKdwf/ArcSPO2bNzoMwElCiXYjEk/img.jpg&quot; data-alt=&quot;ㅋㅋ 캐공감&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5tWlG/btsPghdKdwf/ArcSPO2bNzoMwElCiXYjEk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5tWlG%2FbtsPghdKdwf%2FArcSPO2bNzoMwElCiXYjEk%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;615&quot; height=&quot;166&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-15 021.jpeg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;291&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ㅋㅋ 캐공감&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아 이건 너무 격공인 짤이라 가져왔다. 진짜 지금 나 일하는데 챗지피티랑 커서 잠깐 이상하지? 그럼 강제로 잠깐 일 쉬어야 한다ㅋㅋ 얘네는 일주일 걸릴 일을 3시간으로 단축해주는 애들이다. 이것들을 사용하고 말고가 업무 효율과 직결된다. 어떤 회사는 시니어들이 ai에 거부감을 느끼거나 보안 때문에 굳이굳이 사용 안하는 곳도 있다고 들었는데, 얼마나 손해인지 알고 그러는걸까,, ai 쓰지 말라고? 그럼 구글링도 일절 하지 마세요,,,, 나와 우리 회사는 ai 찬양파이다. 옛날에는 주산으로 수학 계산을 했지만,, 계산기가 나오고 나서 그걸로 다 옮긴 것처럼, 그냥 ai는 받아들여야 하는 신문물인것,,,, 이제는 걔 없이 살던 때가 기억도 안 난다. 내가 대학 시절때는 챗지피티 없이 과제도 하고 논문도 썼는데 그게 어찌나 꿈처럼 느껴지는지. ai가 있었으면 정말 좋았을텐데. ai야 보고있니??? 빨리 성장해서 인간 대신 일해주렴!!! 이제 인간은 쫌 쉬자!!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-30 010.jpeg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1078&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ugQMI/btsPfqppQro/WsZ23byzMekkWfjgftQN81/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ugQMI/btsPfqppQro/WsZ23byzMekkWfjgftQN81/img.jpg&quot; data-alt=&quot;정신차려 권보미.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ugQMI/btsPfqppQro/WsZ23byzMekkWfjgftQN81/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FugQMI%2FbtsPfqppQro%2FWsZ23byzMekkWfjgftQN81%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;389&quot; height=&quot;388&quot; data-filename=&quot;KakaoTalk_Photo_2025-07-12-22-15-30 010.jpeg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1078&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;정신차려 권보미.&lt;/figcaption&gt;
&lt;/figure&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;</description>
      <category>개발자가 되는 과정</category>
      <category>2년차개발자</category>
      <category>개발자</category>
      <category>개발자이직</category>
      <category>개발자취업</category>
      <category>백엔드</category>
      <category>우울증</category>
      <category>이직</category>
      <category>행복</category>
      <author>산타는 뽀미</author>
      <guid isPermaLink="true">https://bbomicoding.tistory.com/113</guid>
      <comments>https://bbomicoding.tistory.com/113#entry113comment</comments>
      <pubDate>Sun, 13 Jul 2025 00:06:48 +0900</pubDate>
    </item>
    <item>
      <title>Go로 clean architecture 구현시 Middleware (logger, recovery)역할</title>
      <link>https://bbomicoding.tistory.com/112</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Middleware는 코드 전체에서 작동하는 공통함수를 따로 빼놓은 부분이라고 생각하면 된다. 웹 백엔드 구현시 Middleware 디렉토리에 CORS, Authentication 을 많이 넣지만, 그건 다른 좋은 예시도 많으므로 이번 포스팅에서는 logger와 recovery만 다루도록 함.&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;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트에서 gin으로 웹서버를 구현하고 있다. 기존에 middleware를 사용하지 않았을 때는 gin.Default()로 Gin Router를 생성했었고, gin에 디폴트로 내장된 logger와 recover 기능을 이미 사용 중이었다. 이번에 middleware에 따로 logger와 recovery를 구현하여 나만의 미들웨어를 사용하기로 결정함.&lt;/p&gt;
&lt;pre id=&quot;code_1735735522031&quot; class=&quot;go&quot; data-ke-language=&quot;go&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package main

import (
	&quot;github.com/gin-gonic/gin&quot;
)

func main() {

	// Gin Router 생성
	router := gin.New()

	// 미들웨어 등록
	router.Use(middleware.Logger())
	router.Use(middleware.Recovery())
    
    // 아래에 main 함수 구현..
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나의 커스텀 미들웨어를 사용하려면 gin.Default()가 아닌 gin.New()를 사용해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;middleware &amp;gt; logger.go에 로깅하고 싶은 내용을 추가한다. 요청 시작 시간, 요청 처리, 요청 종료 시간, 처리 시간, 요청 메서드, 상태코드, 클라이언트IP 등등을 출력하도록 한다. 그리고 서버를 실행시키고 GET 등의 요청을 해보면??&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;726&quot; data-origin-height=&quot;135&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8vYri/btsLC1ea0Hx/DUhrTQAwwrH7EFGO5tkr60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8vYri/btsLC1ea0Hx/DUhrTQAwwrH7EFGO5tkr60/img.png&quot; data-alt=&quot;logger에 순수 내용만 구성했을 때&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8vYri/btsLC1ea0Hx/DUhrTQAwwrH7EFGO5tkr60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8vYri%2FbtsLC1ea0Hx%2FDUhrTQAwwrH7EFGO5tkr60%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;726&quot; height=&quot;135&quot; data-origin-width=&quot;726&quot; data-origin-height=&quot;135&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;logger에 순수 내용만 구성했을 때&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 별 감흥 없는 시시한 로그가 출력되고 만다... gin.Default()로 내장 logger 사용했을때는 굉장히 색깔도 예쁘게 나오고 했는데 말이지?? 그래서 gin-gonic/gin의 logger 코드 (&lt;a title=&quot;gin-gonic/gin의 logger 코드&quot; href=&quot;https://github.com/gin-gonic/gin/blob/master/logger.go&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/gin-gonic/gin/blob/master/logger.go&lt;/a&gt;)를 참고하여 내것도 필요한 것만 반영하면서 예쁘게 보이게 바꿨다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-01-01 오후 10.12.19.png&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T8ltq/btsLCmXtTOJ/8bRpVh8SFnqYSICvWEANek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T8ltq/btsLCmXtTOJ/8bRpVh8SFnqYSICvWEANek/img.png&quot; data-alt=&quot;logger에 색상 추가했을 때&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T8ltq/btsLCmXtTOJ/8bRpVh8SFnqYSICvWEANek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT8ltq%2FbtsLCmXtTOJ%2F8bRpVh8SFnqYSICvWEANek%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;1468&quot; height=&quot;338&quot; data-filename=&quot;스크린샷 2025-01-01 오후 10.12.19.png&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;logger에 색상 추가했을 때&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 HTTP 메서드를 요청했는지, 어떤 상태코드인지 보기 편해졌다!!&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;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제는 recovery.go를 구현할 차례!!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-01-01 오후 10.14.17.png&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;818&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brG4Fs/btsLBZVKa9U/VC4bOjk19P0OqduL8IaoN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brG4Fs/btsLBZVKa9U/VC4bOjk19P0OqduL8IaoN0/img.png&quot; data-alt=&quot;recovery에 순수 코드만 구성했을 때&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brG4Fs/btsLBZVKa9U/VC4bOjk19P0OqduL8IaoN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrG4Fs%2FbtsLBZVKa9U%2FVC4bOjk19P0OqduL8IaoN0%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;1464&quot; height=&quot;818&quot; data-filename=&quot;스크린샷 2025-01-01 오후 10.14.17.png&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;818&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;recovery에 순수 코드만 구성했을 때&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Recovery 미들웨어가 실행되면 defer recover()를 등록해두었다가 어느 계층에서 패닉이 발생하면 콜스택을 거슬러 올라가다가 등록해둔 defer recover() 함수에서 panic을 캐치한다. 500에러를 클라이언트에 반환하고 서버가 죽지 않고 계속 실행되도록 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단, recovery는 예외 처리의 마지막 수단이며 가능한 한 적절한 에러 처리를 통해 패닉이 발생하지 않도록 하는 것이 중요하다고 한다. 예상 가능한 에러는 error를 리턴하여 명시적으로 처리하는 것이 바람직하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 어쨌든 순수 로직만 구현하면 터미널에 저렇게 로깅되는 것이 불만이었다. 전부 다 흰 글씨로 되어있어서 어디에서 패닉이 일어났다는 건지 알고 싶으면 인상 쓰고 한참을 찾아봐야하는,,, 그래서 이것도 색상을 추가하고 전체 콜스택과 프로젝트 내부 콜스택을 따로 출력해서 '내 코드에서 어디가 문제인건지' 알 수 있도록 했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-01-01 오후 10.16.07.png&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1kopv/btsLBJZSUSH/KzUiVkHTYw8pYqmwJBdn60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1kopv/btsLBJZSUSH/KzUiVkHTYw8pYqmwJBdn60/img.png&quot; data-alt=&quot;recovery에 색상 + 스택 트레이스 구분 구현했을 때&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1kopv/btsLBJZSUSH/KzUiVkHTYw8pYqmwJBdn60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1kopv%2FbtsLBJZSUSH%2FKzUiVkHTYw8pYqmwJBdn60%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;1460&quot; height=&quot;1102&quot; data-filename=&quot;스크린샷 2025-01-01 오후 10.16.07.png&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1102&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;recovery에 색상 + 스택 트레이스 구분 구현했을 때&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그랬더니 이런 식으로 내 코드 내에 panic 이 일어난 곳을 정확히 찝어준다. 내가 일부러 이거 테스트 하려고 handler.go에 panic을 발생시켰는데(nil 슬라이스에 접근하도록 함)그 파일이랑 함수랑 줄까지 자세하게 가르쳐 준당!!! 와아아ㅏ~!!! 코드는 gin에서 공개한 recovery 코드 (&lt;a href=&quot;https://github.com/gin-gonic/gin/blob/master/recovery.go&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/gin-gonic/gin/blob/master/recovery.go&lt;/a&gt;)를 참고하여 원하는 대로 커스텀하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;암튼 이런 식으로 middleware를 구현하였고, gin에 내장된게 아니라 내가 마음대로 커스텀한 logger와 recovery를 쓸 수 있게 되었다. 추후 로그인/회원가입 기능 구현하는 프로젝트에서는 auth도 구현하고, 웹 작업 할때는 CORS도 구현할 예정이다.&lt;/p&gt;</description>
      <category>Go lang</category>
      <category>clean architecture middleware</category>
      <category>gin logger</category>
      <category>gin middleware</category>
      <category>gin recovery</category>
      <category>go</category>
      <category>go clean architecture</category>
      <category>go middleware</category>
      <category>go recover</category>
      <category>Logger</category>
      <category>Middleware</category>
      <author>산타는 뽀미</author>
      <guid isPermaLink="true">https://bbomicoding.tistory.com/112</guid>
      <comments>https://bbomicoding.tistory.com/112#entry112comment</comments>
      <pubDate>Wed, 1 Jan 2025 22:31:21 +0900</pubDate>
    </item>
    <item>
      <title>Go air 설치 맥 환경변수 설정 방법</title>
      <link>https://bbomicoding.tistory.com/111</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;GO_BUILD.png&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;1600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JRawn/btsLBVLoJTD/vXwWNVKP1v8iQNiRx1iLr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JRawn/btsLBVLoJTD/vXwWNVKP1v8iQNiRx1iLr1/img.png&quot; data-alt=&quot;Go build&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JRawn/btsLBVLoJTD/vXwWNVKP1v8iQNiRx1iLr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJRawn%2FbtsLBVLoJTD%2FvXwWNVKP1v8iQNiRx1iLr1%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;383&quot; height=&quot;383&quot; data-filename=&quot;GO_BUILD.png&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;1600&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Go build&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Go로 만든 프로젝트를 실행하려면, main.go 파일이 '루트 디렉토리 &amp;gt; cmd' 폴더 안에 있다고 가정할 때&lt;/p&gt;
&lt;pre id=&quot;code_1735442568261&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;go run cmd/main.go&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 명령어를 사용하여 실행해야 한다. 또는 파일을 만들고 싶다면&lt;/p&gt;
&lt;pre id=&quot;code_1735442625050&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;go build cmd/main.go&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령어로 파일을 빌드해서 실행해도 된다. (윈도우는 main.exe 파일이, 리눅스/맥은 확장자 없이 main 파일이 생성된다.) 그러나 해당 방법을 쓰면 코드를 수정할 때마다 매번 수동으로 명령어를 다시 입력해야 해서 불편하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 air라는 유용한 라이브러리(&lt;a title=&quot;air 라이브러리&quot; href=&quot;https://github.com/air-verse/air&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/air-verse/air)&lt;/a&gt;를 사용하여 코드 수정하면 &lt;b&gt;자동으로 애플리케이션을 재빌드 후 실행&lt;/b&gt;하도록 해보겠다.&lt;/p&gt;
&lt;figure id=&quot;og_1735452065233&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;GitHub - air-verse/air: ☁️ Live reload for Go apps&quot; data-og-description=&quot;☁️ Live reload for Go apps. Contribute to air-verse/air development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/air-verse/air&quot; data-og-url=&quot;https://github.com/air-verse/air&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Q19iT/hyXStwAUxr/D6zI3QuuenI3cxZ0VuQuOk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/b0Jxeq/hyXSC79qSg/K5y5LI69uhiJuW5HUozdt1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/air-verse/air&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/air-verse/air&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Q19iT/hyXStwAUxr/D6zI3QuuenI3cxZ0VuQuOk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/b0Jxeq/hyXSC79qSg/K5y5LI69uhiJuW5HUozdt1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;GitHub - air-verse/air: ☁️ Live reload for Go apps&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;☁️ Live reload for Go apps. Contribute to air-verse/air 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;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;style3&quot; /&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;p data-ke-size=&quot;size16&quot;&gt;먼저 아래 명령어를 사용하여 air를 설치한다. 보통 라이브러리는 go get 명령어로 설치하지만 바이너리 파일 설치는 go install 로 분리되었다. 해당 명령어는 바이너리를 $GOPATH/bin 에 설치하므로 경로가 PATH에 추가되어 있어야 air 명령어를 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1735442767806&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;go install github.com/air-verse/air@latest&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시 환경변수 설정 없이도 운 좋게 바로 실행 가능할지도 모르니 다음 명령어를 쳐보도록 하자.&lt;/p&gt;
&lt;pre id=&quot;code_1735443021675&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;air version&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쳤는데 air 버전이 아닌 command not found 가 나온다면,,, 환경변수 설정을 해줘야 한다.ㅠㅠ 나의 경우 윈도우에 설치할 때는 환경변수 설정 없이도 바로 실행 됐었는데 맥에는 따로 해줘야 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1735443253414&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;go env GOPATH&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령어를 사용하여 GOPATH 가 어딨는지 확인한다. 만약 이 명령어도 안 먹히면 1) go를 설치 안 했거나 2) go 경로도 못 찾는것,, 따라서 고를 설치하고 환경변수 설정 해주는 것이 우선이다. 암튼 GOPATH 경로가 만약 &lt;b&gt;/Users/yourname/go&lt;/b&gt; 이면, air 설치시 그 바이너리 파일은 &lt;b&gt;/Users/yourname/go/bin/air&lt;/b&gt; 에 설치되어 있다. (나의 경우 특이허게 go가 &lt;b&gt;/usr/local/go/bin&lt;/b&gt; 에 설치되어 있어서 자꾸 go 경로를 못 찾아서 저것도 따로 환경변수 추가해줬음.. 암튼 저 경로도 찾아봐야 한다.)&lt;/p&gt;
&lt;pre id=&quot;code_1735443118232&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vim ~/.zshrc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널에 위 명령어를 입력하여 파일 편집기를 연다. 키보드에서 i를 누르면 편집 가능 상태로 바뀐다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9B1Xt/btsLBIFwifJ/kcNNTmdpGYavq1EfKCfCwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9B1Xt/btsLBIFwifJ/kcNNTmdpGYavq1EfKCfCwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9B1Xt/btsLBIFwifJ/kcNNTmdpGYavq1EfKCfCwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9B1Xt%2FbtsLBIFwifJ%2FkcNNTmdpGYavq1EfKCfCwK%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;595&quot; height=&quot;442&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 그림과 같이&lt;/p&gt;
&lt;pre id=&quot;code_1735443719108&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export PATH=&quot;$PATH:$(go env GOPATH)/bin&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;을 추가로 입력해준다. 그 윗줄은 맥이 자꾸 go도 인식을 못하길래 추가해준것. which go나 go version 쳤을때 잘 나오는 사람은 그냥 go env PATH 경로만 추가해주면 됨~!! 암튼 추가했으면 &lt;b&gt;esc&lt;/b&gt; 누르고 &lt;b&gt;:wq&lt;/b&gt; 쳐서 저장하고 빠져나오면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1735443822074&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;source ~/.zshrc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 명령어로 환경변수 변경 사항 적용하는 거 잊지 말기!!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;암튼 그리고 나서 환경변수가 잘 적용이 되었다면, air version 쳤을 때&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-12-29 오후 12.46.19.png&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;81&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8s7Le/btsLAvtDA7y/oJTGiOmE6tZpLnrQm1dY4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8s7Le/btsLAvtDA7y/oJTGiOmE6tZpLnrQm1dY4K/img.png&quot; data-alt=&quot;air version 성공시 나오는 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8s7Le/btsLAvtDA7y/oJTGiOmE6tZpLnrQm1dY4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8s7Le%2FbtsLAvtDA7y%2FoJTGiOmE6tZpLnrQm1dY4K%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;740&quot; height=&quot;132&quot; data-filename=&quot;스크린샷 2024-12-29 오후 12.46.19.png&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;81&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;air version 성공시 나오는 화면&lt;/figcaption&gt;
&lt;/figure&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 다시 내 프로젝트로 돌아와서, 생각보다 air 실행하는 데에도 좀 헤맸어서 그 방법도 적겠다. air를 사용하여 프로젝트를 빌드하는 방법은 간단하다.&lt;/p&gt;
&lt;pre id=&quot;code_1735444080986&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;air&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널에 간단하게 air 명령어만 치면 되는 거였음. 근데 내가 아주 간단하게 루트 디렉토리 바로 아래에 main.go 파일 만들고 나서 air 쳤을 때는 실행 잘 되더니 폴더 쫌 만들고 main.go 위치 바꾸니까 쟤가 실행되지 않는 것임. 왜냐하면 air는 main.go 파일이 있는 디렉토리로 가서 실행하거나 또는 &lt;b&gt;뒤에 경로를 적어줘야 했기 때문&lt;/b&gt;임....!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 매번 main.go 경로를 적거나 저기를 찾아가기는 너무 귀찮으므로, main.go 경로를 아예 박아두도록 하자!! 이미 .air.toml 파일이 있다면 그걸 열거나, 또는 아직 그 파일이 없다면&lt;/p&gt;
&lt;pre id=&quot;code_1735444206620&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;air init&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 명령어를 쳐서 프로젝트에 &lt;b&gt;.air.toml&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;1162&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/da6INf/btsLzwzNPdu/AcKcj0MyaA7PDOUpBkuCYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/da6INf/btsLzwzNPdu/AcKcj0MyaA7PDOUpBkuCYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/da6INf/btsLzwzNPdu/AcKcj0MyaA7PDOUpBkuCYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fda6INf%2FbtsLzwzNPdu%2FAcKcj0MyaA7PDOUpBkuCYk%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;747&quot; height=&quot;233&quot; data-origin-width=&quot;1162&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러가지를 설정할 수 있지만, 일단 지금 볼 것은 cmd 명령어이다. 저곳에 air 쳤을때 실행하고 싶은 명령어를 치면 된다. go run main.go를 적어두면 그 명령어가 실행된다. 나같은 경우 위 사진과 같이 적어두었는데,&lt;/p&gt;
&lt;pre id=&quot;code_1735444448378&quot; class=&quot;go&quot; data-ke-language=&quot;go&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;go build -o [파일명] [main.go 경로]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일명에 ./tmp/main 이라고 적혔으므로 실행 파일이 tmp 폴더 내에 main이라는 이름으로 생성된다는 뜻이다. tmp 폴더는 이름 그대로 잠시 생성되는 폴더이므로 쉽게 삭제하고 다시 air를 해도 되고, git 에 올릴때는 제외해야 한다. 파일 이름을 main이 아닌 특정 이름으로 설정할 수도 있다. 내 컴퓨터는 맥이라서 뒤에 확장자를 적지 않았지만 &lt;b&gt;윈도우의 경우 main.exe&lt;/b&gt; 이런 식으로 뒤에 &lt;b&gt;.exe 확장자를 꼭&lt;/b&gt; 붙여야 한다는 사실 잊지 말기!!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;main.go 위치를 ./cmd/main.go 라고 제대로 적어줄 경우 cmd 폴더에서 저 애플리케이션 진입점 파일(main.go)을 제대로 찾아간다. 그럼 앞으로 main.go 파일 내가 직접 찾아갈 필요 없이 그냥 루트 디렉토리에서 air 명령어 하나만 쳐도 알아서 명령어가 잘 먹히게 된다~~!! 되게 당연하고 쉬워보이지만 이거 제대로 설정 안 하면 air 실행하는 데만 한시간 걸릴수도 있으므로(경험담ㅎ) 설정 잘 해주고 잘 안 되면 경고문을 잘 읽어보기!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;암튼 air 실행시&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;807&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o87K4/btsLAC7d6LQ/Z9HZWCX50H4vTq8l71EKwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o87K4/btsLAC7d6LQ/Z9HZWCX50H4vTq8l71EKwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o87K4/btsLAC7d6LQ/Z9HZWCX50H4vTq8l71EKwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo87K4%2FbtsLAC7d6LQ%2FZ9HZWCX50H4vTq8l71EKwk%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;734&quot; height=&quot;463&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;807&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 화면이 나온다면 잘 설정된 것~~!! 나는 gin을 활용해 간단한 restful API를 만들었는데, 설정해둔 url을 입력할 경우&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-12-29 오후 1.01.36.png&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;225&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A3IuQ/btsLAgpYaI4/ceinDhFbSKIozRR5gI3mK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A3IuQ/btsLAgpYaI4/ceinDhFbSKIozRR5gI3mK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A3IuQ/btsLAgpYaI4/ceinDhFbSKIozRR5gI3mK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA3IuQ%2FbtsLAgpYaI4%2FceinDhFbSKIozRR5gI3mK1%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;739&quot; height=&quot;236&quot; data-filename=&quot;스크린샷 2024-12-29 오후 1.01.36.png&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;225&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 GET/POST/PUT/DELETE 도 색깔별로 이쁘게 알려준다. 잘못된 url 칠 경우 404 에러 뜬 것도 잘 나옴!!! (아 근데 다시 알아보니 이건 air에서 해준게 아니라 gin 웹서버 만들때 gin.Default()로 만들면 알아서 이쁜 미들웨어(logger)로 설정해줘서 그런 거였음!! 헉스바리ㅠㅠ)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;암튼 air 로 실행했기 때문에 코드를 수정하고 파일을 저장하면 알아서 재빌드 해준다. 그래도 브라우저에서 새로고침은 수동으로 해줘야 함~!! 그럼 너무 유용한 라이브러리 air 설치 및 실행 방법과 환경변수 설정 방법 작성 완료~!! ^0^&lt;/p&gt;</description>
      <category>Go lang</category>
      <category>air 환경변수</category>
      <category>go air</category>
      <category>go air 환경변수</category>
      <category>go 맥</category>
      <category>go 맥 air</category>
      <category>go 맥 air 환경변수</category>
      <category>go 환경변수</category>
      <category>gopath</category>
      <category>gopath 환경변수</category>
      <author>산타는 뽀미</author>
      <guid isPermaLink="true">https://bbomicoding.tistory.com/111</guid>
      <comments>https://bbomicoding.tistory.com/111#entry111comment</comments>
      <pubDate>Sun, 29 Dec 2024 13:05:09 +0900</pubDate>
    </item>
    <item>
      <title>Gopher 덕질하기</title>
      <link>https://bbomicoding.tistory.com/110</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;GOPHER_AVATARS.jpg&quot; data-origin-width=&quot;4120&quot; data-origin-height=&quot;721&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwJD83/btsLqYJ6ob8/9RSvqkg2yhjimtLuXq5YqK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwJD83/btsLqYJ6ob8/9RSvqkg2yhjimtLuXq5YqK/img.jpg&quot; data-alt=&quot;gopher 5마리&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwJD83/btsLqYJ6ob8/9RSvqkg2yhjimtLuXq5YqK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwJD83%2FbtsLqYJ6ob8%2F9RSvqkg2yhjimtLuXq5YqK%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;4120&quot; height=&quot;721&quot; data-filename=&quot;GOPHER_AVATARS.jpg&quot; data-origin-width=&quot;4120&quot; data-origin-height=&quot;721&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;gopher 5마리&lt;/figcaption&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;여지껏 JAVA, Typescript만 써봤던 나는 새로운 언어 'Go'에 대해 공부하는 중이다. 다른 언어들은 문법 배우고 클론 코딩 하면서 바로 사용법부터 익혔는데, Go는 다른 언어들과의 차이점 + Go 만의 특징 등 언어 그 자체를 공부하는 것부터 시작하고 있다. 자바나 타입스크립트는 바로 실무에 뛰어들면서 한거라 사용은 할 줄 알지만 언어적 특성에 대해 따로 공부하지는 않아서 별 생각 없었는데, 고는 언어부터 공부하니 느낌이 확 새롭다. 아주 매력적인 언어 같다. 나는.. 아마도.. 조금.. 고를 '덕질'하고 싶다....!!!&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-filename=&quot;BLUE_GOPHER.png&quot; data-origin-width=&quot;2578&quot; data-origin-height=&quot;2882&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zijCk/btsLtVxWbLe/7oYdXTTJAjZ8T4oxed6Urk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zijCk/btsLtVxWbLe/7oYdXTTJAjZ8T4oxed6Urk/img.png&quot; data-alt=&quot;까꿍&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zijCk/btsLtVxWbLe/7oYdXTTJAjZ8T4oxed6Urk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzijCk%2FbtsLtVxWbLe%2F7oYdXTTJAjZ8T4oxed6Urk%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;238&quot; height=&quot;266&quot; data-filename=&quot;BLUE_GOPHER.png&quot; data-origin-width=&quot;2578&quot; data-origin-height=&quot;2882&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;까꿍&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고가 좋은 점은 여러가지이지만, 사실 가장 큰 이유는 '마스코트가 귀여워서'다... 얘 이름은 Gopher 다. 프로그래밍 언어를 겨우 캐릭터 때문에 좋아하게 될줄이야.. 그치만 귀여움이라는 것은.. 아주 과학적인 것이다.. 귀여움이라는 거슨... 뇌의 어떤 부분을 자극시켜서 도파민이 나오게 한다구... (출처 : 뇌과학 전공했으나 전혀 기억 못하는 나ㅎㅎ)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.shinailbo.co.kr/news/articleView.html?idxno=1302378&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.shinailbo.co.kr/news/articleView.html?idxno=1302378&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1734876024257&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;카드업계, 이유 있는 '외모지상주의'&amp;hellip;&amp;quot;귀여워야 잘 팔려&amp;quot; - 신아일보&quot; data-og-description=&quot;카드사들이 라이언과 미니언즈, 펭수 등 인기 캐릭터를 활용한 감성 마케팅에 적극 나서고 있다. 영화와 방송, 메신저 등을 통해 연예인 못지 않은 인기를 누리는 캐릭터가 카드 소유욕을 자극&quot; data-og-host=&quot;www.shinailbo.co.kr&quot; data-og-source-url=&quot;https://www.shinailbo.co.kr/news/articleView.html?idxno=1302378&quot; data-og-url=&quot;http://www.shinailbo.co.kr/news/articleView.html?idxno=1302378&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bYDvRw/hyXOnjaRre/KgxdtABzEldhIaks6kfSg1/img.jpg?width=300&amp;amp;height=177&amp;amp;face=0_0_300_177,https://scrap.kakaocdn.net/dn/eDToy/hyXOlTbE4a/AbFr63XjzIU98fcZHW9xFk/img.jpg?width=960&amp;amp;height=379&amp;amp;face=85_145_185_254,https://scrap.kakaocdn.net/dn/cED3g8/hyXOnjaRsO/gq71s6wruUzv1Lk5TqYfP0/img.jpg?width=708&amp;amp;height=418&amp;amp;face=0_0_708_418&quot;&gt;&lt;a href=&quot;https://www.shinailbo.co.kr/news/articleView.html?idxno=1302378&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.shinailbo.co.kr/news/articleView.html?idxno=1302378&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bYDvRw/hyXOnjaRre/KgxdtABzEldhIaks6kfSg1/img.jpg?width=300&amp;amp;height=177&amp;amp;face=0_0_300_177,https://scrap.kakaocdn.net/dn/eDToy/hyXOlTbE4a/AbFr63XjzIU98fcZHW9xFk/img.jpg?width=960&amp;amp;height=379&amp;amp;face=85_145_185_254,https://scrap.kakaocdn.net/dn/cED3g8/hyXOnjaRsO/gq71s6wruUzv1Lk5TqYfP0/img.jpg?width=708&amp;amp;height=418&amp;amp;face=0_0_708_418');&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;카드업계, 이유 있는 '외모지상주의'&amp;hellip;&quot;귀여워야 잘 팔려&quot; - 신아일보&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;카드사들이 라이언과 미니언즈, 펭수 등 인기 캐릭터를 활용한 감성 마케팅에 적극 나서고 있다. 영화와 방송, 메신저 등을 통해 연예인 못지 않은 인기를 누리는 캐릭터가 카드 소유욕을 자극&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.shinailbo.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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-filename=&quot;KakaoTalk_Photo_2024-12-22-23-10-07.png&quot; data-origin-width=&quot;2073&quot; data-origin-height=&quot;2763&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5rCyO/btsLtJYJsHs/ut3fxcPTU0dR6Pg2axs1zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5rCyO/btsLtJYJsHs/ut3fxcPTU0dR6Pg2axs1zk/img.png&quot; data-alt=&quot;대장님이 주신 고퍼 뱃지 꺅&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5rCyO/btsLtJYJsHs/ut3fxcPTU0dR6Pg2axs1zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5rCyO%2FbtsLtJYJsHs%2Fut3fxcPTU0dR6Pg2axs1zk%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;170&quot; height=&quot;227&quot; data-filename=&quot;KakaoTalk_Photo_2024-12-22-23-10-07.png&quot; data-origin-width=&quot;2073&quot; data-origin-height=&quot;2763&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;대장님이 주신 고퍼 뱃지 꺅&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나의 사수님께서 고퍼 뱃지를 선물로 주셨는데,, 넘넘 행복했따,, 그리구 그때 직감적으로 깨달았다,, 내가 고퍼 덕질을 시작할거라고,,!! 그래서 앞으로 얘랑 관련된 모든 굿즈를 쓸어모으는 것이 나의 삶이 낙이 될것 같땅,,, 그래서 허겁지겁 인터넷에서 고퍼 관련 굿즈들을 찾아봤다. 근데 구글에 gopher 검색하면 흙 파는 쥐만 나오는것!! Go 는 언어 이름(Go)도 그렇고 마스코트 이름(Gopher)도 그렇고 왜이렇게 써방을 해놓은 건지?? 'golang' 또는 'golang gopher' 이렇게 다른 단어도 끼워서 검색해야 하잖슴!! (ꐦ&amp;deg;᷄▿&amp;deg;᷅) ㅂㄷㅂㄷ 암튼 얘 굿즈를 한국에서 공식적으로 파는 곳은 없고 그냥 고퍼콘 같은데서나 간간히 선물로 주는 정도인가 보다... 의지의 한국인인 나는 참을 수가 없다. 원하는 것은 스티커 제작을 해서라도 가져야지,,! 킬킬,, 암튼 내가 앞으로 고퍼 굿즈에 대해 찾게되는 모든 것은 이 포스팅에 올릴 예정이다. 혹시 누군가 나처럼 고를 덕질하는 사람이 있다면 므ㅓ,, 이거 보고 쫌 참고하시등가,,, 흥,,&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;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gopher Artwork - &lt;a href=&quot;https://github.com/ashleymcnamara/gophers?tab=readme-ov-file&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/ashleymcnamara/gophers?tab=readme-ov-file&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1734877685563&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;GitHub - ashleymcnamara/gophers: Gopher Artwork by Ashley McNamara&quot; data-og-description=&quot;Gopher Artwork by Ashley McNamara. Contribute to ashleymcnamara/gophers development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/ashleymcnamara/gophers?tab=readme-ov-file&quot; data-og-url=&quot;https://github.com/ashleymcnamara/gophers&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bqOKwA/hyXOncrL4H/7WBlvCqLVCoQaRpkXkcthk/img.png?width=1200&amp;amp;height=600&amp;amp;face=963_125_1015_183,https://scrap.kakaocdn.net/dn/cIFJov/hyXOjnyeap/fmtMFMTIqwAR7iEXViz0aK/img.png?width=1200&amp;amp;height=600&amp;amp;face=963_125_1015_183&quot;&gt;&lt;a href=&quot;https://github.com/ashleymcnamara/gophers?tab=readme-ov-file&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/ashleymcnamara/gophers?tab=readme-ov-file&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bqOKwA/hyXOncrL4H/7WBlvCqLVCoQaRpkXkcthk/img.png?width=1200&amp;amp;height=600&amp;amp;face=963_125_1015_183,https://scrap.kakaocdn.net/dn/cIFJov/hyXOjnyeap/fmtMFMTIqwAR7iEXViz0aK/img.png?width=1200&amp;amp;height=600&amp;amp;face=963_125_1015_183');&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;GitHub - ashleymcnamara/gophers: Gopher Artwork by Ashley McNamara&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Gopher Artwork by Ashley McNamara. Contribute to ashleymcnamara/gophers 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;귀여운 고퍼 png 파일을 얻을 수 있음.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-12-22 오후 11.42.58.png&quot; data-origin-width=&quot;908&quot; data-origin-height=&quot;742&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqw4uX/btsLtdsdG1L/IPhjUz9Qpu2JCZxmdJUdGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqw4uX/btsLtdsdG1L/IPhjUz9Qpu2JCZxmdJUdGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqw4uX/btsLtdsdG1L/IPhjUz9Qpu2JCZxmdJUdGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcqw4uX%2FbtsLtdsdG1L%2FIPhjUz9Qpu2JCZxmdJUdGK%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;345&quot; height=&quot;282&quot; data-filename=&quot;스크린샷 2024-12-22 오후 11.42.58.png&quot; data-origin-width=&quot;908&quot; data-origin-height=&quot;742&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초록색 '&amp;lt;&amp;gt;Code' 버튼 누르고 밑에 Download ZIP 하면 됨.&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;Free gophers - &lt;a href=&quot;https://github.com/egonelbre/gophers?tab=readme-ov-file&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/egonelbre/gophers?tab=readme-ov-file&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1734877756093&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;GitHub - egonelbre/gophers: Free gophers&quot; data-og-description=&quot;Free gophers. Contribute to egonelbre/gophers development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/egonelbre/gophers?tab=readme-ov-file&quot; data-og-url=&quot;https://github.com/egonelbre/gophers&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bL7am8/hyXOk04xDO/4PoLKP3qtMb7zYjerAXIUk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/CPwKw/hyXSrEdeOs/ATMJ6pPwc3lOu4jI1CKEk1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/egonelbre/gophers?tab=readme-ov-file&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/egonelbre/gophers?tab=readme-ov-file&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bL7am8/hyXOk04xDO/4PoLKP3qtMb7zYjerAXIUk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/CPwKw/hyXSrEdeOs/ATMJ6pPwc3lOu4jI1CKEk1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;GitHub - egonelbre/gophers: Free gophers&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Free gophers. Contribute to egonelbre/gophers 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;여기두 고퍼 사진 많음. 위에꺼랑 느낌이 좀 다른데 난 위에꺼가 더 좋음.&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;gopher 인형 - &lt;a href=&quot;https://your.merch.google/golang-gopher-plushie-blue.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://your.merch.google/golang-gopher-plushie-blue.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1734877794521&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;product&quot; data-og-title=&quot;Golang Gopher Plushie - Blue&quot; data-og-description=&quot; &quot; data-og-host=&quot;your.merch.google&quot; data-og-source-url=&quot;https://your.merch.google/golang-gopher-plushie-blue.html&quot; data-og-url=&quot;https://your.merch.google/golang-gopher-plushie-blue.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/crk9wt/hyXObXl1e0/7oVXZxCRjuKqHyrxlsSVP1/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000,https://scrap.kakaocdn.net/dn/gF6bj/hyXOcWfMOH/wKZzZ8NIQSGD5bdfurJcN0/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000,https://scrap.kakaocdn.net/dn/L0NtZ/hyXSAOG7KT/h84BJewK0NFgUBSIEO6EOk/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000&quot;&gt;&lt;a href=&quot;https://your.merch.google/golang-gopher-plushie-blue.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://your.merch.google/golang-gopher-plushie-blue.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/crk9wt/hyXObXl1e0/7oVXZxCRjuKqHyrxlsSVP1/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000,https://scrap.kakaocdn.net/dn/gF6bj/hyXOcWfMOH/wKZzZ8NIQSGD5bdfurJcN0/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000,https://scrap.kakaocdn.net/dn/L0NtZ/hyXSAOG7KT/h84BJewK0NFgUBSIEO6EOk/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000');&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;Golang Gopher Plushie - Blue&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;your.merch.google&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;25달러 (약 3만 6천원 쯤) 인데 해외 배송비까지하면 겁나 비쌈.&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;Teepublic - &lt;a href=&quot;https://www.teepublic.com/t-shirts?query=golang+gopher&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.teepublic.com/t-shirts?query=golang+gopher&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1734877942202&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Golang Gopher T-Shirts for Sale | TeePublic&quot; data-og-description=&quot;Main Tag: &amp;nbsp; Gopher T-Shirt Description: Prompt 10 for Inktober 2019 challenge ft. the go lang gopher. Design inspired by Renee French's character. Tags: blue gopher, go, go lang, go lang gopher, golang Graphic tees. Available in Plus Size T-Shirt&quot; data-og-host=&quot;www.teepublic.com&quot; data-og-source-url=&quot;https://www.teepublic.com/t-shirts?query=golang+gopher&quot; data-og-url=&quot;https://www.teepublic.com/t-shirts?query=golang+gopher&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/CMfVR/hyXOi93bZu/QhyjvNuWkDsWhXklPtZ231/img.jpg?width=1200&amp;amp;height=628&amp;amp;face=0_0_1200_628&quot;&gt;&lt;a href=&quot;https://www.teepublic.com/t-shirts?query=golang+gopher&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.teepublic.com/t-shirts?query=golang+gopher&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/CMfVR/hyXOi93bZu/QhyjvNuWkDsWhXklPtZ231/img.jpg?width=1200&amp;amp;height=628&amp;amp;face=0_0_1200_628');&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;Golang Gopher T-Shirts for Sale | TeePublic&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Main Tag: &amp;nbsp; Gopher T-Shirt Description: Prompt 10 for Inktober 2019 challenge ft. the go lang gopher. Design inspired by Renee French's character. Tags: blue gopher, go, go lang, go lang gopher, golang Graphic tees. Available in Plus Size T-Shirt&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.teepublic.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 'golang gopher' 라고 검색하면 행복해질 수 있음. 각종 깜찍한 고퍼 캐릭터가 그려진 스티커 + 머그컵+ 반팔티 + 후드티 + 담요 등 다양한 굿즈를 살 수 있음. 난 원하는대로 담았다가 해외배송비까지 합쳐 12만원(...?)이 되버려서 일단 보류함. 이건 돈 많이 벌면;; 나중에;;ㅎㅎ&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;Etsy - &lt;a href=&quot;https://www.etsy.com/search?q=golang%20gopher&amp;amp;ref=search_bar&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.etsy.com/search?q=golang%20gopher&amp;amp;ref=search_bar&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서도 'golang gopher' 검색하면 행복해짐. 여기엔 인형이랑 머그컵, 키보드(낱개)가 있음.&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;AliExpress - &lt;a href=&quot;https://ko.aliexpress.com/w/wholesale-golang-gopher.html?spm=a2g0o.best.search.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://ko.aliexpress.com/w/wholesale-golang-gopher.html?spm=a2g0o.best.search.0&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기두 마찬가지!!! 'golang gopher' 검색하면 티셔츠 겁나 많이 나옴. 근데 teepublic에 있던 캐릭터랑 겹치던데 저작권이 어디 있는지는 모르겠음..&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;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론 : 귀여운게 최고!! gopher 흥해라!!!&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;</description>
      <category>Go lang</category>
      <category>go</category>
      <category>Go Lang</category>
      <category>go 마스코트</category>
      <category>go 캐릭터</category>
      <category>golang</category>
      <category>golang gopher</category>
      <category>gopher</category>
      <category>고퍼</category>
      <category>골랑 고퍼</category>
      <author>산타는 뽀미</author>
      <guid isPermaLink="true">https://bbomicoding.tistory.com/110</guid>
      <comments>https://bbomicoding.tistory.com/110#entry110comment</comments>
      <pubDate>Sun, 22 Dec 2024 23:44:46 +0900</pubDate>
    </item>
    <item>
      <title>API 설계방식 (restful API / gRPC / graphQL) 비교</title>
      <link>https://bbomicoding.tistory.com/109</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;GOPHER_DAD.png&quot; data-origin-width=&quot;2502&quot; data-origin-height=&quot;2503&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bC53Md/btsLqAWYHkd/CTTFk3FK16uqebBKW9glWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bC53Md/btsLqAWYHkd/CTTFk3FK16uqebBKW9glWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bC53Md/btsLqAWYHkd/CTTFk3FK16uqebBKW9glWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbC53Md%2FbtsLqAWYHkd%2FCTTFk3FK16uqebBKW9glWk%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;583&quot; height=&quot;583&quot; data-filename=&quot;GOPHER_DAD.png&quot; data-origin-width=&quot;2502&quot; data-origin-height=&quot;2503&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;style3&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;span style=&quot;color: #000000;&quot;&gt;Restful API VS gRPC VS graphQL 차이점&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;API 설계(클라이언트 - 서버 통신)에 사용되는 메커니즘.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RestFul API&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트가 서버에 작업(POST, GET, PUT, DELETE)을 요청함. http(웹의 표준 통신 프로토콜)을 기반으로 함. 요청에 들어가는 endpoint에 추가 파라미터도 포함될 수 있음. 서버가 응답하면 전체 리소스를 클라이언트에 반환. 클라이언트는 서버에게 단일 REST API 요청을 전송하고, 서버도 단일 응답을 보냄. 클라이언트에서는 작업을 계속하기 전에 서버가 응답할 때까지 기다려야함. 데이터 교환 형식은 일반적으로 &lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;JSON&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;임(XML, HTML도 가능함). JSON 단점 : 직렬화(serialize) 해야하고 프로그래밍 언어로 번역해야됨.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;gRPC (Remote Procedure Calls)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RPC가 서로 다른 프로그램끼리 통신하도록 하는 프로토콜이고, Google에서 RPC 프레임워크를 개발한게 gRPC임. 클라이언트가 서버의 특정 함수를 직접 또는 간접적으로 호출함. 클라이언트가 여러 개의 API 요청을 서버에 보낼 수 있고 서버에서 여러 개의 응답이 발생할 수 있음(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;양방향 스트리밍&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;). 1:1, 1:N, N:1, N:N 모두 가능함. 데이터 교환 형식은 기본적으로 &lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Protobuf(Protocol Buffer)&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;임. (JSON도 가능함) 데이터 구조를 &lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;바이너리&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;u&gt; 형식&lt;/u&gt;으로 serialize 하고 프로그래밍 언어로 deserialize함. 그래서 JSON보다 더 가볍고 빠름. Protobuf 형식은 사람이 읽을 수 없음. MSA에 가장 적합한 기술임. Protobuf의 IDL(Interface Definition Language)만 정의하면 클라이언트와 서버쪽 소스코드가 자동으로 생성됨. 우리 서비스에서는 백&amp;lt;-&amp;gt;백 또는 백 &amp;lt;-&amp;gt;AI 이런 식으로 통신할 일이 많음. 개중에는 PDF나 이미지 자료를 통신해야 할 때가 있는데 바이너리 데이터를 RestFul API에서 쓸 데이터인 JSON으로 바꾸는 과정에서 base64 인코딩을 할 때가 있는데 그러면 용량이 매우 커짐. 그래서 바이너리 데이터로 통신하는 gRPC를 도입할 필요가 있음.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;GraphQL&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트가 서버에 어떤어떤 데이터 달라고 쿼리 날리는 것. 프론트 쪽에서 API의 request/response 형식에 의존하지 않고 &lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트에서 필요한대로 쿼리를 작성&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하므로 원하는 데이터만 가져올 수 있음. 원래는 백이 프론트에게 API 정의서 넘겨주면 프론트가 그거 보고 작업함. 그럼 프론트가 뭐 필요하면 백한테 이거이거 넘겨주는 API 넘겨달라고 하면 백은 바빠서 잘 안 해주거나 or 데이터 여러개 넘겨주는 API 써서 그중에 필요한 것만 뽑아쓰라고 함. 근데 그러면 불필요한 정보를 보내느라 통신이 느려질 수 있고, 개발도 느려짐(백이 뭔가를 해줘야 프론트가 시작할 수 있는 일도 생겨서) 그래서 나온 방법이 graphQL임. 이건 프론트가 필요한 데이터를 달라고 직접 쿼리를 줄 수 있음! 그래서 불필요한 정보 통신 안 하므로 통신이 빨라져서 사용자 화면이 빨라지고 개발도 빨라질 수 있음. 물론 사전에 약속을 잘 해야하고, 백에서 공통화를 많이 해놨어야 하고 프론트도 DB랑 리소스에 대해 알아야 쿼리를 잘 작성할 수 있을 것임. 그니깐 개발 시작 전에 약속할 것이 많음!! 그래서 프론트에는 Restful API와 graphQL을 필요한 곳에 적절히 넣어 사용할 예정임!!&lt;/span&gt;&lt;/p&gt;</description>
      <category>Go lang</category>
      <category>graphql</category>
      <category>gRPC</category>
      <category>RESTful API</category>
      <author>산타는 뽀미</author>
      <guid isPermaLink="true">https://bbomicoding.tistory.com/109</guid>
      <comments>https://bbomicoding.tistory.com/109#entry109comment</comments>
      <pubDate>Fri, 20 Dec 2024 23:33:26 +0900</pubDate>
    </item>
    <item>
      <title>클라우드와 VM 이해하기</title>
      <link>https://bbomicoding.tistory.com/108</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Azure_Gophers.png&quot; data-origin-width=&quot;2734&quot; data-origin-height=&quot;2026&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EjvNc/btsLqzKuEkg/kxQ9KTFxDtLbrJXVfrAJ3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EjvNc/btsLqzKuEkg/kxQ9KTFxDtLbrJXVfrAJ3K/img.png&quot; data-alt=&quot;Azure는 GCP 경쟁 제품 아닌가?? 어케 이런 그림이 존재하지??;;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EjvNc/btsLqzKuEkg/kxQ9KTFxDtLbrJXVfrAJ3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEjvNc%2FbtsLqzKuEkg%2FkxQ9KTFxDtLbrJXVfrAJ3K%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;593&quot; height=&quot;439&quot; data-filename=&quot;Azure_Gophers.png&quot; data-origin-width=&quot;2734&quot; data-origin-height=&quot;2026&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Azure는 GCP 경쟁 제품 아닌가?? 어케 이런 그림이 존재하지??;;&lt;/figcaption&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;span style=&quot;color: #000000;&quot;&gt;회사에서 이번에 클라우드로 갈아탔다. 비용을 줄이기 위해 AWS가 아닌 GCP를 선택했다. 클라우드는 매번 많이 들어왔고 개념도 어렴풋이는 알고 있었지만 누가 물어보면 설명 못 할것 같아서 이번 기회에 공부해버리기~~!!&lt;/span&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;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;GCP(Google Cloud Platform)&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라우드 컴퓨팅 서비스. AWS, Azure 등 클라우드 산업에서 하는 일이랑 비슷함. 구글의 지원 덕분에 빠르고 강력하게 성장중.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아마존-AWS : 클라우드 점유율 1위&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네이버 클라우드 : 국내 1위. 국내 공공기관 서비스 하려면 여기서 많이 함.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MS-Azure : 클라우드 2위. 게임업체에서 많이 사용&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Google-GCP : 클라우드 3위. 빅쿼리 등 많은 데이터 처리에 강점. 돈이 덜 나와서 가장 쉽게 접근 가능함.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;외에도 카카오 클라우드, 가비아 클라우드, Oracle 클라우드 등등이 존재함. 클라우드 자격증이라는 것도 존재함.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라우드를 이용해야 하는 이유 : &amp;lsquo;pay-as-you-go(니가 쓴만큼만 내라)&amp;rsquo;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;on-Premise&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;란? : 전산실(데이터 센터)를 자체적으로 보유해서 실물 서버로 관리하는 것.&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;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ep1JqH/btsLs932VGV/zCiK1RtzMGyCwTOCA0xRx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ep1JqH/btsLs932VGV/zCiK1RtzMGyCwTOCA0xRx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ep1JqH/btsLs932VGV/zCiK1RtzMGyCwTOCA0xRx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fep1JqH%2FbtsLs932VGV%2FzCiK1RtzMGyCwTOCA0xRx1%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;230&quot; height=&quot;230&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &amp;rarr; 영화에서 많이 봤던 이런 서버실.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서버는 리눅스 깔린 컴퓨터인데, 데이터 센터에 서버 모아놓고 사용할때, 만약 접속자 수만큼 서버를 쓴다면?? 항상이 아니고 가끔 열릴때는 접속자수가 몇십배 많아지고, 평소에는 적으면 &amp;rarr; 서버를 많이 썼다가 조금 썼다가 할 수도 없고,, 많이 몰리는 때를 예측할 수도 없어서 애매함,,,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그래서 나온게 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라우드&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;!!!! 클라우드를 사용하면 &amp;rarr; 접속자수당 서버를 쓰는게 아니라 초당 쓸 수 있음. 그러면 VM 사용해서 알아서 서버를 늘려줌!! 우리 프로그램은 국내용 프로그램이므로 낮과 밤 시간에 따라 접속자수가 아예 없을 때도 있는데, 그럴 때는 조금만 사용하고 많을때는 많이 사용해서 돈이 훨씬 절약될 수 있음!! 즉 자원 과잉과 부족을 효과적으로 해결할 수 있는 것임. AWS가 세계 짱이라 많이 비싸고 GCP는 훨씬 쌈. AWS에 비해 GCP는 분당 가격으로 산정함. (AWS는 시간당 가격) 그래서 우리도 GCP를 쓰려고 하는 것.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;VM (Virtual Machine)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하드웨어가 존재하는 물리적 컴퓨터와 다름. CPU, 메모리 등이 있고 인터넷에 연결 가능하지만 코드로만 존재함. 실제 물리적 서버가 있고, 그 서버에서 CPU, 메모리, 스토리지를 빌려와서 가상 버전의 컴퓨터를 만드는 것임. VM(게스트)는 물리적 머신인 서버(호스트)의 나머지 부분과 독립적으로 존재함. 하나의 물리적 서버에서 여러 VM을 실행할 수 있어서 사용자가 늘어난다고 해서 새 서버를 구매할 필요가 없음. 자원을 효율적으로 사용할 수 있고 비용도 절감할 수 있음.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Go lang</category>
      <category>AWS</category>
      <category>GCP</category>
      <category>On-premise</category>
      <category>virtual machine</category>
      <category>vm</category>
      <category>온프레미스</category>
      <category>클라우드</category>
      <author>산타는 뽀미</author>
      <guid isPermaLink="true">https://bbomicoding.tistory.com/108</guid>
      <comments>https://bbomicoding.tistory.com/108#entry108comment</comments>
      <pubDate>Fri, 20 Dec 2024 23:29:31 +0900</pubDate>
    </item>
    <item>
      <title>Go 프레임워크 + 테스트코드 라이브러리</title>
      <link>https://bbomicoding.tistory.com/107</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;UK GOPHER.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buzrjw/btsLsN8rFGg/2HGKAnfEToWdZNwb1BZ1x0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buzrjw/btsLsN8rFGg/2HGKAnfEToWdZNwb1BZ1x0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buzrjw/btsLsN8rFGg/2HGKAnfEToWdZNwb1BZ1x0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbuzrjw%2FbtsLsN8rFGg%2F2HGKAnfEToWdZNwb1BZ1x0%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;522&quot; height=&quot;522&quot; data-filename=&quot;UK GOPHER.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; 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;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프레임워크&lt;/span&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #434343;&quot;&gt;Gin-gonic/gin&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;go와 웹 프레임워크 중 가장 오랫동안 개발되어 왔음. 다른 프레임워크보다는 조금 무겁다고 함. Web Application과 Microservices를 만드는데 사용되는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;고성능 Framework&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;임. 내장 웹서버, 자동 라우팅, 요청 및 응답을 처리하기 위한 도구, 기능 추가를 위한 미들웨어, 내장 Logger, Template 지원 등 개발을 좀더 빠르고 쉽게 할 수 있도록 많은 기능을 제공함.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Go는 쉽게 HTTP 서버를 만들 수 있는 net/http 라이브러리가 내장되어 있지만, 좀 별로임. 그리고 정규표현식이나 패턴을 기준으로 요청 처리하는 라이브러리는 내장되어 있지 않음. 그래서 Gin이 Boilerplate Code를 줄일 수 있게 다양한 함수들을 포함하고 있음.&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;라우팅(Routing)&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원래 프레임워크가 제공하는 기능 중 가장 핵심이 라우팅임. 웹페이지나 API endpoint는 URL을 통해 접근할 수 있는데, 프레임워크는 이러한 URL을 통해 요청한 경로를 처리함. 만약 URL이 http://www.example.com/some/random/route이면 경로는 /some/random/route임. Gin은 그룹화된 URL과 패턴을 처리할 수 있음. /u/login에서 로그인 처리, /u/register에서 회원가입 처리, /article/view/:article_id에서 게시글 처리. :article_id 는 동적 경로. 이곳에는 아무 값이나 포함될 수 있고 Gin은 이 값을 Route Handler에서 사용할 수 있게 처리할 것임.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #434343;&quot;&gt;GORM&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Golang ORM(Object Relation Mapping).&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SQL이 아닌 Go언어로 DB에 접근&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;할 수 있다. 지정한 struct와 field의 이름으로 테이블을 자동 생성할 수 있다. 즉 Go struct만 관리하면 DB 스키마 관리를 할 수 있고 칼럼의 특성 및 조건까지 한번에 확인할 수 있는 것! gorm을 활용하면 에러 관리를 통합적으로 할 수 있음. struct의 메소드를 통해 데이터 접근 코드를 재사용하고, 비즈니스 로직과 db 로직을 명확히 분리할 수 있음. 또한 MySQL, PostgreSQL, SQLITE, SQL Server 등 다양한 dbms를 지원하여, DB driver만 변경하면 코드의 큰 변경 없이 쉽게 옮길 수 있음. SQL문을 쓸때 users의 id, name, age를 불러오도록 순서를 맞춰 SELECT문을 서야하는데, gorm을 사용하면 .Find(&amp;amp;user) 하나로 쓸 수 있음. gorm이 지원하는 logger를 활용하면 DB transaction마다 로그를 사용하여 디버깅 가능&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 코드&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Go에는 기본 패키지 testing 을 이용하여 테스트 코드 작성 가능. 좀 더 다양한 기능을 원한다면 testify 라이브러리 이용 가능. 라이브러리 이용시 assertions나 mocking을 이용하여 생산성 높일 수 있음.&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #434343;&quot;&gt;testing (기본 패키지)&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1734704656321&quot; class=&quot;go&quot; data-ke-language=&quot;go&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import &quot;testing&quot;

func Add(a, b int) int {
    return a + b
}

func TestAdd(t *testing.T) {
    result := Add(2, 3)
    if result != 5 {
        t.Errorf(&quot;Add(2, 3) = %d; want 5&quot;, result)
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위와 같이 기본 패키지 이용해도 unit테스트 또는 벤치마크 테스트(&lt;/span&gt;&lt;span style=&quot;color: #0f0f0f;&quot;&gt;컴퓨터, 시스템, 소프트웨어, 알고리즘 또는 프로세스의 성능을 측정하기 위한 일련의 테스트&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;) 작성 가능함. go test 명령어를 입력하여 테스트 돌릴 수 있음.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;작거나 단순한 프로젝트일때는 기본 테스트 기능만으로 충분함. Go는 &amp;ldquo;less is more&amp;rdquo; 철학을 지양하므로 외부 의존성을 최소화하려는 경우 기본 패키지만 사용하여 경량화된 코드를 유지한다고 함.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #434343;&quot;&gt;testify (외부 라이브러리)&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1734704666790&quot; class=&quot;go&quot; data-ke-language=&quot;go&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import (
    &quot;testing&quot;
    &quot;github.com/stretchr/testify/assert&quot;
)

func TestSumWithTestify(t *testing.T) {
    result := 1 + 2
    assert.Equal(t, 3, result, &quot;they should be equal&quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위와 같이 testify 라이브러리를 이용할 수도 있음. assert나 require를 사용해 직관적으로 조건을 검증할 수 있고, mock 패키지를 사용해 종속성을 대체할 수 있음. 기본 testing 패키지보다 에러 메시지가 직관적임. 대규모 프로젝트 개발시 이 라이브러리를 사용하면 더 나은 가독성과 생산성을 기대할 수 있음.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Go lang</category>
      <author>산타는 뽀미</author>
      <guid isPermaLink="true">https://bbomicoding.tistory.com/107</guid>
      <comments>https://bbomicoding.tistory.com/107#entry107comment</comments>
      <pubDate>Fri, 20 Dec 2024 23:24:36 +0900</pubDate>
    </item>
    <item>
      <title>Go 고루틴과 채널</title>
      <link>https://bbomicoding.tistory.com/106</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #434343;&quot;&gt;멀티쓰레드&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실행 흐름이 여러개인 것. 하나의 CPU가 여러 thread를 빠르게 번갈아가며 실행 -&amp;gt; 마치 동시에 여러 작업을 실행하는 것처럼 보임.&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;1266&quot; data-origin-height=&quot;430&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k0Tml/btsLqRDP4Gl/K550rCkufO1k9yJfrQUSd1/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k0Tml/btsLqRDP4Gl/K550rCkufO1k9yJfrQUSd1/tfile.dat&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k0Tml/btsLqRDP4Gl/K550rCkufO1k9yJfrQUSd1/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk0Tml%2FbtsLqRDP4Gl%2FK550rCkufO1k9yJfrQUSd1%2Ftfile.dat&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;533&quot; height=&quot;181&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;430&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그런데 쓰레드를 전환할때 비용이 발생하고, 이를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨텍스트 스위치&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;라고 함. 멀티쓰레드는 여러 작업을 병렬적으로 처리할 수 있어 효율적이지만, 쓰레드가 CPU 갯수를 넘어서서 지나치게 많아지면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오히려 성능 문제&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 일으킬 수 있음. 따라서 멀티쓰레드를 활용할 때는 쓰레드가 CPU 갯수를 넘지 않도록 주의해서 사용해야 함.&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #434343;&quot;&gt;고루틴&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;고루틴은 OS의 쓰레드를 &amp;lsquo;이용&amp;rsquo;하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;경량 쓰레드&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;임. (OS의 쓰레드와는 다른 개념!)&amp;nbsp;&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;742&quot; data-origin-height=&quot;522&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CqjJi/btsLrycFmkU/ayQtYpJ1InEaO1DVZ6nm01/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CqjJi/btsLrycFmkU/ayQtYpJ1InEaO1DVZ6nm01/tfile.dat&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CqjJi/btsLrycFmkU/ayQtYpJ1InEaO1DVZ6nm01/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCqjJi%2FbtsLrycFmkU%2FayQtYpJ1InEaO1DVZ6nm01%2Ftfile.dat&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;467&quot; height=&quot;329&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;522&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;코어 - OS 스레드 - 고루틴 이렇게 연결해서 명령을 실행함. 고루틴 끝나고 제거되면 OS 스레드가 놀게됨. 그럼 대기하고 있던 고루틴이 그 빈자리로 가서 실행됨. 고루틴 중 하나가 네트워크 상태로 들어가면 대기하던 고루틴과 자리 교체됨. 이런식으로 스케쥴링 하며 효율적으로 관리됨.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;물론 고루틴에서도 컨텍스트 스위칭 비용이 들기는 하지만 멀티쓰레드에서보다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스위칭 비용 부담이 훨씬 덜함&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;. 왜냐하면 고루틴의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스택 사이즈가 적기 때문&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;! 그래서 멀티쓰레드에 비해 고루틴은 자유롭게 많이 쓸 수 있음. (&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스택 메모리&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;란?? 함수 호출 시에 함수에 자동으로 할당되고 함수가 끝나면 자동으로 정리되는 메모리)&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;1280&quot; data-origin-height=&quot;765&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6WoET/btsLsq6gg61/cW91VLDuHe8spOC3vQ58q0/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6WoET/btsLsq6gg61/cW91VLDuHe8spOC3vQ58q0/tfile.dat&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6WoET/btsLsq6gg61/cW91VLDuHe8spOC3vQ58q0/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6WoET%2FbtsLsq6gg61%2FcW91VLDuHe8spOC3vQ58q0%2Ftfile.dat&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;418&quot; height=&quot;250&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;765&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;main()함수도 고루틴을 가지고 있어서 고로 만들어진 프로그램은 무조건 하나 이상의 고루틴을 가질 수밖에 없음!! 고루틴을 사용하면 동시성 작업을 단순하고 가볍게 처리할 수 있음.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;수천 개의 작업을 병렬로&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;실행&lt;/u&gt;하기 적합함.&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre id=&quot;code_1734704492556&quot; class=&quot;go&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;go&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import (
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;fmt&quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;time&quot;
)

func say(s string) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for i := 0; i &amp;lt; 5; i++ {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time.Sleep(100 * time.Millisecond)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fmt.Println(s)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}

func main() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;go say(&quot;② 다른 루틴&quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;say(&quot;① 이 루틴&quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;함수 앞에 고만 붙이면 비동기로 작동해서 C#에서 멀티쓰레드 or 비동기를 구현하는 것에 비해 간단함. 함수 실행하면 이 루틴과 다른 루틴이 번갈아가면서 나옴(랜덤으로) 근데 go say go say 두번 하면 아무것도 출력이 안되는데, 왜일까?? 바로바로 go 쓰면 비동기라 바로 다음 줄로 넘어가는데 고만 있으면 두개 실행하기도 전에 main 함수 실행이 끝나서 미처 실행할 타이밍이 안되어서! 그래서 맨 아래 좀 한참 걸리는 함수를 써줘야만 go 함수 두번 실행할 시간이 우연히 되면 출력됨!!! 근데 이건 우연이므로 Sync 패키지에서 제공하는 대기 그룹의 구조체와 함수를 사용하는 것이 일반적.&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;대기 그룹&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;wg.Add() : 대기그룹에 고루틴 추가.&lt;br /&gt;wg.Done() : 대기그룹에 고루틴 뺌&lt;br /&gt;wg.Wait() : 대기그룹의 모든 고루틴이 끝날 때까지 기다림.&lt;/blockquote&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre id=&quot;code_1734704492557&quot; class=&quot;go&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;go&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package main

import (
&quot;fmt&quot;
&quot;runtime&quot;
&quot;sync&quot;
)

func main() {
runtime.GOMAXPROCS(runtime.NumCPU()) // 모든 CPU 사용

wg := new(sync.WaitGroup) // 대기 그룹 생성

for i := 0; i &amp;lt; 10; i++ {
wg.Add(1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 반복할 때마다 wg.Add 함수로 1씩 추가
go func(n int) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// 고루틴 10개 생성
fmt.Println(n)
wg.Done()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 고루틴이 끝났다는 것을 알려줌
}(i)
}

wg.Wait() // 모든 고루틴이 끝날 때까지 기다림
fmt.Println(&quot;the end&quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #434343;&quot;&gt;뮤텍스와 데드락&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서로 다른 고루틴이 힙메모리의 동일한 메모리 자원에 접근할 시 오류&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;발생할 수 있음!! (&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;힙 메모리&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;란? 프로그래머가 수동으로 할당하는 메모리. 수동으로 할당하기 때문에 수동으로 해제해야함. 안 그러면 메모리 낭비됨. 힙은 접근과 해제가 스택에 비해 느림.)&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;뮤텍스&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 해결하기 위해 뮤텍스(Mutual exclusion)의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;락(Lock)&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;을 사용할 수 있음. 락을 건 고루틴만 메모리 자원에 접근할 수 있고 락을 풀면 그제서야 다른 고루틴이 메모리에 접근할 수 있는 방식임.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;한번에 한 고루틴만&lt;/u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메모리 자원에 접근 가능.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;근데 사실 이럴거면 동시성 프로그래밍을 하는 의미가 없음. 그리고 락 거는것 자체도 시간이 걸려서 과도한 락킹은 성능 저하를 일으킬 수 있음. 또한 데드락(Deadlock)을 일으킬 수도 있음.&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;데드락&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;데드락이란 : 두개 이상의 작업이 서로의 작업이 끝나기만을 기다리는 상태 (&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;교착상태&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사다리에서 올라가는 사람과 내려가는 사람이 마주쳐 둘다 못 움직이는 상태같은 것. 데드락이 일어나면 프로그램이 완전히 멈춰버리기도 함. 조건문 잘못 처리했을때 순서 잘못 물려서 데드락 일어나는 경우 많음. 근데 고루틴 100개중에 2개는 데드락이고 98개 멀쩡히 돌아가면 &amp;rarr; 프로그램이 멈추지는 알아서 데드락 상태라는걸 알 수가 없고 디버깅도 힘듬. 그래서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;뮤텍스는 매우 조심히&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;사용해야함!! 자원 보호를 위한 심플하고 좋은 방법이긴한데&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;적은 범위 내에서만&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;사용해야함.&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #434343;&quot;&gt;채널&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;채널 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;고루틴간 메세지 큐&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(FIFO)임.&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;1179&quot; data-origin-height=&quot;473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buQBWY/btsLsqFbQWo/QgpQdA6eBdbV6YC8KDnBD1/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buQBWY/btsLsqFbQWo/QgpQdA6eBdbV6YC8KDnBD1/tfile.dat&quot; data-alt=&quot;Go 채널&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buQBWY/btsLsqFbQWo/QgpQdA6eBdbV6YC8KDnBD1/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuQBWY%2FbtsLsqFbQWo%2FQgpQdA6eBdbV6YC8KDnBD1%2Ftfile.dat&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;579&quot; height=&quot;288&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;473&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Go 채널&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;thread-safe한 queue임!! 멀티쓰레드 환경에서 락을 안 잡아도 쓸 수 있음. make()로 채널 인스턴스 생성.(마치 맵처럼) &amp;lsquo;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;채널 &amp;lt;- 데이터&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rsquo; :&amp;nbsp; 이게&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;push&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;임. 데이터를 채널에 넣겠다는 소리이고, &amp;lsquo;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;변수 := &amp;lt;- 채널&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rsquo; : 이건&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;pop&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;임. 채널에서 데이터를 빼서 변수에 담겠다는 소리임!!!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre id=&quot;code_1734704492560&quot; class=&quot;go&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;go&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package main

import &quot;fmt&quot;

func main() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// 채널 생성
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c := make(chan int)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// 데이터를 보내는 고루틴
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;go func() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c &amp;lt;- 42 // 채널로 값 42 전송
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}()

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// 데이터를 수신
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value := &amp;lt;-c // 채널에서 값 수신
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fmt.Println(value) // 출력: 42
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여기서 value에 값이 들어와야 그 다음이 실행됨!!!&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;채널에 데이터를 보내면 받을 때까지 기다림&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;. 이 특징을 활용하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;고루틴이 끝날 때까지 기다리는 기능&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;u&gt;을 구현&lt;/u&gt;할 수 있음.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;for n := range ch 이렇게 쓰면 채널에 데이터 들어올때까지 기다렸다가 들어오면 for문 실행되게 할 수 있음!!!&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;채널로 Producer / Consumer 패턴 구현하여 역할을 나누어 컨베이어 벨트처럼 하나의 고루틴이 하나의 작업만 하도록 할 수 있음. 고루틴과 채널을 연결시킨 컴파운드 패턴을 활용하는 방법은 무궁무진함!! 계속 만들어보고 써보고 해야함.&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;채널 버퍼링&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;채널 길이가 0이면? : 마치 택배 보관함 없을때는 받을 사람이 올때까지 택배차가 기다리는 것처럼 채널도 받을 고루틴을 기다림. 그냥 채널 만들기만 하고(기본 길이 0) 채널에 값 집어넣고 받는 애가 없으면 계속 기다리느라 다음 코드가 실행이 안될 수도 있음. 이런 채널을 Unbuffered channel이라고 하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;채널에 데이터를 보냈는데 수신자가 없는 경우 deadlock! 에러&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;발생&lt;/u&gt;함. 근데 채널 길이 지정해주면 택배보관함에 택배를 놓고 택배차는 떠날 수 있음. 그래서 받는 고루틴이 없어도 다음 코드가 실행될 수 있음. (근데 채널이 가득 차면 또 똑같은 상황 발생)&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;좀비 고루틴(고루틴 Leak)&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;for문으로 채널에 데이터가 들어오길 기다렸다가 작업을 수행하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;반복문 짤때, 채널을 닫아주지 않으면 고루틴이 무한 대기&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 할 수 있음.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;close(채널)&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;u&gt;로 채널 닫아주며&lt;/u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;더이상 보낼 데이터가 없음을 알려야함. 데드락 발생할 경우 어디서 채널 안 닫혔는지 찾기 힘드니까 for문 짤때 꼭 채널 close 신경쓰기!! val, ok := &amp;lt;- ch로 채널이 닫혔는지 확인할 수도 있음.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Go lang</category>
      <category>go</category>
      <category>go channel</category>
      <category>go 대기그룹</category>
      <category>goroutine</category>
      <category>고루틴</category>
      <category>고루틴 채널</category>
      <category>데드락</category>
      <category>뮤텍스</category>
      <category>좀비고루틴</category>
      <category>채널</category>
      <author>산타는 뽀미</author>
      <guid isPermaLink="true">https://bbomicoding.tistory.com/106</guid>
      <comments>https://bbomicoding.tistory.com/106#entry106comment</comments>
      <pubDate>Fri, 20 Dec 2024 23:22:45 +0900</pubDate>
    </item>
    <item>
      <title>Go는 exception이 없다</title>
      <link>https://bbomicoding.tistory.com/105</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;This_is_Fine_Gopher.png&quot; data-origin-width=&quot;6597&quot; data-origin-height=&quot;3410&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VoxqH/btsLtsitepk/WwaKPwksFZ3JVV64oijOVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VoxqH/btsLtsitepk/WwaKPwksFZ3JVV64oijOVK/img.png&quot; data-alt=&quot;Go panic&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VoxqH/btsLtsitepk/WwaKPwksFZ3JVV64oijOVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVoxqH%2FbtsLtsitepk%2FWwaKPwksFZ3JVV64oijOVK%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;6597&quot; height=&quot;3410&quot; data-filename=&quot;This_is_Fine_Gopher.png&quot; data-origin-width=&quot;6597&quot; data-origin-height=&quot;3410&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Go panic&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; 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;style3&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;panic, defer, recover&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;go에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;try-catch문이 없다&lt;/u&gt;. 대신 panic을 처리하기 위해 defer/recover 를 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. defer&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;함수&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;u&gt;리턴하기 직전&lt;/u&gt;에&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;실행&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;LIFO (Last In, First Out) &amp;rarr; 호출된 순서와 반대로 실행됨.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;C#의 finally 처럼 사용됨 (이미 리턴, 예외, panic 등이 일어나도 항상 후처리)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. panic&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재 함수&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;멈추고&lt;/u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;defer 모두 실행.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상위함수로 전파됨.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마지막 &amp;rarr; 프로그램 종료&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. recover&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;panic 잡고 그 값을 가져옴. 프로그램&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;복구&lt;/u&gt;해서 이어지게 함.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;defer 함수 내에서만 쓸 수 있음.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;panic이 안 일어나면 recover()가 nil 임.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;예시&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1734704396483&quot; class=&quot;go&quot; data-ke-language=&quot;go&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package main

import &quot;fmt&quot;

func main() {
  fmt.Println(&quot;프로그램 시작&quot;)

  defer fmt.Println(&quot;defer 1&quot;)

  // panic과 recover 사용
  defer func() {
      if r := recover(); r != nil {
          fmt.Println(&quot;패닉 복구:&quot;, r)
      }
  }()

   defer fmt.Println(&quot;defer 2&quot;)

  // 일반적인 함수 호출
  dangerousOperation(10)

  fmt.Println(&quot;이 줄은 실행되지 않습니다&quot;) // panic 때문에 실행되지 않음
}

func dangerousOperation(n int) {
  defer fmt.Println(&quot;dangerousOperation 종료&quot;)

  fmt.Println(&quot;위험한 작업 시작&quot;)

  if n &amp;gt; 5 {
      panic(&quot;패닉이 발생했습니다!&quot;)
  }

  fmt.Println(&quot;작업 완료&quot;) // panic 때문에 실행되지 않음
}

// 출력 내용
프로그램 시작
위험한 작업 시작
dangerousOperation 종료
defer 2
패닉 복구: 패닉이 발생했습니다!
defer 1&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프로그램 시작&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rdquo; 출력됨.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;defer는 일단 건너뛰고 dangerousOperation 함수로 들어감. defer 건너뜀.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위험한 작업 시작&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rdquo; 출력됨.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;n &amp;gt; 5 만족해서 panic 발생 &amp;rarr; 해당 함수 내의 defer 훑음 &amp;rarr; &amp;ldquo;&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;dangerousOperation 종료&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rdquo; 출력됨.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;main 함수로 돌아가서 defer 훑음 (LIFO라서 거꾸로 실행)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;defer2&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rdquo; 출력됨.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;recover()가 panic을 잡고 &amp;ldquo;&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;패닉 복구: 패닉이 발생했습니다!&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rdquo; 출력됨. (panic이 안 일어났으면 nil이라 아무 동작 안함)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;defer1&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rdquo; 출력됨.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Go lang</category>
      <category>defer</category>
      <category>go</category>
      <category>Go defer</category>
      <category>go panic</category>
      <category>go recover</category>
      <category>go 패닉</category>
      <category>panic</category>
      <category>Recover</category>
      <author>산타는 뽀미</author>
      <guid isPermaLink="true">https://bbomicoding.tistory.com/105</guid>
      <comments>https://bbomicoding.tistory.com/105#entry105comment</comments>
      <pubDate>Fri, 20 Dec 2024 23:20:54 +0900</pubDate>
    </item>
  </channel>
</rss>