<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>BaekLog</title>
    <link>https://backcii.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 24 Aug 2026 12:06:45 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>BaekCCI</managingEditor>
    <image>
      <title>BaekLog</title>
      <url>https://tistory1.daumcdn.net/tistory/6670431/attach/1926a4bf5c76415087259b520888ef0a</url>
      <link>https://backcii.tistory.com</link>
    </image>
    <item>
      <title>[우아한 테크코스 8기] 제 1회 테코톤 회고</title>
      <link>https://backcii.tistory.com/59</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요 허닛입니다~&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;테코톤&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한참 레벨2 장바구니 미션을 진행하던 중 공지사항으로 아래와 같은 공지가 올라왔다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1582&quot; data-origin-height=&quot;584&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JRpZQ/dJMcafAd9xc/UNSA8LD66a4HhWKfcHkQUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JRpZQ/dJMcafAd9xc/UNSA8LD66a4HhWKfcHkQUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JRpZQ/dJMcafAd9xc/UNSA8LD66a4HhWKfcHkQUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJRpZQ%2FdJMcafAd9xc%2FUNSA8LD66a4HhWKfcHkQUk%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;500&quot; height=&quot;185&quot; data-origin-width=&quot;1582&quot; data-origin-height=&quot;584&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테코톤!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우아한 테크코스의 근로 이벤트팀에서 미니 해커톤 느낌의 행사를 진행한다는 내용이였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보자마자 하고싶다는 생각은 들었지만 미션을 한창 진행하고 있을 때라 시간적으로 여유가 있을 지 걱정이 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각하면 할수록 안하면 두고두고 아쉬울 것 같다는 생각이 들었고 안드로이드 크루 2명과 함께 일단 지원했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;세개의 심장: 허닛브레드 샘이 솟아 리오레이별터&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지원하기 위해 우리는 가장 먼저 팀명을 정해야했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것저것 뱉다가 팀원이 하하의 &amp;ldquo;하이브리드 샘이솟아 리오레이비&amp;rdquo; 어떠냐는 의견을 내었고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;약간의 변주를 넣어 &amp;ldquo;세개의 심장: 허닛브레드 샘이 솟아 리오레이별터&amp;rdquo;로 팀명을 정했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4flgg/dJMcaftqPCE/3nlZPGKW9slYPkk5ccpNu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4flgg/dJMcaftqPCE/3nlZPGKW9slYPkk5ccpNu1/img.png&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;457&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;50&quot; style=&quot;width: 49.4166%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4flgg/dJMcaftqPCE/3nlZPGKW9slYPkk5ccpNu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4flgg%2FdJMcaftqPCE%2F3nlZPGKW9slYPkk5ccpNu1%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;641&quot; height=&quot;457&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m0ad0/dJMcag6Wipq/Tc60iuZ7GyRT1DFnDpQdL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m0ad0/dJMcag6Wipq/Tc60iuZ7GyRT1DFnDpQdL0/img.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;730&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4206%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m0ad0/dJMcag6Wipq/Tc60iuZ7GyRT1DFnDpQdL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm0ad0%2FdJMcag6Wipq%2FTc60iuZ7GyRT1DFnDpQdL0%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;1024&quot; height=&quot;730&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;팀 프로필 사진이다...(왼쪽이 원본..)&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;아이디어의 샘이 솟아&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 가장 큰 문제는 &lt;b&gt;주제정하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;행사 주제는 &lt;b&gt;&amp;ldquo;우테코 생활에 도움이 될 만한 서비스 개발&amp;rdquo;&lt;/b&gt; 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팀 슬랙 채널을 통해각자 이런저런 아이디어를 뱉어봤는데 딱 이거다! 싶은 게 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wcidQ/dJMcab5EhxE/0jugjURXwyVHtKJo5Pn4Ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wcidQ/dJMcab5EhxE/0jugjURXwyVHtKJo5Pn4Ek/img.png&quot; data-alt=&quot;(채널에서 나눴던 아이디어 중 일부)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wcidQ/dJMcab5EhxE/0jugjURXwyVHtKJo5Pn4Ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwcidQ%2FdJMcab5EhxE%2F0jugjURXwyVHtKJo5Pn4Ek%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;400&quot; height=&quot;177&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;268&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;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주제가 하나로 정해지지 않아서 회의실을 예약해 아이디어 회의를 진행했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함께 우테코 생활에서 불편한 점이 있냐에 대해서 먼저 얘기를 했지만 모두 불편함의 역치가 낮아서 그런가 불편한 점이 없다는 점이 문제였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러다가 별모씨가 슬랙에서 쓸 이모지 생성기 어떠냐는 의견을 냈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난번 별모씨가 이모지를 만드는 걸 보고 나도 만들고 싶었는데 어려울 것 같아서 생각만 하다가 안만들었었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별모씨의 설명을 들어보니,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이모지 생성 사이트는 많지만 각각의 사이트마다 이모지에 넣을 수 있는 효과가 달라서 내가 원하는 효과를 가진 사이트를 찾는게 힘들었고 또 여러 사이트에 흩어져 있는 효과들을 함께 적용할 수 없어서 아쉬웠다고 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 우리는 &amp;ldquo;슬랙 이모지 생성기&amp;rdquo;를 주제로 정했다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제 1회 테코톤 Start!&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글 초반에 &lt;b&gt;미니 해커톤&lt;/b&gt;이라고 언급했던 이유는 아래와 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwZ31b/dJMcaip9Xjc/HGU6GpYlZNhVbGgkRKpiRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwZ31b/dJMcaip9Xjc/HGU6GpYlZNhVbGgkRKpiRk/img.png&quot; data-alt=&quot;테코톤 타임라인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwZ31b/dJMcaip9Xjc/HGU6GpYlZNhVbGgkRKpiRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwZ31b%2FdJMcaip9Xjc%2FHGU6GpYlZNhVbGgkRKpiRk%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;500&quot; height=&quot;126&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;252&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;br /&gt;1시부터 5시 반까지 총 4시간 반 동안 하나의 결과를 완성해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 &lt;b&gt;사전 기획은 가능하나 사전 개발은 하면 안된다&lt;/b&gt;는 주의사항이 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 시간 안에 결과물을 낼 수 있을 까 처음에 의심했지만 레벨1 첫 미션 때 경험했던 gemini canvas를 활용하면 우리가 원하는 결과물을 빠르게 낼 수 있겠다고 생각했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각자 프롬프트를 작성해서 각자의 결과물을 비교해서 디벨롭하기로 결정했다.&lt;/p&gt;
&lt;pre class=&quot;markdown&quot;&gt;&lt;code&gt;## 기능1: .Gif 생성

1. mp4 파일을 올리면 gif 파일로 변환
2. 입력된 텍스트에 이펙트를 추가하여 gif로 변환

## 기능 2: .JPG, PNG 생성

1. 이미지를 올리면 이미지로 변환
2. 입력된 텍스트를 이미지로 변환

## 추가적인 기능

1. 배경 설정 : 투명, 색상 조절, 그라데이션
    1. gif인 경우 배경 이펙트 설정
2. 텍스트 조절: 크기, 폰트, 두께, 색상 조절
3. 텍스트 이펙트

## 결과물 조건

- 용량 - 128kb 미만
- 128 x 128 픽셀
- 지원 포맷: PNG, GIF&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프롬프트 원문 중 일부&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 생성해야할 이모지에 대한 조건, 추가하고싶은 이펙트들을 작성했는데&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;296&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lFwXv/dJMcafNN8Wb/pcLYEqCRrM3o5vDFYQ6SQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lFwXv/dJMcafNN8Wb/pcLYEqCRrM3o5vDFYQ6SQK/img.png&quot; data-alt=&quot;말 안듣는 잼미니&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lFwXv/dJMcafNN8Wb/pcLYEqCRrM3o5vDFYQ6SQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlFwXv%2FdJMcafNN8Wb%2FpcLYEqCRrM3o5vDFYQ6SQK%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;300&quot; height=&quot;212&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;296&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내 제미나이는 말을 듣지 않았다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹앱을 만들어달라는 프롬프트를 작성했는데 UI 이미지를 제공해주는 등의 문제를 일으켰다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내 프롬프트가 이상한가 싶어서 별모씨와 샘모씨의 프롬프트를 내 제미나이에 입력해봤는데, 똑같은 이슈가 발생했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제미나이에게 채찍질한 결과 웹앱을 만들어주긴 했지만 그 사이 샘모씨가 야무지게 웹앱을 구현해놔서 샘모씨의 작업으로 디벨롭하기로 결정했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성한 .gif형식의 이모지가 제대로 다운로드 되지 않는 등의 문제점도 해결하고, 원하는 이펙트들을 추가하는 작업을 했다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://3s2-hsb.github.io/who-made-this/&quot;&gt;Who Made This!&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;434&quot; data-origin-height=&quot;528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1AZMG/dJMcaaMqOiN/Xbei10Ta7m9B8nBJ5ZUTCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1AZMG/dJMcaaMqOiN/Xbei10Ta7m9B8nBJ5ZUTCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1AZMG/dJMcaaMqOiN/Xbei10Ta7m9B8nBJ5ZUTCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1AZMG%2FdJMcaaMqOiN%2FXbei10Ta7m9B8nBJ5ZUTCk%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;300&quot; height=&quot;365&quot; data-origin-width=&quot;434&quot; data-origin-height=&quot;528&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;허닛브레드 샘이 솟아 리오레이별터와 제미나이가 함께 만든 합작품이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텍스트, 이미지, 영상을 커스텀하여 이모지를 생성할 수 있다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 테코톤을 진행하며 테스트를 위해 만들었던 펀치 시리즈 이모지이다.(매우 유용하게 쓰고 있다)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;228&quot; data-origin-height=&quot;78&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqvAGq/dJMcaf71TVQ/X0uIyNqk79QmyNKrwl02vK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqvAGq/dJMcaf71TVQ/X0uIyNqk79QmyNKrwl02vK/img.png&quot; data-alt=&quot;:펀치시리즈:&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqvAGq/dJMcaf71TVQ/X0uIyNqk79QmyNKrwl02vK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqvAGq%2FdJMcaf71TVQ%2FX0uIyNqk79QmyNKrwl02vK%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;228&quot; height=&quot;78&quot; data-origin-width=&quot;228&quot; data-origin-height=&quot;78&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;:펀치시리즈:&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1&quot; data-origin-height=&quot;1&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4g7Ki/dJMcacQ0ZVX/oRRueWMmGCgEvcoYCxOmWk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4g7Ki/dJMcacQ0ZVX/oRRueWMmGCgEvcoYCxOmWk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4g7Ki/dJMcacQ0ZVX/oRRueWMmGCgEvcoYCxOmWk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/4g7Ki/dJMcacQ0ZVX/oRRueWMmGCgEvcoYCxOmWk/img.gif&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;1&quot; height=&quot;1&quot; data-origin-width=&quot;1&quot; data-origin-height=&quot;1&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;16팀이나 참여하기도 했고 다른 팀들의 결과물을 보니 정말 재미있고 유용한 결과물을 도출해 낸 팀들이 많아서 입상은 기대도 못하고 있었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;284&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhst9N/dJMcaf7Z9sB/yvgo67sAq5nHHc6rAUeaIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhst9N/dJMcaf7Z9sB/yvgo67sAq5nHHc6rAUeaIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhst9N/dJMcaf7Z9sB/yvgo67sAq5nHHc6rAUeaIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdhst9N%2FdJMcaf7Z9sB%2Fyvgo67sAq5nHHc6rAUeaIK%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;400&quot; height=&quot;147&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;284&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 너무 감사하게도 12표를 받아 3등을 했고 배민 상품권도 받았다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함께한&lt;b&gt; 샘이솟아, 리오레이별터&lt;/b&gt;에게 박수를 보냅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;자세한 내용이 궁금하다면  &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://3s2-hsb.github.io/who-made-this/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Who Made This 사이트&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1781594757756&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;Who Made This - 슬랙 커스텀 이모지 생성기&quot; data-og-description=&quot;128 x 128 px 12.5 FPS (고정) Live Loops&quot; data-og-host=&quot;3s2-hsb.github.io&quot; data-og-source-url=&quot;https://3s2-hsb.github.io/who-made-this/&quot; data-og-url=&quot;https://3s2-hsb.github.io/who-made-this/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://3s2-hsb.github.io/who-made-this/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://3s2-hsb.github.io/who-made-this/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;Who Made This - 슬랙 커스텀 이모지 생성기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;128 x 128 px 12.5 FPS (고정) Live Loops&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;3s2-hsb.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/3S2-HSB/who-made-this&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;깃 레포지토리&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1781594793084&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 - 3S2-HSB/who-made-this: 슬랙 커스텀 이모지를 쉽고 빠르게 만들어주는 웹앱&quot; data-og-description=&quot;슬랙 커스텀 이모지를 쉽고 빠르게 만들어주는 웹앱. Contribute to 3S2-HSB/who-made-this development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/3S2-HSB/who-made-this&quot; data-og-url=&quot;https://github.com/3S2-HSB/who-made-this&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bgtOrd/dJMb8Z3AlAH/kcoiiSkELklMUQWEaKyGZK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/baMGMO/dJMb9jOvJBa/Q79VMeappKs3Dv1f38qERK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/3S2-HSB/who-made-this&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/3S2-HSB/who-made-this&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bgtOrd/dJMb8Z3AlAH/kcoiiSkELklMUQWEaKyGZK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/baMGMO/dJMb9jOvJBa/Q79VMeappKs3Dv1f38qERK/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 - 3S2-HSB/who-made-this: 슬랙 커스텀 이모지를 쉽고 빠르게 만들어주는 웹앱&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;슬랙 커스텀 이모지를 쉽고 빠르게 만들어주는 웹앱. Contribute to 3S2-HSB/who-made-this 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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>우아한 테크코스</category>
      <author>BaekCCI</author>
      <guid isPermaLink="true">https://backcii.tistory.com/59</guid>
      <comments>https://backcii.tistory.com/59#entry59comment</comments>
      <pubDate>Tue, 16 Jun 2026 16:28:29 +0900</pubDate>
    </item>
    <item>
      <title>[우아한테크코스 8기] 조금 많이 늦은 레벨 1 회고</title>
      <link>https://backcii.tistory.com/58</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요~ 허닛입니다~&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;늦은 감이 없진 않지만.. 레벨 1 회고를 시작합니다..&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;연극 미션&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;알고는 있었지만.. 너무너무 긴장됐었다..&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;우테코 등교 첫날 조가 정해졌고 서로 어색해하며 열심히 주제를 정했다..&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;진짜 어색하고 아이디어도 생각 안났지만 열심히 던졌던 기억이 난다..&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFra4q/dJMcacptfzw/Wr8puhmIQmvQm0fOx7H9Ak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFra4q/dJMcacptfzw/Wr8puhmIQmvQm0fOx7H9Ak/img.png&quot; data-alt=&quot;이제는 잊혀져버린 구내식당&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFra4q/dJMcacptfzw/Wr8puhmIQmvQm0fOx7H9Ak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFra4q%2FdJMcacptfzw%2FWr8puhmIQmvQm0fOx7H9Ak%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;300&quot; height=&quot;4032&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이제는 잊혀져버린 구내식당&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;같이 구내식당에서 밥도 먹고 대화를 나누며 친해졌...나..?(밥도 꾸역꾸역 열심히 먹은 기억이..)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;대본을 짜고 함께 연습도 하면서 조금씩 편해졌고, 깔깔 웃으면서 연습도 했다&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;연극날이 되고 긴장감 MAX로 등교를 했었는데 앞순서의 연극을 보는데 모든 크루들이 반응을 잘해주는걸 보고 긴장감이 슬슬 풀렸고 우리조 차례가 될 때 쯤엔 긴장을 거의 안한것 같다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;처음엔 분명히 왜 해야하는 건가 싶었는데 다 하고나니 오히려 안했으면 아쉬웠을 것 같다..!&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;다음 기수도 꼭 연극을 했으면 좋겠다(Positive)&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;델리만쥬&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;매일 아침 30분동안 데일리미팅을 진행한다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;처음엔 어색했지만 다같이 얘기하고 가볍게 게임도 하면서 많이 친해질 수 있었다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;제일 기억에 남는 건 사주풀이와 어몽어스 그리고.. &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;누구도 따라잡을 수 없는&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;모 크루의 영타 속도...!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;우리조의 담당 코치이신 04년생 디노와 함께 델리만쥬 회식도 진행했다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;회식 당시 말을 놓기로 했는데 이때가 레벨1 거의 마지막을 달려갈 때라 다들 존댓말이 익숙해져서 갑자기 어색해졌다 ㅋㅋㅋㅋㅋ&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;blob&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmv6HJ/dJMcaiXtacL/uLkED3ulJtnkBDhWJ9q3w1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmv6HJ/dJMcaiXtacL/uLkED3ulJtnkBDhWJ9q3w1/img.png&quot; data-alt=&quot;델리만쥬 챱&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmv6HJ/dJMcaiXtacL/uLkED3ulJtnkBDhWJ9q3w1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdmv6HJ%2FdJMcaiXtacL%2FuLkED3ulJtnkBDhWJ9q3w1%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;300&quot; height=&quot;400&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;델리만쥬 챱&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;페어프로그래밍&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;페어와 함께 미션을 구현한다는게 기대되면서도 걱정이 많이 되었다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;어색하고.. 내 갈대같은 의견이 독이 될까 걱정도 되고..&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;또 코드를 작성하다가 생각이 안나면 어떡하지라는 걱정도 되어서 초반에 페어프로그래밍 할 때 집에서 미리 구현해보기도 했다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;항상 의견이 깔끔하게 하나로 정해지는 건 아니였지만 페어와 이야기를 나누며 다양한 방향성에 대해서 고려해보고 내 의견을 다시 생각해보는 과정도 재미있었다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;단순히 의견이 일치할 때보다 내 의견과 반대되는 의견이 나오면 너무 재미있는 것 같다..!&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;다음 미션으로 시작할 때 페어와 나의 이전 미션 코드 중 어떤 걸 베이스로 할 지 정하는데&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;레벨 1동안 한번도 페어의 코드 베이스에서 작업해보지 못해서 아쉬움이 크다..&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;(레벨 2에서는 꼭! 페어의 코드 베이스에서 작업을 해보고 싶다)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;사라진 도메인 그리고 커피와 커피숍&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;레벨 1 중간 쯔음 시작된 &quot;도메인이 존재하는가&quot;, &quot;도메인은 몰까..?&quot; 그리고..&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;커피를 시켰더니 커피숍을 주는..&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;그런 이상한 나라에 대해서 크루들과 얘기했던 기억이 난다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;미래의 내가 보면 참 멍청한 생각이였구나 하겠지..?&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;나는 사실 아침형 인간이였다?!&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;농담아니고 유치원 다닐 때부터 항상 아침에 일어나는 걸 늘 힘들어했었고 잠을 많이 자는 사람이였다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;작년에는 부모님이 퇴근할 때 일어나서 함께 저녁(인데 아침인..)식사를 하고&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;스카에 있다가 아침에 돌아와서 잠드는 생활을 했었다. 쉬는 날엔 하루종일 잠만 잔적도 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;생활패턴이 이러다 보니 햇빛도 거의 못보고 하루 한끼만 먹게 되면서 건강이 악화되는 걸 느꼈다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;한번은 밥을 안먹고 스카를 갔는데, 스카 계단 오르다가 쓰러질 뻔한 적도 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;그랬던 내가 사실은 아침형 인간이였다는 걸 우테코를 다니며 깨달았다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;처음에는 긴장감에 눈이 떠지는 것 같았는데, 이젠 주말에 늦어도 10시 전에 눈이 떠진다(아직도 이런 내가 신기해요)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;심지어 규칙적인 생활을 하며 살도 좀 찌고 건강해진 것 같다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;우테코 최고의 복지 = 크루&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안드 크루들과는 계단 오르기도 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계단 오르기로 포도알을 모으면 디노의 복복복이 상으로 주어진다.(디노의 동의는 구하지 않았다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2272&quot; data-origin-height=&quot;1704&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Wmrwy/dJMb99M0yKo/kZ7pXI9s9xk0DOCvizAYRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Wmrwy/dJMb99M0yKo/kZ7pXI9s9xk0DOCvizAYRK/img.png&quot; data-alt=&quot;11층 등반 완료.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Wmrwy/dJMb99M0yKo/kZ7pXI9s9xk0DOCvizAYRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWmrwy%2FdJMb99M0yKo%2FkZ7pXI9s9xk0DOCvizAYRK%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;400&quot; height=&quot;300&quot; data-origin-width=&quot;2272&quot; data-origin-height=&quot;1704&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;11층 등반 완료.&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아침에 11층 엘리베이터 앞에서 커피를 쏟은 적이 있다..&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;입도 안댄 커피 두잔이 엎어졌고..&lt;span&gt;&amp;nbsp;&lt;/span&gt;등교시간이였어서 크루들이 몰려오기 전에 호다닥 치우려고 했지만 양이 많아서 그런지 닦아도 닦아도 줄지 않는 커피에 마음이 급해질 찰나&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;갑자기 어디선가 백엔드 크루들이 우루루 나타나서 같이 닦아주기 시작했다...!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;너무 당연하다는 듯이 함께 치워주셔서..&lt;span&gt;&amp;nbsp;&lt;/span&gt;진짜 다시 생각해도 너무 감사합니다ㅠㅜㅠㅜ&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 우리 안드 크루들도 짱이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회의실에 모여서 미션을 하고 있었는데 갑자기 불안감이 몰려온적이 있었는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;크루들에게 얘기하니 마음이 힘들땐 몸이 힘들어야한다며 다같이 1층으로 내려가 11층까지 계단을 탔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신기하게도 불안감이 싹 사라졌다..!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불안감을 해소시켜준 영애들에게 감사를 표합니다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;흠&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쓰다보니 그냥 일기인것 같은데 이게 맞는지 모르겠다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 일단 뭐라도 올려야.. 계속 쓸 수 있을 것 같아서 올려봅니데이..&lt;/p&gt;</description>
      <category>우아한 테크코스</category>
      <author>BaekCCI</author>
      <guid isPermaLink="true">https://backcii.tistory.com/58</guid>
      <comments>https://backcii.tistory.com/58#entry58comment</comments>
      <pubDate>Wed, 6 May 2026 01:16:48 +0900</pubDate>
    </item>
    <item>
      <title>[우아한 테크코스 8기] Lv.0 4주차 회고</title>
      <link>https://backcii.tistory.com/57</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;4주차 회고&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막 주차는 2주차때 학습하지 못했던 람다함수와 고차함수에 대해서 학습했다.&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;그동안 코드를 작성하면서 중복되는 로직을 줄이기 위해 람다를 활용하거나, adapter에 이벤트를 전달할 때 자연스럽게 사용해왔다.&amp;nbsp; 하지만 이번에 개념을 다시&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;특히 함수 타입 또한 nullable로 선언할 수 있다는 점이 기엇에 남는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평소 자주 사용하던 문법이었음에도 불구하고, 함수 타입 자체를 하나의 타입으로 바라보지 않았다는 사실을 깨달았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수를 값처럼 다룬다는 개념을 머리로는 알고는 있었지만 그 의미를 깊게는 생각하지 않았던 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Lv.0 학습 계획을 작성하면서 내가 개념적으로 놓치고 있다고 생각이 드는 주제들로 선정했는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알고있다고 생각한 부분들 또한 다시 바라볼 필요가 있다는 걸 깨달았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Lv.0동안 학습하지 못했던 주제, 익숙한 주제에 대해서도 다시 한번 공부할 필요성을 느꼈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막 주차에는 그동안 학습한 내용을 바탕으로 &quot;왜 코틀린을 사용하는가&quot;에 대해서 스스로 정의를 내리는 것이 목표였는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 명확한 문장으로 정의하기엔 부족한 것 같다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로 더 많은 경험과 고민을 통해 차근차근 생각해보려한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마무릿&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;벌써 내일이 우테코 OT라니..!!!!&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;4주간의 레벨 0 기간동안 10시도 기적이였는데..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일어날 수 있겠지..?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로 10개월동안 지치지 않고 달릴 수 있기를!&lt;/p&gt;</description>
      <category>우아한 테크코스</category>
      <author>BaekCCI</author>
      <guid isPermaLink="true">https://backcii.tistory.com/57</guid>
      <comments>https://backcii.tistory.com/57#entry57comment</comments>
      <pubDate>Mon, 23 Feb 2026 22:59:46 +0900</pubDate>
    </item>
    <item>
      <title>[우아한 테크코스 8기] Lv.0 3주차 회고</title>
      <link>https://backcii.tistory.com/56</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Lv.0 3주차 회고&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;902&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjRpUp/dJMcahDmg6i/7JApr8yjtSU8kaErItRMI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjRpUp/dJMcahDmg6i/7JApr8yjtSU8kaErItRMI0/img.png&quot; data-alt=&quot;3주차 학습 계획&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjRpUp/dJMcahDmg6i/7JApr8yjtSU8kaErItRMI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjRpUp%2FdJMcahDmg6i%2F7JApr8yjtSU8kaErItRMI0%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;400&quot; height=&quot;186&quot; data-origin-width=&quot;902&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;3주차 학습 계획&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: #333333; text-align: start;&quot;&gt;주차에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 평일에는 프로젝트 개발에 집중하고, 주말에는 계획했던 학습을 진행했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리한 내용 &amp;gt; &lt;a style=&quot;background-color: #e6f5ff; color: #0070d1; text-align: start;&quot; href=&quot;https://backcii.tistory.com/55&quot;&gt;[학습 기록/kotlin] - [Kotlin] 동시성 프로그래밍 with Coroutine&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에 동시성 프로그래밍을 학습하면서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트에서 자주 사용했던 함수들을 내가 제대로 이해하지 못한 채 사용하고 있었다는 사실을 깨달았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 어떤 스레드에서 실행되어야 할지 판단하지 않은 채, Dispatcher를 지정하지 않고 사용하는 경우가 많았고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 부분에서 에러가 발생하면 근본적인 원인을 찾기보다 Dispatchers.Main으로 감싸 임시로 해결하려 했던 코드들도 많았다.&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;이번 학습에서 가장 크게 깨달은 나의 문제점은 &lt;b&gt;'일단'&lt;/b&gt; 이라는 태도였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 항상 &quot;일단 해결하고 다시 찾아보자&quot;는 마인드로 프로젝트에 임하고 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금 개발하고 있는 프로젝트가 첫 안드로이드 프로젝트도 아닌데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여전히 근본적인 원인을 모르고 아 이렇게 되면 Main으로 감싸면 해결됐었지 하고 넘기고 있었다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공부나 프로젝트를 시작할 때마다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;에러가 나거나 모르는 부분이 생기면 그때그때 정리하자고 다짐한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하지만 막상 개발을 하다보면 &quot;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;일단 급하니까 해결하고 나중에 정리하자.&quot;를 반복하고 있었다.&lt;/span&gt;&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;이번 주차를 통해서 한번 더 내가 프로젝트에 임했던 태도를 돌아볼 수 있어서 좋았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여전히 글쓰기는 어렵고, 포스팅 하나 작성하는 데 시간이 좀 걸리지만..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글을 작성하면서 한번 더 나에 대해 돌아볼 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 Lv.0 마지막 주차가 남아있는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Lv.0이 끝난 이후에도 계속해서 회고 작성 루틴을 가져가고 싶다!&lt;/p&gt;</description>
      <category>우아한 테크코스</category>
      <author>BaekCCI</author>
      <guid isPermaLink="true">https://backcii.tistory.com/56</guid>
      <comments>https://backcii.tistory.com/56#entry56comment</comments>
      <pubDate>Mon, 16 Feb 2026 23:13:51 +0900</pubDate>
    </item>
    <item>
      <title>[Kotlin] 동시성 프로그래밍 with Coroutine</title>
      <link>https://backcii.tistory.com/55</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 동시성과 병렬성&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;동시성(Concurrency)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CPU의 컨텍스트 스위칭을 통해 작업을 번갈아 처리 &amp;rarr; 동시에 수행하는 것처럼 보이는 것&lt;/li&gt;
&lt;li&gt;실제로 CPU가 동시에 여러 작업 수행하는 것은 아님&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;병렬성&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실제로 CPU가 동시에 여러 작업을 실행하는 것&lt;/li&gt;
&lt;li&gt;CPU의 코어가 여러개 있는 멀티 코어에서 작업 수행 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 스레드와 코루틴&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;스레드&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세스 내부에서 독립적으로 실행되는 작업 단위&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특징
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JVM에서 생성하는 스레드는 OS가 관리하는 시스템 스레드&lt;/li&gt;
&lt;li&gt;각 스레드는 독립적인 실행 흐름을 가진다.&lt;/li&gt;
&lt;li&gt;OS가 메모리, 스케줄링을 직접 관리한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;단점
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메모리와 컨텍스트 스위칭(context switching) 비용이 많이 든다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;수천 개 이상 생성하면 성능 저하 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;블로킹 문제
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스레드가 해당 작업을 완료하는 동안 블로킹된다.&lt;/li&gt;
&lt;li&gt;다른 작업을 수행할 수 없고, 시스템 자원을 계속 점유한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;독립적인 프로세스로 작업을 관리하고 제어하기 어렵다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;코루틴&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일시 중단 가능한 계산 단위이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특징
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Kotlin 런타임이 관리&lt;/li&gt;
&lt;li&gt;매우 가볍다(수십만 개 이상의 작업 수행 가능)&lt;/li&gt;
&lt;li&gt;스레드를 블로킹하지 않고 &amp;lsquo;중단&amp;rsquo; 가능&lt;/li&gt;
&lt;li&gt;구조화된 동시성 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;중단(Suspension)과 블로킹의 차이&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1771247554291&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Thread.sleep(1000) //(1) 스레드(블로킹)
delay(1000) //(2) 코루틴(중단)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;(1): 스레드가 멈춤&lt;/li&gt;
&lt;li&gt;(2): 스레드는 다른 코루틴을 실행하고, 해당 코루틴은 나중에 이어서 실행&lt;/li&gt;
&lt;/ul&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;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;코틀린에서 동시성 프로그래밍&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코틀린에서 동시성을 구현하는 방법은 크게 두 가지다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;전통적인 스레드 기반 방식 (Java 방식)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;코루틴 기반 방식 (Kotlin 권장 방식)&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 스레드 기반 동시성&lt;/h3&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;코틀린은 JVM 위에서 동작하기 때문에 Java의 동시성 API를 그대로 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1-1. Thread 직접 생성&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;fun main() {
    println(&quot;Running on ${Thread.currentThread().name}&quot;)

    Thread {
        println(&quot;And Running on ${Thread.currentThread().name}&quot;)
    }.start()
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1-2. ExecutorService 사용&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;fun main() {
	val executor = Executors.newFixedThreadPool(4)

    repeat(10) {
        executor.submit {
            println(&quot;Running on ${Thread.currentThread().name}&quot;)
        }
    }

    executor.shutdown()
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OS 스레드를 직접 사용&lt;/li&gt;
&lt;li&gt;스레드 풀 관리 필요&lt;/li&gt;
&lt;li&gt;예외 처리 및 취소 제어가 복잡&lt;/li&gt;
&lt;li&gt;많은 수의 작업을 처리하기에 비효율적&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;&amp;rarr;&lt;/b&gt; 대규모 비동기 작업에는 적합하지 않다.&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 코루틴 기반 동시성&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 기본 코루틴 실행&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;import kotlinx.coroutines.*

fun main() = runBlocking {
    launch {
        delay(1000)
        println(&quot;Coroutine finished&quot;)
    }
    println(&quot;Hello&quot;)
}
//Hello
//Coroutine finished&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;주요 함수&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;runBlocking : 코루틴을 시작하고 완료될 때까지 현재 스레드를 블로킹&lt;/li&gt;
&lt;li&gt;launch: 반환값 없는 코루틴 실행&lt;/li&gt;
&lt;li&gt;async: 결과를 반환하는 코루틴 실행&lt;/li&gt;
&lt;li&gt;delay: 코루틴을 일시 중단 (스레드는 블로킹하지 않음)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. Dispatcher&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코루틴은 Dispatcher를 통해 어떤 스레드에서 실행될 지 결정된다.&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;launch(Dispatchers.Default) { }
launch(Dispatchers.IO) { }
launch(Dispatchers.Main) { }
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;주요 Dispatcher&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Dispatchers.Main : 기본 Android 스레드에서 코루틴 실행
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;suspend 함수 호출, Android UI 프레임 워크 작업 실행, LiveData 객체 업데이트&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Dispatchers.IO : 기본 스레드 외부에서 디스크 or 네트워크 I/O 실행에 최적화
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Room, 파일 읽기 쓰기를 하며 네트워크 작업 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Dispatchers.Default : CPU를 많이 사용하는 작업을 기본 스레드 외부에서 실행하도록 최적화
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;목록 정렬, Json 파싱&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;구조화된 동시성 (Structured Concurrency)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코루틴은 스코프(scope) 단위로 묶어 생명 주기를 구조적으로 관리할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-end=&quot;610&quot; data-start=&quot;592&quot; data-ke-size=&quot;size20&quot;&gt;&lt;i&gt;&lt;b&gt;부모-자식 관계&lt;/b&gt;&lt;/i&gt;&lt;/h4&gt;
&lt;p data-end=&quot;649&quot; data-start=&quot;612&quot; data-ke-size=&quot;size16&quot;&gt;코루틴은 반드시 &lt;b&gt;CoroutineScope&lt;/b&gt; 안에서 실행된다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1771246631037&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;runBlocking {
    launch {
        delay(1000)
        println(&quot;Child coroutine&quot;)
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;759&quot; data-start=&quot;756&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;805&quot; data-start=&quot;761&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;785&quot; data-start=&quot;761&quot;&gt;runBlocking &amp;rarr; 부모 코루틴&lt;/li&gt;
&lt;li data-end=&quot;805&quot; data-start=&quot;786&quot;&gt;launch &amp;rarr; 자식 코루틴&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-end=&quot;932&quot; data-start=&quot;914&quot; data-ke-size=&quot;size18&quot;&gt;1. 부모는 자식을 기다린다&lt;/p&gt;
&lt;pre id=&quot;code_1771246863776&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;runBlocking {
    launch {
        delay(1000)
        println(&quot;Done&quot;)
    }
    println(&quot;Hello&quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1120&quot; data-start=&quot;1077&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-pm-slice=&quot;0 0 []&quot;&gt;runBlocking은 내부의 모든 자식 코루틴이 종료될 때까지 기다린다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1145&quot; data-start=&quot;1127&quot; data-ke-size=&quot;size18&quot;&gt;2. 취소는 아래로 전파된다&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1771246745081&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val job = CoroutineScope(Dispatchers.Default).launch {
    launch {
        delay(5000)
        println(&quot;Child done&quot;)
    }
}

Thread.sleep(1000)
job.cancel()&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1375&quot; data-start=&quot;1340&quot;&gt;부모 코루틴을 취소하면&lt;br /&gt;&amp;rarr; 자식 코루틴도 자동으로 취소된다.&lt;/li&gt;
&lt;li data-end=&quot;1396&quot; data-start=&quot;1377&quot;&gt;별도로 자식을 관리할 필요가 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1420&quot; data-start=&quot;1403&quot; data-ke-size=&quot;size18&quot;&gt;3. 예외는 위로 전파된다&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1771246783271&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;runBlocking {
    launch {
        throw RuntimeException(&quot;Error&quot;)
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1547&quot; data-start=&quot;1512&quot;&gt;자식 코루틴에서 예외가 발생하면&lt;br /&gt;&amp;rarr; 부모 코루틴도 취소된다.&lt;/li&gt;
&lt;li data-end=&quot;1586&quot; data-start=&quot;1549&quot;&gt;비동기 코드에서 예외가 조용히 사라지는 문제를 방지할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1629&quot; data-start=&quot;1593&quot; data-ke-size=&quot;size23&quot;&gt;coroutineScope vs supervisorScope&lt;/h3&gt;
&lt;h4 data-end=&quot;1649&quot; data-start=&quot;1631&quot; data-ke-size=&quot;size20&quot;&gt;1. coroutineScope&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1679&quot; data-start=&quot;1651&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1667&quot; data-start=&quot;1651&quot;&gt;자식 중 하나라도 실패하면 전체가 취소된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1771247105164&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;coroutineScope {
    launch { throw Exception() }
    launch {
        delay(1000)
        println(&quot;coroutine run&quot;)
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1786&quot; data-start=&quot;1775&quot;&gt;모든 코루틴 취소&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-end=&quot;1812&quot; data-start=&quot;1793&quot; data-ke-size=&quot;size20&quot;&gt;2. supervisorScope&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1852&quot; data-start=&quot;1814&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1826&quot; data-start=&quot;1814&quot;&gt;자식 간 독립 보장&lt;/li&gt;
&lt;li data-end=&quot;1852&quot; data-start=&quot;1827&quot;&gt;한 자식이 실패해도 다른 자식은 계속 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;pre id=&quot;code_1771247139509&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;supervisorScope {
    launch { throw Exception() }
    launch {
        delay(1000)
        println(&quot;coroutine run&quot;)
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실행 결과: Exception이 발생한 후에도 &quot;coroutine run&quot; 출력을 확인할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1251&quot; data-origin-height=&quot;227&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Iu7VH/dJMcacWlT3X/D8l39qXCBJwsCUExOZpgUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Iu7VH/dJMcacWlT3X/D8l39qXCBJwsCUExOZpgUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Iu7VH/dJMcacWlT3X/D8l39qXCBJwsCUExOZpgUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIu7VH%2FdJMcacWlT3X%2FD8l39qXCBJwsCUExOZpgUk%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;500&quot; height=&quot;91&quot; data-origin-width=&quot;1251&quot; data-origin-height=&quot;227&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>학습 기록/kotlin</category>
      <author>BaekCCI</author>
      <guid isPermaLink="true">https://backcii.tistory.com/55</guid>
      <comments>https://backcii.tistory.com/55#entry55comment</comments>
      <pubDate>Mon, 16 Feb 2026 22:20:13 +0900</pubDate>
    </item>
    <item>
      <title>[우아한 테크코스 8기] Lv.0 2주차 회고 | Android</title>
      <link>https://backcii.tistory.com/54</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;731&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHb2hX/dJMcafyLd0G/sUpdnQH7MTItjacujiTvz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHb2hX/dJMcafyLd0G/sUpdnQH7MTItjacujiTvz1/img.png&quot; data-alt=&quot;2주차 학습 계획&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHb2hX/dJMcafyLd0G/sUpdnQH7MTItjacujiTvz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHb2hX%2FdJMcafyLd0G%2FsUpdnQH7MTItjacujiTvz1%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;400&quot; height=&quot;215&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;731&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2주차 학습 계획&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2주차 시작 전부터 시간이 부족할 것 같아 걱정했는데, 걱정이 현실이 되었다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 일정이 앞당겨지면서 개발하기 급급했고, 이사도 해야해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화요일, 수요일에 고차함수만 조금 공부하고 이후에는 시간을 투자하지 못했다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이사하고 지금까지도 짐을 풀지도 못했다..ㅜㅜㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 이번주차는 계획한 내용을 손대지 않은 거나 마찬가지이다..&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;프로젝트가 이번주면 거의 마무리 될것 같아서 3주차는 주말을 이용해서 공부를 하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막 주차인 4주차때 공부하지 못한 부분을 채워나갈 예정이다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마음이 불편한 한주여따..&lt;/p&gt;</description>
      <category>우아한 테크코스</category>
      <author>BaekCCI</author>
      <guid isPermaLink="true">https://backcii.tistory.com/54</guid>
      <comments>https://backcii.tistory.com/54#entry54comment</comments>
      <pubDate>Mon, 9 Feb 2026 22:22:21 +0900</pubDate>
    </item>
    <item>
      <title>[우아한 테크코스 8기] Lv.0 1주차 회고 | Android</title>
      <link>https://backcii.tistory.com/53</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Lv.0 최종 목표&lt;/h2&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;size18&quot;&gt;&lt;b&gt;1. 코틀린 이해하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코틀린 공부한지 약 1년정도 되었다. 사실 공부를 시작할 때 Kotlin In Action 책을 구매했었는데..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코틀린을 전혀 모르는 상태에서 책으로 공부하려니 머리에 잘 들어오지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 책은 책장에 고이 모셔두고 백준에서 입출력, 컬렉션 관련 간단한 문제들을 풀면서 공부했었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코틀린으로 알고리즘 문제를 풀거나, 안드로이드 앱을 구현할 수는 있지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코틀린에 대해서 제대로 이해하고 있는지에 대해서는 확신이 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 레벨 0 기간동안 '&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Kotlin In Action&lt;/span&gt;' 책을 바탕으로 단순히 코드 작성하는 방법보다는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;왜 코틀린&lt;/b&gt;을 사용하는지,&lt;b&gt; '코틀린스러운'&lt;/b&gt;이 뭘까에 대해서 생각해보려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 학습 습관 정돈하기 &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항상 나는 불규칙한 생활패턴이 문제다.. 잠깐 한눈팔면 미국인이 되어있다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우테코 시작 전까지 생활패턴을 정상적으로 돌리고, 또한 학습 내용을 정리하는 것을 습관화하려고 한다.&lt;/p&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;Lv.0 1주차 회고&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/edXK1f/dJMcafrU5w3/H4K6TKMgMhkbiOIx2VbKLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/edXK1f/dJMcafrU5w3/H4K6TKMgMhkbiOIx2VbKLk/img.png&quot; data-alt=&quot;1주차 학습 계획&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/edXK1f/dJMcafrU5w3/H4K6TKMgMhkbiOIx2VbKLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FedXK1f%2FdJMcafrU5w3%2FH4K6TKMgMhkbiOIx2VbKLk%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;400&quot; height=&quot;366&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;366&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;1주차 학습 계획&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;본 교육 시작 전까지 마무리해야하는 프로젝트가 있어서 현실적으로 내가 이룰 수 있는 정도로만 계획을 짰다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼에도 불구하고.. 사실 스스로에게 기대했던 만큼은 달성하지 못했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 개발 시간을 제외하고 하루 2-3시간씩은 투자하려고 했는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;집을 알아보러 다니는 일정이 추가가 되면서 실제로 투자한 시간은 이틀에 2시간 정도인 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 생활패턴 정상화는 지켜냈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 10시 전에 일어나는 걸 목표로 했는데, 하루이틀을 제외하고는 제때 일어났다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;문제점&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;정리하는 방법이 잘못된 것 같다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항상 노션에 1차적으로 정리한 후에 한번 더 가공해서 블로그에 포스팅하는 방식으로 하고 있는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한번 더 가공할거라는 생각 때문인지 노션에 작성되어 있는 내용이 너무 책을 그대로 때려박은 듯한 느낌이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;책을 읽으면서 정리해서 그런가..? 두서가 없다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2주차는!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2주차에는 정리할 때 &lt;b&gt;다시 가공할거라는 생각을 버리고!!&lt;/b&gt; 좀 더 생각해서 깔쌈하게 정리해야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 목표한 하루 2시간 이상 투자하기는 꼭 지키자!&lt;/p&gt;</description>
      <category>우아한 테크코스</category>
      <author>BaekCCI</author>
      <guid isPermaLink="true">https://backcii.tistory.com/53</guid>
      <comments>https://backcii.tistory.com/53#entry53comment</comments>
      <pubDate>Mon, 2 Feb 2026 17:55:50 +0900</pubDate>
    </item>
    <item>
      <title>[우아한 테크코스 8기] 최종 테스트 준비 및 합격 회고</title>
      <link>https://backcii.tistory.com/52</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1차 합격 &amp;amp; 최종 코테 준비&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1233&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bciUSY/dJMcahb8kXF/jWupTwQfBbra3jEYm5FKr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bciUSY/dJMcahb8kXF/jWupTwQfBbra3jEYm5FKr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bciUSY/dJMcahb8kXF/jWupTwQfBbra3jEYm5FKr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbciUSY%2FdJMcahb8kXF%2FjWupTwQfBbra3jEYm5FKr1%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;600&quot; height=&quot;411&quot; data-origin-width=&quot;1233&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;프리코스 종료부터 1차 합격 발표까지 약 한달간의 텀이 있었는데 기다리고 기다리던 1차 합격 메일이 왔다!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;물론 안드 지원자가 적어서 포기만 안하면 가능성 있다는 언급이 있었지만.. 그래도 불안한걸 우째...&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;프리코스를 하면서 나포함 세명의 안드 지원자 분들과 매주 대면 스터디를 했는데,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;프리코스가 끝나고 1차 결과가 나올 때까지 함께 코테를 준비했다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;프리코스를 할 당시, 커뮤니티를 통해서 코드리뷰도 하긴 하지만 직접 만나서 어떤 사고방식으로 과제를 구현했는지에 대해서 얘기하고, 서로 부족한 부분을 피드백 해주는 과정이 정말정말 많은 도움이 되었다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;타지라서 교통비도 들고 왕복하는 시간도 많이 걸리긴 했지만.. 전혀 아깝지 않았다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(이 글을 보고 우테코에 지원한다면 꼭 스터디를 구해보시길...!)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;코테 준비할 때에는 매주 만나서 5시간 제한을 두고 이전 기수 문제를 풀었고, 다 푼 뒤에는 서로 어려웠던 부분, 소감(?)을 얘기하는 방식으로 진행되었다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;개인적으로 공부할 때에는 시간 제한이 아니라 푼 시간을 재는 방식으로 이전 기수 문제들을 반복해서 푸는 시간을 가졌고&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;시험 이틀 전부터는 자주쓰는 로직이나, 개념들을 템플릿으로 정리했다.&lt;/p&gt;
&lt;h2 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;최종 코딩 테스트&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당일 아침에 넉넉하게 도착해서 시험장 근처 스타벅스에 들어가서 간단하게 허기를 달래고 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제를 더 풀기도 애매하고, 뭘 할지 모르겠어서 준비해둔 템플릿을 한번 더 복기하고 있었는데 스터디원 분들과도 마주쳤다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반가움과 동시에 갑자기 긴장감이 밀려와서 일부러 시험 생각을 안하며 입실 시간을 기다렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시험장에 들어가 신분증 검사를 하고 간식을 줍줍해서 자리에 착석했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시험 시작 시간까지 시간이 많이 남았지만 긴장되서 핸드폰만 만지작거렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시험이 시작 되었는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시험 시간 5시간 중 4시간은 구현, 1시간은 소감문 작성하는 시간이였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고...... 문제가 로또네..?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;익숙한 문제에 당황스러움과 동시에 눈에 띄는 문장..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;ldquo;&lt;/span&gt;&lt;span&gt;프리코스에서 학습한 개발 방식&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;문제 분해&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;설계&lt;/span&gt;&lt;span&gt;, TDD)&lt;/span&gt;&lt;span&gt;가 코드에 드러나는 것&lt;/span&gt;&lt;span&gt;&amp;rdquo;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;프리코스 과제를 할때 TDD를 도전했었는데,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;긴장감 + 새로운 문제 + 제한 시간을 생각하면 TDD는 커녕 테스트 코드 작성할 시간도 없을 것 같아서&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;최종 코테를 준비할 때 테스트 코드에 대해서는 하나도 복습하지 않았었다...&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그나마 다행인건 프리코스때와 거의 비슷한 문제라는 것과, 프리코스 과제를 할때 테스트 코드에 대해서 정리해놨다는 점이였다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오랜만에 TDD를 하려니 어색해서 초반에는 구현을 먼저 하고 테스트 코드를 작성하는 등 TDD 구현 순서를 제대로 지키지 못했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 하다보니 익숙해져갔고 3시간 정도가 되었을 때 주어진 요구사항에 대한 기능 구현과 리팩토링을 마칠 수 있었다.&lt;br /&gt;&lt;br /&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;하.. 진짜 도저히 생각이 안났다.. 1시간이라는 시간이 남아있는데 내가 고작 추가한 건 프리코스 과제에 있던 수익률에 대한 기능 뿐이였다..ㅜㅜ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 아쉬움만 남은채로 제출했다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;합격....!!!!!&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1216&quot; data-origin-height=&quot;907&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czjzdr/dJMcacaRyqM/9kuCTHGLaNPKudnf9M1Xdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czjzdr/dJMcacaRyqM/9kuCTHGLaNPKudnf9M1Xdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czjzdr/dJMcacaRyqM/9kuCTHGLaNPKudnf9M1Xdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fczjzdr%2FdJMcacaRyqM%2F9kuCTHGLaNPKudnf9M1Xdk%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;600&quot; height=&quot;448&quot; data-origin-width=&quot;1216&quot; data-origin-height=&quot;907&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코딩 테스트에서 기능확장 부분을 거의 안한거나 마찬가지라 사실 합격 못할 줄 알았다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사함미다.....&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혼자 스카에서 공부하며 물어볼 사람도 없고, 함께 고민할 사람도 없어서 외톨이가 된 기분이였는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다양한 사람들과 함께 공부할 수 있다고 생각하니 너무 설렌다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빡시게 해보자잇!&lt;/p&gt;</description>
      <category>우아한 테크코스</category>
      <author>BaekCCI</author>
      <guid isPermaLink="true">https://backcii.tistory.com/52</guid>
      <comments>https://backcii.tistory.com/52#entry52comment</comments>
      <pubDate>Sun, 25 Jan 2026 12:02:29 +0900</pubDate>
    </item>
    <item>
      <title>[Kotlin] LocalDate/LocalTime/LocalDateTime &amp;lt;-&amp;gt; String 변환</title>
      <link>https://backcii.tistory.com/51</link>
      <description>&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;1. LocalDate &amp;harr; String&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) String -&amp;gt; LocalDate&lt;/h3&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;size18&quot;&gt;&lt;b&gt;(1) 기본 형식 &lt;code&gt;yyyy-MM-dd&lt;/code&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;val date = LocalDate.parse(&quot;2025-12-04&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 별도의 formatter 없이 바로 변환 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(2) 커스텀 형식 사용&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;val formatter = DateTimeFormatter.ofPattern(&quot;yyyy/MM/dd&quot;)
val date = LocalDate.parse(&quot;2025/12/04&quot;, formatter)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;code&gt;LocalDate.parse(String ,DateTimeFormatter)&lt;/code&gt; 형태로 파싱&lt;br /&gt;- &lt;code&gt;ofPattern()&lt;/code&gt;을 이용해 원하는 형식을 지정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) LocalDate -&amp;gt; String&lt;/h3&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;size18&quot;&gt;&lt;b&gt;(1) 기본 형식 &lt;code&gt;yyyy-MM-dd&lt;/code&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;val date = LocalDate.of(2025, 12, 4)

println(date.format(DateTimeFormatter.ISO_DATE)) // 2025-12-04&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(2) 커스텀 형식 사용&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;val date = LocalDate.of(2025, 12, 4)

val formatter = DateTimeFormatter.ofPattern(&quot;yyyy/MM/dd&quot;)
println(date.format(formatter)) // 2025/12/04&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;code&gt;LocalDate.format(DateTimeFormatter)&lt;/code&gt; 를 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(2-1) 요일 포함 형식&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;code&gt;E&lt;/code&gt; : 요일 축약 (Mon/Tue.. || 월/화..)&lt;br /&gt;- &lt;code&gt;EEEE&lt;/code&gt; : 요일 전체(Monday/Tuesday.. || 월요일/화요일..)&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;val date = LocalDate.of(2025, 12, 4)

val formatterK = DateTimeFormatter.ofPattern(&quot;yyyy/MM/dd (E)&quot;, Locale.KOREAN)
val formatterE = DateTimeFormatter.ofPattern(&quot;yyyy/MM/dd (E)&quot;, Locale.ENGLISH)

println(date.format(formatterK)) // 2025/12/04 (목)
println(date.format(formatterE)) // 2025/12/04 (Thu)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Locale 설정으로 요일 언어를 지정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;2. LocalTime &amp;harr; String&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) String -&amp;gt; LocalTime&lt;/h3&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;size18&quot;&gt;&lt;b&gt;(1) 기본 형식 &lt;code&gt;HH:mm:ss&lt;/code&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;val time1 = LocalTime.parse(&quot;14:30:15&quot;)
val time2 = LocalTime.parse(&quot;14:30&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(2) 커스텀 형식 사용&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;val formatter = DateTimeFormatter.ofPattern(&quot;HH시 mm분 ss초&quot;)
val time = LocalTime.parse(&quot;09시 15분 04초&quot;, formatter)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) LocalTime -&amp;gt; String&lt;/h3&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;size18&quot;&gt;&lt;b&gt;(1) 기본 형식 &lt;code&gt;HH:mm:ss&lt;/code&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;val time = LocalTime.of(14, 30, 15)
println(time.toString()) // 14:30:15&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(2) 커스텀 형식 사용&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;val time = LocalTime.of(14, 30)

val formatter = DateTimeFormatter.ofPattern(&quot;HH시 mm분 ss초&quot;)
println(time.format(formatter)) // 14시 30분 00초&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;3. LocalDateTime &amp;harr; String&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) String -&amp;gt; LocalDateTime&lt;/h3&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;size18&quot;&gt;&lt;b&gt;(1) 기본 형식 &lt;code&gt;yyyy-MM-ddTHH:mm:ss&lt;/code&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;val dateTime = LocalDateTime.parse(&quot;2025-12-04T14:30:15&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(2) 커스텀 형식 사용&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;val formatter = DateTimeFormatter.ofPattern(&quot;yyyy/MM/dd HH:mm:ss&quot;)
val dateTime = LocalDateTime.parse(&quot;2025/12/04 14:30:15&quot;, formatter)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) LocalDateTime -&amp;gt; String&lt;/h3&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;size18&quot;&gt;&lt;b&gt;(1) 기본 형식 &lt;code&gt;yyyy-MM-ddTHH:mm:ss&lt;/code&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;val dateTime = LocalDateTime.of(2025, 12, 4, 14, 30)
println(dateTime.toString()) // 2025-12-04T14:30&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(2) 커스텀 형식&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;val dateTime = LocalDateTime.of(2025, 12, 4, 14, 30)

val formatter = DateTimeFormatter.ofPattern(&quot;yyyy년 MM월 dd일 HH시 mm분&quot;)
println(dateTime.format(formatter)) // 2025년 12월 04일 14시 30분&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(2-1) 요일 포함 형식&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;val formatterK = DateTimeFormatter.ofPattern(&quot;yyyy/MM/dd (E) HH:mm&quot;, Locale.KOREAN)
val formatterE = DateTimeFormatter.ofPattern(&quot;yyyy/MM/dd (E) HH:mm&quot;, Locale.ENGLISH)

println(dateTime.format(formatterK)) // 2025/12/04 (목) 14:30
println(dateTime.format(formatterE)) // 2025/12/04 (Thu) 14:30&lt;/code&gt;&lt;/pre&gt;</description>
      <category>학습 기록/kotlin</category>
      <author>BaekCCI</author>
      <guid isPermaLink="true">https://backcii.tistory.com/51</guid>
      <comments>https://backcii.tistory.com/51#entry51comment</comments>
      <pubDate>Thu, 4 Dec 2025 05:16:52 +0900</pubDate>
    </item>
    <item>
      <title>[Kotlin] LocalDateTime (java.time)</title>
      <link>https://backcii.tistory.com/50</link>
      <description>&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;LocalDateTime&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;날짜(LocalDate)&lt;/b&gt; + &lt;b&gt;시간(LocalTime)&lt;/b&gt; 정보를 함께 담는 불변 객체&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;YYYY-MM-DD&lt;b&gt;T&lt;/b&gt;HH:mm:ss&amp;rdquo; 형태의 로컬 날짜/시간을 표현&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 생성 방법&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;val now = LocalDateTime.now()

val dt1 = LocalDateTime.of(2025, 12, 4, 14, 30)
val dt2 = LocalDateTime.of(LocalDate.of(2025, 12, 4), LocalTime.of(14, 30))

val parsed = LocalDateTime.parse(&quot;2025-12-04T14:30:00&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 값 읽기&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;val dateTime = LocalDateTime.of(2025, 12, 4, 14, 30)

println(dateTime.year) // 2025
println(dateTime.month) // DECEMBER
println(dateTime.monthValue) // 12
println(dateTime.dayOfMonth) // 4
println(dateTime.hour) // 14
println(dateTime.minute) // 30
println(dateTime.second) // 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- LocalDate, LocalTime의 모든 정보에 접근할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 날짜/시간 연산&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;val dateTime= LocalDateTime.of(2025, 12, 31, 23, 30)

println(dateTime.plusDays(1))       // 2026-01-01T23:30
println(dateTime.plusHours(2))      // 2026-01-01T01:30
println(dateTime.plusMonths(2))     // 2026-02-28T23:30&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- LocalDate + LocalTime 연산을 모두 지원한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 비교 연산&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;val dateTime1 = LocalDateTime.of(2025, 1, 1, 10, 0)
val dateTime2 = LocalDateTime.of(2025, 1, 1, 12, 0)

println(dateTime1.isBefore(dateTime2)) // true
println(dateTime1.isAfter(dateTime2))  // false
println(dateTime1.isEqual(dateTime2))  // falㅅ&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;code&gt;dateTime1 &amp;lt; dateTime2&lt;/code&gt; 와 같이 비교 연산자도 사용가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 날짜/시간 분리&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;val dateTime = LocalDateTime.of(2025, 12, 4, 14, 30)

val date = dateTime.toLocalDate()  // LocalDate
val time = dateTime.toLocalTime()  // LocalTime&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. LocalDateTime + Zone 정보&lt;/h3&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;&lt;code&gt;LocalDateTime&lt;/code&gt;은 &amp;ldquo;날짜 + 시간&amp;rdquo; 정보만 가지며 &lt;b&gt;타임존이 없는 로컬 시간&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 지역의 실제 시각으로 변환하려면 &lt;code&gt;ZoneId&lt;/code&gt; 를 적용해야한다.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;val dateTime = LocalDateTime.of(2025, 12, 4, 14, 30)

val zdt = dateTime.atZone(ZoneId.of(&quot;Asia/Seoul&quot;))
println(zdt) // 2025-12-04T14:30+09:00&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;code&gt;atZone()&lt;/code&gt;: LocalDateTime에 시간대(ZoneId) 를 적용해 &lt;code&gt;LocalDateTime&lt;/code&gt; 를 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;✔ 타임존을 포함한 현재 시각 가져오기&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;val now= LocalDateTime.now(ZoneId.of(&quot;Asia/Seoul&quot;))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 타임존 기준의 LocalDateTime을 얻고 싶을 때 사용한다.&lt;/p&gt;</description>
      <category>학습 기록/kotlin</category>
      <author>BaekCCI</author>
      <guid isPermaLink="true">https://backcii.tistory.com/50</guid>
      <comments>https://backcii.tistory.com/50#entry50comment</comments>
      <pubDate>Thu, 4 Dec 2025 05:06:11 +0900</pubDate>
    </item>
  </channel>
</rss>