<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Dev JS Blog</title>
    <link>https://allmana.tistory.com/</link>
    <description>현직 개발자의 끄적 블로그</description>
    <language>ko</language>
    <pubDate>Sun, 12 Apr 2026 01:30:04 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Dev JS</managingEditor>
    <image>
      <title>Dev JS Blog</title>
      <url>https://tistory1.daumcdn.net/tistory/2898777/attach/95aff278212a4554ab8a18aeed68c2a3</url>
      <link>https://allmana.tistory.com</link>
    </image>
    <item>
      <title>초전도체: 미래 기술의 핵심, 자기장과 전기 전도성의 혁명</title>
      <link>https://allmana.tistory.com/227</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;초전도체(超電導体, Superconductor)는 특정 온도 이하에서 전기 저항이 없거나 매우 낮아지는 현상을 나타내는 물질입니다. 이러한 특성은 1911년에 처음으로 발견되었으며, 현재까지도 많은 연구와 응용 분야에서 관심을 받고 있습니다. 초전도체의 특별한 물성으로 인해 다양한 분야에서 혁신적인 기술과 발전 가능성을 가지고 있습니다. 이 글에서는 초전도체의 원리, 종류, 응용 분야, 그리고 연구 동향 등에 대해 자세히 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1111.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWUJI0/btspMLp9sb2/gLwZGWkxdZYDjxeJP0x2W1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWUJI0/btspMLp9sb2/gLwZGWkxdZYDjxeJP0x2W1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWUJI0/btspMLp9sb2/gLwZGWkxdZYDjxeJP0x2W1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWUJI0%2FbtspMLp9sb2%2FgLwZGWkxdZYDjxeJP0x2W1%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;1280&quot; height=&quot;853&quot; data-filename=&quot;1111.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;/&gt;&lt;/span&gt;&lt;/figure&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;초전도체의 주요 특성은 저온에서 전기 저항이 없거나 매우 낮아진다는 것입니다. 이러한 특성은 현상을 발견한 순간부터 물리학자들의 놀라움과 끊임없는 연구를 자아냈습니다. 초전도체의 원리는 주로 두 가지로 분류할 수 있습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;0저항 현상 (Zero Resistance Phenomenon):&lt;br /&gt;초전도체는 특정 온도, 즉 임계 온도(Critical Temperature) 이하에서 전기 저항이 완전히 사라지는 현상을 보입니다. 이 온도를 임계온도라고 하는데, 이상적인 초전도체는 0켈빈(-273.15&amp;deg;C)에서만 작동하지만, 실제 초전도체는 저온 상태에서도 동작할 수 있습니다. 초전도체의 임계 온도는 각 물질에 따라 다르며, 액체 헬륨의 온도인 4K(-269.15&amp;deg;C) 이하에서 동작하는 초전도체가 일반적입니다.&lt;/li&gt;
&lt;li&gt;메이스너 효과 (Meissner Effect):&lt;br /&gt;초전도체가 자기장에 노출되면 자기장을 완전히 배제하는 메이스너 효과를 보여줍니다. 즉, 초전도체가 자기장에 의해 높은 자기 유도를 생성하여 자기장을 밖으로 추방하는 현상입니다. 이러한 특성은 초전도체의 응용 분야에서 매우 중요한 역할을 합니다.&lt;/li&gt;
&lt;/ol&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;I형 초전도체 (Type I Superconductor):&lt;br /&gt;I형 초전도체는 메이스너 효과가 강력하게 나타나는 초전도체로, 완전한 자기 배제를 보입니다. 하지만 자기장의 강도가 특정 임계값을 초과하면 초전도 상태가 무너져 일반적인 전기 저항 상태가 됩니다. I형 초전도체는 주로 상업적인 응용 분야에서는 별로 사용되지 않습니다.&lt;/li&gt;
&lt;li&gt;II형 초전도체 (Type II Superconductor):&lt;br /&gt;II형 초전도체는 I형 초전도체와 달리 상대적으로 강한 자기장에서도 메이스너 효과를 보여주면서, 자기장의 강도가 높아져도 전기 저항이 없는 상태가 지속됩니다. 따라서 II형 초전도체가 더 많은 실용적인 응용 분야에서 사용됩니다.&lt;/li&gt;
&lt;/ol&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;자기 공진 이미징(MRI) 및 의료 분야:&lt;br /&gt;MRI는 의학적 영상화 기술로서, 초전도자성을 활용하여 높은 정확성과 해상도로 인체 내부를 영상화합니다. 초전도체를 사용하면 더욱 높은 자기장을 생성하고 이로 인해 더 정확하고 선명한 이미지를 제공할 수 있습니다.&lt;/li&gt;
&lt;li&gt;고속 기차 및 자기 부상 운송:&lt;br /&gt;초전도체의 메이스너 효과로 인해 기차와 레일 사이에 자기 부상 효과를 발생시켜 전기 저항이 없는 상태로 운전하는 초고속 열차 개발에 활용됩니다. 이를 통해 높은 속도와 에너지 효율을 제공하며, 지상과의 마찰을 최소화합니다.&lt;/li&gt;
&lt;li&gt;높은 전기 전도성을 필요로 하는 분야:&lt;br /&gt;초전도체는 전기 저항이 없기 때문에 전기 전도성이 뛰어납니다. 이 특성은 전력 손실을 최소화하는 전송선로와 전력 소비를 줄이는 전력 시스템에 응용됩니다.&lt;/li&gt;
&lt;li&gt;자기 저장 장치 및 컴퓨팅:&lt;br /&gt;초전도체는 자기 저장 장치에서 더 높은 저장 밀도를 제공하고, 초전도 계산 시스템은 매우 빠른 처리 속도와 높은 계산 속도를 제공하여 고성능 컴퓨팅에 사용됩니다. 이는 대규모 데이터 처리, 과학 연구, 인공지능 분야 등에서 중요한 역할을 합니다.&lt;/li&gt;
&lt;li&gt;전력 전송 및 분배:&lt;br /&gt;초전도체의 높은 전기 전도성은 전력의 손실 없이 원격 지역으로 전력을 전송하고 분배하는데 사용됩니다. 이를 통해 장거리 전력 송전의 효율성을 높이고, 환경 친화적인 전력 인프라 구축에 기여합니다.&lt;/li&gt;
&lt;li&gt;핵융합 기술:&lt;br /&gt;초전도체는 핵융합로 등의 핵융합 기술에서 강력한 자기장을 생성하고 제어하는데 사용됩니다. 핵융합은 태양과 비슷한 원자로 에너지를 생산하는 기술로, 무한에 가까운 에너지를 공급하는 소발전 기술의 한 가지로 간주되고 있습니다.&lt;/li&gt;
&lt;li&gt;쿨링 장치:&lt;br /&gt;초전도체는 저온에서만 작동하기 때문에 쿨링 장치에 사용됩니다. 특히 초전도체를 액체 헬륨 등의 저온 냉매로 냉각하여 임계 온도 이하로 유지하는 방식으로 사용됩니다.&lt;/li&gt;
&lt;li&gt;양자 컴퓨팅:&lt;br /&gt;초전도체를 활용한 양자 컴퓨터는 전통적인 컴퓨터보다 더 빠른 연산 능력을 제공할 수 있습니다. 양자 컴퓨터는 양자 현상을 기반으로 하는데, 초전도체의 양자 비트를 활용하여 병렬 처리와 동시성 문제를 해결할 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;a.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;652&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G391L/btspokHZdAV/NHalLGLDA6TtPQdoH4dKJK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G391L/btspokHZdAV/NHalLGLDA6TtPQdoH4dKJK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G391L/btspokHZdAV/NHalLGLDA6TtPQdoH4dKJK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG391L%2FbtspokHZdAV%2FNHalLGLDA6TtPQdoH4dKJK%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;1280&quot; height=&quot;652&quot; data-filename=&quot;a.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;652&quot;/&gt;&lt;/span&gt;&lt;/figure&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;초전도체에 대한 연구는 지속적으로 진행되고 있으며, 다음과 같은 주요 동향이 있습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;고온 초전도체:&lt;br /&gt;과거 초전도체의 주요 문제점은 저온에서만 작동해야 한다는 점이었습니다. 하지만 1986년에 고온 초전도체의 발견으로 이 문제를 일부 해결하게 되었습니다. 고온 초전도체는 상대적으로 높은 온도에서도 초전도 상태를 유지하므로 냉각 장치의 복잡성과 비용을 줄이는 데 도움이 됩니다.&lt;/li&gt;
&lt;li&gt;철기반 초전도체:&lt;br /&gt;초전도체는 다양한 종류가 있으며, 최근 철기반 초전도체가 주목받고 있습니다. 철기반 초전도체는 비교적 간단한 화학 구성과 높은 초전도 전도성을 가지고 있어 저비용의 대용량 응용에 적합하다고 평가되고 있습니다.&lt;/li&gt;
&lt;li&gt;응용 분야의 다양성:&lt;br /&gt;초전도체의 응용 분야는 계속해서 확장되고 있습니다. 양자 컴퓨팅, 핵융합, 높은 전력 전송, 그리고 자동차 산업 등에서 초전도체의 잠재력이 발휘될 것으로 기대됩니다.&lt;/li&gt;
&lt;li&gt;새로운 초전도체 소재 개발:&lt;br /&gt;초전도체 소재의 특성과 성능을 향상시키기 위해 새로운 소재의 개발이 지속적으로 이루어지고 있습니다. 이러한 연구는 높은 임계 온도, 더 강한 자기장 내에서의 안정성, 더 높은 초전도 전도성을 목표로 합니다.&lt;/li&gt;
&lt;/ol&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;</description>
      <category>IT</category>
      <category>고온초전도체</category>
      <category>물리학</category>
      <category>반도체</category>
      <category>범위변화</category>
      <category>비선형성</category>
      <category>상전이</category>
      <category>응용분야</category>
      <category>재료공학</category>
      <category>초전도체</category>
      <category>최저온도</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/227</guid>
      <comments>https://allmana.tistory.com/227#entry227comment</comments>
      <pubDate>Tue, 1 Aug 2023 20:49:14 +0900</pubDate>
    </item>
    <item>
      <title>태풍 이름 어떻게 지어질까?</title>
      <link>https://allmana.tistory.com/226</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-07-29 오후 12.32.59.png&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;738&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NWaRn/btspkLryI4U/MA9anBVh4Kuow3oAykGaKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NWaRn/btspkLryI4U/MA9anBVh4Kuow3oAykGaKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NWaRn/btspkLryI4U/MA9anBVh4Kuow3oAykGaKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNWaRn%2FbtspkLryI4U%2FMA9anBVh4Kuow3oAykGaKk%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;1252&quot; height=&quot;738&quot; data-filename=&quot;스크린샷 2023-07-29 오후 12.32.59.png&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;738&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;태풍 이름은 어떻게 지어지는 걸까요?&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;태풍 이름이 지어지는 방법은 국제 기상기구(WMO)에 의해 정해진 규칙에 따라서 이루어집니다.&lt;br /&gt;국제 기상기구는 세계적으로 기상 정보를 관리하고 협력하는 조직으로서,&lt;br /&gt;태풍 이름 지정은 태풍을 추적하고 통제하는 데 중요한 역할을 합니다.&lt;br /&gt;태풍 이름 지정은 다음과 같은 프로세스를 따릅니다.&lt;/p&gt;
&lt;h1&gt;국제 기상기구의 역할&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;국제 기상기구는 태풍 및 서로 다른 지역에서 발생하는 기상 현상들에 대한 국제적인 표준화된 명칭과 분류를 제공합니다.&lt;br /&gt;태풍 이름 지정은 이러한 표준화된 명칭 체계에 따라 이루어집니다.&lt;/p&gt;
&lt;h1&gt;태풍 이름 목록&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;국제 기상기구는 서로 다른 지역의 기상 기관들과 협력하여 매 해 새로운 태풍 이름 목록을 작성합니다.&lt;br /&gt;이 목록에는 해당 지역에서 발생할 태풍들에 대한 이름들이 포함됩니다.&lt;/p&gt;
&lt;h1&gt;지역별 태풍 이름&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;태풍 이름은 지역별로 구성된 목록에 따라 다릅니다.&lt;br /&gt;가령, 태풍이 태평양 태풍의 경우에는 중앙 태평양, 서태평양, 동태평양과 같은 지역별로 목록이 구성되며,&lt;br /&gt;대서양 태풍과 인도양 태풍도 각각의 지역별로 목록이 있습니다.&lt;/p&gt;
&lt;h1&gt;남자와 여자 이름&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;태풍 이름 목록에는 일반적으로 남자 이름과 여자 이름이 번갈아 가며 포함됩니다.&lt;br /&gt;예를 들어, 한 해의 첫 태풍은 남자 이름으로 시작하고 다음 태풍은 여자 이름으로 시작합니다.&lt;/p&gt;
&lt;h1&gt;사용된 이름은 재사용되지 않음&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;태풍 이름 목록에서 한 번 사용된 이름은 다음 목록에서 재사용되지 않습니다.&lt;br /&gt;따라서 한 해에 이름이 모두 소진되지 않더라도 다음 해에는 새로운 이름으로 시작합니다.&lt;/p&gt;
&lt;h1&gt;목록의 갱신과 변경&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;국제 기상기구는 매 해 새로운 이름 목록을 작성하고 기존의 이름 목록에서 변경사항이 필요한 경우 갱신합니다.&lt;br /&gt;이는 특정 이름이 악명 높은 태풍이나 파괴적인 태풍과 관련되었을 때, 해당 이름이 더 이상 사용되지 않도록 변경되는 경우도 있습니다.&lt;/p&gt;
&lt;h1&gt;지역적 문화 고려태풍&lt;/h1&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;br /&gt;이는 태풍 관리와 추적에 중요한 역할을 합니다.&lt;br /&gt;태풍 이름 지정은 기상학의 중요한 부분이며,&lt;br /&gt;매년 수 많은 태풍이 발생하는 지역들에서 효과적인 태풍 관리를 위해 꾸준한 노력과 협력이 이루어지고 있습니다.&lt;/p&gt;</description>
      <category>Life</category>
      <category>독수리</category>
      <category>매미</category>
      <category>이름</category>
      <category>태풍</category>
      <category>태풍이름짓기</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/226</guid>
      <comments>https://allmana.tistory.com/226#entry226comment</comments>
      <pubDate>Sat, 29 Jul 2023 12:34:23 +0900</pubDate>
    </item>
    <item>
      <title>아침에 먹으면 안좋은 음식</title>
      <link>https://allmana.tistory.com/225</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;421&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pAqnd/btspgoQ28tr/s6i1GHkTPAnyg59TWrb761/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pAqnd/btspgoQ28tr/s6i1GHkTPAnyg59TWrb761/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pAqnd/btspgoQ28tr/s6i1GHkTPAnyg59TWrb761/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpAqnd%2FbtspgoQ28tr%2Fs6i1GHkTPAnyg59TWrb761%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;628&quot; height=&quot;421&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;421&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;h4 data-ke-size=&quot;size20&quot;&gt;높은 지방 함유량의 음식&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지방이 많이 든 음식은 소화가 느리고 위를 자극할 수 있으며, 아침에 먹으면 소화에 더 많은 에너지가 필요합니다. 이로 인해 영양소 흡수에 있어서 불리하고 소화 과정에서 느슨한 배변 등의 문제가 발생할 수 있습니다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;421&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HzrOm/btspmLjBq0a/gMv0IXaDKFcsNBbuNNDKP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HzrOm/btspmLjBq0a/gMv0IXaDKFcsNBbuNNDKP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HzrOm/btspmLjBq0a/gMv0IXaDKFcsNBbuNNDKP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHzrOm%2FbtspmLjBq0a%2FgMv0IXaDKFcsNBbuNNDKP1%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;630&quot; height=&quot;421&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;421&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;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;
&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;h4 data-ke-size=&quot;size20&quot;&gt;신선하지 않은 음식&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아침에 먹는 음식은 신선하고 건강하게 준비하는 것이 중요합니다. 신선하지 않은 음식을 먹으면 소화에 문제가 생길 수 있고, 섭취한 영양소가 흡수되지 않을 수 있습니다.&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;h4 data-ke-size=&quot;size20&quot;&gt;많은 양의 체중 증가식품&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아침에 과도한 양의 체중 증가식품을 먹으면 칼로리 과다 섭취로 인해 체중이 늘어날 수 있습니다. 건강한 체중을 유지하려면 적절한 식사를 고려하는 것이 중요합니다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;421&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mCOrE/btspnk676eQ/DTLzh5jb7ZvxrskG0NHiNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mCOrE/btspnk676eQ/DTLzh5jb7ZvxrskG0NHiNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mCOrE/btspnk676eQ/DTLzh5jb7ZvxrskG0NHiNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmCOrE%2Fbtspnk676eQ%2FDTLzh5jb7ZvxrskG0NHiNK%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;693&quot; height=&quot;421&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;421&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;h4 data-ke-size=&quot;size20&quot;&gt;유제품 알레르기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유제품에 알레르기 반응이 있는 경우 아침에 유제품을 먹으면 소화 문제와 알레르기 증상이 생길 수 있습니다. 알레르기 반응이 있는 경우 대체 음식을 선택해야 합니다.&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;br /&gt;위에서 언급한 음식들은 아침에 먹으면 안 좋은 음식에 해당하므로, &lt;br /&gt;건강을 위해 적절한 음식 선택과 식사 습관을 갖는 것이 중요합니다.&lt;br /&gt;적절한 식사를 통해 건강한 생활을 유지하시길 바랍니다.&lt;/p&gt;</description>
      <category>Life</category>
      <category>아침</category>
      <category>아침에먹으면안좋은음식</category>
      <category>음식</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/225</guid>
      <comments>https://allmana.tistory.com/225#entry225comment</comments>
      <pubDate>Sat, 29 Jul 2023 08:59:17 +0900</pubDate>
    </item>
    <item>
      <title>까르보나라의 어원</title>
      <link>https://allmana.tistory.com/224</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;551&quot; data-origin-height=&quot;410&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5YCA2/btspfOotFzi/GuYXfiJYzf9iKLQbII8Qo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5YCA2/btspfOotFzi/GuYXfiJYzf9iKLQbII8Qo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5YCA2/btspfOotFzi/GuYXfiJYzf9iKLQbII8Qo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5YCA2%2FbtspfOotFzi%2FGuYXfiJYzf9iKLQbII8Qo1%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;551&quot; height=&quot;410&quot; data-origin-width=&quot;551&quot; data-origin-height=&quot;410&quot;/&gt;&lt;/span&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;br /&gt;로마의 가축꾼들이 사용하는 식사에서 유래되었다고 합니다. &lt;br /&gt;가축꾼들은 과거에 오랜 시간 동안 밖에서 가축을 늘리고 땀을 흘리게 되면서&lt;br /&gt;간단하고 영양가 있는 식사를 필요로 했습니다. &lt;br /&gt;이때 가축꾼들은 파스타에 까르보나라 소스와 비슷한 형태의 소스를 사용했다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;까르보나라 소스의 이름 &quot;카르보나라(Carbonara)&quot;는 &lt;br /&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&quot;석탄 광산 근로자&quot;&lt;/span&gt; 를 의미하는 이탈리아어 단어 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&quot;카르보나리(Carbonari)&quot;에서 유래되었습니다.&lt;/span&gt; &lt;br /&gt;이는 가축꾼들이 유명한 이탈리아 혁명 조직인 &quot;카르보나리&quot;의 멤버들과 비슷하게 검은색 옷을 입고 &lt;br /&gt;일을 하기 때문에 붙여진 별명이었습니다.&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;br /&gt;예를 들어, 제2차 세계 대전 시기에 미군 군인들이 사용한 필드레이션으로 &lt;br /&gt;제공되는 파스타를 향상시키기 위해 만들어진 것이라는 이야기도 있습니다. &lt;br /&gt;미군 군인들은 부족한 재료로 까르보나라 소스와 유사한 소스를 만들어서 파스타에 사용했다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 까르보나라 소스의 어원은 여러 가지 이야기로 둘러싸여 있으며, &lt;br /&gt;정확한 기원은 여전히 분명히 밝혀진 것은 아닙니다. &lt;br /&gt;따라서 까르보나라 소스의 역사는 여전히 논란의 여지가 있는 주제로 남아있습니다.&lt;/p&gt;</description>
      <category>Life</category>
      <category>까르보나라</category>
      <category>까르보나라 뜻</category>
      <category>어원</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/224</guid>
      <comments>https://allmana.tistory.com/224#entry224comment</comments>
      <pubDate>Fri, 28 Jul 2023 23:16:30 +0900</pubDate>
    </item>
    <item>
      <title>애완견 분양 전 확인</title>
      <link>https://allmana.tistory.com/223</link>
      <description>&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;633&quot; data-origin-height=&quot;422&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D9T3X/btspmgjFLOt/6joSkue493tBKzs1UKDbx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D9T3X/btspmgjFLOt/6joSkue493tBKzs1UKDbx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D9T3X/btspmgjFLOt/6joSkue493tBKzs1UKDbx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD9T3X%2FbtspmgjFLOt%2F6joSkue493tBKzs1UKDbx1%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;633&quot; height=&quot;422&quot; data-origin-width=&quot;633&quot; data-origin-height=&quot;422&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&lt;b&gt;적절한 훈련과 사회화&lt;/b&gt;: 반려견을 훈련하고 사회화시키는 것은 중요합니다. 기본적인 명령어 학습과 사람들과 다른 동물들과의 상호작용을 통해 긍정적인 경험을 할 수 있도록 도와주세요.&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;&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;622&quot; data-origin-height=&quot;403&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I3jfa/btsplMiQxu6/P2YxVyrIk1KufF06nR02e1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I3jfa/btsplMiQxu6/P2YxVyrIk1KufF06nR02e1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I3jfa/btsplMiQxu6/P2YxVyrIk1KufF06nR02e1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI3jfa%2FbtsplMiQxu6%2FP2YxVyrIk1KufF06nR02e1%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;622&quot; height=&quot;403&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;403&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&lt;b&gt;정기적인 건강 관리&lt;/b&gt;: 애완견의 건강 상태를 주시하고, 정기적인 건강 검진과 목욕, 그리고 구충과 진드기 예방 등을 시행해주세요.&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;&lt;b&gt;안전한 환경 제공&lt;/b&gt;: 애완견에게 안전한 환경을 제공하고, 위험한 물건과 장소로부터 멀리하시기 바랍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반려견은 가족처럼 소중한 존재이므로, 책임 있게 키우는 것이 중요합니다. 필요한 관리와 사랑을 함께 하면서 애완견과의 즐거운 시간을 보내시길 바랍니다.&lt;/p&gt;</description>
      <category>Life</category>
      <category>강아지</category>
      <category>개</category>
      <category>반려동물</category>
      <category>분양</category>
      <category>애완견</category>
      <category>주의사항</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/223</guid>
      <comments>https://allmana.tistory.com/223#entry223comment</comments>
      <pubDate>Fri, 28 Jul 2023 23:10:59 +0900</pubDate>
    </item>
    <item>
      <title>팔굽혀펴기 개수 늘리는 방법 과 중요성</title>
      <link>https://allmana.tistory.com/222</link>
      <description>&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;sport-gad9e0216b_640.jpg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/emLwMD/btso7Sq8qjX/mK25VKmBjar7QPuts9Fu41/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/emLwMD/btso7Sq8qjX/mK25VKmBjar7QPuts9Fu41/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/emLwMD/btso7Sq8qjX/mK25VKmBjar7QPuts9Fu41/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FemLwMD%2Fbtso7Sq8qjX%2FmK25VKmBjar7QPuts9Fu41%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;640&quot; height=&quot;392&quot; data-filename=&quot;sport-gad9e0216b_640.jpg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&lt;b&gt;조절된 난이도:&lt;/b&gt; 처음에는 팔굽혀펴기를 제대로 하기 어렵거나 불가능할 수 있습니다. 이때, 무리하지 않도록 적절한 난이도를 선택하여 시작하는 것이 중요합니다. 무릎을 바닥에 대고 하는 기본 자세로 시작하고, 점차 어려운 자세로 전환해가면서 능력을 키워나가면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;꾸준한 연습:&lt;/b&gt; 팔굽혀펴기 개수를 늘리기 위해서는 꾸준한 연습이 필요합니다. 매일 몇 세트씩 시간을 내어 연습하거나, 주 3~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;&lt;b&gt;선별적인 훈련:&lt;/b&gt; 특정 근육을 강화하는 훈련을 통해 팔굽혀펴기 개수를 늘릴 수 있습니다. 팔뚝 근육을 강화하기 위해 바벨컬, 케이블 새기, 삼두 덤벨 익스텐션과 같은 운동을 추가적으로 실시하면 도움이 됩니다.&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;&lt;b&gt;신체 무게 조절:&lt;/b&gt; 체중과 상관없이 팔굽혀펴기를 할 수 있지만, 체중에 따라 난이도가 달라질 수 있습니다. 체중을 관리하여 근육에 가해지는 부담을 줄이면서 팔굽혀펴기 횟수를 늘리는 데 도움이 됩니다.&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;&lt;b&gt;운동 외 활동:&lt;/b&gt; 팔굽혀펴기 개수를 늘리기 위해서는 다양한 활동을 통해 신체 전반적인 건강을 유지하는 것이 중요합니다. 유산소 운동, 스트레칭, 근력 운동 등을 조합하여 신체를 더 건강하게 유지하면 팔굽혀펴기를 개선하는 데 도움이 됩니다.&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;팔굽혀펴기를 늘리는 것은 쉬운 일이 아닙니다. 하지만 꾸준한 노력과 올바른 접근 방법을 갖춘다면, 개선된 근력과 체력을 느낄 수 있을 것입니다. 최종 목표보다는 지속적인 발전과 개선에 집중하여 자신의 한계를 뛰어넘을 수 있기를 바랍니다. 건강한 생활습관과 목표에 맞는 훈련 계획을 구성하여 팔굽혀펴기 개수를 늘려나가시길 바라며, 좋은 결과를 얻을 수 있기를 기원합니다.&lt;/p&gt;</description>
      <category>Life</category>
      <category>pushup</category>
      <category>팔굽혀펴기</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/222</guid>
      <comments>https://allmana.tistory.com/222#entry222comment</comments>
      <pubDate>Thu, 27 Jul 2023 20:57:39 +0900</pubDate>
    </item>
    <item>
      <title>Expo Sqlite 사용법</title>
      <link>https://allmana.tistory.com/220</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Expo Sqlite 를 사용하기 위해 패키지를 추가해준다.&lt;/p&gt;
&lt;pre id=&quot;code_1687576086062&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn add expo-sqlite&lt;/code&gt;&lt;/pre&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;import * as SQLite from 'expo-sqlite'

const DB_NAME = 'app.db'
const DB_VERSION = '1'

const db = SQLite.openDatabase(DB_NAME, DB_VERSION)
db.exec([{ sql: 'PRAGMA foreign_keys = ON;', args: [] }], false, () =&amp;gt;
	console.log('Foreign keys turned on')
)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 DB 이름과 버전을 지정해준다.&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;db.transaction(tx=&amp;gt;{
  tx.executeSql('select * from table',[],
  (tx,resultSet)=&amp;gt;{
  	// query callback 
    // result.rows
  },(tx,error)=&amp;gt;{
	// query error 
  })
},(tx,error)=&amp;gt;{
	// transaction error
},()=&amp;gt;{
	//transaction success
})&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적인 조회 방법이다.&amp;nbsp;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Select&amp;nbsp;&lt;/h4&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;db.transaction(tx=&amp;gt;{
  tx.executeSql('SELECT * FROM table',
    [],
    (tx,resultSet)=&amp;gt;{
      for(let i = 0; i &amp;lt; resultSet.rows.length; i++){
        resultSet.rows.item(i)
      }
    },&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;resultSet.rows.item 을 통해서 query 결과를 가져올수있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Insert&lt;/h4&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;db.transaction(tx=&amp;gt;{
  tx.executeSql('INSERT INTO table (id,name) values(?,?)',
  [1,'js'],
  ()=&amp;gt;{

  },(tx,error)=&amp;gt;{

  })&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;insert 쿼리에 ? 을 하고 그다음 배열에 파라미터를 입력해주면 ? 에 매핑되어 insert 를 할 수있다.&lt;br /&gt;물론 ? 를 안쓰고 그냥 select 하는것처럼 쿼리를 돌려도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT</category>
      <category>expo</category>
      <category>Native</category>
      <category>react</category>
      <category>sqlite</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/220</guid>
      <comments>https://allmana.tistory.com/220#entry220comment</comments>
      <pubDate>Sat, 24 Jun 2023 12:26:17 +0900</pubDate>
    </item>
    <item>
      <title>React Native Navigation + TypeScript Props 설정</title>
      <link>https://allmana.tistory.com/219</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번에 새로운 앱을 또 만들면서 타입스크립트로 진행했는데&lt;br /&gt;navigation을 할때 문제가 생겼다.&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;&amp;lt;NavigationContainer&amp;gt;
  &amp;lt;Stack.Navigator&amp;gt;
    &amp;lt;Stack.Screen
      name={'Main'}
      component={Main}
      options={{
        headerShown: false
      }}
    /&amp;gt;
    ...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적인 navigation 소스를 작성하고 Main 페이지에서 Props 받았는데&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;566&quot; data-origin-height=&quot;104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pfCZ2/btsk2A0IQ1U/KeHYlsq6rVtDsgIUcVw7oK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pfCZ2/btsk2A0IQ1U/KeHYlsq6rVtDsgIUcVw7oK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pfCZ2/btsk2A0IQ1U/KeHYlsq6rVtDsgIUcVw7oK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpfCZ2%2Fbtsk2A0IQ1U%2FKeHYlsq6rVtDsgIUcVw7oK%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;566&quot; height=&quot;104&quot; data-origin-width=&quot;566&quot; data-origin-height=&quot;104&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;navigation 이 에러가 났다. 타입스크립트다 보니 역시 타입을 지정해줘야겠다 생각했는데&amp;nbsp;&lt;br /&gt;근데 뭘로 지정해야하는건지 막막했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 원하는 페이지 는 일단 2개 이다. Main 페이지와 Excercise 페이지이다.&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;export type RootStackParamList = {
    Main: undefined;
    Exercise: undefined;
};&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 페이지 네임을 type 으로 생성해준다.&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;stata&quot;&gt;&lt;code&gt;const Stack = createStackNavigator&amp;lt;RootStackParamList&amp;gt;()&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Stack의 제네릭을 RootStackParamList 로 지정해준다.&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const Main = ({navigation}:StackScreenProps&amp;lt;RootStackParamList&amp;gt;) =&amp;gt; {

...
// 원하는 이벤트에 
navigation.navigate('Exercise')&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Main에 타입 지정을 StackScreenProps로 해주고 제네릭은 아까 생성한 RootStackParamList로 한다.&lt;br /&gt;그후 navigaion.navigate로 원하는 페이지로 이동할수 있다.&lt;/p&gt;</description>
      <category>IT</category>
      <category>expo</category>
      <category>Native</category>
      <category>Navigation</category>
      <category>react</category>
      <category>typescript</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/219</guid>
      <comments>https://allmana.tistory.com/219#entry219comment</comments>
      <pubDate>Thu, 22 Jun 2023 21:20:19 +0900</pubDate>
    </item>
    <item>
      <title>Expo prebuild 후 가상 디바이스 실행 안될때.</title>
      <link>https://allmana.tistory.com/218</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;expo에서 프리빌드하고 환경 변수까지 세팅 다하고 가상디바이스 까지 켜지는데&lt;br /&gt;Activity 를 실행 못 한대나 뭐래나... 가상디바이스는 실행이 잘되는데&lt;br /&gt;정작 앱 실행이 계속 되지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;몇시간 삽질 후 뭔가 꺼림직했던 것중 하나가 이번에 새로 만든 앱 패키지명에 언더바(_)가 껴있었는데&lt;br /&gt;이게 문제 일까 하고 패키지명을 수정해보니.. 앱 실행이 잘되었다. &lt;br /&gt;&lt;br /&gt;혹여 패키지 명에 언더바가 들어간다면&amp;nbsp;&lt;br /&gt;app.json 에서 package 명을 지우던가 수정하고&amp;nbsp;&lt;br /&gt;android, .expo 파일을 삭제하고 다시 실행해보면 된다.&lt;br /&gt;이걸로 몇시간 고생했는데 행여 나같은 분들 있으면 패키지명 고쳐보세요..!&lt;/p&gt;</description>
      <category>IT</category>
      <category>ADB</category>
      <category>expo</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/218</guid>
      <comments>https://allmana.tistory.com/218#entry218comment</comments>
      <pubDate>Mon, 19 Jun 2023 23:36:35 +0900</pubDate>
    </item>
    <item>
      <title>SDK 환경 변수 설정 및 Expo 가상 디바이스 실행</title>
      <link>https://allmana.tistory.com/217</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;SDK 환경 변수 설정하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;고급 시스템 설정 &amp;gt; 시스템 속성 &amp;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;480&quot; data-origin-height=&quot;531&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7GCLW/btskuW4dtkP/oyykM7GeKwszRFLsDWN3X0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7GCLW/btskuW4dtkP/oyykM7GeKwszRFLsDWN3X0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7GCLW/btskuW4dtkP/oyykM7GeKwszRFLsDWN3X0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7GCLW%2FbtskuW4dtkP%2FoyykM7GeKwszRFLsDWN3X0%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;480&quot; height=&quot;531&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;531&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;환경변수에서 &lt;b&gt;시스템 변수 &amp;gt; Path 를 편집&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;549&quot; data-origin-height=&quot;193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ct0Gaf/btsknNUhG8D/DkKrVwo1LVk0e9nndJLAfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ct0Gaf/btsknNUhG8D/DkKrVwo1LVk0e9nndJLAfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ct0Gaf/btsknNUhG8D/DkKrVwo1LVk0e9nndJLAfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fct0Gaf%2FbtsknNUhG8D%2FDkKrVwo1LVk0e9nndJLAfk%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;549&quot; height=&quot;193&quot; data-origin-width=&quot;549&quot; data-origin-height=&quot;193&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Path에 Sdk &lt;b&gt;platform-tools 경로를 새로 추가&lt;/b&gt; 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cmd 창에서 adb 를 입력했을때 버전 정보가 나온다면 성공이다.&lt;br /&gt;이후 IDE 툴도 재실행 해주자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 Expo 를 쓰면서 가상 디바이스 실행이 계속 안되어서 봤더니&amp;nbsp;&lt;br /&gt;환경변수를 또 추가해줘야 했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;519&quot; data-origin-height=&quot;263&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMZTsA/btskg8k93eO/5sNQDJTljFkqJyK9nQQyVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMZTsA/btskg8k93eO/5sNQDJTljFkqJyK9nQQyVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMZTsA/btskg8k93eO/5sNQDJTljFkqJyK9nQQyVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMZTsA%2Fbtskg8k93eO%2F5sNQDJTljFkqJyK9nQQyVK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;519&quot; height=&quot;263&quot; data-origin-width=&quot;519&quot; data-origin-height=&quot;263&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템 변수가 아닌 그냥 변수에 ANDROID_HOME 으로 sdk 경로를 새로 추가해주니&lt;br /&gt;가상 디바이스가 제대로 잘 실행이 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT</category>
      <category>Android</category>
      <category>sdk</category>
      <category>환경변수</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/217</guid>
      <comments>https://allmana.tistory.com/217#entry217comment</comments>
      <pubDate>Sun, 18 Jun 2023 20:18:21 +0900</pubDate>
    </item>
    <item>
      <title>Expo Admob Error : RNGoogleMobileAdsBannerView</title>
      <link>https://allmana.tistory.com/216</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Expo 에 Admob 패키지인&amp;nbsp;&lt;br /&gt;&lt;b&gt;react-native-google-mobile-ads&lt;/b&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;351&quot; data-origin-height=&quot;204&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FWxbM/btskrmhK2No/HV8an5SNKBjeWqPKaCUdLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FWxbM/btskrmhK2No/HV8an5SNKBjeWqPKaCUdLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FWxbM/btskrmhK2No/HV8an5SNKBjeWqPKaCUdLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFWxbM%2FbtskrmhK2No%2FHV8an5SNKBjeWqPKaCUdLK%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;351&quot; height=&quot;204&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;204&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RNGoogleMobileAdsBannerView 라는 에러가 발생한다.&lt;br /&gt;Admob 추가 후 여러가지 에러들이 발생할 것이다.&lt;br /&gt;Admob을 추가하는 순간 이제 (기존에 사용하던) Expo Go 를 사용할 수는 없다.&lt;/p&gt;
&lt;pre id=&quot;code_1687082938690&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn expo prebuild

혹은 

yarn android&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;해당 명령어 후 패키지 이름을 지정해주면 android&amp;nbsp; 폴더가 생성이 된다.&lt;br /&gt;&lt;/span&gt;이후 기존 실행대로 실행하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 가상디바이스가 실행이 안된다면 환경변수 설정을 해주자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/217&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2023.06.18 - [IT] - SDK 환경 변수 설정 및 Expo 가상 디바이스 실행&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1687087148078&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;SDK 환경 변수 설정 및 Expo 가상 디바이스 실행&quot; data-og-description=&quot;SDK 환경 변수 설정하자. 고급 시스템 설정 &amp;gt; 시스템 속성 &amp;gt; 환경변수 환경변수에서 시스템 변수 &amp;gt; Path 를 편집 Path에 Sdk platform-tools 경로를 새로 추가 해준다. cmd 창에서 adb 를 입력했을때 버전 정&quot; data-og-host=&quot;allmana.tistory.com&quot; data-og-source-url=&quot;https://allmana.tistory.com/217&quot; data-og-url=&quot;https://allmana.tistory.com/217&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hIaD0/hyS1fRcUa4/6freGVckheu8rhX6pSCG71/img.png?width=480&amp;amp;height=531&amp;amp;face=0_0_480_531,https://scrap.kakaocdn.net/dn/b98o4A/hyS2Fnc4P6/CiUQ3coNGqK084YVNxsiTk/img.png?width=480&amp;amp;height=531&amp;amp;face=0_0_480_531,https://scrap.kakaocdn.net/dn/BcGno/hyS2Ae78To/4RNFNWDPSZDMW5k4qZNmu1/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/217&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allmana.tistory.com/217&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hIaD0/hyS1fRcUa4/6freGVckheu8rhX6pSCG71/img.png?width=480&amp;amp;height=531&amp;amp;face=0_0_480_531,https://scrap.kakaocdn.net/dn/b98o4A/hyS2Fnc4P6/CiUQ3coNGqK084YVNxsiTk/img.png?width=480&amp;amp;height=531&amp;amp;face=0_0_480_531,https://scrap.kakaocdn.net/dn/BcGno/hyS2Ae78To/4RNFNWDPSZDMW5k4qZNmu1/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080');&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;SDK 환경 변수 설정 및 Expo 가상 디바이스 실행&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SDK 환경 변수 설정하자. 고급 시스템 설정 &amp;gt; 시스템 속성 &amp;gt; 환경변수 환경변수에서 시스템 변수 &amp;gt; Path 를 편집 Path에 Sdk platform-tools 경로를 새로 추가 해준다. cmd 창에서 adb 를 입력했을때 버전 정&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;allmana.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT</category>
      <category>Admob</category>
      <category>expo</category>
      <category>Google</category>
      <category>광고</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/216</guid>
      <comments>https://allmana.tistory.com/216#entry216comment</comments>
      <pubDate>Sun, 18 Jun 2023 19:41:33 +0900</pubDate>
    </item>
    <item>
      <title>EAS Android 구글 콘솔 연동 설정하기</title>
      <link>https://allmana.tistory.com/214</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 과정은 먼저 프로젝트가 EXPO 로 만든 앱으로 EAS 첫 설정이 되어 있어야 하며&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;최초 앱 출시가 완료된 후 진행 한다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;EAS 를 통한 배포를 하기위해서는 구글 콘솔과 EAS 를 연동 해줘야한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 구글 콘솔 액세스 설정&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 구글 콘솔에서&lt;b&gt; 설정 &amp;gt; API 엑세스&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;691&quot; data-origin-height=&quot;810&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QIUU2/btsjX4v8VPy/nOEj0egQBDCnzw4jCpLm90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QIUU2/btsjX4v8VPy/nOEj0egQBDCnzw4jCpLm90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QIUU2/btsjX4v8VPy/nOEj0egQBDCnzw4jCpLm90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQIUU2%2FbtsjX4v8VPy%2FnOEj0egQBDCnzw4jCpLm90%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;691&quot; height=&quot;810&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;810&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;932&quot; data-origin-height=&quot;271&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIw4Z5/btsjWpnluu7/PVnVvv9u1EbX3Hz4k7JyG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIw4Z5/btsjWpnluu7/PVnVvv9u1EbX3Hz4k7JyG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIw4Z5/btsjWpnluu7/PVnVvv9u1EbX3Hz4k7JyG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIw4Z5%2FbtsjWpnluu7%2FPVnVvv9u1EbX3Hz4k7JyG0%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;932&quot; height=&quot;271&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;271&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;google cloud platform 에서 보기 클릭&lt;/b&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. Google Cloud 설정&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfy1N2/btsj0dyPnEz/3tpnd9dfGS3CNVPDhWEfXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfy1N2/btsj0dyPnEz/3tpnd9dfGS3CNVPDhWEfXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfy1N2/btsj0dyPnEz/3tpnd9dfGS3CNVPDhWEfXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcfy1N2%2Fbtsj0dyPnEz%2F3tpnd9dfGS3CNVPDhWEfXK%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;945&quot; height=&quot;268&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러가지가 있지만&lt;b&gt; IAM및 관리자&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;1129&quot; data-origin-height=&quot;342&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FeWwm/btsj0aPIugF/nNQn6pKUjztka87zDUo1zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FeWwm/btsj0aPIugF/nNQn6pKUjztka87zDUo1zk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FeWwm/btsj0aPIugF/nNQn6pKUjztka87zDUo1zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFeWwm%2Fbtsj0aPIugF%2FnNQn6pKUjztka87zDUo1zk%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;1129&quot; height=&quot;342&quot; data-origin-width=&quot;1129&quot; data-origin-height=&quot;342&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 계정 에서 &lt;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;865&quot; data-origin-height=&quot;433&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bc1yzC/btsjZ9QM3rI/jp5l8uQELor0xQBFqyITLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bc1yzC/btsjZ9QM3rI/jp5l8uQELor0xQBFqyITLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bc1yzC/btsjZ9QM3rI/jp5l8uQELor0xQBFqyITLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc1yzC%2FbtsjZ9QM3rI%2Fjp5l8uQELor0xQBFqyITLk%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;865&quot; height=&quot;433&quot; data-origin-width=&quot;865&quot; data-origin-height=&quot;433&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계정 이름을 입력하면 서비스 계정 ID는 자동으로 입력된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;337&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZ8EuF/btsjYNOa3j7/oQ7E5NfdwpfYtFZqxx3W6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZ8EuF/btsjYNOa3j7/oQ7E5NfdwpfYtFZqxx3W6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZ8EuF/btsjYNOa3j7/oQ7E5NfdwpfYtFZqxx3W6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZ8EuF%2FbtsjYNOa3j7%2FoQ7E5NfdwpfYtFZqxx3W6k%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;526&quot; height=&quot;337&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;337&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역할은 서비스계정 &amp;gt; 서비스 계정 사용자로 선택 후 완료한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;515&quot; data-origin-height=&quot;504&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2ncTN/btsjX431Klk/qpfJzpmMOvklTWDbpdwVK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2ncTN/btsjX431Klk/qpfJzpmMOvklTWDbpdwVK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2ncTN/btsjX431Klk/qpfJzpmMOvklTWDbpdwVK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2ncTN%2FbtsjX431Klk%2FqpfJzpmMOvklTWDbpdwVK0%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;515&quot; height=&quot;504&quot; data-origin-width=&quot;515&quot; data-origin-height=&quot;504&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완료 하면 서비스 계정이 완성되어있다.&lt;br /&gt;생성된 서비스 계정에 키관리를 선택 해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RPkGG/btsjYM2Q4jQ/o2RhmxfXUjaW3Ft6uJVrI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RPkGG/btsjYM2Q4jQ/o2RhmxfXUjaW3Ft6uJVrI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RPkGG/btsjYM2Q4jQ/o2RhmxfXUjaW3Ft6uJVrI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRPkGG%2FbtsjYM2Q4jQ%2Fo2RhmxfXUjaW3Ft6uJVrI0%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;1324&quot; height=&quot;470&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키 추가로 만들기를 해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;456&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Acptl/btsjTubnoL9/oyaaFWeHLySmUXEqgby7I0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Acptl/btsjTubnoL9/oyaaFWeHLySmUXEqgby7I0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Acptl/btsjTubnoL9/oyaaFWeHLySmUXEqgby7I0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAcptl%2FbtsjTubnoL9%2FoyaaFWeHLySmUXEqgby7I0%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;976&quot; height=&quot;456&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;456&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만들기 후 &lt;b&gt;다운로드 되어지는 파일은 이따가 프로젝트 경로로 이동할 예정이다.&lt;/b&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. 구글 콘솔 설정&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시&lt;b&gt; '구글 콘솔 사이트'&lt;/b&gt;로 가서 API 액세스로 가보면 서비스 계정이 생성되어있는걸 확인 할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1108&quot; data-origin-height=&quot;304&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dHSjSt/btsjWrZMCCN/7rAPx7k0eXyxvu6aFLHny0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dHSjSt/btsjWrZMCCN/7rAPx7k0eXyxvu6aFLHny0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dHSjSt/btsjWrZMCCN/7rAPx7k0eXyxvu6aFLHny0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdHSjSt%2FbtsjWrZMCCN%2F7rAPx7k0eXyxvu6aFLHny0%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;1108&quot; height=&quot;304&quot; data-origin-width=&quot;1108&quot; data-origin-height=&quot;304&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;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;839&quot; data-origin-height=&quot;553&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v5p0m/btsjTu3twlX/LZsKLpK6dEQBKsoWbr8tl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v5p0m/btsjTu3twlX/LZsKLpK6dEQBKsoWbr8tl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v5p0m/btsjTu3twlX/LZsKLpK6dEQBKsoWbr8tl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv5p0m%2FbtsjTu3twlX%2FLZsKLpK6dEQBKsoWbr8tl1%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;839&quot; height=&quot;553&quot; data-origin-width=&quot;839&quot; data-origin-height=&quot;553&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. 프로젝트 설정&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아까 받은 비공개 키(JSON) 파일을 프로젝트 원하는 위치에 두고&amp;nbsp;&lt;br /&gt;app.json 과 eas.json 파일에 설정값을 추가 해준다.&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;app.json
&quot;expo&quot;:{
  &quot;version&quot;:1.1.0 // 버전 업
}



eas.json

&quot;build&quot;: {
  &quot;production&quot;: {
    &quot;autoIncrement&quot;: true // 버전 코드 값의 자동 증가
  }
},
&quot;submit&quot;: {
  &quot;production&quot;: {
    &quot;android&quot;: {
      &quot;serviceAccountKeyPath&quot;: &quot;./pc-api-xxxxx.json&quot;, // 키 파일 경로
      &quot;track&quot;: &quot;internal&quot;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;app.json 에는 version 을 올려주고 &lt;br /&gt;eas.json 에는 production에 autoIncrement 는 submit 할때 version code 값을 자동으로 증가하기 위해서 추가 하였다.&lt;br /&gt;자동 증가를 안할꺼라면 수동으로 해줘야한다. 그리고 submit 에 key path를 추가해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 eas 를 통한 자동 배포는 완료된다.&lt;/p&gt;
&lt;pre id=&quot;code_1686867906389&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;eas build -p android&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하면 자동으로 eas 에 production으로 빌드가 올라간다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;276&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cucPOh/btsj8BT1b6F/9rcpF569nEZLVLqHbtNZnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cucPOh/btsj8BT1b6F/9rcpF569nEZLVLqHbtNZnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cucPOh/btsj8BT1b6F/9rcpF569nEZLVLqHbtNZnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcucPOh%2Fbtsj8BT1b6F%2F9rcpF569nEZLVLqHbtNZnk%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;1536&quot; height=&quot;276&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;276&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;pre id=&quot;code_1686868086113&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;eas submit&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;android 선택&lt;br /&gt;Select a build from EAS 선택&lt;br /&gt;가장 최근 build 버전을 선택 해주면된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1450&quot; data-origin-height=&quot;422&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Jtj6y/btsj3mj0XzA/GR5OChmNo1klq7BuAEmsG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Jtj6y/btsj3mj0XzA/GR5OChmNo1klq7BuAEmsG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jtj6y/btsj3mj0XzA/GR5OChmNo1klq7BuAEmsG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJtj6y%2Fbtsj3mj0XzA%2FGR5OChmNo1klq7BuAEmsG1%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;1450&quot; height=&quot;422&quot; data-origin-width=&quot;1450&quot; data-origin-height=&quot;422&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완료가 되면 expo 에서 submissions 에 보면 완료가 된걸 확인 할 수 있다.&lt;br /&gt;하지만 이건 최종적으로 새 버전이 구글스토어에 배포가 된 것은 아니다.&lt;br /&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;2350&quot; data-origin-height=&quot;732&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Vb6wg/btsj5xFBNFx/kIgW9Qd38f9nxgYgpZaQKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Vb6wg/btsj5xFBNFx/kIgW9Qd38f9nxgYgpZaQKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Vb6wg/btsj5xFBNFx/kIgW9Qd38f9nxgYgpZaQKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVb6wg%2Fbtsj5xFBNFx%2FkIgW9Qd38f9nxgYgpZaQKk%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;2350&quot; height=&quot;732&quot; data-origin-width=&quot;2350&quot; data-origin-height=&quot;732&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라이브러리에서 추가 를 클릭해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2348&quot; data-origin-height=&quot;1240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N5zbI/btsj9B7iIFS/u7eKGGXSjjnF9R0vOcdcx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N5zbI/btsj9B7iIFS/u7eKGGXSjjnF9R0vOcdcx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N5zbI/btsj9B7iIFS/u7eKGGXSjjnF9R0vOcdcx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN5zbI%2Fbtsj9B7iIFS%2Fu7eKGGXSjjnF9R0vOcdcx1%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;2348&quot; height=&quot;1240&quot; data-origin-width=&quot;2348&quot; data-origin-height=&quot;1240&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라이브러리를 보면 EAS 를 통해 submit 한 파일이 올라가 있는걸 확인 할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2668&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ryVCr/btsj7KX5nMF/gxF8hUvozKVkKx6dSYLm20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ryVCr/btsj7KX5nMF/gxF8hUvozKVkKx6dSYLm20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ryVCr/btsj7KX5nMF/gxF8hUvozKVkKx6dSYLm20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FryVCr%2Fbtsj7KX5nMF%2FgxF8hUvozKVkKx6dSYLm20%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;2668&quot; height=&quot;294&quot; data-origin-width=&quot;2668&quot; data-origin-height=&quot;294&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;EAS로 자동 배포까지 다 된다고 해서 출시 노트 같은걸 작성 안했는데 어떻게 알아서 되나 했더니&lt;br /&gt;구글 콘솔 app 라이브러리에 자동으로 올려준다는 뜻이였다.&amp;nbsp;&lt;br /&gt;뭐 이정도도 상당히 편하기는 하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예전 앱을 개발 한 뒤에는 키 스토어를 관리하는 것도 귀찮았고 이후에는 신경을 끄기 때문에 더더욱 관리가 쉽지 않았다.&lt;br /&gt;EXPO를 사용하니 키 관리도 알아서 해주고 build 관리와 배포까지 해주는 상당히 편한감은 있다.&lt;br /&gt;다만 build 가 무료로 사용하다보니 새벽시간?에는 상당히 대기가 길어졌었다 (외국 사람들이 많이 이용하는 시간대인건지)&lt;br /&gt;오래 걸릴때는 예상시간이 90분(?) 이라고 뜬적도 있었으나 그 때 빼고는 10분 정도에 끝나는거 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱을 출시할때 입력하고 하는게 귀찮아서 그렇지 앱 출시 이후에는 eas 로 관리하니 상당히 편하고 좋은거 같다.&lt;/p&gt;</description>
      <category>IT</category>
      <category>Android</category>
      <category>build</category>
      <category>EAS</category>
      <category>expo</category>
      <category>submit</category>
      <category>배포</category>
      <category>안드로이드</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/214</guid>
      <comments>https://allmana.tistory.com/214#entry214comment</comments>
      <pubDate>Wed, 14 Jun 2023 21:17:32 +0900</pubDate>
    </item>
    <item>
      <title>Expo Android App 만들기 - 10 (구글 스토어에 출시,개인정보처리방침)</title>
      <link>https://allmana.tistory.com/211</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/210&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2023.06.13 - [IT] - Expo Android App 만들기 - 9 (EAS Build)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686745323042&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;Expo Android App 만들기 - 9 (EAS Build)&quot; data-og-description=&quot;2023.06.13 - [분류 전체보기] - Expo Android App 만들기 - 8 (Admob Button) Expo Android App 만들기 - 8 (Admob Button) 2023.06.11 - [IT] - Expo Android App 만들기 - 7 (React Navigation) Expo Android App 만들기 - 7 (React Navigation) 2023.06&quot; data-og-host=&quot;allmana.tistory.com&quot; data-og-source-url=&quot;https://allmana.tistory.com/210&quot; data-og-url=&quot;https://allmana.tistory.com/210&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/GpaTl/hyS0mOT7M3/SG9VlkyfPCkWfL2F4SKm0k/img.png?width=568&amp;amp;height=1192&amp;amp;face=0_0_568_1192,https://scrap.kakaocdn.net/dn/b6SOyx/hyS0aVfCnd/O6z1AAq1nHKWpjaseKsWbk/img.png?width=568&amp;amp;height=1192&amp;amp;face=0_0_568_1192,https://scrap.kakaocdn.net/dn/Wn08a/hySYA2jfsU/psYTF2yo2Om0u3ImyawKB0/img.png?width=2362&amp;amp;height=456&amp;amp;face=0_0_2362_456&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/210&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allmana.tistory.com/210&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/GpaTl/hyS0mOT7M3/SG9VlkyfPCkWfL2F4SKm0k/img.png?width=568&amp;amp;height=1192&amp;amp;face=0_0_568_1192,https://scrap.kakaocdn.net/dn/b6SOyx/hyS0aVfCnd/O6z1AAq1nHKWpjaseKsWbk/img.png?width=568&amp;amp;height=1192&amp;amp;face=0_0_568_1192,https://scrap.kakaocdn.net/dn/Wn08a/hySYA2jfsU/psYTF2yo2Om0u3ImyawKB0/img.png?width=2362&amp;amp;height=456&amp;amp;face=0_0_2362_456');&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;Expo Android App 만들기 - 9 (EAS Build)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;2023.06.13 - [분류 전체보기] - Expo Android App 만들기 - 8 (Admob Button) Expo Android App 만들기 - 8 (Admob Button) 2023.06.11 - [IT] - Expo Android App 만들기 - 7 (React Navigation) Expo Android App 만들기 - 7 (React Navigation) 2023.06&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;allmana.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 이 로또 번호 뽑기 앱을 구글 스토어에 출시해보겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 EXPO 에 가입을 해야한다.&lt;br /&gt;EAS 설치&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1686661933788&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn add -g eas-cli
// eas 로그인
eas login&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인 작업을 마치고&amp;nbsp;&lt;br /&gt;나는 안드로이드만 출시할 생각이니&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1686664366257&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;eas build --platform android&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 해주면 EAS 로 빌드가 된다.&lt;br /&gt;키스토어(인증키)에 대해서도 물어보는데 eas 한테 맡기자&amp;nbsp;&lt;br /&gt;(기본 빌드 시간보다 시간이 꽤 소요되니 화장실 다녀오자⏳)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2394&quot; data-origin-height=&quot;380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bz5XEJ/btsjQhPqGRd/eO6UYW8RKX8ajjnLk1bw8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bz5XEJ/btsjQhPqGRd/eO6UYW8RKX8ajjnLk1bw8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bz5XEJ/btsjQhPqGRd/eO6UYW8RKX8ajjnLk1bw8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbz5XEJ%2FbtsjQhPqGRd%2FeO6UYW8RKX8ajjnLk1bw8k%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;2394&quot; height=&quot;380&quot; data-origin-width=&quot;2394&quot; data-origin-height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빌드가 성공적으로 됐다면 EXPO 사이트에서 보면 내 앱이 Build 되있는걸 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;aab 파일을 다운로드 할 수 있고 배포 준비는 완료됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://play.google.com/console&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://play.google.com/console&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686665553462&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;Google Play Console&quot; data-og-description=&quot;로그인 Google Play Console로 이동&quot; data-og-host=&quot;accounts.google.com&quot; data-og-source-url=&quot;https://play.google.com/console/u/0/developers/7608391225399963375/app-list?pli=1&quot; data-og-url=&quot;https://accounts.google.com/v3/signin/identifier?dsh=S1997259364%3A1686665453892052&amp;amp;continue=https%3A%2F%2Fplay.google.com%2Fconsole%2Fu%2F0%2Fdevelopers%2F7608391225399963375%2Fapp-list%3Fpli%3D1&amp;amp;ffgf=1&amp;amp;followup=https%3A%2F%2Fplay.google.com%2Fconsole%2Fu%2F0%2Fdevelopers%2F7608391225399963375%2Fapp-list%3Fpli%3D1&amp;amp;ifkv=Af_xneFDEuOJlRCO6tX33Xbc4PLFj84vGLTc2jLVk2Co-e8TuRPmcILDp8xowkgRs12PQ49RaHvx4A&amp;amp;passive=1209600&amp;amp;service=androiddeveloper&amp;amp;flowName=WebLiteSignIn&amp;amp;flowEntry=ServiceLogin&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://play.google.com/console/u/0/developers/7608391225399963375/app-list?pli=1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://play.google.com/console/u/0/developers/7608391225399963375/app-list?pli=1&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;Google Play Console&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;로그인 Google Play Console로 이동&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;accounts.google.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;시키는대로 뭐든 다 하면 되는데 한가지 문제되는게 개인정보처리방침 이였다.&lt;br /&gt;나는 딱히 정보 저장도 안하고 하는데 이걸 왜 제출해야하는지 의문이지만 ㅋㅋ&lt;br /&gt;URL을 제출 할 수 밖에 없었다.&lt;br /&gt;&lt;a href=&quot;https://allmana.tistory.com/213&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://allmana.tistory.com/213&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686742818724&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;개인정보 처리방침&quot; data-og-description=&quot;[개인 정보 정책] [로또 번호 뽑기] 앱은 [오픈 소스 / 무료] 앱으로 구축했습니다. 이 서비스는 [로또 번호 뽑기]에서 [무료] 제공하며 그대로 사용하도록되어 있습니다. 이 페이지는 [로또 번호 &quot; data-og-host=&quot;allmana.tistory.com&quot; data-og-source-url=&quot;https://allmana.tistory.com/213&quot; data-og-url=&quot;https://allmana.tistory.com/213&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dF2ykw/hySYHmOvTa/YnS39qBQG8gYjRUdVT4Wjk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/pxBEf/hySZ924Mu3/VwTJeGdKgt5JMWKUbto0xk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/nI1d7/hySYERbHvL/QG5unSaQGXOrKKTm5O6XC0/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/213&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allmana.tistory.com/213&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dF2ykw/hySYHmOvTa/YnS39qBQG8gYjRUdVT4Wjk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/pxBEf/hySZ924Mu3/VwTJeGdKgt5JMWKUbto0xk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/nI1d7/hySYERbHvL/QG5unSaQGXOrKKTm5O6XC0/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080');&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;개인정보 처리방침&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;allmana.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게나마 처리방침 글을 올려서 ㅋㅋ URL을 입력해서 처리 완료 했다.&lt;br /&gt;예전에는 앱을 출시하면 3~4시간 만에 출시가 완료됐었는데&lt;br /&gt;이제는 절차도 귀찮아지고 검토도 하루 정도가 걸려서 출시가 완료됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.dev_js.djlotto&quot;&gt;https://play.google.com/store/apps/details?id=com.dev_js.djlotto&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1686867201636&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;로또 번호 뽑기 - Google Play 앱&quot; data-og-description=&quot;로또 번호 뽑는 앱&quot; data-og-host=&quot;play.google.com&quot; data-og-source-url=&quot;https://play.google.com/store/apps/details?id=com.dev_js.djlotto&quot; data-og-url=&quot;https://play.google.com/store/apps/details?id=com.dev_js.djlotto&amp;amp;hl=ko&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/AnC3c/hyS0dS9616/kFEb9ZAqy3gOvKrg9GdJNK/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/ceNgsM/hyS0aB7XK6/K59034HlYkBmBXCd2hi8KK/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/b5iviT/hyS1pxFAWd/kuD1d4SuXAIcMIRydJJwsK/img.png?width=240&amp;amp;height=240&amp;amp;face=0_0_240_240&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.dev_js.djlotto&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://play.google.com/store/apps/details?id=com.dev_js.djlotto&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/AnC3c/hyS0dS9616/kFEb9ZAqy3gOvKrg9GdJNK/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/ceNgsM/hyS0aB7XK6/K59034HlYkBmBXCd2hi8KK/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/b5iviT/hyS1pxFAWd/kuD1d4SuXAIcMIRydJJwsK/img.png?width=240&amp;amp;height=240&amp;amp;face=0_0_240_240');&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;로또 번호 뽑기 - Google Play 앱&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;play.google.com&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://allmana.tistory.com/214&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2023.06.14 - [IT] - EAS Android 구글 콘솔 연동 설정하기&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686868933512&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;EAS Android 구글 콘솔 연동 설정하기&quot; data-og-description=&quot;이 과정은 먼저 프로젝트가 EXPO 로 만든 앱으로 EAS 첫 설정이 되어 있어야 하며 최초 앱 출시가 완료된 후 진행 한다. EAS 를 통한 배포를 하기위해서는 구글 콘솔과 EAS 를 연동 해줘야한다. 1. 구&quot; data-og-host=&quot;allmana.tistory.com&quot; data-og-source-url=&quot;https://allmana.tistory.com/214&quot; data-og-url=&quot;https://allmana.tistory.com/214&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/AHHyj/hyS0ekeLa5/wV42LJ3qiIQ0spkcZ0TwUK/img.png?width=691&amp;amp;height=810&amp;amp;face=0_0_691_810,https://scrap.kakaocdn.net/dn/bnm0yi/hyS0eEyq8S/B4xtk9fTPjH3QtZZl3vHzk/img.png?width=691&amp;amp;height=810&amp;amp;face=0_0_691_810,https://scrap.kakaocdn.net/dn/dL6IU5/hyS0fja5QC/Z9jzQt6qM2EJhvkJJRX5O0/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/214&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allmana.tistory.com/214&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/AHHyj/hyS0ekeLa5/wV42LJ3qiIQ0spkcZ0TwUK/img.png?width=691&amp;amp;height=810&amp;amp;face=0_0_691_810,https://scrap.kakaocdn.net/dn/bnm0yi/hyS0eEyq8S/B4xtk9fTPjH3QtZZl3vHzk/img.png?width=691&amp;amp;height=810&amp;amp;face=0_0_691_810,https://scrap.kakaocdn.net/dn/dL6IU5/hyS0fja5QC/Z9jzQt6qM2EJhvkJJRX5O0/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080');&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;EAS Android 구글 콘솔 연동 설정하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이 과정은 먼저 프로젝트가 EXPO 로 만든 앱으로 EAS 첫 설정이 되어 있어야 하며 최초 앱 출시가 완료된 후 진행 한다. EAS 를 통한 배포를 하기위해서는 구글 콘솔과 EAS 를 연동 해줘야한다. 1. 구&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;allmana.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT</category>
      <category>Android</category>
      <category>EAS</category>
      <category>expo</category>
      <category>개인정보처리방침</category>
      <category>구글스토어</category>
      <category>배포</category>
      <category>출시</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/211</guid>
      <comments>https://allmana.tistory.com/211#entry211comment</comments>
      <pubDate>Tue, 13 Jun 2023 23:15:01 +0900</pubDate>
    </item>
    <item>
      <title>Expo Android App 만들기 - 9 (EAS Build)</title>
      <link>https://allmana.tistory.com/210</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/209&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2023.06.13 - [분류 전체보기] - Expo Android App 만들기 - 8 (Admob Button)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686661075625&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;Expo Android App 만들기 - 8 (Admob Button)&quot; data-og-description=&quot;2023.06.11 - [IT] - Expo Android App 만들기 - 7 (React Navigation) Expo Android App 만들기 - 7 (React Navigation) 2023.06.11 - [IT] - Expo Android App 만들기 - 6 (하단배너고정, 상태바) Expo Android App 만들기 - 6 (하단배너고정, &quot; data-og-host=&quot;allmana.tistory.com&quot; data-og-source-url=&quot;https://allmana.tistory.com/209&quot; data-og-url=&quot;https://allmana.tistory.com/209&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xBWmi/hySYDxmYLr/yw6bnigiCKw4AASoo4Z0K1/img.png?width=476&amp;amp;height=956&amp;amp;face=0_0_476_956,https://scrap.kakaocdn.net/dn/coty0t/hySYGU85Ur/OpqqqqgPLUBkk75rzKqdj0/img.png?width=476&amp;amp;height=956&amp;amp;face=0_0_476_956,https://scrap.kakaocdn.net/dn/Bqee8/hySYEJOwNi/eUiifKmNSu4WJGyfQdyA3k/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/209&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allmana.tistory.com/209&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xBWmi/hySYDxmYLr/yw6bnigiCKw4AASoo4Z0K1/img.png?width=476&amp;amp;height=956&amp;amp;face=0_0_476_956,https://scrap.kakaocdn.net/dn/coty0t/hySYGU85Ur/OpqqqqgPLUBkk75rzKqdj0/img.png?width=476&amp;amp;height=956&amp;amp;face=0_0_476_956,https://scrap.kakaocdn.net/dn/Bqee8/hySYEJOwNi/eUiifKmNSu4WJGyfQdyA3k/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080');&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;Expo Android App 만들기 - 8 (Admob Button)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;2023.06.11 - [IT] - Expo Android App 만들기 - 7 (React Navigation) Expo Android App 만들기 - 7 (React Navigation) 2023.06.11 - [IT] - Expo Android App 만들기 - 6 (하단배너고정, 상태바) Expo Android App 만들기 - 6 (하단배너고정,&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;allmana.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상업적으로 내놓는 것도 아니고 이게 뭐 돈이 되는 것도 아니니&amp;nbsp;&lt;br /&gt;개발자 다운 디자인 갬성으로 얼추 앱이 완성됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가상 디바이스로만 봤으니 배포 전에 EAS에 빌드를 해서 받아보겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 EAS 에 빌드를 하면 aab 파일로 빌드가 되는데 구글 스토어에 배포를 할때 apk 파일은 받지 않고&lt;br /&gt;aab 파일만 받기 때문이다(?)&lt;br /&gt;최종 배포 파일은 aab 더라도 apk 로 일단 테스트 겸 다운로드를 받기 위해서는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 Expo 회원가입이 되어있어야 하고 ,EAS 설치가 완료 되어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 eas.json 파일이 생성되고&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;// eas.json
&quot;build&quot;: {
  &quot;development&quot;: {
    &quot;developmentClient&quot;: true,
    &quot;distribution&quot;: &quot;internal&quot;
  },
  &quot;preview&quot;: {
    &quot;android&quot;: {         // 추가
      &quot;buildType&quot;: &quot;apk&quot; // 추가
    },
    &quot;distribution&quot;: &quot;internal&quot;
  },&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;preview 부분에 android.build 에 apk 를 추가 해준다.&lt;br /&gt;그 후 eas build를 해주면&lt;/p&gt;
&lt;pre id=&quot;code_1686739283414&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;eas build -p android --profile preview&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1560&quot; data-origin-height=&quot;266&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crcy3m/btsjS5bwyXm/YLyAxvkFcg04mEYGdBiXn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crcy3m/btsjS5bwyXm/YLyAxvkFcg04mEYGdBiXn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crcy3m/btsjS5bwyXm/YLyAxvkFcg04mEYGdBiXn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcrcy3m%2FbtsjS5bwyXm%2FYLyAxvkFcg04mEYGdBiXn0%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;1560&quot; height=&quot;266&quot; data-origin-width=&quot;1560&quot; data-origin-height=&quot;266&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2362&quot; data-origin-height=&quot;456&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CJkCI/btsj08jFW98/wlrTTcRkC49WHsSuClwJLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CJkCI/btsj08jFW98/wlrTTcRkC49WHsSuClwJLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CJkCI/btsj08jFW98/wlrTTcRkC49WHsSuClwJLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCJkCI%2Fbtsj08jFW98%2FwlrTTcRkC49WHsSuClwJLK%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;2362&quot; height=&quot;456&quot; data-origin-width=&quot;2362&quot; data-origin-height=&quot;456&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;expo 사이트에서 다운로드 받을 수 있고&amp;nbsp;&lt;br /&gt;빌드 완료 후 뜨는 url로 핸드폰으로도 직접 다운로드 받아서 apk 를 설치하여 최종 테스트를 해볼수가 있다.&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;568&quot; data-origin-height=&quot;1192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQFB4E/btsjPEcWtOg/4KvXTh2jkE0KOJzYAzzIfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQFB4E/btsjPEcWtOg/4KvXTh2jkE0KOJzYAzzIfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQFB4E/btsjPEcWtOg/4KvXTh2jkE0KOJzYAzzIfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQFB4E%2FbtsjPEcWtOg%2F4KvXTh2jkE0KOJzYAzzIfk%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;278&quot; height=&quot;583&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;1192&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디자이너가 보면 기절 초풍할 디자인이다 ㅋㅋㅋ &lt;br /&gt;디자인에 열과 성을 쏟을 이유도 없고 기능과 expo로 만든 앱을 출시하는게 목적이기에 목적이 확실한 앱이다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;메인 버튼 기능 설명&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;행운번호 뽑기&lt;/b&gt; - 로또 번호 6자리를 뽑는 기능이다.&lt;br /&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;554&quot; data-origin-height=&quot;1188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chlGOa/btsjO1fskOO/bPQyDt0q3KqFO46YilFLu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chlGOa/btsjO1fskOO/bPQyDt0q3KqFO46YilFLu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chlGOa/btsjO1fskOO/bPQyDt0q3KqFO46YilFLu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchlGOa%2FbtsjO1fskOO%2FbPQyDt0q3KqFO46YilFLu1%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;326&quot; height=&quot;699&quot; data-origin-width=&quot;554&quot; data-origin-height=&quot;1188&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;행운번호 뽑기 버튼을 터치하면 행운번호를 뽑는 화면으로 이동되며 로또번호 6개가 뽑히게 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;1182&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTxR1K/btsjRWRvGSW/RJ0NZKGhgGQjcSPK6HJ8FK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTxR1K/btsjRWRvGSW/RJ0NZKGhgGQjcSPK6HJ8FK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTxR1K/btsjRWRvGSW/RJ0NZKGhgGQjcSPK6HJ8FK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTxR1K%2FbtsjRWRvGSW%2FRJ0NZKGhgGQjcSPK6HJ8FK%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;708&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;1182&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;(나만의 알고리즘을 통해 나온)&lt;/s&gt; 6개의 번호가 추출되고 이 번호로 로또를 구매하면 된다.&lt;br /&gt;보통은 이 앱을 설치 해볼 분은 없겠지만&amp;nbsp;&lt;br /&gt;혹여 이 앱으로 5천원이라도 당첨이 되셨다면 광고 한 번 봐주세요~ &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;말그래도 로또 번호만 뽑는 기능이 있는 앱이지만&lt;br /&gt;일단 Expo 로 앱을 만들고 출시해보는게 일단 목적이기에 다음은 배포를 해보려 한다.&lt;br /&gt;그리고 추후 다른 기능들을 추가하며 조금 고도화 해나갈 생각이다.&lt;/p&gt;</description>
      <category>IT</category>
      <category>Android</category>
      <category>apk</category>
      <category>build</category>
      <category>EAS</category>
      <category>expo</category>
      <category>react</category>
      <category>ReactNative</category>
      <category>로또</category>
      <category>앱</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/210</guid>
      <comments>https://allmana.tistory.com/210#entry210comment</comments>
      <pubDate>Tue, 13 Jun 2023 22:07:25 +0900</pubDate>
    </item>
    <item>
      <title>Expo Android App 만들기 - 8 (Admob Button)</title>
      <link>https://allmana.tistory.com/209</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/207&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2023.06.11 - [IT] - Expo Android App 만들기 - 7 (React Navigation)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686580881687&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;Expo Android App 만들기 - 7 (React Navigation)&quot; data-og-description=&quot;2023.06.11 - [IT] - Expo Android App 만들기 - 6 (하단배너고정, 상태바) Expo Android App 만들기 - 6 (하단배너고정, 상태바) 2023.06.11 - [IT] - Expo Android App 만들기 - 5 (Admob) Expo Android App 만들기 - 5 (Admob) 2023.06.10 -&quot; data-og-host=&quot;allmana.tistory.com&quot; data-og-source-url=&quot;https://allmana.tistory.com/207&quot; data-og-url=&quot;https://allmana.tistory.com/207&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bPqHpI/hySYCKYzhD/utxQdHP1umwnEQjkiYTCoK/img.png?width=760&amp;amp;height=290&amp;amp;face=0_0_760_290,https://scrap.kakaocdn.net/dn/wMA73/hySYBL310q/5A0TkqYzdEoV9uThvmjzw0/img.png?width=760&amp;amp;height=290&amp;amp;face=0_0_760_290,https://scrap.kakaocdn.net/dn/dO14mt/hySYz8w8II/llkwnYbi9amJFkZWJekNK1/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/207&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allmana.tistory.com/207&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bPqHpI/hySYCKYzhD/utxQdHP1umwnEQjkiYTCoK/img.png?width=760&amp;amp;height=290&amp;amp;face=0_0_760_290,https://scrap.kakaocdn.net/dn/wMA73/hySYBL310q/5A0TkqYzdEoV9uThvmjzw0/img.png?width=760&amp;amp;height=290&amp;amp;face=0_0_760_290,https://scrap.kakaocdn.net/dn/dO14mt/hySYz8w8II/llkwnYbi9amJFkZWJekNK1/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080');&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;Expo Android App 만들기 - 7 (React Navigation)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;2023.06.11 - [IT] - Expo Android App 만들기 - 6 (하단배너고정, 상태바) Expo Android App 만들기 - 6 (하단배너고정, 상태바) 2023.06.11 - [IT] - Expo Android App 만들기 - 5 (Admob) Expo Android App 만들기 - 5 (Admob) 2023.06.10 -&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;allmana.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 얼추 앱이 구성되고 있다.&lt;br /&gt;(한번 설치해보고 삭제할 앱 이지만)이 글을 읽어서 훗날 설치를 해보시는 분들이나 우연히 내 앱을 설치 해주시는 분들이&lt;br /&gt;나를 위해 광고를 한번 봐주는(?)ㅋㅋㅋ 그런 버튼을 하나 만들까 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;476&quot; data-origin-height=&quot;956&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/45L80/btsjJVZjiun/lY6IjdL2KjdNcKHzJMCPp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/45L80/btsjJVZjiun/lY6IjdL2KjdNcKHzJMCPp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/45L80/btsjJVZjiun/lY6IjdL2KjdNcKHzJMCPp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F45L80%2FbtsjJVZjiun%2FlY6IjdL2KjdNcKHzJMCPp1%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;259&quot; height=&quot;520&quot; data-origin-width=&quot;476&quot; data-origin-height=&quot;956&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 내 앱 상태이다.&lt;br /&gt;여기에 광고 봐주기 버튼을 하나 추가한다.&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;&amp;lt;Button
    icon={'movie-play'}
    mode={'contained'}
    buttonColor={Theme.colors.error}
    style={{
        marginTop:10
    }}
    onPress={()=&amp;gt;{
    }}
&amp;gt;
    광고 봐주기
&amp;lt;/Button&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버튼을 추가 해줬다. (Theme는 개인적으로 import 한 값이다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;1042&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhGQmK/btsjJbgWaN8/PeSc7cceqVVqolBQMCQK6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhGQmK/btsjJbgWaN8/PeSc7cceqVVqolBQMCQK6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhGQmK/btsjJbgWaN8/PeSc7cceqVVqolBQMCQK6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdhGQmK%2FbtsjJbgWaN8%2FPeSc7cceqVVqolBQMCQK6K%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;355&quot; height=&quot;740&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;1042&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클릭을 했을때 admob이 뜨게 구현해보자.&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;import {AdEventType, InterstitialAd, TestIds} from &quot;react-native-google-mobile-ads&quot;;
import {useEffect, useState} from &quot;react&quot;;


const interstitial = InterstitialAd.createForAdRequest(TestIds.INTERSTITIAL, {
    requestNonPersonalizedAdsOnly: true,
    keywords: ['fashion', 'clothing'],
})

const Intro = ({navigator}) =&amp;gt; {
    const [loaded, setLoaded] = useState(false);

    useEffect(() =&amp;gt; {
        const unsubscribe = interstitial.addAdEventListener(AdEventType.LOADED, () =&amp;gt; {
            setLoaded(true);
        });

        // Start loading the interstitial straight away
        interstitial.load();

        // Unsubscribe from events on unmount
        return unsubscribe;
    }, []);

    // No advert ready to show yet
    if (!loaded) {
        return null;
    }
    ...
    
    &amp;lt;Button
        icon={'movie-play'}
        mode={'contained'}
        buttonColor={Theme.colors.error}
        style={{
            marginTop:10
        }}
        onPress={()=&amp;gt;{
            interstitial.show(); //추가
        }}
    &amp;gt;
        광고 봐주기
    &amp;lt;/Button&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버튼 클릭시 admob이 열리도록 설정 해준후 안드로이드를 빌드를 한번 해주고&lt;br /&gt;앱을 재실행 후 버튼을 클릭해보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;1076&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsxiez/btsjGmjAmMW/Uv12jxNNuApq4Cz9PH4cH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsxiez/btsjGmjAmMW/Uv12jxNNuApq4Cz9PH4cH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsxiez/btsjGmjAmMW/Uv12jxNNuApq4Cz9PH4cH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbsxiez%2FbtsjGmjAmMW%2FUv12jxNNuApq4Cz9PH4cH1%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;337&quot; height=&quot;711&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;1076&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;광고가 뜨는 걸 확인 할 수 있다.&lt;br /&gt;조금이나마 나에게 도움이 될 수 있게 해줄 ㅋㅋㅋ 광고 추가 완료.&lt;/p&gt;</description>
      <category>IT</category>
      <category>Admob</category>
      <category>Android</category>
      <category>expo</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/209</guid>
      <comments>https://allmana.tistory.com/209#entry209comment</comments>
      <pubDate>Tue, 13 Jun 2023 20:50:54 +0900</pubDate>
    </item>
    <item>
      <title>javascript 로또 번호 추출</title>
      <link>https://allmana.tistory.com/208</link>
      <description>&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;let lottoNumberList = []
const drawNumber = () =&amp;gt; {
    const number = new Set
    while (number.size &amp;lt; 6){
        number.add(Math.floor(Math.random() * 45)+ 1)
    }
    const sortNumber = Array.from(number)
    lottoNumberList = sortNumber.sort((a,b) =&amp;gt; a-b)
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;number를 set으로 구성해서 중복이 되지 않도록 처리하였다.&lt;br /&gt;그 후 다시 배열로 변경 후 오름차순으로 정렬을 해줬다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;활용법&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. join&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1686516330399&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;lottoNumberList.join(',')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;join을 콤마(,)로 해주면 1,4,9,30,43,45 이런식으로 바로 콤마를 붙여서 사용할 수도 있어서 간편하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. forEach&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1686516573163&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;lottoNumberList.forEach((number,idx)=&amp;gt;{
	// number 추출된 번호
    // idx 인덱스
})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for문으로 이벤트를 추가해준다.&lt;/p&gt;</description>
      <category>IT</category>
      <category>javascript</category>
      <category>랜덤번호</category>
      <category>로또</category>
      <category>자바스크립트</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/208</guid>
      <comments>https://allmana.tistory.com/208#entry208comment</comments>
      <pubDate>Mon, 12 Jun 2023 05:47:34 +0900</pubDate>
    </item>
    <item>
      <title>Expo Android App 만들기 - 7 (React Navigation)</title>
      <link>https://allmana.tistory.com/207</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/206&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2023.06.11 - [IT] - Expo Android App 만들기 - 6 (하단배너고정, 상태바)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686465197453&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;Expo Android App 만들기 - 6 (하단배너고정, 상태바)&quot; data-og-description=&quot;2023.06.11 - [IT] - Expo Android App 만들기 - 5 (Admob) Expo Android App 만들기 - 5 (Admob) 2023.06.10 - [IT] - Expo Android App 만들기 - 4 (React Native Paper) Expo Android App 만들기 - 4 (React Native Paper) 2023.06.08 - [IT] - Expo Android A&quot; data-og-host=&quot;allmana.tistory.com&quot; data-og-source-url=&quot;https://allmana.tistory.com/206&quot; data-og-url=&quot;https://allmana.tistory.com/206&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ctbwGM/hySWZfD6Pa/KsUmKziZRvjpie7yyFn7fK/img.png?width=586&amp;amp;height=1254&amp;amp;face=0_0_586_1254,https://scrap.kakaocdn.net/dn/ciNSS8/hySW1R2OiG/UnParSZmgq1l9I9j8qWYa0/img.png?width=586&amp;amp;height=1254&amp;amp;face=0_0_586_1254,https://scrap.kakaocdn.net/dn/gAS1M/hySW7Y3Nzd/5bFtyo1jecX73Rv9FUO6V1/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/206&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allmana.tistory.com/206&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ctbwGM/hySWZfD6Pa/KsUmKziZRvjpie7yyFn7fK/img.png?width=586&amp;amp;height=1254&amp;amp;face=0_0_586_1254,https://scrap.kakaocdn.net/dn/ciNSS8/hySW1R2OiG/UnParSZmgq1l9I9j8qWYa0/img.png?width=586&amp;amp;height=1254&amp;amp;face=0_0_586_1254,https://scrap.kakaocdn.net/dn/gAS1M/hySW7Y3Nzd/5bFtyo1jecX73Rv9FUO6V1/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080');&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;Expo Android App 만들기 - 6 (하단배너고정, 상태바)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;2023.06.11 - [IT] - Expo Android App 만들기 - 5 (Admob) Expo Android App 만들기 - 5 (Admob) 2023.06.10 - [IT] - Expo Android App 만들기 - 4 (React Native Paper) Expo Android App 만들기 - 4 (React Native Paper) 2023.06.08 - [IT] - Expo Android A&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;allmana.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨텐츠 영역과 하단 배너 영역도 나눴으니 이제는 화면 이동에 쓰이는 React Navigation을 적용해보았다.&lt;/p&gt;
&lt;pre id=&quot;code_1686465328141&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn add @react-navigation/native

npx expo install react-native-screens react-native-safe-area-context

yarn add @react-navigation/stack

npx expo install react-native-gesture-handler&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지 설치 후 &lt;b&gt;App.js에 react-native-gesture-handler를 import 해준다.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1686465492580&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import 'react-native-gesture-handler'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 소스에 navigator를 적용했으나 에러가 나는 것이였다..&lt;br /&gt;알고보니 android 를 재빌드를 해줬어야 했다.&lt;br /&gt;&lt;b&gt;패키지 설정과 import가 끝나면 yarn android 를 한 번 해준다.&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;// App.js
import 'react-native-gesture-handler'
import {NavigationContainer} from '@react-navigation/native'
import {createStackNavigator} from '@react-navigation/stack'
import Intro from './Intro'
import Draw from './Draw'

const Stack = createStackNavigator()

const Main = () =&amp;gt; {
	return(
    	&amp;lt;NavigationContainer&amp;gt;
          &amp;lt;Stack.Navigator&amp;gt;
            &amp;lt;Stack.Screen name={'Intro'} component={Intro}/&amp;gt;
            &amp;lt;Stack.Screen name={'Draw'} component={Draw}/&amp;gt;
          &amp;lt;/Stack.Navigator&amp;gt;
        &amp;lt;/NavigationContainer&amp;gt;
    )
}
export default Main&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;stack navigator 에 맨처음 화면인 Intro와 버튼을 누르면 이동할 Draw 페이지를 추가해줬다.&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;// Intro.js
import {View} from 'react-native'
import {Button, Text} from 'react-native-paper'

const Intro = ({navigation}) =&amp;gt; {
    return (&amp;lt;&amp;gt;
        &amp;lt;View
            style={{
                flex:1,
                backgroundColor:'white'
            }}
        &amp;gt;
            &amp;lt;Text&amp;gt;Intro 입니다.&amp;lt;/Text&amp;gt;
            &amp;lt;Button
                mode={'contained'}
                onPress={()=&amp;gt;navigation.navigate('Draw')}
            &amp;gt;
                이동
            &amp;lt;/Button&amp;gt;
        &amp;lt;/View&amp;gt;
    &amp;lt;/&amp;gt;)
}
export default Intro&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;// Draw.js
import {View} from 'react-native'
import {Text} from 'react-native-paper'

const Draw = ({navigation})=&amp;gt;{
    return (&amp;lt;&amp;gt;
        &amp;lt;View
            style={{
                flex:1,
                backgroundColor:'white'
            }}
        &amp;gt;
            &amp;lt;Text&amp;gt;Draw 입니다.&amp;lt;/Text&amp;gt;
        &amp;lt;/View&amp;gt;
    &amp;lt;/&amp;gt;)
}
export default Draw&lt;/code&gt;&lt;/pre&gt;
&lt;/div&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/9lzEa/btsjkioWafd/IQynXWhd1oQbq9tfyzvKBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9lzEa/btsjkioWafd/IQynXWhd1oQbq9tfyzvKBK/img.png&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;290&quot; data-is-animation=&quot;false&quot; width=&quot;375&quot; height=&quot;143&quot; data-widthpercent=&quot;43.71&quot; style=&quot;width: 43.2013%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9lzEa/btsjkioWafd/IQynXWhd1oQbq9tfyzvKBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9lzEa%2FbtsjkioWafd%2FIQynXWhd1oQbq9tfyzvKBK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;760&quot; height=&quot;290&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xvQNP/btsjqv1jSIq/Lzddkrwz7CrawFlKipJCRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xvQNP/btsjqv1jSIq/Lzddkrwz7CrawFlKipJCRk/img.png&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;224&quot; data-is-animation=&quot;false&quot; width=&quot;452&quot; height=&quot;134&quot; style=&quot;width: 55.6359%;&quot; data-widthpercent=&quot;56.29&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xvQNP/btsjqv1jSIq/Lzddkrwz7CrawFlKipJCRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxvQNP%2Fbtsjqv1jSIq%2FLzddkrwz7CrawFlKipJCRk%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;756&quot; height=&quot;224&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Intro에서 이동 버튼 이벤트에 navigation.navigate('screenName') 을 해주면&lt;br /&gt;해당하는 스크린으로 페이지가 이동된다. 그리고 상단 화살표를 누르면 이전 페이지로 이동이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;페이지 이동시 파라미터를 보내보자.&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;// Intro.js
&amp;lt;Button
    mode={'contained'}
    onPress={()=&amp;gt;{
        navigation.navigate('Draw',{
            p1: 'Value'
        })
    }}
&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Intro에서 버튼을 누르면 p1 이라는 key에 'value' 값을 같이 전달하게 구성하였다.&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;// Draw.js
const Draw = ({navigation, route})=&amp;gt;{
    console.log(route)
    
    ...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Draw 페이지에서 route 를 console에 찍어보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1690&quot; data-origin-height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgNXyk/btsjse6b4pk/fKSNsxSPWaDzLyIzi3DZQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgNXyk/btsjse6b4pk/fKSNsxSPWaDzLyIzi3DZQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgNXyk/btsjse6b4pk/fKSNsxSPWaDzLyIzi3DZQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgNXyk%2Fbtsjse6b4pk%2FfKSNsxSPWaDzLyIzi3DZQK%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;1690&quot; height=&quot;60&quot; data-origin-width=&quot;1690&quot; data-origin-height=&quot;60&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;route 안에 params로 이전 페이지에서 전달한 파라미터가 들어가 있는걸 확인할 수 있다.&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const {params} = route
...
&amp;lt;Text&amp;gt;param 값은 {params.p1}입니다.&amp;lt;/Text&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&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;756&quot; data-origin-height=&quot;300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PhTo9/btsjlZIZwDR/DNE9QfYL1QcGs2uQKlSRP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PhTo9/btsjlZIZwDR/DNE9QfYL1QcGs2uQKlSRP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PhTo9/btsjlZIZwDR/DNE9QfYL1QcGs2uQKlSRP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPhTo9%2FbtsjlZIZwDR%2FDNE9QfYL1QcGs2uQKlSRP1%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;602&quot; height=&quot;239&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;300&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;추가로 위에 title이 보여지는게 싫다면&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;Stack.Screen
    name={'Intro'}
    component={Intro}
    options={{
        headerShown:false
    }}/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;headerShown 을 false로 주면 사라진다.&lt;/p&gt;</description>
      <category>IT</category>
      <category>Android</category>
      <category>expo</category>
      <category>Navigation</category>
      <category>navigator</category>
      <category>react</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/207</guid>
      <comments>https://allmana.tistory.com/207#entry207comment</comments>
      <pubDate>Sun, 11 Jun 2023 16:24:47 +0900</pubDate>
    </item>
    <item>
      <title>Expo Android App 만들기 - 6 (하단배너고정, 상태바)</title>
      <link>https://allmana.tistory.com/206</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/205&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2023.06.11 - [IT] - Expo Android App 만들기 - 5 (Admob)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686431488222&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;Expo Android App 만들기 - 5 (Admob)&quot; data-og-description=&quot;2023.06.10 - [IT] - Expo Android App 만들기 - 4 (React Native Paper) Expo Android App 만들기 - 4 (React Native Paper) 2023.06.08 - [IT] - Expo Android App 만들기 - 3 (galio-framework) Expo Android App 만들기 - 3 (galio-framework) 2023.06.07 - [&quot; data-og-host=&quot;allmana.tistory.com&quot; data-og-source-url=&quot;https://allmana.tistory.com/205&quot; data-og-url=&quot;https://allmana.tistory.com/205&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/pIMkT/hySWoHbjQ5/z0GlS8zBKeMlNmFHvacRh1/img.png?width=800&amp;amp;height=313&amp;amp;face=0_0_800_313,https://scrap.kakaocdn.net/dn/6Fgan/hySW0ywRNV/OJfx5kZlY7sCyd8ANKZuS1/img.png?width=800&amp;amp;height=313&amp;amp;face=0_0_800_313,https://scrap.kakaocdn.net/dn/MfwKq/hySW8QRTwI/qhS5jnwBXx7PPI0av1umKk/img.png?width=2236&amp;amp;height=1230&amp;amp;face=0_0_2236_1230&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/205&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allmana.tistory.com/205&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/pIMkT/hySWoHbjQ5/z0GlS8zBKeMlNmFHvacRh1/img.png?width=800&amp;amp;height=313&amp;amp;face=0_0_800_313,https://scrap.kakaocdn.net/dn/6Fgan/hySW0ywRNV/OJfx5kZlY7sCyd8ANKZuS1/img.png?width=800&amp;amp;height=313&amp;amp;face=0_0_800_313,https://scrap.kakaocdn.net/dn/MfwKq/hySW8QRTwI/qhS5jnwBXx7PPI0av1umKk/img.png?width=2236&amp;amp;height=1230&amp;amp;face=0_0_2236_1230');&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;Expo Android App 만들기 - 5 (Admob)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;2023.06.10 - [IT] - Expo Android App 만들기 - 4 (React Native Paper) Expo Android App 만들기 - 4 (React Native Paper) 2023.06.08 - [IT] - Expo Android App 만들기 - 3 (galio-framework) Expo Android App 만들기 - 3 (galio-framework) 2023.06.07 - [&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;allmana.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Admob도 추가 됐으니 기본적인 레이아웃을 구성했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;가장 먼저 Admob의 하단 고정이다.&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;&amp;lt;View // 가장 밖
    style={{
      flex:1,
    }}
&amp;gt;
  &amp;lt;View // Contents
    style={{
      flex:1,
      backgroundColor:'blue'
    }}
  &amp;gt;
  &amp;lt;/View&amp;gt;
  &amp;lt;View // Banner
    style={{
      justifyContent:'space-between',
      backgroundColor:'red',
      alignItems:'center'
    }}
  &amp;gt;
    &amp;lt;BannerAd
      unitId={id}
      size={BannerAdSize.BANNER}
    /&amp;gt;
  &amp;lt;/View&amp;gt;
&amp;lt;/View&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 View 하나와 View Flex:1 에 justifyContent 를 space-between 으로 주는것 이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;1254&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1bsyp/btsjlWFeJtJ/ijlBEwE5Yx88ycKt4hbAnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1bsyp/btsjlWFeJtJ/ijlBEwE5Yx88ycKt4hbAnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1bsyp/btsjlWFeJtJ/ijlBEwE5Yx88ycKt4hbAnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1bsyp%2FbtsjlWFeJtJ%2FijlBEwE5Yx88ycKt4hbAnK%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;416&quot; height=&quot;890&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;1254&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;상단 상태바가 색 구분이 되지 않도록 status bar를 추가해줬다.&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;&amp;lt;View // 가장 밖
    style={{
      flex:1
    }}
&amp;gt;
  &amp;lt;StatusBar style={'auto'} /&amp;gt; // 상태바 추가
  &amp;lt;View
    style={{
      flex:1,
      backgroundColor:'blue',
    }}
  &amp;gt;
...&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;auto로 주게되면 view에 색에 맞춰서 색이 변한다.&lt;/b&gt;&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/r7cns/btsjj9TdtNQ/hcP2ZpEwORfqqx8heAhbW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r7cns/btsjj9TdtNQ/hcP2ZpEwORfqqx8heAhbW0/img.png&quot; width=&quot;416&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;170&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; style=&quot;width: 52.1217%; margin-right: 10px;&quot; data-widthpercent=&quot;52.73&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r7cns/btsjj9TdtNQ/hcP2ZpEwORfqqx8heAhbW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr7cns%2Fbtsjj9TdtNQ%2FhcP2ZpEwORfqqx8heAhbW0%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;581&quot; height=&quot;170&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bry6Da/btsjpFCO74S/7khS1kAA3S1urWv44Sx8vK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bry6Da/btsjpFCO74S/7khS1kAA3S1urWv44Sx8vK/img.png&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;190&quot; data-is-animation=&quot;false&quot; width=&quot;380&quot; height=&quot;816&quot; data-filename=&quot;blob&quot; style=&quot;width: 46.7155%;&quot; data-widthpercent=&quot;47.27&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bry6Da/btsjpFCO74S/7khS1kAA3S1urWv44Sx8vK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbry6Da%2FbtsjpFCO74S%2F7khS1kAA3S1urWv44Sx8vK%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;582&quot; height=&quot;190&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 상태바로 색을 고정시킬 수도 있겠지만 나는 상태바를 전체적으로 같게 되도록 설정하였다.&lt;/p&gt;</description>
      <category>IT</category>
      <category>banner</category>
      <category>expo</category>
      <category>상태바</category>
      <category>하단배너</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/206</guid>
      <comments>https://allmana.tistory.com/206#entry206comment</comments>
      <pubDate>Sun, 11 Jun 2023 06:25:12 +0900</pubDate>
    </item>
    <item>
      <title>Expo Android App 만들기 - 5 (Admob)</title>
      <link>https://allmana.tistory.com/205</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/204&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2023.06.10 - [IT] - Expo Android App 만들기 - 4 (React Native Paper)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686428894621&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;Expo Android App 만들기 - 4 (React Native Paper)&quot; data-og-description=&quot;2023.06.08 - [IT] - Expo Android App 만들기 - 3 (galio-framework) Expo Android App 만들기 - 3 (galio-framework) 2023.06.07 - [IT] - Expo Android App 만들기 - 2 (스플래시 적용) Expo Android App 만들기 - 2 (스플래시 적용) 2023.06.07 -&quot; data-og-host=&quot;allmana.tistory.com&quot; data-og-source-url=&quot;https://allmana.tistory.com/204&quot; data-og-url=&quot;https://allmana.tistory.com/204&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/4GRIK/hySWpMQf1e/sFPeyww7HmTeTKgq9Gbj71/img.png?width=636&amp;amp;height=1402&amp;amp;face=0_0_636_1402,https://scrap.kakaocdn.net/dn/dOFFL9/hySW7j7OVv/aOGAXpIvoJK2GGcgkBzzI0/img.png?width=636&amp;amp;height=1402&amp;amp;face=0_0_636_1402,https://scrap.kakaocdn.net/dn/bQH4vH/hySWlKrjTJ/lkAqVk8iZwBG7YMC18eeiK/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/204&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allmana.tistory.com/204&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/4GRIK/hySWpMQf1e/sFPeyww7HmTeTKgq9Gbj71/img.png?width=636&amp;amp;height=1402&amp;amp;face=0_0_636_1402,https://scrap.kakaocdn.net/dn/dOFFL9/hySW7j7OVv/aOGAXpIvoJK2GGcgkBzzI0/img.png?width=636&amp;amp;height=1402&amp;amp;face=0_0_636_1402,https://scrap.kakaocdn.net/dn/bQH4vH/hySWlKrjTJ/lkAqVk8iZwBG7YMC18eeiK/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080');&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;Expo Android App 만들기 - 4 (React Native Paper)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;2023.06.08 - [IT] - Expo Android App 만들기 - 3 (galio-framework) Expo Android App 만들기 - 3 (galio-framework) 2023.06.07 - [IT] - Expo Android App 만들기 - 2 (스플래시 적용) Expo Android App 만들기 - 2 (스플래시 적용) 2023.06.07 -&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;allmana.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱 개발을 해보는 중이지만 Admob 배너를 먼저 추가 하고서 개발을 시작하려 했다.&lt;/p&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;1916&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Okja5/btsjpGhfmMN/eUkortJBFZWB51vWPs0Nd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Okja5/btsjpGhfmMN/eUkortJBFZWB51vWPs0Nd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Okja5/btsjpGhfmMN/eUkortJBFZWB51vWPs0Nd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOkja5%2FbtsjpGhfmMN%2FeUkortJBFZWB51vWPs0Nd1%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;1916&quot; height=&quot;750&quot; data-origin-width=&quot;1916&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;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;2206&quot; data-origin-height=&quot;900&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdpt0z/btsjjx0Yp6G/hstRq4Zmfm0Re7krBJiqK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdpt0z/btsjjx0Yp6G/hstRq4Zmfm0Re7krBJiqK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdpt0z/btsjjx0Yp6G/hstRq4Zmfm0Re7krBJiqK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbdpt0z%2Fbtsjjx0Yp6G%2FhstRq4Zmfm0Re7krBJiqK1%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;2206&quot; height=&quot;900&quot; data-origin-width=&quot;2206&quot; data-origin-height=&quot;900&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;2236&quot; data-origin-height=&quot;1230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LHOzr/btsjkGbZWj4/CriyTK5KUnCALqNdC04VK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LHOzr/btsjkGbZWj4/CriyTK5KUnCALqNdC04VK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LHOzr/btsjkGbZWj4/CriyTK5KUnCALqNdC04VK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLHOzr%2FbtsjkGbZWj4%2FCriyTK5KUnCALqNdC04VK1%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;2236&quot; height=&quot;1230&quot; data-origin-width=&quot;2236&quot; data-origin-height=&quot;1230&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;1916&quot; data-origin-height=&quot;1034&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dFEoNp/btsjk5CDGtm/HVnUfRHJEqW0cUJn8wtxw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dFEoNp/btsjk5CDGtm/HVnUfRHJEqW0cUJn8wtxw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dFEoNp/btsjk5CDGtm/HVnUfRHJEqW0cUJn8wtxw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdFEoNp%2Fbtsjk5CDGtm%2FHVnUfRHJEqW0cUJn8wtxw0%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;1916&quot; height=&quot;1034&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;1034&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1458&quot; data-origin-height=&quot;1196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qU9pK/btsjj8zPukQ/VhVbyKOXF8k1kgrQKLLe80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qU9pK/btsjj8zPukQ/VhVbyKOXF8k1kgrQKLLe80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qU9pK/btsjj8zPukQ/VhVbyKOXF8k1kgrQKLLe80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqU9pK%2Fbtsjj8zPukQ%2FVhVbyKOXF8k1kgrQKLLe80%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;562&quot; height=&quot;461&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1458&quot; data-origin-height=&quot;1196&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1888&quot; data-origin-height=&quot;594&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/22XbT/btsjnav8qPC/vIyUYZlXsmN7dkNVcCh4KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/22XbT/btsjnav8qPC/vIyUYZlXsmN7dkNVcCh4KK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/22XbT/btsjnav8qPC/vIyUYZlXsmN7dkNVcCh4KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F22XbT%2Fbtsjnav8qPC%2FvIyUYZlXsmN7dkNVcCh4KK%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;736&quot; height=&quot;232&quot; data-origin-width=&quot;1888&quot; data-origin-height=&quot;594&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;다음 react-native-google-mobile-ads 의 패키지를 이용하여 애드몹을 적용시켜봤다.&lt;br /&gt;공식 홈페이지 있는 그대로 했으나.. 잘 되진 않았다.&lt;br /&gt;하지만 그 이유를 드디어 알았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나같은 사람들이 있을지 모르니.. 글을 남겨본다...&lt;br /&gt;해결 방법부터 말하자면&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1686428100065&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1.expo prebuild 해주기

2.(가상디바이스 사용시) SDK 환경변수 추가

3.app.json에 app-id 추가&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;expo를 이제 처음 사용해보는거지만 사용 편의성이 높다보니 광고추가도 쉽게 될 줄 알았다.&lt;br /&gt;계속된 오류에 지쳐갈때 expo prebuild를 해줘야 한다는 걸 알게 되었다.&lt;/p&gt;
&lt;pre id=&quot;code_1686428234415&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npx expo prebuild --platform android&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 android만 타겟으로 하고 있으니 ios 폴더는 생기지 않도록 &lt;b&gt;--platform android&lt;/b&gt; 를 추가하였다.&lt;br /&gt;prebuild를 하게 되니 패키지명도 입력하게되고 그 후 안드로이드 폴더 하나가 생성된다.&lt;br /&gt;안드로이드 폴더를 보면 안드로이드 앱 구조 그대로 얘가 알아서 생성해준다는 걸 알게됐다.&lt;br /&gt;어쩐지 js 파일 구조로만은 안드로이드 앱 구조와는 너무 다른거 아닌가 싶긴 했었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 기존 하던대로 yarn start 를 해서 가상디바이스를 실행시키려 했지만 되지 않았다.&lt;br /&gt;(mac기준) sdk home 을 찾을 수 없다는 내용이였다. 이전에는 sdk home 을 설정해주지 않아도 잘 됐었는데&lt;br /&gt;prebuild 후 sdk home 을 찾을 수 없다는 에러가 발생하여 sdk home 도 설정해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 app.json 에&amp;nbsp; app-id를 추가해주었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1522&quot; data-origin-height=&quot;942&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3w5xV/btsjmCT4Hc5/xEdkDkZ8KKVZrAzNYQQHwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3w5xV/btsjmCT4Hc5/xEdkDkZ8KKVZrAzNYQQHwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3w5xV/btsjmCT4Hc5/xEdkDkZ8KKVZrAzNYQQHwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3w5xV%2FbtsjmCT4Hc5%2FxEdkDkZ8KKVZrAzNYQQHwK%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;1522&quot; height=&quot;942&quot; data-origin-width=&quot;1522&quot; data-origin-height=&quot;942&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;app-id는 admob 앱 설정에 보면 해당 앱의 ID가 나온다.&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;// app.json
&quot;expo&quot;:{
	...
},
&quot;react-native-google-mobile-ads&quot;: {
  &quot;android_app_id&quot;: &quot;앱ID&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;중요❗️ expo 밖에 추가해줘야한다.&lt;/b&gt; &lt;br /&gt;다음으로 소스에 적용시켜보자.&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;import {BannerAd, BannerAdSize, TestIds} from 'react-native-google-mobile-ads'
...
  &amp;lt;BannerAd 
  	unitId={TestIds.BANNER} 
    size={BannerAdSize.BANNER}
  /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;484&quot; data-origin-height=&quot;1068&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HQ0xX/btsjmBOmS4b/YpOiVknTVKltWsPRZA8uV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HQ0xX/btsjmBOmS4b/YpOiVknTVKltWsPRZA8uV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HQ0xX/btsjmBOmS4b/YpOiVknTVKltWsPRZA8uV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHQ0xX%2FbtsjmBOmS4b%2FYpOiVknTVKltWsPRZA8uV0%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;353&quot; height=&quot;779&quot; data-origin-width=&quot;484&quot; data-origin-height=&quot;1068&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;Admob 때문에 몇시간동안 끙끙댔지만..&lt;br /&gt;삽질이 늘어날수록 모두 실력이 된다는걸 잘 알기 때문에 해결하고 나니 보람차다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>IT</category>
      <category>Admob</category>
      <category>expo</category>
      <category>R</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/205</guid>
      <comments>https://allmana.tistory.com/205#entry205comment</comments>
      <pubDate>Sun, 11 Jun 2023 05:34:53 +0900</pubDate>
    </item>
    <item>
      <title>Expo Android App 만들기 - 4 (React Native Paper)</title>
      <link>https://allmana.tistory.com/204</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/203&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2023.06.08 - [IT] - Expo Android App 만들기 - 3 (galio-framework)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686382344101&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;Expo Android App 만들기 - 3 (galio-framework)&quot; data-og-description=&quot;2023.06.07 - [IT] - Expo Android App 만들기 - 2 (스플래시 적용) Expo Android App 만들기 - 2 (스플래시 적용) 2023.06.07 - [IT] - Expo Android App 만들기 -1 Expo Android App 만들기 -1 처음 시작에는 Node.js 가 필수로 필요&quot; data-og-host=&quot;allmana.tistory.com&quot; data-og-source-url=&quot;https://allmana.tistory.com/203&quot; data-og-url=&quot;https://allmana.tistory.com/203&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bMRDFi/hySW6LYFqW/4SSlZTQVbDjjKby9KH5Sa1/img.png?width=800&amp;amp;height=488&amp;amp;face=0_0_800_488,https://scrap.kakaocdn.net/dn/GB2wo/hySVKqrJuS/H2zpH1KQ134BBYpJo70901/img.png?width=800&amp;amp;height=488&amp;amp;face=0_0_800_488,https://scrap.kakaocdn.net/dn/zyQGm/hySXdEjMM8/ZB0SzofWArJ7eKRjKmRfIk/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/203&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allmana.tistory.com/203&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bMRDFi/hySW6LYFqW/4SSlZTQVbDjjKby9KH5Sa1/img.png?width=800&amp;amp;height=488&amp;amp;face=0_0_800_488,https://scrap.kakaocdn.net/dn/GB2wo/hySVKqrJuS/H2zpH1KQ134BBYpJo70901/img.png?width=800&amp;amp;height=488&amp;amp;face=0_0_800_488,https://scrap.kakaocdn.net/dn/zyQGm/hySXdEjMM8/ZB0SzofWArJ7eKRjKmRfIk/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080');&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;Expo Android App 만들기 - 3 (galio-framework)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;2023.06.07 - [IT] - Expo Android App 만들기 - 2 (스플래시 적용) Expo Android App 만들기 - 2 (스플래시 적용) 2023.06.07 - [IT] - Expo Android App 만들기 -1 Expo Android App 만들기 -1 처음 시작에는 Node.js 가 필수로 필요&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;allmana.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 UI Framework를 Galio-Framework를 적용했었지만..&lt;br /&gt;다시 React Native Paper를 적용해보기로 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고 기존 등록한 패키지가 있다면&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1686382439314&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm uninstall galio-framework
혹은
yarn remove galio-framework&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;galio-framework를 지워주고&lt;/p&gt;
&lt;pre id=&quot;code_1686382504397&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn add react-native-paper

yarn add react-native-safe-area-context

yarn add react-native-vector-icons&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;나처럼 Expo에서 한경우&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1686385245483&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;module.exports = function(api) {
  api.cache(true);
  return {
    presets: ['babel-preset-expo'],
    env: {
      production: {
        plugins: ['react-native-paper/babel'],
      },
    },
  };
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;babel.config.js 에 react-native-paper를 plugins에 추가해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘적용되었는지 코드를 작성한다.&lt;br /&gt;App.js 에 기본적인 확인을 위한 소스를 작성했다.&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;import * as React from 'react'
import {Button, MD3LightTheme, PaperProvider} from 'react-native-paper'
import { useTheme } from 'react-native-paper'

const theme = {
  ...MD3LightTheme, // or MD3DarkTheme
  roundness: 2,
  colors: {
    ...MD3LightTheme.colors,
    primary: '#3498db',
    secondary: '#f1c40f',
    tertiary: '#a1b2c3',
  },
};
const Main = () =&amp;gt; {
  return (
      &amp;lt;&amp;gt;
        &amp;lt;PaperProvider theme={theme}&amp;gt;
          &amp;lt;Button
              icon=&quot;camera&quot;
              mode=&quot;contained&quot;
              buttonColor={theme.colors.error}
          &amp;gt;
            error
          &amp;lt;/Button&amp;gt;
          &amp;lt;Button
              icon=&quot;camera&quot;
              mode=&quot;contained&quot;
              buttonColor={theme.colors.scrim}
          &amp;gt;
            scrim
          &amp;lt;/Button&amp;gt;
          &amp;lt;Button
              icon=&quot;camera&quot;
              mode=&quot;contained&quot;
              buttonColor={theme.colors.primary}
          &amp;gt;
            primary
          &amp;lt;/Button&amp;gt;
          &amp;lt;Button 
              mode='contained'&amp;gt;
            null 값
          &amp;lt;/Button&amp;gt;
        &amp;lt;/PaperProvider&amp;gt;
      &amp;lt;/&amp;gt;
  )
}

export default Main&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MD3LightTheme 처럼 기본적인 테마 설정이 있고 거기에 추가로 커스텀을 하여&lt;br /&gt;전체 페이지에 theme를 입혀준다.&amp;nbsp;&lt;br /&gt;Button에는 theme의 컬러와 마지막에는 컬러를 지정하지 않은 버튼을 만들었다.&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;636&quot; data-origin-height=&quot;1402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5Lat5/btsjmvN3kNd/BuOMnU05fUOGn7C6ETJ2h0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5Lat5/btsjmvN3kNd/BuOMnU05fUOGn7C6ETJ2h0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5Lat5/btsjmvN3kNd/BuOMnU05fUOGn7C6ETJ2h0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5Lat5%2FbtsjmvN3kNd%2FBuOMnU05fUOGn7C6ETJ2h0%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;226&quot; height=&quot;498&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;1402&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;theme 컬러에 맞게 버튼들이 색이 바껴있고 &lt;b&gt;가장 마지막 아무 색을 설정해주지 않은 버튼은 기본값인 primary 색으로 적용이 되었다.&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 페이지에 대한 영역을 잡진 않아서 버튼들이 하나같이 다 위에 붙어 있긴하지만 이건 조정해주면 되는 것이고..&lt;br /&gt;ui template이 잘 적용된거 같으니 이제 개발 준비 완료.&lt;/p&gt;</description>
      <category>IT</category>
      <category>expo</category>
      <category>reactnativepaper</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/204</guid>
      <comments>https://allmana.tistory.com/204#entry204comment</comments>
      <pubDate>Sat, 10 Jun 2023 17:48:33 +0900</pubDate>
    </item>
    <item>
      <title>Expo Android App 만들기 - 3 (galio-framework)</title>
      <link>https://allmana.tistory.com/203</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/200&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2023.06.07 - [IT] - Expo Android App 만들기 - 2 (스플래시 적용)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686232805430&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;Expo Android App 만들기 - 2 (스플래시 적용)&quot; data-og-description=&quot;2023.06.07 - [IT] - Expo Android App 만들기 -1 Expo Android App 만들기 -1 처음 시작에는 Node.js 가 필수로 필요하다. (뇌피셜) Node 16 이 대중적인 버전으로 생각되어 Node 16 으로 진행한다. https://nodejs.org/ko Node.j&quot; data-og-host=&quot;allmana.tistory.com&quot; data-og-source-url=&quot;https://allmana.tistory.com/200&quot; data-og-url=&quot;https://allmana.tistory.com/200&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/200&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allmana.tistory.com/200&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;Expo Android App 만들기 - 2 (스플래시 적용)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;2023.06.07 - [IT] - Expo Android App 만들기 -1 Expo Android App 만들기 -1 처음 시작에는 Node.js 가 필수로 필요하다. (뇌피셜) Node 16 이 대중적인 버전으로 생각되어 Node 16 으로 진행한다. https://nodejs.org/ko Node.j&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;allmana.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 기본적인 UI 템플릿을 찾아보던 중 가장 먼저 눈에 들어온건&amp;nbsp;&lt;br /&gt;Galio Framework 였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://galio.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://galio.io/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686232846596&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;Galio Framework - React Native Framework&quot; data-og-description=&quot;Galio is a beautifully designed, Free and Open Source React Native Framework.&quot; data-og-host=&quot;galio.io&quot; data-og-source-url=&quot;https://galio.io/&quot; data-og-url=&quot;https://galio.io&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/zhD2u/hySVHGgz9u/V4oco5pkO0IKTTN7IHyyC0/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/v6T14/hySWmadmWi/Ou1fOsLDgkdSWBxMKxjWFk/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/6EG5f/hySVJRDmHH/aAY9KscawqD8LP4KrtUuK0/img.png?width=1178&amp;amp;height=659&amp;amp;face=0_0_1178_659&quot;&gt;&lt;a href=&quot;https://galio.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://galio.io/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/zhD2u/hySVHGgz9u/V4oco5pkO0IKTTN7IHyyC0/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/v6T14/hySWmadmWi/Ou1fOsLDgkdSWBxMKxjWFk/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/6EG5f/hySVJRDmHH/aAY9KscawqD8LP4KrtUuK0/img.png?width=1178&amp;amp;height=659&amp;amp;face=0_0_1178_659');&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;Galio Framework - React Native Framework&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Galio is a beautifully designed, Free and Open Source React Native Framework.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;galio.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 Docs를 참고하면된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널에서 프로젝트 경로로 이동 후&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1686232888863&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install galio-framework
혹은
yarn add galio-framework&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해주면 galio-framework 가 추가된다.&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;1088&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lcUbk/btsi9V8uoAx/H0mppmR1iWGQZKsfxaBad0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lcUbk/btsi9V8uoAx/H0mppmR1iWGQZKsfxaBad0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lcUbk/btsi9V8uoAx/H0mppmR1iWGQZKsfxaBad0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlcUbk%2Fbtsi9V8uoAx%2FH0mppmR1iWGQZKsfxaBad0%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;1088&quot; height=&quot;664&quot; data-origin-width=&quot;1088&quot; data-origin-height=&quot;664&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;여기서 가장 중요한건 galio-framework 를 import 하여 galio-framework 의 컴포넌트를 사용해야 한다.&lt;/b&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;562&quot; data-origin-height=&quot;1194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TgAVO/btsjaJsE7Wu/cGvZK1NbxyVzVcIz8pGgF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TgAVO/btsjaJsE7Wu/cGvZK1NbxyVzVcIz8pGgF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TgAVO/btsjaJsE7Wu/cGvZK1NbxyVzVcIz8pGgF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTgAVO%2FbtsjaJsE7Wu%2FcGvZK1NbxyVzVcIz8pGgF1%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;342&quot; height=&quot;727&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;1194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른건 잘 됐는데 error 컬러는 왜 적용이 안된건지..? 의문이지만&lt;br /&gt;기본적인 ui 템플릿을 사용하면 나같은 디자인과 먼 사람은 조금이나마.. 편하게 개발하기 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT</category>
      <category>expo</category>
      <category>framework</category>
      <category>galio</category>
      <category>template</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/203</guid>
      <comments>https://allmana.tistory.com/203#entry203comment</comments>
      <pubDate>Thu, 8 Jun 2023 23:06:53 +0900</pubDate>
    </item>
    <item>
      <title>인텔리제이에서 SDK 설치부터 AVD 실행까지</title>
      <link>https://allmana.tistory.com/201</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;SDK 를 따로 설치해도 되지만 귀찮음으로 빠르게 인텔리제이에서 SDK 를 설치해보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1982&quot; data-origin-height=&quot;1422&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YfOJN/btsjdmpD8TS/Z3GpOP2mphvdu9ZSveFuBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YfOJN/btsjdmpD8TS/Z3GpOP2mphvdu9ZSveFuBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YfOJN/btsjdmpD8TS/Z3GpOP2mphvdu9ZSveFuBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYfOJN%2FbtsjdmpD8TS%2FZ3GpOP2mphvdu9ZSveFuBK%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;1982&quot; height=&quot;1422&quot; data-origin-width=&quot;1982&quot; data-origin-height=&quot;1422&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Settings에 들어가서 SDK로 검색을 하면 SDK가 없는 PC의 경우에는 이렇게 뜬다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;1190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPh4w2/btsi9VUR63s/Rf0dzQ2kPJNuVCLAzd3Pp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPh4w2/btsi9VUR63s/Rf0dzQ2kPJNuVCLAzd3Pp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPh4w2/btsi9VUR63s/Rf0dzQ2kPJNuVCLAzd3Pp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPh4w2%2Fbtsi9VUR63s%2FRf0dzQ2kPJNuVCLAzd3Pp0%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;1624&quot; height=&quot;1190&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;1190&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1628&quot; data-origin-height=&quot;1184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zzU7f/btsjar0jThD/J6TIorxZrhAeH4KMxkgWk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zzU7f/btsjar0jThD/J6TIorxZrhAeH4KMxkgWk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zzU7f/btsjar0jThD/J6TIorxZrhAeH4KMxkgWk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzzU7f%2Fbtsjar0jThD%2FJ6TIorxZrhAeH4KMxkgWk1%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;1628&quot; height=&quot;1184&quot; data-origin-width=&quot;1628&quot; data-origin-height=&quot;1184&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Edit를 클릭해서 뜨는 팝업차에서 Next를 해주면 SDK 를 간편히 설치할 수가 있다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1456&quot; data-origin-height=&quot;1138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTf6du/btsjayZcVKS/A2AmJkABUVp8rHTXVEwUfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTf6du/btsjayZcVKS/A2AmJkABUVp8rHTXVEwUfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTf6du/btsjayZcVKS/A2AmJkABUVp8rHTXVEwUfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTf6du%2FbtsjayZcVKS%2FA2AmJkABUVp8rHTXVEwUfK%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;1456&quot; height=&quot;1138&quot; data-origin-width=&quot;1456&quot; data-origin-height=&quot;1138&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;설치가 완료된 후에는 상단 Device Manger 같은게 생기기도 하는듯 한데&amp;nbsp;&lt;br /&gt;나는 생기지 않아서 Mac 기준 Tools에 android &amp;gt; Device Manager를 실행하였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;966&quot; data-origin-height=&quot;958&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EGVML/btsjaskCh7o/hTcNKk0cRgZpVXytQGOoZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EGVML/btsjaskCh7o/hTcNKk0cRgZpVXytQGOoZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EGVML/btsjaskCh7o/hTcNKk0cRgZpVXytQGOoZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEGVML%2FbtsjaskCh7o%2FhTcNKk0cRgZpVXytQGOoZK%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;966&quot; height=&quot;958&quot; data-origin-width=&quot;966&quot; data-origin-height=&quot;958&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1036&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csYtkS/btsjcswSVJW/Fbkk7p2UebWBuBf5D3EqM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csYtkS/btsjcswSVJW/Fbkk7p2UebWBuBf5D3EqM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csYtkS/btsjcswSVJW/Fbkk7p2UebWBuBf5D3EqM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsYtkS%2FbtsjcswSVJW%2FFbkk7p2UebWBuBf5D3EqM0%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;438&quot; height=&quot;457&quot; data-origin-width=&quot;1036&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Create virtual device 를 해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1976&quot; data-origin-height=&quot;1350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rMmxJ/btsjdAOYvQT/V3kGzlvSSAIP2F4RSTRpQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rMmxJ/btsjdAOYvQT/V3kGzlvSSAIP2F4RSTRpQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rMmxJ/btsjdAOYvQT/V3kGzlvSSAIP2F4RSTRpQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrMmxJ%2FbtsjdAOYvQT%2FV3kGzlvSSAIP2F4RSTRpQk%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;1976&quot; height=&quot;1350&quot; data-origin-width=&quot;1976&quot; data-origin-height=&quot;1350&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 기종 선택 후 Next 해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1986&quot; data-origin-height=&quot;1338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kxz0B/btsjaJfkt6N/blQJkfKMULkyzMICL7c3KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kxz0B/btsjaJfkt6N/blQJkfKMULkyzMICL7c3KK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kxz0B/btsjaJfkt6N/blQJkfKMULkyzMICL7c3KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fkxz0B%2FbtsjaJfkt6N%2FblQJkfKMULkyzMICL7c3KK%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;1986&quot; height=&quot;1338&quot; data-origin-width=&quot;1986&quot; data-origin-height=&quot;1338&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;API34는 아까 맨처음 다운 받은게 아닌건지? 모든걸 다운 받아야 하는 걸로 뜬다.&lt;br /&gt;적당히 &lt;b&gt;API 28 로 Pie 버전으로 택했다.(다운로드 아이콘을 눌러서 다운로드를 완료하면 Next 버튼이 활성화된다.)&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;2000&quot; data-origin-height=&quot;1352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/diJbav/btsjcVeKs1p/k9NWsJIrbtKL1TN0sWbxCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/diJbav/btsjcVeKs1p/k9NWsJIrbtKL1TN0sWbxCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/diJbav/btsjcVeKs1p/k9NWsJIrbtKL1TN0sWbxCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdiJbav%2FbtsjcVeKs1p%2Fk9NWsJIrbtKL1TN0sWbxCk%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;2000&quot; height=&quot;1352&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1352&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1030&quot; data-origin-height=&quot;1076&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E3MrO/btsjaKSDBD8/rMqPvKirNLYIrTUZW9IPEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E3MrO/btsjaKSDBD8/rMqPvKirNLYIrTUZW9IPEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E3MrO/btsjaKSDBD8/rMqPvKirNLYIrTUZW9IPEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE3MrO%2FbtsjaKSDBD8%2FrMqPvKirNLYIrTUZW9IPEk%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;1030&quot; height=&quot;1076&quot; data-origin-width=&quot;1030&quot; data-origin-height=&quot;1076&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Device Manager에 디바이스가 생겨있고 실행을 하면 가상 디바이스가 뜬다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1026&quot; data-origin-height=&quot;1088&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSUjjO/btsjcacaRDa/1G788dfYOS3XbfHojil2u1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSUjjO/btsjcacaRDa/1G788dfYOS3XbfHojil2u1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSUjjO/btsjcacaRDa/1G788dfYOS3XbfHojil2u1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSUjjO%2FbtsjcacaRDa%2F1G788dfYOS3XbfHojil2u1%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;1026&quot; height=&quot;1088&quot; data-origin-width=&quot;1026&quot; data-origin-height=&quot;1088&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>IT</category>
      <category>Android</category>
      <category>AVD</category>
      <category>IntelliJ</category>
      <category>sdk</category>
      <category>가상디바이스</category>
      <category>인텔리제이</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/201</guid>
      <comments>https://allmana.tistory.com/201#entry201comment</comments>
      <pubDate>Thu, 8 Jun 2023 22:02:10 +0900</pubDate>
    </item>
    <item>
      <title>Expo Android App 만들기 - 2 (스플래시 적용)</title>
      <link>https://allmana.tistory.com/200</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/199&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2023.06.07 - [IT] - Expo Android App 만들기 -1&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686148798254&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;Expo Android App 만들기 -1&quot; data-og-description=&quot;처음 시작에는 Node.js 가 필수로 필요하다. (뇌피셜) Node 16 이 대중적인 버전으로 생각되어 Node 16 으로 진행한다. https://nodejs.org/ko Node.js Node.js&amp;reg; is a JavaScript runtime built on Chrome's V8 JavaScript engine. node&quot; data-og-host=&quot;allmana.tistory.com&quot; data-og-source-url=&quot;https://allmana.tistory.com/199&quot; data-og-url=&quot;https://allmana.tistory.com/199&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Ezr6j/hySVBedhjl/NpvIEntwB3zvvm2uZO8aTk/img.png?width=386&amp;amp;height=106&amp;amp;face=0_0_386_106,https://scrap.kakaocdn.net/dn/vkuSS/hySVy2QHew/8nx2sOjL9krCyU3und9MCK/img.png?width=386&amp;amp;height=106&amp;amp;face=0_0_386_106,https://scrap.kakaocdn.net/dn/ntB83/hySVGGz5Q5/ktbJP4opUdFrzPUnt6gnU1/img.png?width=1588&amp;amp;height=1254&amp;amp;face=0_0_1588_1254&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/199&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allmana.tistory.com/199&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Ezr6j/hySVBedhjl/NpvIEntwB3zvvm2uZO8aTk/img.png?width=386&amp;amp;height=106&amp;amp;face=0_0_386_106,https://scrap.kakaocdn.net/dn/vkuSS/hySVy2QHew/8nx2sOjL9krCyU3und9MCK/img.png?width=386&amp;amp;height=106&amp;amp;face=0_0_386_106,https://scrap.kakaocdn.net/dn/ntB83/hySVGGz5Q5/ktbJP4opUdFrzPUnt6gnU1/img.png?width=1588&amp;amp;height=1254&amp;amp;face=0_0_1588_1254');&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;Expo Android App 만들기 -1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;처음 시작에는 Node.js 가 필수로 필요하다. (뇌피셜) Node 16 이 대중적인 버전으로 생각되어 Node 16 으로 진행한다. https://nodejs.org/ko Node.js Node.js&amp;reg; is a JavaScript runtime built on Chrome's V8 JavaScript engine. node&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;allmana.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웬만한 앱이 처음 실행시키면 그 앱을 만든 회사의 로고가 처음 보여지게 만들곤 한다.&lt;br /&gt;이러한걸 앱에선 스플래시(Splash) 라고 한다.&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;1058&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFgS7c/btsiZVOzr8E/4ZsHPVpOsr8xxwGXXbFN61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFgS7c/btsiZVOzr8E/4ZsHPVpOsr8xxwGXXbFN61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFgS7c/btsiZVOzr8E/4ZsHPVpOsr8xxwGXXbFN61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFgS7c%2FbtsiZVOzr8E%2F4ZsHPVpOsr8xxwGXXbFN61%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;1058&quot; height=&quot;630&quot; data-origin-width=&quot;1058&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Expo의 강점이 시작부터 나온다. 기존 안드로이드 앱으로 스플래시를 설정하려 한다면&lt;br /&gt;소스를 수정하고 해야하는데 Expo는 기본적인건 정말 편하게 해두었다.&lt;br /&gt;app.json에 들어가보면 splash 설정이 있다. 원하는 이미지로 경로를 바꾸면 스플래시 성공.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2062&quot; data-origin-height=&quot;854&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pwwPJ/btsi2w8zxex/u7hVoyYewBbYBlhAxOhYxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pwwPJ/btsi2w8zxex/u7hVoyYewBbYBlhAxOhYxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pwwPJ/btsi2w8zxex/u7hVoyYewBbYBlhAxOhYxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpwwPJ%2Fbtsi2w8zxex%2Fu7hVoyYewBbYBlhAxOhYxK%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;2062&quot; height=&quot;854&quot; data-origin-width=&quot;2062&quot; data-origin-height=&quot;854&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;assets 폴더에 devjs_splash.png를 이미지를 넣고 app.json 경로도 수정해주었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;534&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxLf0B/btsi4a4xCNr/3NTD7Di35rELFdpFEWn2V1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxLf0B/btsi4a4xCNr/3NTD7Di35rELFdpFEWn2V1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxLf0B/btsi4a4xCNr/3NTD7Di35rELFdpFEWn2V1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxLf0B%2Fbtsi4a4xCNr%2F3NTD7Di35rELFdpFEWn2V1%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;686&quot; height=&quot;534&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;534&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;image에 원하는 이미지 경로를 넣어주고, resizeMode 는 contain(default), cover 가 있다.(Expo Docs 참고)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1076&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3FQAC/btsi10WqwzQ/tmTRWFqHhGXDSuSQVutMek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3FQAC/btsi10WqwzQ/tmTRWFqHhGXDSuSQVutMek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3FQAC/btsi10WqwzQ/tmTRWFqHhGXDSuSQVutMek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3FQAC%2Fbtsi10WqwzQ%2FtmTRWFqHhGXDSuSQVutMek%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;1076&quot; height=&quot;512&quot; data-origin-width=&quot;1076&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이렇게 설정을 하고서 앱이 실행되어 있는 상태라면 &lt;b&gt;터미널에서 r 를 눌러주면&lt;/b&gt; 알아서 앱이 자동 실행되고&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_Screenshot_20230607_235711_Expo Go.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2131&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csWtuY/btsi4N85NwM/eCF9KKJM8butYDMsVLaoY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csWtuY/btsi4N85NwM/eCF9KKJM8butYDMsVLaoY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csWtuY/btsi4N85NwM/eCF9KKJM8butYDMsVLaoY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsWtuY%2Fbtsi4N85NwM%2FeCF9KKJM8butYDMsVLaoY0%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;193&quot; height=&quot;381&quot; data-filename=&quot;edited_Screenshot_20230607_235711_Expo Go.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2131&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;splash가 들어간걸 확인할수 있다.&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;</description>
      <category>IT</category>
      <category>expo</category>
      <category>SPLASH</category>
      <category>스플래시</category>
      <category>안드로이드</category>
      <category>앱</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/200</guid>
      <comments>https://allmana.tistory.com/200#entry200comment</comments>
      <pubDate>Wed, 7 Jun 2023 23:57:36 +0900</pubDate>
    </item>
    <item>
      <title>Expo Android App 만들기 -1</title>
      <link>https://allmana.tistory.com/199</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;처음 시작에는 Node.js 가 필수로 필요하다.&lt;br /&gt;(뇌피셜) Node 16 이 대중적인 버전으로 생각되어 Node 16 으로 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://nodejs.org/ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://nodejs.org/ko&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686134787693&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;Node.js&quot; data-og-description=&quot;Node.js&amp;reg; is a JavaScript runtime built on Chrome's V8 JavaScript engine.&quot; data-og-host=&quot;nodejs.org&quot; data-og-source-url=&quot;https://nodejs.org/ko&quot; data-og-url=&quot;https://nodejs.org/ko&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/yVkZr/hySVyhc429/LJskYPh80hI8aBOSGgHNs0/img.png?width=224&amp;amp;height=256&amp;amp;face=0_0_224_256&quot;&gt;&lt;a href=&quot;https://nodejs.org/ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nodejs.org/ko&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/yVkZr/hySVyhc429/LJskYPh80hI8aBOSGgHNs0/img.png?width=224&amp;amp;height=256&amp;amp;face=0_0_224_256');&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;Node.js&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Node.js&amp;reg; is a JavaScript runtime built on Chrome's V8 JavaScript engine.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nodejs.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 완료되면 터미널에 node 버전이 확인 된다면 설치 완료.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;386&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhLHES/btsiZWyuZSt/UIrd0oFKMWl5iTchZhQRk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhLHES/btsiZWyuZSt/UIrd0oFKMWl5iTchZhQRk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhLHES/btsiZWyuZSt/UIrd0oFKMWl5iTchZhQRk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhLHES%2FbtsiZWyuZSt%2FUIrd0oFKMWl5iTchZhQRk0%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;386&quot; height=&quot;106&quot; data-origin-width=&quot;386&quot; data-origin-height=&quot;106&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;node 가 설치가 완료되면 npm 이란걸 쓸수가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;npm이란 노드 패키지 매니저 라는 놈인데 명령어로 손쉽게 원하는 패키지를 다운받을 수 있게 해준다 생각하면된다.&lt;/p&gt;
&lt;pre id=&quot;code_1686134749712&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install -g expo-cli&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 하면 내 PC에 expo가 설치가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 터미널에서 프로젝트를 생성할 workspace 폴더로 이동해서&lt;/p&gt;
&lt;pre id=&quot;code_1686384226400&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npx create-expo-app 앱이름&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;이 후 이 폴더를 개발툴(Visual Basic, Intellij)로 열어준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1588&quot; data-origin-height=&quot;1254&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buccpk/btsi3XxbRTc/m5728pCJHINNn0n2aS70uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buccpk/btsi3XxbRTc/m5728pCJHINNn0n2aS70uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buccpk/btsi3XxbRTc/m5728pCJHINNn0n2aS70uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbuccpk%2Fbtsi3XxbRTc%2Fm5728pCJHINNn0n2aS70uk%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;1588&quot; height=&quot;1254&quot; data-origin-width=&quot;1588&quot; data-origin-height=&quot;1254&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;터미널에서 npm start or yarn start 를 해주면 앱이 실행된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;832&quot; data-origin-height=&quot;836&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk7Vqh/btsi2dnwZts/vbBchpHRHCM9KSW2MNDgU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk7Vqh/btsi2dnwZts/vbBchpHRHCM9KSW2MNDgU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk7Vqh/btsi2dnwZts/vbBchpHRHCM9KSW2MNDgU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk7Vqh%2Fbtsi2dnwZts%2FvbBchpHRHCM9KSW2MNDgU0%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;570&quot; height=&quot;573&quot; data-origin-width=&quot;832&quot; data-origin-height=&quot;836&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글 스토어에서 핸드폰에 expo 앱을 설치 후 &lt;br /&gt;expo 앱으로 qr코드를 찍어서 앱을 실행시키면 app.js의 화면이 나오게 된다. &lt;b&gt;(같은 와이파이여야한다.)&lt;/b&gt;&lt;br /&gt;app.js의 문구를 수정하면 바로 반영이 되는걸 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가상으로도 pc에서 할 수도 있는데 그건 또 SDK도 깔아야하고 귀찮기도 하고&lt;br /&gt;나는 실제 폰으로 보고 확인하는게 좋아서 이렇게 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오랜만에 간단한 앱을 하나 만들어 볼까 싶어서&amp;nbsp;&lt;br /&gt;로또 앱이나 하나 만들어서 배포를 해나가는 과정을 기록해보려 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱개발자가 아닌 나로선 간단한 앱도 시간이 꽤나 걸리기 때문에..&lt;br /&gt;이것도 하나만 만들고 끝낼 가능성이 높지만 일단은 오랜만에 재밌을거 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+ Expo 로 만드는 앱 개발은 이처럼 간단하게 시작할 수 있고 쉽게 만들수 있다.&lt;br /&gt;단점은 앱을 고도화해나갈때 몇몇 기능들이 지원이 안된다거나(?) &lt;br /&gt;활용하기 어려워진다고 하는데 (이 때문에 Expo로 개발을 안하려했으나..)&lt;br /&gt;그렇게 기능이 많은 앱을 만들지 않을꺼라면 Expo로 간단한 앱을 만들기엔 좋은거 같다.&lt;br /&gt;그리고 React native라 앱 네이티브 언어 지식이 없더라도 React 를 해본 사람이라면 앱개발의 진입장벽도&lt;br /&gt;낮아지기 때문에 좋은거 같다.&lt;/p&gt;</description>
      <category>IT</category>
      <category>expo</category>
      <category>안드로이드</category>
      <category>앱</category>
      <category>앱개발</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/199</guid>
      <comments>https://allmana.tistory.com/199#entry199comment</comments>
      <pubDate>Wed, 7 Jun 2023 20:00:43 +0900</pubDate>
    </item>
    <item>
      <title>Spring Custom Exception, Custom Response</title>
      <link>https://allmana.tistory.com/198</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 공통 Response 만들기&lt;/b&gt;&lt;/h4&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Getter
@Setter
public class CustomResponse&amp;lt;T&amp;gt;{

    private int status;

    private T data;

    private String message; 

    public CustomResponse(T data) {
    	this.status = HttpStatus.OK.value();
        this.data = data;
    }

    public CustomResponse(int status, T data, String message) {
        this.status = status;
        this.data = data;
        this.message = message;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Response 공통 포멧이 될 CustomResponse 클래스를 만들어준다.&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;public enum ResponseCode {

    SUCCESS(&quot;success&quot;),
    USER_NOT_FOUND(&quot;user not found&quot;);

    private String message;

    ResponseCode(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성공코드와 에러코드 그리고 메세지를 관리할 ResponseCode enum 을 만들어주었다.&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;java&quot;&gt;&lt;code&gt;@RestControllerAdvice
public class CustomResponseBodyAdvice implements ResponseBodyAdvice&amp;lt;Object&amp;gt; {

    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        return true;
    }

    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
                                  Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response){
        if(body instanceof CustomResponse){
            return body;
        }
        return new CustomResponse&amp;lt;&amp;gt;(HttpStatus.OK.value(), body, ResponseCode.SUCCESS.getMessage());
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@RestControllerAdvice 어노테이션을 추가해주고 ResponseBodyAdvice interface를 구현 해준다.&lt;br /&gt;supports 는 true 로 수정해주고 beforeBodyWrite 는 메서드 명에서도 알수있듯이&lt;br /&gt;Response 되기전 내가 Custom한 형태로 response 를 하게 해준다.&lt;br /&gt;Body instanceof CustomResponse 를 추가한 이유는 에러가 났을때 body 가 이미 CustomResponse 폼으로 들어오기 때문에&lt;br /&gt;이미 CustomResponse 형태인 값은 그냥 return 해주면 되기 때문이다.&lt;br /&gt;그리고 String data 를 return 할때는 controller 에서 CustomResponse 로 담아서 return을 할 예정이기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;return String&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@GetMapping(&quot;/test&quot;)
public CustomResponse test(){
    return new CustomResponse(&quot;테스트&quot;);
}

Response
{
  &quot;status&quot;: 200,
  &quot;data&quot;: &quot;테스트&quot;,
  &quot;message&quot;: null
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;return Dto&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@GetMapping(&quot;/test&quot;)
public TestDto test(){
    return TestDto.builder()
            .id(1)
            .name(&quot;test&quot;)
            .email(&quot;test@test.com&quot;)
            .build();
}

Response 
{
  &quot;status&quot;: 200,
  &quot;data&quot;: {
    &quot;id&quot;: 1,
    &quot;name&quot;: &quot;test&quot;,
    &quot;email&quot;: &quot;test@test.com&quot;
  },
  &quot;message&quot;: &quot;success&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. Custom Exception 만들기&lt;/b&gt;&lt;/h4&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Setter
public class CustomException extends RuntimeException{

    private ResponseCode responseCode;

    public CustomException(ResponseCode errorCode) {
        this.responseCode = errorCode;
    }

    @Override
    public String getMessage() {
        return responseCode.getMessage();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RuntimeException 을 상속받아 CustomException 을 만들어준다.&lt;br /&gt;ResponseCode 를 받아서 에러값과 메세지를 처리하게한다.&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@RestControllerAdvice
public class CustomExceptionHandler{

    @ExceptionHandler(CustomException.class)
    public CustomResponse customResponse(CustomException e){
        return new CustomResponse(HttpStatus.BAD_REQUEST.value(), null, e.getMessage());
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RestControllerAdvice 어노테이션을 추가해주고&lt;br /&gt;CustomException 에 대한 Custom 을 해준다.&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;public TestDto test(){
    if( 1 == 1 ){
        throw new CustomException(ResponseCode.USER_NOT_FOUND);
    }
    return TestDto.builder()
            .id(1)
            .name(&quot;test&quot;)
            .email(&quot;test@test.com&quot;)
            .build();
}

Response
{
  &quot;status&quot;: 400,
  &quot;data&quot;: null,
  &quot;message&quot;: &quot;user not found&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Exception으로 에러와 메세지를 관리할수가 있다.&lt;/p&gt;</description>
      <category>IT</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/198</guid>
      <comments>https://allmana.tistory.com/198#entry198comment</comments>
      <pubDate>Sun, 2 Apr 2023 16:39:16 +0900</pubDate>
    </item>
    <item>
      <title>스프링 시큐리티 - 2 (회원 등록)</title>
      <link>https://allmana.tistory.com/196</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/194&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2023.03.02 - [IT] - 스프링 시큐리티 - 1&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1678001237121&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;스프링 시큐리티 - 1&quot; data-og-description=&quot;의존성 추가 implementation(&amp;quot;org.springframework.boot:spring-boot-starter-security:3.0.3&amp;quot;) 스프링 시큐리티를 의존성을 추가하고 서버를 재기동하고 localhost:8080 를 열어보면 내가 만든적 없는 로그인 창이 등장하&quot; data-og-host=&quot;allmana.tistory.com&quot; data-og-source-url=&quot;https://allmana.tistory.com/194&quot; data-og-url=&quot;https://allmana.tistory.com/194&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/EHf2s/hyROWyFU1W/YfZSGpaLWfQ9LYOImsA82K/img.png?width=654&amp;amp;height=478&amp;amp;face=0_0_654_478,https://scrap.kakaocdn.net/dn/ismqM/hyRQiz7cNq/0QQ0KQqRBBwkXg7zIf7ef1/img.png?width=654&amp;amp;height=478&amp;amp;face=0_0_654_478,https://scrap.kakaocdn.net/dn/buc9M0/hyROVzNFZa/m6zs7YQSQJn4IjmAKYanw1/img.png?width=668&amp;amp;height=570&amp;amp;face=0_0_668_570&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/194&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allmana.tistory.com/194&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/EHf2s/hyROWyFU1W/YfZSGpaLWfQ9LYOImsA82K/img.png?width=654&amp;amp;height=478&amp;amp;face=0_0_654_478,https://scrap.kakaocdn.net/dn/ismqM/hyRQiz7cNq/0QQ0KQqRBBwkXg7zIf7ef1/img.png?width=654&amp;amp;height=478&amp;amp;face=0_0_654_478,https://scrap.kakaocdn.net/dn/buc9M0/hyROVzNFZa/m6zs7YQSQJn4IjmAKYanw1/img.png?width=668&amp;amp;height=570&amp;amp;face=0_0_668_570');&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;스프링 시큐리티 - 1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;의존성 추가 implementation(&quot;org.springframework.boot:spring-boot-starter-security:3.0.3&quot;) 스프링 시큐리티를 의존성을 추가하고 서버를 재기동하고 localhost:8080 를 열어보면 내가 만든적 없는 로그인 창이 등장하&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;allmana.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;URL 권한 주기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링 부트 3 버전에 시큐리티도 5.7 이상을 쓰다보니 예전에 했던 방식이랑 조금 달라졌다.&lt;/p&gt;
&lt;div&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Configuration
public class SecurityConfiguration {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.csrf().disable() // csrf 중지
                .headers().frameOptions().disable()// x-frame-options 중지
                .and()
                .authorizeRequests()
                .requestMatchers( // 원하는 url 패턴 추가 
                        &quot;/h2-console/**&quot;, // h2-DB
                        &quot;/api/member&quot;) // 회원가입을 위한 api
                .permitAll();
        return http.build();
    }

    @Bean
    public WebSecurityCustomizer webSecurityCustomizer() {
        // web security setting 
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;H2 접근이 안돼?&lt;/h2&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;security 사용하므로서.. h2-console에 접근도 안되게 된다. 그래서 겨우 찾아낸 결과..&lt;br /&gt;1. crsf disable&lt;br /&gt;2. header frameOptions disable&lt;br /&gt;3. request 허용.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 버전과는 다르게 5.7 이상에서는 @Bean 선언해서 설정을 해주면된다.&lt;br /&gt;나는 h2 DB를 사용하기 때문에 h2-console 경로도 추가해줬다.&lt;br /&gt;그리고 api 서버로만 구성할것이기 때문에 로그인페이지나 로그아웃 페이지가 없이&lt;br /&gt;회원 가입을 위한 api/member url만을 추가해줬다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Member 테이블 생성&lt;/h2&gt;
&lt;div&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Entity
@Getter
@NoArgsConstructor
public class Member{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(unique = true, nullable = false)
    private String loginId;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false)
    private String password;

    @OneToMany(mappedBy = &quot;member&quot;)
    private List&amp;lt;MemberRole&amp;gt; roles = Lists.newArrayList();

    @Builder
    public Member(Long id, String loginId, String name, String password, List&amp;lt;MemberRole&amp;gt; roles) {
        this.id = id;
        this.loginId = loginId;
        this.name = name;
        this.password = password;
        this.roles = roles;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Entity 에는 Setter를 쓰지 않는다.(자세한건 김영한님 강의 참고)&lt;br /&gt;나머지는 회원에 대한 기본 정보이고 회원 권한은 MemberRole 이라는 엔티티를 하나 더 구성해서&lt;br /&gt;회원들의 권한을 관리할 생각이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 인터페이스인 UserDetails를 구현하면&lt;/p&gt;
&lt;div&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Entity
@Getter
@NoArgsConstructor
public class Member implements UserDetails {
    // 생략 ... 
    @Override
    public Collection&amp;lt;? extends GrantedAuthority&amp;gt; getAuthorities() {
        List&amp;lt;GrantedAuthority&amp;gt; authorities = Lists.newArrayList();
        // role을 넣어준다.
        roles.forEach(role-&amp;gt;{
            authorities.add(new SimpleGrantedAuthority(role.getRoleType().toString()));
        });
        return authorities;
    }
    @Override
    public String getUsername() {
        return this.loginId; // 계정 아이디를 리턴해준다.
    }

    @Override
    public boolean isAccountNonExpired() { //true면 만료되지 않은 계정
        return true;
    }

    @Override
    public boolean isAccountNonLocked() { // true면 잠기지 않은 계정
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() { // true면 비밀번호가 만료되지 않은 계정
        return true;
    }

    @Override
    public boolean isEnabled() { // true면 활성화되어있는 계정
        return true;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 getPassword도 있는데 member 클래스에 password가 겹치고 getter가 있다보니 새로 뜨진 않았다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;MemberRole 생성&lt;/h2&gt;
&lt;div&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Entity
@Getter
public class MemberRole {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn(name = &quot;member_id&quot;)
    private Member member;

    @Enumerated(EnumType.STRING)
    private RoleType roleType;
    
    @Builder
    public MemberRole(Long id, Member member, RoleType roleType) {
        this.id = id;
        this.member = member;
        this.roleType = roleType;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Member에 OneToMany를 쓰긴 했지만 사실 ManyToOne 구조로만 만드는게 좋다.&lt;br /&gt;하지만 멤버 권한만.. 특별히.. Memeber쪽에 OneToMany를 구성해주었고&lt;br /&gt;MemberRole에는 Member와 조인될 컬럼을 지정해준다.&lt;/p&gt;
&lt;div&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;public enum RoleType {
    ROLE_USER,
    ROLE_ADMIN
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 roleType 은 일단 ROLE_USER 와 ROLE_ADMIN 으로 간단하게 구성하겠다.&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;스크린샷 2023-03-06 오후 11.06.23.png&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxMmlW/btr2r47FD3m/dv6KFWA7xkumllnHZEPylK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxMmlW/btr2r47FD3m/dv6KFWA7xkumllnHZEPylK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxMmlW/btr2r47FD3m/dv6KFWA7xkumllnHZEPylK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxMmlW%2Fbtr2r47FD3m%2Fdv6KFWA7xkumllnHZEPylK%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;277&quot; height=&quot;135&quot; data-filename=&quot;스크린샷 2023-03-06 오후 11.06.23.png&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;192&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블이 생성된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Password Encoder 등록&lt;/h2&gt;
&lt;div&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Configuration
public class SecurityConfiguration {
	// 생략 
    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비밀번호 암호화에 사용할 PasswordEncoder를 securityConfiguration에 PasswordEncoder 를 Bean로 등록해준다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Repository 생성&amp;nbsp;&lt;/h2&gt;
&lt;div&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Repository
public interface MemberRepository extends JpaRepository&amp;lt;Member, Long&amp;gt; {

}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Repository
public interface MemberRoleRepository extends JpaRepository&amp;lt;MemberRole,Long&amp;gt; {

}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Service 생성&lt;/h2&gt;
&lt;div&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Service
@RequiredArgsConstructor
@Slf4j
public class MemberService{

    private final MemberRepository repository;
    private final MemberRoleRepository roleRepository;

    private final PasswordEncoder passwordEncoder;

    public Long save(MemberRequestDto requestDto) {
        String rawPassword = requestDto.getPassword();
        String encodePassword = passwordEncoder.encode(rawPassword);
        // 멤버 등록 및 ID 가져오기.
        Long memberId = repository.save(Member.builder()
                        .loginId(requestDto.getLoginId())
                        .name(requestDto.getName())
                        .password(encodePassword)
                        .build()).getId();
        // 권한 등록 
        roleRepository.save(
                MemberRole.builder()
                        .member(Member.builder().id(memberId).build())
                        .roleType(RoleType.ROLE_USER)
                        .build()
        );

        return memberId;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Controller 생성&lt;/h2&gt;
&lt;div&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@RestController
@RequestMapping(&quot;/api/member&quot;)
@RequiredArgsConstructor
public class MemberController {

    private final MemberService service;

    @PostMapping
    public Long save(MemberRequestDto requestDto){
        return service.save(requestDto);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Getter
@Setter
public class MemberRequestDto {

    private String loginId;

    private String name;

    private String password;

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;POST localhost:8080/api/member 로 회원 등록 Request를 하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1448&quot; data-origin-height=&quot;182&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqzPE6/btr2xSroyqW/2pqZOE48WDk1HrcXYGuOf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqzPE6/btr2xSroyqW/2pqZOE48WDk1HrcXYGuOf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqzPE6/btr2xSroyqW/2pqZOE48WDk1HrcXYGuOf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqzPE6%2Fbtr2xSroyqW%2F2pqZOE48WDk1HrcXYGuOf0%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;1448&quot; height=&quot;182&quot; data-origin-width=&quot;1448&quot; data-origin-height=&quot;182&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블을 확인하면 Member 테이블에도 잘 쌓였고&lt;br /&gt;MemberRole 테이블에도 권한이 잘 쌓인걸 볼 수 있다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT</category>
      <category>FilterChain</category>
      <category>H2</category>
      <category>스프링</category>
      <category>시큐리티</category>
      <category>회원등록</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/196</guid>
      <comments>https://allmana.tistory.com/196#entry196comment</comments>
      <pubDate>Mon, 6 Mar 2023 23:59:17 +0900</pubDate>
    </item>
    <item>
      <title>스프링 H2 DB 사용하기</title>
      <link>https://allmana.tistory.com/195</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;간단히 테스트나 공부용으로 가볍게 쓰려한다면&amp;nbsp;&lt;br /&gt;H2 DB를 간단히 쓰는게 좋다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;의존성 추가&amp;nbsp;&lt;/h2&gt;
&lt;div&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;runtimeOnly(&quot;com.h2database:h2&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;runtime 으로 추가 해준다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Application.yml 설정&lt;/h2&gt;
&lt;div&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;spring:
  h2:
    console:
      enabled: true
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:./test (경로설정 소스파일 root에 test라는 이름으로 생성되게 했다.)
    username: sa (아이디)
    password: sa (비밀번호)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;H2 방식은 여러가지가 있는데 나는 임베디드 방식으로 DB 파일을 생성하여&lt;br /&gt;DB 파일을 GIt 에 올려서 공유를 하려한다.&lt;br /&gt;그렇게되면 다른 PC에서도 소스를 Pull 한다면 DB 파일이 계속 서로 동기화를 할 수 있기 때문이다.&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;438&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tEtuI/btr1PNF0nxi/OYPfyKGvoNCnYx9PNTVI90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tEtuI/btr1PNF0nxi/OYPfyKGvoNCnYx9PNTVI90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tEtuI/btr1PNF0nxi/OYPfyKGvoNCnYx9PNTVI90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtEtuI%2Fbtr1PNF0nxi%2FOYPfyKGvoNCnYx9PNTVI90%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;245&quot; height=&quot;371&quot; data-origin-width=&quot;438&quot; data-origin-height=&quot;664&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;root 상단에 test.mv.db 라는 파일이 생성되는걸 확인 할 수 있다.&amp;nbsp;&lt;br /&gt;이걸 Git에 관리한다면 다른 PC에서 사용을 하더라도 DB를 동기화해서 사용이 가능하다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;DB접속방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특별히 건들지 않았다면 &lt;br /&gt;localhost:8080/h2-console 로 접속&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;734&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ky16l/btr1UtOpwRy/d7nt8i2DbV0In1Su8IZXSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ky16l/btr1UtOpwRy/d7nt8i2DbV0In1Su8IZXSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ky16l/btr1UtOpwRy/d7nt8i2DbV0In1Su8IZXSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fky16l%2Fbtr1UtOpwRy%2Fd7nt8i2DbV0In1Su8IZXSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;385&quot; height=&quot;307&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;734&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아까 url 을 ./test로 했기때문에 수정 후&amp;nbsp;&lt;br /&gt;아이디와 비밀번호를 입력하면 접속이 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1554&quot; data-origin-height=&quot;632&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDG9ac/btr1MkqKlIw/0n4SmZuElavr8WvJep2jx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDG9ac/btr1MkqKlIw/0n4SmZuElavr8WvJep2jx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDG9ac/btr1MkqKlIw/0n4SmZuElavr8WvJep2jx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDG9ac%2Fbtr1MkqKlIw%2F0n4SmZuElavr8WvJep2jx1%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;1554&quot; height=&quot;632&quot; data-origin-width=&quot;1554&quot; data-origin-height=&quot;632&quot;/&gt;&lt;/span&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;</description>
      <category>IT</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/195</guid>
      <comments>https://allmana.tistory.com/195#entry195comment</comments>
      <pubDate>Sun, 5 Mar 2023 16:21:09 +0900</pubDate>
    </item>
    <item>
      <title>스프링 시큐리티 - 1</title>
      <link>https://allmana.tistory.com/194</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;의존성 추가&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;implementation(&quot;org.springframework.boot:spring-boot-starter-security:3.0.3&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링 시큐리티를 의존성을 추가하고 서버를 재기동하고 localhost:8080 를 열어보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;478&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biLgBc/btr1HgHIL3A/fkmDNv9Ace7nVc5jWp85RK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biLgBc/btr1HgHIL3A/fkmDNv9Ace7nVc5jWp85RK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biLgBc/btr1HgHIL3A/fkmDNv9Ace7nVc5jWp85RK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiLgBc%2Fbtr1HgHIL3A%2FfkmDNv9Ace7nVc5jWp85RK%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;285&quot; height=&quot;208&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;478&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;br /&gt;스프링은 이러한 웹에 기본적인 기능들을 바로 구현시켜줌으로서 개발자들의 편의성을 제공해준다.&lt;br /&gt;개발자는 차려진 밥상에 숟가락만 얹으면 된다.&lt;br /&gt;사실 숟가락만 얹기란 쉽지 않긴하지만 그래도 어느정도 스프링이 밥은 차려준 셈이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;누군가 웹 만들때 스프링을 왜 쓰는가? 묻는다면 개인적으로 이런저런 이론적인걸 떠나서&lt;br /&gt;웹을 만들때 주로 쓰는 기능들을 잘 지원해주고 사람들이 많이 쓰다보니 구글신에게 물으면 답도 잘 나온다.ㅋㅋ&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;로그인은 어떻게 해?&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h2&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;1172&quot; data-origin-height=&quot;122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QrLGo/btr1lwLXAHe/UCEw8X1hTF0k8bhV4kper0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QrLGo/btr1lwLXAHe/UCEw8X1hTF0k8bhV4kper0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QrLGo/btr1lwLXAHe/UCEw8X1hTF0k8bhV4kper0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQrLGo%2Fbtr1lwLXAHe%2FUCEw8X1hTF0k8bhV4kper0%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;745&quot; height=&quot;78&quot; data-origin-width=&quot;1172&quot; data-origin-height=&quot;122&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런게 지나간다. 바로 이게 비밀번호가 된다.&lt;br /&gt;&lt;b&gt;아이디: user , 패스워드:(서버가 올라갈때 생성된 패스워드)&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;650&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bC7NZJ/btr1pYg9Mt8/yN0BykCwzv0CxbJ3JBL5v1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bC7NZJ/btr1pYg9Mt8/yN0BykCwzv0CxbJ3JBL5v1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bC7NZJ/btr1pYg9Mt8/yN0BykCwzv0CxbJ3JBL5v1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbC7NZJ%2Fbtr1pYg9Mt8%2FyN0BykCwzv0CxbJ3JBL5v1%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;384&quot; height=&quot;259&quot; data-origin-width=&quot;650&quot; data-origin-height=&quot;438&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인을 하게되면 가장 처음 페이지로 이동하게 된다.&lt;br /&gt;기본적으로는 localhost:8080/ 으로 이동을 하게 되는데&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;506&quot; data-origin-height=&quot;364&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKUqDX/btr1nwyculY/4q9CIb4Y6X2vUOlzCWTPR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKUqDX/btr1nwyculY/4q9CIb4Y6X2vUOlzCWTPR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKUqDX/btr1nwyculY/4q9CIb4Y6X2vUOlzCWTPR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKUqDX%2Fbtr1nwyculY%2F4q9CIb4Y6X2vUOlzCWTPR0%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;352&quot; height=&quot;253&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;364&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 api 로 문자만 반환하게 해놨기 때문에&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-03-02 오후 11.23.30.png&quot; data-origin-width=&quot;184&quot; data-origin-height=&quot;76&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AynEK/btr1MokotWy/mnqqlwlOKWpxqLtVdZbEQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AynEK/btr1MokotWy/mnqqlwlOKWpxqLtVdZbEQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AynEK/btr1MokotWy/mnqqlwlOKWpxqLtVdZbEQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAynEK%2Fbtr1MokotWy%2FmnqqlwlOKWpxqLtVdZbEQk%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;184&quot; height=&quot;76&quot; data-filename=&quot;스크린샷 2023-03-02 오후 11.23.30.png&quot; data-origin-width=&quot;184&quot; data-origin-height=&quot;76&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인 성공 후 화면에는 main Page 라고 밖에 안뜬다.&lt;br /&gt;경로 &quot;/&quot; 에 대한 request에 response 값 (main Page) 을 보여주고 있다고 보면 된다.&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;b&gt;로그아웃은 어케 하지?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;locahost:8080/logout 을 가보면 우린 만든적이 없는 로그아웃 화면이 나온다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-03-02 오후 11.32.20.png&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mfYQq/btr1I8WEYce/amUk9MdvIRwND8DvfU1BkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mfYQq/btr1I8WEYce/amUk9MdvIRwND8DvfU1BkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mfYQq/btr1I8WEYce/amUk9MdvIRwND8DvfU1BkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmfYQq%2Fbtr1I8WEYce%2FamUk9MdvIRwND8DvfU1BkK%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;484&quot; height=&quot;211&quot; data-filename=&quot;스크린샷 2023-03-02 오후 11.32.20.png&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;278&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;친절히 로그아웃 정말 할건지 물어보기도 해주고 편하다 편해~~ &lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;570&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWkLfb/btr1I8PV0KR/FQWf4BrHDoT1u6yKP2ekHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWkLfb/btr1I8PV0KR/FQWf4BrHDoT1u6yKP2ekHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWkLfb/btr1I8PV0KR/FQWf4BrHDoT1u6yKP2ekHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWkLfb%2Fbtr1I8PV0KR%2FFQWf4BrHDoT1u6yKP2ekHk%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;461&quot; height=&quot;393&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;570&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;log out 을 클릭하면 정상적으로 로그아웃 처리된다.&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;br /&gt;나도 예전에나 한 번 해보고 지금에서야 다시 해본다.&lt;br /&gt;다만 한 번이라도 구현해본 사람(삽질해본사람) 과 아예 안해본 사람은 다르다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나도 이번 기회에 잊은 기억들을 조금씩 다듬어 나갈 생각이다.&lt;/p&gt;</description>
      <category>IT</category>
      <category>Security</category>
      <category>spring</category>
      <category>스프링</category>
      <category>시큐리티</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/194</guid>
      <comments>https://allmana.tistory.com/194#entry194comment</comments>
      <pubDate>Thu, 2 Mar 2023 23:27:52 +0900</pubDate>
    </item>
    <item>
      <title>스프링 프로젝트 초기 Gradle 과 DB 연결</title>
      <link>https://allmana.tistory.com/193</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오랜만에 포스팅이다. 나름 쪼렙 시절(지금도 쪼렙)에 포스팅을 좀 하다가 귀찮아서 버려진 블로그인데...&lt;br /&gt;아직도 간간히 검색해서 들어오는 방문자들이 많은걸 보며 공부겸? 공유겸? 스프링 밑바닥 부터 시작해보기!! (&lt;s&gt;작심삼일 이겠지만&lt;/s&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 환경&lt;br /&gt;&lt;b&gt;Spring Boot : 3.0.3&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Java : 17&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Java 17 사용 이유?&amp;nbsp;&lt;/b&gt;&lt;br /&gt;Spring Boot 3 이상은 17 을 지원하며 17 이상만 가능하기 때문이다.&lt;br /&gt;17을 한번도 사용해보지 않았지만 얼마나 이 프로젝트를 가지고 놀진 모르겠지만 미래를 위해서도&amp;nbsp;&lt;br /&gt;3버전에 17로 구성을 좋겠다고 판단하였다.&lt;br /&gt;(현 시점) 공부 중인 학생이라면 Boot 2 버전대에 Java 11 버전대를 공부하는 것도 괜찮다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;초기 Gradle 세팅&lt;/b&gt;&lt;br /&gt;- Lombok&lt;br /&gt;- Devtools&lt;br /&gt;- Jpa&lt;br /&gt;- Web&lt;br /&gt;- MariaDB JDBC (자기 DB에 맞게)&lt;/p&gt;
&lt;pre id=&quot;code_1677658426991&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dependencies {
    implementation(&quot;org.springframework.boot:spring-boot-starter-data-jpa&quot;)
    implementation(&quot;org.springframework.boot:spring-boot-starter-web&quot;)
    implementation(&quot;org.mariadb.jdbc:mariadb-java-client:3.1.2&quot;)
    compileOnly(&quot;org.projectlombok:lombok&quot;)
    developmentOnly(&quot;org.springframework.boot:spring-boot-devtools&quot;)
    annotationProcessor(&quot;org.projectlombok:lombok&quot;)
    testImplementation(&quot;org.springframework.boot:spring-boot-starter-test&quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;application.yml (properties 로 되어있다면 확장자를 yml로 바꾸면 된다.)&lt;br /&gt;&lt;/b&gt;- DB 연결 및 JPA 설정&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1677658970354&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;spring:
  datasource:
    driver-class-name: org.mariadb.jdbc.Driver
    url: jdbc:mariadb://192.168.0.7:3307/devjs  (Host:Port/Schema)
    username: root
    password: root
  jpa:
	show-sql: true
    hibernate:
      ddl-auto: update   (Create 는 table 을 Drop하므로 주의)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT</category>
      <category>DB</category>
      <category>YAML</category>
      <category>yml</category>
      <category>스프링</category>
      <category>자바</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/193</guid>
      <comments>https://allmana.tistory.com/193#entry193comment</comments>
      <pubDate>Wed, 1 Mar 2023 06:59:36 +0900</pubDate>
    </item>
    <item>
      <title>카카오 애드핏</title>
      <link>https://allmana.tistory.com/192</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;티스토리가 카카오꺼가 되기전에는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럭저럭 꾸역 꾸역 애드핏이 잘 올라갔는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카카오꺼가 제대로 된 후로는 애드핏 등록은 깔끔해졌지만&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;금액도 안오르고 이젠 또 조회도 잘 안되네..?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글을 잘 안써서 그런가 ㅋㅋ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예전엔 그래도 수익 매일매일 티끌이 쌓였는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이젠 걍 0원 뭘까..&lt;/p&gt;</description>
      <category>옛날 창고/끄적</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/192</guid>
      <comments>https://allmana.tistory.com/192#entry192comment</comments>
      <pubDate>Wed, 19 Jan 2022 22:27:28 +0900</pubDate>
    </item>
    <item>
      <title>Inflate 간단 정리</title>
      <link>https://allmana.tistory.com/191</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;현재 안드로이드 공부하면서&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Inflate 가 뭘까 싶었다. 번역하면 &lt;b&gt;&lt;span style=&quot;color: #202020;&quot;&gt;부풀리다&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #202020;&quot;&gt;뭔뜻이지 ... 싶었다가 간단히 개념 정리.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 레이아웃(XML) 코드를 코드에서 쓰기위해 객체화 한다고 생각하면된다.&lt;/p&gt;
&lt;pre id=&quot;code_1624867268192&quot; class=&quot;kotlin&quot; style=&quot;display: block; overflow: auto; padding: 20px; color: #383a42; background: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; val view = inflater.inflate(R.layout.fragment_photo_gallery, container,false)
 
 photoRecyclerView = view.findViewById(R.id.photo_recycler_view)
 
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;view 에 fragment_photo_galley 레이아웃을 객체화 시켜 담는다. &lt;br /&gt;&amp;nbsp;view.findViewById 로 레이아웃 안에 있는 여러 요소들에 대한 객체를 사용가능하다.&lt;/p&gt;</description>
      <category>옛날 창고/안드로이드</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/191</guid>
      <comments>https://allmana.tistory.com/191#entry191comment</comments>
      <pubDate>Mon, 28 Jun 2021 17:03:20 +0900</pubDate>
    </item>
    <item>
      <title>Failed to install the following Android SDK packages as some licences have not been accepted. 에러 해결</title>
      <link>https://allmana.tistory.com/190</link>
      <description>&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;갑자기 생긴 에러&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Failed to install the following Android SDK packages as some licences have not been accepted.&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-origin-width=&quot;981&quot; data-origin-height=&quot;708&quot; data-filename=&quot;이미지 1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WqIaJ/btq7UPDf66d/ENm7AfkbaatN0boLijFWJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WqIaJ/btq7UPDf66d/ENm7AfkbaatN0boLijFWJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WqIaJ/btq7UPDf66d/ENm7AfkbaatN0boLijFWJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWqIaJ%2Fbtq7UPDf66d%2FENm7AfkbaatN0boLijFWJ0%2Fimg.png&quot; data-origin-width=&quot;981&quot; data-origin-height=&quot;708&quot; data-filename=&quot;이미지 1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;b&gt;file &amp;gt; setting &amp;gt; system settings &amp;gt; android SDK&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SDK tools &amp;gt; Google Play Licensing Libarary&lt;/b&gt;를 체크해서 다운을 받아주고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 빌드해보면 잘 해결된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>옛날 창고/안드로이드</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/190</guid>
      <comments>https://allmana.tistory.com/190#entry190comment</comments>
      <pubDate>Tue, 22 Jun 2021 14:01:16 +0900</pubDate>
    </item>
    <item>
      <title>코틀린 - const val 과 val 큰 차이점</title>
      <link>https://allmana.tistory.com/189</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;코틀린을 사용해보면서&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;val 이 const와 같다고 생각했다. 그러던 중&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623526532329&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private const val A = &quot;A&quot;&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;그래서 const val 과 val 의 차이를 찾아보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 큰 차이는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;val 은 &lt;b&gt;런타임 시점,&amp;nbsp;&lt;/b&gt;const val 은 &lt;b&gt;컴파일 시점&lt;/b&gt;에 값이 할당되는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;const val 는 문자열과 기본자료형만 할당할수 있으며 클래스 내부에서는 선언이 불가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 클래스 내부에서 선언하려면 companion object에서 선언가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 자바로 치면 static final 과 같은 소스로 볼 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1623528018809&quot; class=&quot;kotlin&quot; style=&quot;display: block; overflow: auto; padding: 20px; color: #383a42; background: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private const val TAG = &quot;MainActivity&quot;

class MainActivity : AppCompatActivity(){

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>옛날 창고/안드로이드</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/189</guid>
      <comments>https://allmana.tistory.com/189#entry189comment</comments>
      <pubDate>Sun, 13 Jun 2021 05:00:53 +0900</pubDate>
    </item>
    <item>
      <title>코틀린(Kotlin) 정리 - 1</title>
      <link>https://allmana.tistory.com/188</link>
      <description>&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코틀린 멀티패러다임 언어 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;함수형&lt;/b&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;/b&gt;을 쓰지 않는다.&lt;/p&gt;
&lt;pre id=&quot;code_1623075608700&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var a = 20 // Int형으로 추론
var a: Int = 20 //Int형
var b = &quot;Hello&quot; // String형으로 추론
var b: String = //String형

var a: String // 초기화를 해주어야 사용이 가능하다.
a = &quot;Hello&quot;
var a: String? // null 사용가능. 초기화 안해도됨.&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1623076233451&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// function 은 fun 으로 사용한다.
fun sum(a: Int, b: Int): Int{ // 반환타입 Int
	return a + b
}

// 자바의 void와 같이 반환이 없을경우 Unit 로 해준다.
// Unit은 생략이 가능하다.
fun init():Unit{}

// return을 생략하여 표현이 가능하다.
fun sum(a: Int, b: Int): Int = a+b 

// Default 값을 설정할수있다.
fun sum(a: Int = 4, b: Int): Int = a+b

// vararg 를 이용하여 가변형인자를 받을수가 있다.
// fun(1,2) ==&amp;gt; 1+2  fun(1,2,3,4) ===&amp;gt; 1+2+3+4 가 된다.
fun avg(vararg numbers: Int): Int{
	var result: Int = 0
	for(num in numbers){
    	result += num
    }
    return result
}



&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;람다식 (Lambda Expression) 이란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;익명함수의 하나. 이름없이 사용가능.&lt;/p&gt;
&lt;pre id=&quot;code_1623075308379&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{x,y -&amp;gt; x+y}&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;함수를 인자로 사용이 가능&lt;/b&gt;하다는 것이다.&lt;/p&gt;
&lt;pre id=&quot;code_1623076623448&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// sumFunc에 들어오는 람다식함수는 Int,Int 두개의 변수를 받아 Int를 반환하는 함수이다.
// sum은 람다식을 받는 매개변수이다.
fun sumFunc(sum: (Int,Int)-&amp;gt;Int, x: Int, y: Int): Int = sum(x,y)

// {x,y -&amp;gt; x+y} 라는 람다식함수를 넣어준다.
fun main(){
    println(&quot; &amp;gt;&amp;gt; &quot;+ sumFunc({x,y -&amp;gt; x+y},10,20))
}

// 결과) 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;size16&quot;&gt;세미콜론부터 안쓰는것부터 살짝 어색한 감이 있지만.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;금새 또 여러번 쓰다보면 세미콜론 쓰는게 귀찮아 질 수도..?&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;금방 또 적응하겠지.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확실히 어떤 한 언어라도 다룰 줄 안다면 습득 속도와 이해력 차이가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신입 개발자나 개발자를 준비하는 사람들이라면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것저것 다 하려들지말고 뭐라도 한 언어라도 잘 다룰줄 알았으면 좋겠다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 다 개발 언어는 새로운 언어더라도 기존 과거부터 써왔던 언어들을 공부했던 사람들이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 편하게 더 직관적이게(?) 개선하여 언어를 만들어 낸 것이기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 다 비스무리하게 쓴다. 웬만한 툴에서 (ctrl + z)가 되돌리기 국룰인 것처럼&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>옛날 창고/안드로이드</category>
      <category>kotlin</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/188</guid>
      <comments>https://allmana.tistory.com/188#entry188comment</comments>
      <pubDate>Mon, 7 Jun 2021 23:46:31 +0900</pubDate>
    </item>
    <item>
      <title>개발 공부에 좋은 사이트 추천</title>
      <link>https://allmana.tistory.com/187</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;요즘 이직에 대한 생각이 많으면서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공부를 나름 하게 된다. 그러던 중 오늘 발견한 사이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.boostcourse.org/&quot;&gt;부스트코스 (boostcourse.org)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1622538616752&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;다 함께 배우고 성장하는 부스트코스&quot; data-og-description=&quot;부스트코스(boostcourse)는 모두 함께 배우고 성장하는 비영리 SW 온라인 플랫폼입니다.&quot; data-og-host=&quot;www.boostcourse.org&quot; data-og-source-url=&quot;https://www.boostcourse.org/&quot; data-og-url=&quot;http://www.boostcourse.org&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/zojBm/hyKqRpyrME/NvJ6tXPwpgKPwNzlAVKMn0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://www.boostcourse.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.boostcourse.org/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/zojBm/hyKqRpyrME/NvJ6tXPwpgKPwNzlAVKMn0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&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;다 함께 배우고 성장하는 부스트코스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;부스트코스(boostcourse)는 모두 함께 배우고 성장하는 비영리 SW 온라인 플랫폼입니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.boostcourse.org&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;나도 아직 제대로 강의를 수강하지 않고 대충 훝어만 본 것이지만 꽤나 괜찮아보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네이버 커넥트 자회사..(?) 라서 무료로 운영한다고 한다. &lt;s&gt;(부스트코스는 아닐수도)&lt;/s&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>옛날 창고/개발</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/187</guid>
      <comments>https://allmana.tistory.com/187#entry187comment</comments>
      <pubDate>Tue, 1 Jun 2021 18:12:13 +0900</pubDate>
    </item>
    <item>
      <title>애드핏 수익 연동하니 왜 이럴까?</title>
      <link>https://allmana.tistory.com/185</link>
      <description>&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;a href=&quot;https://allmana.tistory.com/181&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2021.02.18 - [일상/끄적] - 나의 현재 에드센스 (설정 작업 진행중)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1622412466967&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;나의 현재 에드센스 (설정 작업 진행중)&quot; data-og-description=&quot;나의 현재 애드센스.. 2019/04/08 - [일상/끄적] - 2019.04.08 구글 애드센스 상황 2019.04.08 구글 애드센스 상황 2019.04.08&amp;nbsp;구글&amp;nbsp;애드센스&amp;nbsp;상황 2018/12/18 - [일상/끄적] - 2018.12.18 구글 애드센스 상황..&quot; data-og-host=&quot;allmana.tistory.com&quot; data-og-source-url=&quot;https://allmana.tistory.com/181&quot; data-og-url=&quot;https://allmana.tistory.com/181&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dcuDAp/hyKnoP5ygB/lXMZObjHeEHUmVU0tnFiIk/img.png?width=800&amp;amp;height=422&amp;amp;face=0_0_800_422,https://scrap.kakaocdn.net/dn/FyEkm/hyKoT8L03m/hSixelTzOiMQCWOWsIEF90/img.png?width=800&amp;amp;height=422&amp;amp;face=0_0_800_422,https://scrap.kakaocdn.net/dn/bFXzdO/hyKoRJSdKe/joH4x8fkvRbrBBI2i81tIK/img.png?width=1028&amp;amp;height=543&amp;amp;face=0_0_1028_543&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/181&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allmana.tistory.com/181&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dcuDAp/hyKnoP5ygB/lXMZObjHeEHUmVU0tnFiIk/img.png?width=800&amp;amp;height=422&amp;amp;face=0_0_800_422,https://scrap.kakaocdn.net/dn/FyEkm/hyKoT8L03m/hSixelTzOiMQCWOWsIEF90/img.png?width=800&amp;amp;height=422&amp;amp;face=0_0_800_422,https://scrap.kakaocdn.net/dn/bFXzdO/hyKoRJSdKe/joH4x8fkvRbrBBI2i81tIK/img.png?width=1028&amp;amp;height=543&amp;amp;face=0_0_1028_543');&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;나의 현재 에드센스 (설정 작업 진행중)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;나의 현재 애드센스.. 2019/04/08 - [일상/끄적] - 2019.04.08 구글 애드센스 상황 2019.04.08 구글 애드센스 상황 2019.04.08&amp;nbsp;구글&amp;nbsp;애드센스&amp;nbsp;상황 2018/12/18 - [일상/끄적] - 2018.12.18 구글 애드센스 상황..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;allmana.tistory.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;아무튼 그래서 애드핏을 오랜기간 사용하고있었는데&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-origin-width=&quot;864&quot; data-origin-height=&quot;367&quot; data-filename=&quot;캡처.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CJJDU/btq54oIPhWK/YIYymXVvBeeiDgLHLISSS0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CJJDU/btq54oIPhWK/YIYymXVvBeeiDgLHLISSS0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CJJDU/btq54oIPhWK/YIYymXVvBeeiDgLHLISSS0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCJJDU%2Fbtq54oIPhWK%2FYIYymXVvBeeiDgLHLISSS0%2Fimg.jpg&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;367&quot; data-filename=&quot;캡처.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;2월 애드핏 연동후 급격히 수익이 감소하였다.&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;초반엔 아예 수익 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;티스토리 네에 있는 애드핏 연동 아직 안하신분들은 한번 고민해보시길..ㅠ&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>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/185</guid>
      <comments>https://allmana.tistory.com/185#entry185comment</comments>
      <pubDate>Mon, 31 May 2021 07:12:36 +0900</pubDate>
    </item>
    <item>
      <title>배포 전략에 대해서</title>
      <link>https://allmana.tistory.com/184</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 롤링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A, B, C 세대의 서버가 있다면 A , B, C 차례대로 하나씩 배포하는 단순한 방식.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서대로 서버를 중단하고 배포를 하다보면 B C 가 A가 감당하던 트래픽까지 B C가 감당해야하니&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B C의 부하력도 생각해야한다.&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.Blue Green&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;Blue Green 이라고 하니 포켓몬 버전이 생각나기도 한다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신버전과 구버전의 서버를 신(A,B,C) 구(A,B,C) 이렇게 준비한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(즉.. 서버가 2배 있어야한다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구서버에서 신서버로 전체 돌리는 방법이다.&lt;/p&gt;
&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;3.Canary&lt;s&gt;(까나리..?)&lt;/s&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;A서버에서 10%만 신버전으로 업데이트 문제없으면 20%업데이트 이런식으로&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>옛날 창고/개발</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/184</guid>
      <comments>https://allmana.tistory.com/184#entry184comment</comments>
      <pubDate>Thu, 27 May 2021 23:42:03 +0900</pubDate>
    </item>
    <item>
      <title>CTI , IVR , ARS 간략 정리</title>
      <link>https://allmana.tistory.com/183</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CTI란 computer telephony integration 의 약자이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직역하면 &lt;b&gt;컴퓨터와 전화통신의 통합&lt;/b&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;b&gt;연결&lt;/b&gt;하는 기술이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 말해 고객이 전화를 하게되면 발신 전화번호를 통해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB 정보를 불러와 상담원 화면에 고객의 정보를 볼 수 있게해주는 기술이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;ARS(Automatic Response System)&lt;span&gt; VS &lt;/span&gt;&lt;/b&gt;IVR(Interactive Voice Response)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ARS는 단순 음성에 버튼을 눌러서 이동하고 그에 맞는 음성 답변을 듣는 행태이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB를 거치지 않는다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IVR은 DB를 거친다. 그래서 상담원이 상담을 하다가 생년월일을 눌러달라던가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;할때 이용되는것이 IVR 이기도 하다.&lt;/p&gt;</description>
      <category>옛날 창고/개발</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/183</guid>
      <comments>https://allmana.tistory.com/183#entry183comment</comments>
      <pubDate>Thu, 27 May 2021 23:25:51 +0900</pubDate>
    </item>
    <item>
      <title>나의 현재 에드센스 (설정 작업 진행중)</title>
      <link>https://allmana.tistory.com/181</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQyIPK/btqXOaSqByA/WXEAjSY7Q3q9kvP3Va4mhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQyIPK/btqXOaSqByA/WXEAjSY7Q3q9kvP3Va4mhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQyIPK/btqXOaSqByA/WXEAjSY7Q3q9kvP3Va4mhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQyIPK%2FbtqXOaSqByA%2FWXEAjSY7Q3q9kvP3Va4mhk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;나의 현재 애드센스..&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://allmana.tistory.com/113&quot;&gt;2019/04/08 - [일상/끄적] - 2019.04.08 구글 애드센스 상황&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1613651756271&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;2019.04.08 구글 애드센스 상황&quot; data-og-description=&quot;2019.04.08&amp;nbsp;구글&amp;nbsp;애드센스&amp;nbsp;상황 2018/12/18 - [일상/끄적] - 2018.12.18 구글 애드센스 상황 2018.12.18 구글 애드센스 상황 구글 애드센스 상황 2018/04/11 - [일상/팁] - [팁] 애드센스 계정 해지 후 재가입..&quot; data-og-host=&quot;allmana.tistory.com&quot; data-og-source-url=&quot;https://allmana.tistory.com/113&quot; data-og-url=&quot;https://allmana.tistory.com/113&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cBv5uE/hyJjKsdbNQ/pKOEX5hViPf1fSZcMFAGQK/img.jpg?width=800&amp;amp;height=440&amp;amp;face=0_0_800_440,https://scrap.kakaocdn.net/dn/b5njel/hyJjPtvB1q/sdC5eNi3bXPr1k0km8qK3K/img.jpg?width=800&amp;amp;height=440&amp;amp;face=0_0_800_440,https://scrap.kakaocdn.net/dn/bHcaiI/hyJjN3xUWK/XrJb5YXZf82lbDnStUSoz0/img.jpg?width=980&amp;amp;height=539&amp;amp;face=0_0_980_539&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/113&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allmana.tistory.com/113&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cBv5uE/hyJjKsdbNQ/pKOEX5hViPf1fSZcMFAGQK/img.jpg?width=800&amp;amp;height=440&amp;amp;face=0_0_800_440,https://scrap.kakaocdn.net/dn/b5njel/hyJjPtvB1q/sdC5eNi3bXPr1k0km8qK3K/img.jpg?width=800&amp;amp;height=440&amp;amp;face=0_0_800_440,https://scrap.kakaocdn.net/dn/bHcaiI/hyJjN3xUWK/XrJb5YXZf82lbDnStUSoz0/img.jpg?width=980&amp;amp;height=539&amp;amp;face=0_0_980_539');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;2019.04.08 구글 애드센스 상황&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;2019.04.08&amp;nbsp;구글&amp;nbsp;애드센스&amp;nbsp;상황 2018/12/18 - [일상/끄적] - 2018.12.18 구글 애드센스 상황 2018.12.18 구글 애드센스 상황 구글 애드센스 상황 2018/04/11 - [일상/팁] - [팁] 애드센스 계정 해지 후 재가입..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;allmana.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1년 넘게 이런다. 최대 2주라매..?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;편법으로 admob&amp;nbsp; 해서 다른 메뉴들이 열렸고&lt;/p&gt;
&lt;p&gt;내가 출시한 몇개 앱에선 수익도 나고있다.&lt;/p&gt;
&lt;p&gt;하지만 adsence 는 사용불가..ㅠ..&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;애드핏이 2월 2일부터 수익이 0~3원이라... 이상해서&lt;/p&gt;
&lt;p&gt;애드센스로 바꾸고싶어도 이건 뭐 고쳐줄 생각을 안한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이럴때보면 한국 기업이였으면 문의도하고 해결도 해줬을텐데.&lt;/p&gt;
&lt;p&gt;외국 사이트 특히나 이런 구글 같은곳은 문의도 힘들고 하더라도 답도 안오고&lt;/p&gt;
&lt;p&gt;문제점을 고객이 열심히 찾아야한다.&lt;/p&gt;
&lt;p&gt;특히 구글 안에서 쓰는 기능들도 외국감성인지.. 한국이 UI 를 잘만드는건지&lt;/p&gt;
&lt;p&gt;한국은 참 딱딱 찾기도 쉽지만 구글은 뭐하나 찾기도 힘들고&lt;/p&gt;
&lt;p&gt;사람들이 알려줘야 할 수 있고 ... 고객이 다 찾아야하는 서비스...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>옛날 창고/끄적</category>
      <category>설정작업진행중</category>
      <category>애드센스</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/181</guid>
      <comments>https://allmana.tistory.com/181#entry181comment</comments>
      <pubDate>Thu, 18 Feb 2021 21:38:42 +0900</pubDate>
    </item>
    <item>
      <title>JavaScript Moment() 사용법</title>
      <link>https://allmana.tistory.com/180</link>
      <description>&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;현재 Date&lt;/h2&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;moment().format('YYYY-MM-DD')   
&amp;gt; 2021-02-17 (현재날짜데이터)&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;커스텀 Date&lt;/h2&gt;
&lt;pre class=&quot;lsl&quot;&gt;&lt;code&gt;moment('2021-01-01','YYYY-MM-DD')  
결과&amp;gt; 2021-01-01&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Add Date(날짜 더하기)&lt;/h2&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;moment().add(1,'days').format('YYYY-MM-DD')  
결과&amp;gt; 2021-02-18   
moment().add(1,'months').format('YYYY-MM-DD')  
결과&amp;gt; 2021-03-17  
moment().add(1,'years').format('YYYY-MM-DD')  
결과&amp;gt; 2022-02-17&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Subtract Date(날짜 빼기)&lt;/h2&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;moment().subtract(1,'days').format('YYYY-MM-DD')  
결과&amp;gt; 2021-02-16  
moment().subtract(1,'months').format('YYYY-MM-DD')  
결과&amp;gt; 2021-02-17  
moment().subtract(1,'years').format('YYYY-MM-DD')  
결과&amp;gt; 2020-02-17&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Diff Date(두 날짜 차이)&lt;/h2&gt;
&lt;pre class=&quot;lsl&quot;&gt;&lt;code&gt;let startDt = moment('2020-01-01');
let endDt = moment('2021-01-01');

endDt.diff(startDt,'days')
결과&amp;gt; 366
endDt.diff(startDt,'months')
결과&amp;gt; 12
endDt.diff(startDt,'years')
결과&amp;gt; 1&lt;/code&gt;&lt;/pre&gt;</description>
      <category>옛날 창고/개발</category>
      <category>MOMENT</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/180</guid>
      <comments>https://allmana.tistory.com/180#entry180comment</comments>
      <pubDate>Wed, 17 Feb 2021 17:21:13 +0900</pubDate>
    </item>
    <item>
      <title>spring boot jpa 테이블 생성</title>
      <link>https://allmana.tistory.com/179</link>
      <description>&lt;p&gt;pom.xml에는&lt;/p&gt;
&lt;pre id=&quot;code_1613287889375&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;		&amp;lt;dependency&amp;gt;
			&amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
			&amp;lt;artifactId&amp;gt;spring-boot-starter-data-jpa&amp;lt;/artifactId&amp;gt;
		&amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;application.yml 에 jpa 를 설정을 추가해준다.&lt;/p&gt;
&lt;pre id=&quot;code_1613287838611&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  jpa:
    show-sql: true
    hibernate:
      ddl-auto: create&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;추가로&lt;/p&gt;
&lt;pre id=&quot;code_1613287916925&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이걸 추가하면 camelCase 로 컬럼명이 생성된다.&lt;/p&gt;
&lt;p&gt;기본적으로 DB 컬럼명은 camel 방식으로 사용하지 않아서 저 설정을 추가하지 않는다면&lt;/p&gt;
&lt;p&gt;userName 이였다면 user_name으로 컬럼명이 생성된다.&lt;/p&gt;
&lt;p&gt;하지만 저 옵션이 추가되면 camel 형식대로 컬럼명이 생성된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1613287807459&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.project.login.model;

import java.sql.Timestamp;
import javax.persistence.Entity;
import javax.persistence.Id;

import org.hibernate.annotations.CreationTimestamp;

import lombok.Data;

@Data
@Entity
public class Login {
	
	@Id
	private String userId;
	private String password;
	private String userName;
	private String userRole;
	@CreationTimestamp
	private Timestamp regDt;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;@Entity 어노테이션을 추가해주고 primary key 가있다면 위에 Id 어노테이션을 넣어주자.&lt;/p&gt;
&lt;p&gt;이렇게 해주고 서버를 다시 실행시키면&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1613288067629&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Hibernate: create table login (user_id varchar(255) not null, password varchar(255), reg_dt datetime(6), user_name varchar(255), user_role varchar(255), primary key (user_id)) engine=InnoDB&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이렇게 생성되는걸 볼수있다.&lt;/p&gt;</description>
      <category>옛날 창고/스프링</category>
      <category>JPA</category>
      <category>spring</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/179</guid>
      <comments>https://allmana.tistory.com/179#entry179comment</comments>
      <pubDate>Sun, 14 Feb 2021 16:34:46 +0900</pubDate>
    </item>
    <item>
      <title>2월 애드핏 수익</title>
      <link>https://allmana.tistory.com/178</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nRRre/btqWUqbLzxW/4zThbUlI5K9bTVABWkL0r1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nRRre/btqWUqbLzxW/4zThbUlI5K9bTVABWkL0r1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nRRre/btqWUqbLzxW/4zThbUlI5K9bTVABWkL0r1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnRRre%2FbtqWUqbLzxW%2F4zThbUlI5K9bTVABWkL0r1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;2월 1일까진 평소 수준의 수익이 나왔는데&lt;/p&gt;
&lt;p&gt;2월 2일부터 0원 1원 2원 정도의 수준이다....&lt;/p&gt;
&lt;p&gt;안그래도 하루에 겨우 몇십원 버는데 2월2일부터 왤케 처참하게 된걸까..?&lt;/p&gt;
&lt;p&gt;방문자수는 비슷한데...대체 원인을 모르겠네;;&lt;/p&gt;</description>
      <category>옛날 창고/끄적</category>
      <category>애드핏</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/178</guid>
      <comments>https://allmana.tistory.com/178#entry178comment</comments>
      <pubDate>Fri, 12 Feb 2021 00:36:16 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트 모듈 간단히 사용하기</title>
      <link>https://allmana.tistory.com/177</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;자바스크립트에서 모듈 간단히 사용하기!&lt;/p&gt;
&lt;p&gt;&lt;s&gt;사실 나는 잘 사용하지 않아서.. 아니 못해봐서..ㅠㅠ..&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;지금 공부겸 간단하게 사용법을 공유하려한다..&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;moduleTest.js 에&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1612794567173&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export let name = &quot;MANA&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;로 코드를 작성하였다.&lt;/p&gt;
&lt;p&gt;모듈이 될 js 에서 export 할 데이터를 export 라고 앞에 명시해준다.&lt;/p&gt;
&lt;p&gt;그럼 이걸 가져다 쓰려면..?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1612794648831&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
&amp;lt;title&amp;gt;Insert title here&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;script type=&quot;module&quot;&amp;gt;
	import {name} from '/js/moduleTest.js';
	document.getElementById('app').innerHTML = name;
&amp;lt;/script&amp;gt;
&amp;lt;div id=&quot;app&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;script 에는 type을&amp;nbsp; module 로 명시해준다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;import {&lt;b&gt;export 한 변수명&lt;/b&gt;} from 경로;&lt;/p&gt;
&lt;p&gt;를 해서 app 이란 id를 가진 div에 name 변수를 넣어보았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kKNsD/btqWsHYiLqz/K2r9LLcjirnwRwZjoqVrGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kKNsD/btqWsHYiLqz/K2r9LLcjirnwRwZjoqVrGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kKNsD/btqWsHYiLqz/K2r9LLcjirnwRwZjoqVrGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkKNsD%2FbtqWsHYiLqz%2FK2r9LLcjirnwRwZjoqVrGK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;moduleTest 라는 파일에서 선언한것처럼 name 의 값을 import 하였다.&lt;/p&gt;
&lt;p&gt;그럼 변수만 될까..?&lt;/p&gt;
&lt;p&gt;아니다 함수도 가능하다.&lt;/p&gt;
&lt;pre id=&quot;code_1612794787648&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export let name = &quot;MANA&quot;;
export function hello(){
	alert('Hello world!!');
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;hello 라는 함수를 추가해주고 export 해주었다.&lt;/p&gt;
&lt;pre id=&quot;code_1612794851997&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
&amp;lt;title&amp;gt;Insert title here&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;script type=&quot;module&quot;&amp;gt;
	import {name,hello} from '/js/moduleTest.js';
	document.getElementById('app').innerHTML = name;
	hello();
&amp;lt;/script&amp;gt;
&amp;lt;div id=&quot;app&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;import {}(괄호) 안에는 내가 import 하고싶은거를 하나 더 추가해서 작성해주면된다.&lt;/p&gt;
&lt;p&gt;그다음 hello 를 실행시켰다.&lt;/p&gt;
&lt;p&gt;결과는&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VCdMc/btqWBAqizN9/Os6mlJJFokdrt0VT5Pyis1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VCdMc/btqWBAqizN9/Os6mlJJFokdrt0VT5Pyis1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VCdMc/btqWBAqizN9/Os6mlJJFokdrt0VT5Pyis1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVCdMc%2FbtqWBAqizN9%2FOs6mlJJFokdrt0VT5Pyis1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;module js 에서 설정한 함수를 가져다 쓸 수 있는걸 볼 수가 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>옛날 창고/개발</category>
      <category>export</category>
      <category>import</category>
      <category>Module</category>
      <category>모듈</category>
      <category>자바스크립트</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/177</guid>
      <comments>https://allmana.tistory.com/177#entry177comment</comments>
      <pubDate>Mon, 8 Feb 2021 23:35:47 +0900</pubDate>
    </item>
    <item>
      <title>[Spring boot]  이클립스 vue 사용하기!</title>
      <link>https://allmana.tistory.com/176</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;vue를 사용하기 위해서 세팅하는 것은 정말로 간단합니다~!&lt;/p&gt;
&lt;p&gt;그래도 혹시나 모를 분들을 위해서&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저도 세팅 하는겸.. 글을 남겨봅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://kr.vuejs.org/v2/guide/installation.html&quot;&gt;https://kr.vuejs.org/v2/guide/installation.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1612793128452&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;설치방법 &amp;mdash; Vue.js&quot; data-og-description=&quot;Vue.js - 프로그레시브 자바스크립트 프레임워크&quot; data-og-host=&quot;kr.vuejs.org&quot; data-og-source-url=&quot;https://kr.vuejs.org/v2/guide/installation.html&quot; data-og-url=&quot;https://kr.vuejs.org/v2/guide/installation.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ca1uZQ/hyJcUH4nmM/KrXq8At6K3DPFaXJLKAK3k/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/2XQle/hyJc3E0Z3Y/VUBWY15jvXgJKJ8rjBFFD1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://kr.vuejs.org/v2/guide/installation.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kr.vuejs.org/v2/guide/installation.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ca1uZQ/hyJcUH4nmM/KrXq8At6K3DPFaXJLKAK3k/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/2XQle/hyJc3E0Z3Y/VUBWY15jvXgJKJ8rjBFFD1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;설치방법 &amp;mdash; Vue.js&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Vue.js - 프로그레시브 자바스크립트 프레임워크&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;kr.vuejs.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;여기가면 설치방법이 상세하게 적혀있지만..&lt;/p&gt;
&lt;p&gt;그래도 모르겠다란 분들을 위해서..&lt;/p&gt;
&lt;p&gt;일단 JS 파일을 다운받던가 CDN 을 복사합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1612793184162&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://cdn.jsdelivr.net/npm/vue/dist/vue.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아 먼저 하기에 앞서&lt;/p&gt;
&lt;p&gt;기본 이클립스에서는 Vue 가 지원이 안되므로 플러그인을 설치해주셔야합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buPESy/btqWsIXd9wO/5uNMeRSUcSk5KT43bBWym1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buPESy/btqWsIXd9wO/5uNMeRSUcSk5KT43bBWym1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buPESy/btqWsIXd9wO/5uNMeRSUcSk5KT43bBWym1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuPESy%2FbtqWsIXd9wO%2F5uNMeRSUcSk5KT43bBWym1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;help &amp;gt; eclipse Marketplace 로 갑니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KZdBA/btqWn2od5TO/RPSZr6Kt3Op8O3pYgJRBxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KZdBA/btqWn2od5TO/RPSZr6Kt3Op8O3pYgJRBxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KZdBA/btqWn2od5TO/RPSZr6Kt3Op8O3pYgJRBxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKZdBA%2FbtqWn2od5TO%2FRPSZr6Kt3Op8O3pYgJRBxK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;vue 를 검색해서 install 해주면 끝.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1612793384719&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
&amp;lt;title&amp;gt;Insert title here&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;script src=&quot;/lib/vue.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;div id=&quot;app&quot;&amp;gt;{{message}}&amp;lt;/div&amp;gt;
&amp;lt;script&amp;gt;
	var app = new Vue({
	  el: '#app',
	  data: {
	    message: '안녕하세요 Vue!'
	  }
	})
&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;저는 js 파일을 다운받아서 static &amp;gt; lib &amp;gt; vue.js 에 넣었습니다.&lt;/p&gt;
&lt;p&gt;그래서 임포트 시켜주고 vue 의 가장 기본 소스를 해봤습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4A9vD/btqWzsMN3b5/434taOZY3dcujfQWfoUfq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4A9vD/btqWzsMN3b5/434taOZY3dcujfQWfoUfq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4A9vD/btqWzsMN3b5/434taOZY3dcujfQWfoUfq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4A9vD%2FbtqWzsMN3b5%2F434taOZY3dcujfQWfoUfq0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;message 부분에 vue에서 설정한 안녕하세요 Vue가 쏙 들어갔죠..?ㅋㅋㅋ&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제부터 Vue를 시작해보면됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>옛날 창고/스프링</category>
      <category>spring</category>
      <category>VUE</category>
      <category>이클립스</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/176</guid>
      <comments>https://allmana.tistory.com/176#entry176comment</comments>
      <pubDate>Mon, 8 Feb 2021 23:12:12 +0900</pubDate>
    </item>
    <item>
      <title>Spring boot Starter - DB 연결 과 Mybatis 연동하기!</title>
      <link>https://allmana.tistory.com/175</link>
      <description>&lt;p&gt;Spring boot Starter로 DB 를 연결 해보려한다.&lt;/p&gt;
&lt;p&gt;Stater..? 가 뭔지 모르는 사람은 참고&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://allmana.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2021/02/01 - [IT/스프링] - eclipse STS 로 Spring Boot 프로젝트 시작하기&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1612273214811&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;eclipse STS 로 Spring Boot 프로젝트 시작하기&quot; data-og-description=&quot;https://spring.io/tools Spring Tools 4 is the next generation of Spring tooling Largely rebuilt from scratch, Spring Tools 4 provides world-class support for developing Spring-based enterprise appli..&quot; data-og-host=&quot;allmana.tistory.com&quot; data-og-source-url=&quot;https://allmana.tistory.com/171&quot; data-og-url=&quot;https://allmana.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dC5xK6/hyJacurddC/ZvIGKkak0V5E7i8XKsL4uk/img.png?width=800&amp;amp;height=727&amp;amp;face=730_42_776_93,https://scrap.kakaocdn.net/dn/btZYFP/hyJaqsGHan/6a3SFY4VUX4yk5D1oL1tu0/img.png?width=800&amp;amp;height=727&amp;amp;face=730_42_776_93,https://scrap.kakaocdn.net/dn/shwL2/hyI8U9ZOyE/tCrrcfBFoxTOCXibmbKDpk/img.png?width=822&amp;amp;height=747&amp;amp;face=743_41_794_96&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allmana.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dC5xK6/hyJacurddC/ZvIGKkak0V5E7i8XKsL4uk/img.png?width=800&amp;amp;height=727&amp;amp;face=730_42_776_93,https://scrap.kakaocdn.net/dn/btZYFP/hyJaqsGHan/6a3SFY4VUX4yk5D1oL1tu0/img.png?width=800&amp;amp;height=727&amp;amp;face=730_42_776_93,https://scrap.kakaocdn.net/dn/shwL2/hyI8U9ZOyE/tCrrcfBFoxTOCXibmbKDpk/img.png?width=822&amp;amp;height=747&amp;amp;face=743_41_794_96');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;eclipse STS 로 Spring Boot 프로젝트 시작하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;https://spring.io/tools Spring Tools 4 is the next generation of Spring tooling Largely rebuilt from scratch, Spring Tools 4 provides world-class support for developing Spring-based enterprise appli..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;allmana.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그럼 바로 DB 연결을 해보자!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnPkXv/btqVqGG5TZ1/mJjKJc7PiKslup5WLYKV60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnPkXv/btqVqGG5TZ1/mJjKJc7PiKslup5WLYKV60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnPkXv/btqVqGG5TZ1/mJjKJc7PiKslup5WLYKV60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdnPkXv%2FbtqVqGG5TZ1%2FmJjKJc7PiKslup5WLYKV60%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Add Starters 클릭&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rNqkE/btqVzQ9eMOQ/krfH9lXNLxf00Qj2ouH3NK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rNqkE/btqVzQ9eMOQ/krfH9lXNLxf00Qj2ouH3NK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rNqkE/btqVzQ9eMOQ/krfH9lXNLxf00Qj2ouH3NK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrNqkE%2FbtqVzQ9eMOQ%2FkrfH9lXNLxf00Qj2ouH3NK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;연결할 DB의 Driver를 클릭해준다.&lt;/p&gt;
&lt;p&gt;나는 MariaDB에 연결할거니까 MariaDB Driver 로 선택해주고 Finish.&lt;/p&gt;
&lt;p&gt;그다음 spring 의 설정파일인 application 파일에 간다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsRYRl/btqVsyvcREX/Y15bhlAZN5FsSa5ve3Y27k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsRYRl/btqVsyvcREX/Y15bhlAZN5FsSa5ve3Y27k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsRYRl/btqVsyvcREX/Y15bhlAZN5FsSa5ve3Y27k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsRYRl%2FbtqVsyvcREX%2FY15bhlAZN5FsSa5ve3Y27k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;파일에서 datasource라고 작성해주면 쫘악 나온다.&lt;/p&gt;
&lt;p&gt;나는 application.yml 파일을 쓰는데 properties 파일을 쓴다면.. 참고..&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://allmana.tistory.com/173&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2021/02/01 - [IT/스프링] - Spring boot application.properties 를 가독성있게 바꿔보자&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1612273501678&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Spring boot application.properties 를 가독성있게 바꿔보자&quot; data-og-description=&quot;Spring Boot 에 application.properties 은 다르게도 쓸수있다. https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#mapping-yaml-to-properties Spring Boot Features G..&quot; data-og-host=&quot;allmana.tistory.com&quot; data-og-source-url=&quot;https://allmana.tistory.com/173&quot; data-og-url=&quot;https://allmana.tistory.com/173&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ZMnKr/hyI84SlM9z/GXdBucYnLd5vLGN53Aacj0/img.png?width=800&amp;amp;height=279&amp;amp;face=0_0_800_279,https://scrap.kakaocdn.net/dn/d7IIIR/hyJaqsGOTw/ZPYRF0nYsR0BigikRD5K4K/img.png?width=800&amp;amp;height=279&amp;amp;face=0_0_800_279,https://scrap.kakaocdn.net/dn/Z6uR0/hyJaj8aWzY/WciPTHCPlvVj95XS3rnSZK/img.png?width=966&amp;amp;height=338&amp;amp;face=0_0_966_338&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/173&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allmana.tistory.com/173&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ZMnKr/hyI84SlM9z/GXdBucYnLd5vLGN53Aacj0/img.png?width=800&amp;amp;height=279&amp;amp;face=0_0_800_279,https://scrap.kakaocdn.net/dn/d7IIIR/hyJaqsGOTw/ZPYRF0nYsR0BigikRD5K4K/img.png?width=800&amp;amp;height=279&amp;amp;face=0_0_800_279,https://scrap.kakaocdn.net/dn/Z6uR0/hyJaj8aWzY/WciPTHCPlvVj95XS3rnSZK/img.png?width=966&amp;amp;height=338&amp;amp;face=0_0_966_338');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Spring boot application.properties 를 가독성있게 바꿔보자&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Spring Boot 에 application.properties 은 다르게도 쓸수있다. https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#mapping-yaml-to-properties Spring Boot Features G..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;allmana.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;많은 설정들이 있지만 필요한 몇가지만 넣고 DB 연결을 할것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBWeFt/btqVuhzQIf1/Kd4DABYwKIHovPHeQTSzXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBWeFt/btqVuhzQIf1/Kd4DABYwKIHovPHeQTSzXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBWeFt/btqVuhzQIf1/Kd4DABYwKIHovPHeQTSzXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBWeFt%2FbtqVuhzQIf1%2FKd4DABYwKIHovPHeQTSzXk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;driver-class-name 해주고 or 정도만 쳐도 이미 다 완성해준다.&lt;/p&gt;
&lt;p&gt;언제나 말하지만 툴을 쓴다면 툴을 언제나 활용하자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJYRkC/btqVIceIbkm/Uvf7U9ZceAFOMhhCc2tD90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJYRkC/btqVIceIbkm/Uvf7U9ZceAFOMhhCc2tD90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJYRkC/btqVIceIbkm/Uvf7U9ZceAFOMhhCc2tD90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJYRkC%2FbtqVIceIbkm%2FUvf7U9ZceAFOMhhCc2tD90%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이렇게 설정해주자~&lt;/p&gt;

&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;이제는 Mybatis를 설치해보자.&lt;/p&gt;
&lt;p&gt;준비물 - Mybatis , lombok Plugin(필수는 아니지만 lombok을 활용할 예정)&lt;/p&gt;
&lt;p&gt;아까 위에 처럼 &lt;b&gt;add starters&lt;/b&gt; 를 클릭해줘서&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deahL3/btqVFCLrYNB/D4B9wkK91J7D2yRAM7T9mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deahL3/btqVFCLrYNB/D4B9wkK91J7D2yRAM7T9mk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deahL3/btqVFCLrYNB/D4B9wkK91J7D2yRAM7T9mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeahL3%2FbtqVFCLrYNB%2FD4B9wkK91J7D2yRAM7T9mk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;lombok과 Mybatis를 설치해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1) Bean 만들기&lt;/p&gt;
&lt;pre id=&quot;code_1612445858633&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.project.login.model;

import lombok.Data;

@Data
public class Login {
	
	private String userId;
	private String password;
	
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Login.java bean을 생성.&lt;/p&gt;
&lt;p&gt;여기서 바로 lombok을 이용합니다.&lt;/p&gt;
&lt;p&gt;@Data 는 Lombok 을 이용한 (getter,setter,serialize 등등)을 한번에 해주는 어노테이션 입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2) mapper 만들기&lt;/p&gt;
&lt;pre id=&quot;code_1612445929165&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.project.login.service;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import com.project.login.model.Login;

@Mapper
@Repository
public interface LoginRepository {
	List&amp;lt;Login&amp;gt; findAll();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;LoginRepository라는 interface를 만듭니다. @Mapper 와 @Repository 어노테이션을 추가해줍니다.&lt;/p&gt;
&lt;p&gt;3) dtd(xml) 파일 만들기&lt;/p&gt;
&lt;pre id=&quot;code_1612446041817&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;!DOCTYPE mapper PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot; &quot;http://mybatis.org/dtd/mybatis-3-mapper.dtd&quot;&amp;gt;
&amp;lt;mapper namespace=&quot;com.project.login.service.LoginRepository&quot;&amp;gt;
	&amp;lt;select id=&quot;findAll&quot; resultType=&quot;com.project.login.model.Login&quot;&amp;gt;
		SELECT 'a' AS user_id FROM dual
	&amp;lt;/select&amp;gt;
&amp;lt;/mapper&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;여기서 &lt;b&gt;namespace 에는 Mapper 경로 쿼리 아이디는 mapper 의 메소드와 일치&lt;/b&gt; 시켜줍니다.&lt;/p&gt;
&lt;p&gt;resultType 은 1) 파일인 bean 파일 경로를 써줍니다.&lt;/p&gt;
&lt;p&gt;dtd 파일의 기본 경로는 resource 하위 입니다.&lt;/p&gt;
&lt;p&gt;경로를 바꾸고 싶다면&lt;/p&gt;
&lt;pre id=&quot;code_1612446667440&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mybatis:
  mapper-locations: mapper/**/*.xml # mapper 기본경로 
  configuration:
    map-underscore-to-camel-case: true &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;application.yml 에 mapper-locations 에 경로를 지정해주시길 바랍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d1KL6n/btqVSuEz5Bs/WmKkbxTsmdWFAKbQjY9J41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d1KL6n/btqVSuEz5Bs/WmKkbxTsmdWFAKbQjY9J41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d1KL6n/btqVSuEz5Bs/WmKkbxTsmdWFAKbQjY9J41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd1KL6n%2FbtqVSuEz5Bs%2FWmKkbxTsmdWFAKbQjY9J41%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;저의 현재 경로입니다.&lt;/p&gt;
&lt;p&gt;그다음 추가한&amp;nbsp; &lt;b&gt;configuration:&amp;nbsp; map-underscore-to-camel-case: true&lt;/b&gt;&amp;nbsp; 얘는&lt;/p&gt;
&lt;p&gt;쿼리 컬럼명을 camel 형식으로 변경시켜주는 것입니다.&lt;/p&gt;
&lt;p&gt;기본적으로 DB 컬럼명은 언더바를 사용합니다 . 예) user_id&lt;/p&gt;
&lt;p&gt;bean 파일이나 JAVA 에서는 보통 camel 형식을 사용합니다. 예) userId&lt;/p&gt;
&lt;p&gt;그래서 쿼리 결과와 Bean 변수명이 일치해야 맵핑이 되기 때문에&amp;nbsp;&lt;/p&gt;
&lt;p&gt;camel 형식으로 자동 변환 될 수 있도록 설정에 추가해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4) service 만들기&lt;/p&gt;
&lt;pre id=&quot;code_1612446152309&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.project.login.service;

import java.util.List;

import org.springframework.stereotype.Service;
import com.project.login.model.Login;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@Service //service
public class LoginService {
	
	private final LoginRepository loginRepository;
	
	public List&amp;lt;Login&amp;gt; findAll(){
		return loginRepository.findAll();
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;@Service 어노테이션 주고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;중요! @RequiredArgsConstructor 추가&lt;/p&gt;
&lt;p&gt;이 어노테이션이 들어가지 않으면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;private final LoginRepository 가 에러가 납니다.&lt;/p&gt;
&lt;p&gt;추가로) 이게 에러가 안고쳐지면 lombok 플러그인이 이클립스 툴에 제대로 적용되지 않는 상태입니다.&lt;/p&gt;
&lt;p&gt;저도 그래서 꽤나 애를 먹었습니다.&lt;/p&gt;
&lt;p&gt;해결법은 나중에 올려보겠습니다.&lt;/p&gt;
&lt;p&gt;3) RestController 구현하기&lt;/p&gt;
&lt;pre id=&quot;code_1612446316243&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.project.login.web;

import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import com.project.login.model.Login;
import com.project.login.service.LoginService;

import lombok.RequiredArgsConstructor;

@Controller
@RequiredArgsConstructor
public class LoginController {
	
	private final LoginService loginService;
	
	@GetMapping(&quot;/&quot;)
	public String index(){
		List&amp;lt;Login&amp;gt; list = loginService.findAll();
		System.out.println(list);
		return &quot;index&quot;;
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저는 그냥 controller에 구현하겠습니다.&lt;/p&gt;
&lt;p&gt;service 를 @RequiredArgsConstructor 를 이용해서 생성 후 이용해줍니다.&lt;/p&gt;
&lt;p&gt;index 페이지에 간다면 System out에 로그가 찍혀야겠지요?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;결과)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cO0Oxa/btqVIaA79mO/9p78BrA9NEN0c9FCxqQCN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cO0Oxa/btqVIaA79mO/9p78BrA9NEN0c9FCxqQCN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cO0Oxa/btqVIaA79mO/9p78BrA9NEN0c9FCxqQCN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcO0Oxa%2FbtqVIaA79mO%2F9p78BrA9NEN0c9FCxqQCN1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Login bean객체에 userId의 값이 맵핑이 된걸 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;쿼리에 password 값은 없었기 때문에 null 값으로 나옵니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;이 구성을 잘 기억하시길 바랍니다.&lt;/p&gt;
&lt;p&gt;DTD(xml) -&amp;gt; Mapper(interface) -&amp;gt; Serivce -&amp;gt; Controller&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>옛날 창고/스프링</category>
      <category>DB</category>
      <category>spring</category>
      <category>springboot</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/175</guid>
      <comments>https://allmana.tistory.com/175#entry175comment</comments>
      <pubDate>Tue, 2 Feb 2021 23:24:50 +0900</pubDate>
    </item>
    <item>
      <title>Spring boot Thymeleaf 경로 설정 하기</title>
      <link>https://allmana.tistory.com/174</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://allmana.tistory.com/172&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2021/02/01 - [IT/스프링] - Spring boot starter 로 Thymeleaf 사용하기&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1612190053806&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Spring boot starter 로 Thymeleaf 사용하기&quot; data-og-description=&quot;일단 난 처음에 이거 어케 읽어야할지도 난감했다..  읽는법은 타임리프로 읽으면 된다. 기존 자주 사용해왔던 JSP 는 Spring Boot에서는 권장하지 않고 Thymeleaf 사용을 권장한다. 이유는 JSP 보다는&quot; data-og-host=&quot;allmana.tistory.com&quot; data-og-source-url=&quot;https://allmana.tistory.com/172&quot; data-og-url=&quot;https://allmana.tistory.com/172&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/OMp4N/hyI80BqjsL/pKVol8tqfzzK1r4Y0WVrkk/img.png?width=569&amp;amp;height=690&amp;amp;face=0_0_569_690,https://scrap.kakaocdn.net/dn/dbx0x6/hyI8TWBsoo/CGa7uilpHYk42LlkadWQBK/img.png?width=569&amp;amp;height=690&amp;amp;face=0_0_569_690,https://scrap.kakaocdn.net/dn/4fY0g/hyI8TbdcqO/Hrn3jEqtKdqNTo6awituC1/img.png?width=550&amp;amp;height=770&amp;amp;face=0_0_550_770&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/172&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allmana.tistory.com/172&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/OMp4N/hyI80BqjsL/pKVol8tqfzzK1r4Y0WVrkk/img.png?width=569&amp;amp;height=690&amp;amp;face=0_0_569_690,https://scrap.kakaocdn.net/dn/dbx0x6/hyI8TWBsoo/CGa7uilpHYk42LlkadWQBK/img.png?width=569&amp;amp;height=690&amp;amp;face=0_0_569_690,https://scrap.kakaocdn.net/dn/4fY0g/hyI8TbdcqO/Hrn3jEqtKdqNTo6awituC1/img.png?width=550&amp;amp;height=770&amp;amp;face=0_0_550_770');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Spring boot starter 로 Thymeleaf 사용하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;일단 난 처음에 이거 어케 읽어야할지도 난감했다..  읽는법은 타임리프로 읽으면 된다. 기존 자주 사용해왔던 JSP 는 Spring Boot에서는 권장하지 않고 Thymeleaf 사용을 권장한다. 이유는 JSP 보다는&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;allmana.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://allmana.tistory.com/173&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2021/02/01 - [IT/스프링] - Spring boot application.properties 를 가독성있게 바꿔보자&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1612190101331&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Spring boot application.properties 를 가독성있게 바꿔보자&quot; data-og-description=&quot;Spring Boot 에 application.properties 은 다르게도 쓸수있다. https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#mapping-yaml-to-properties Spring Boot Features G..&quot; data-og-host=&quot;allmana.tistory.com&quot; data-og-source-url=&quot;https://allmana.tistory.com/173&quot; data-og-url=&quot;https://allmana.tistory.com/173&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/YN2fW/hyI8UnEJXe/3nINgPFqTIfNn1VyO1RwPK/img.png?width=800&amp;amp;height=279&amp;amp;face=0_0_800_279,https://scrap.kakaocdn.net/dn/ltBu2/hyI8RqVwNY/buNkQAvSKk0CKJYnfT5lK1/img.png?width=800&amp;amp;height=279&amp;amp;face=0_0_800_279,https://scrap.kakaocdn.net/dn/AXCBA/hyI8YDBjwR/KN9yMNVpm6kbHuHvEQRyy0/img.png?width=966&amp;amp;height=338&amp;amp;face=0_0_966_338&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/173&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allmana.tistory.com/173&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/YN2fW/hyI8UnEJXe/3nINgPFqTIfNn1VyO1RwPK/img.png?width=800&amp;amp;height=279&amp;amp;face=0_0_800_279,https://scrap.kakaocdn.net/dn/ltBu2/hyI8RqVwNY/buNkQAvSKk0CKJYnfT5lK1/img.png?width=800&amp;amp;height=279&amp;amp;face=0_0_800_279,https://scrap.kakaocdn.net/dn/AXCBA/hyI8YDBjwR/KN9yMNVpm6kbHuHvEQRyy0/img.png?width=966&amp;amp;height=338&amp;amp;face=0_0_966_338');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Spring boot application.properties 를 가독성있게 바꿔보자&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Spring Boot 에 application.properties 은 다르게도 쓸수있다. https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#mapping-yaml-to-properties Spring Boot Features G..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;allmana.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;앞전에 이어서 thymeleaf 공통 경로 설정을 잡아보려한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r0kdp/btqVkLOHGds/82mku6K8fYif3zRQQVXr9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r0kdp/btqVkLOHGds/82mku6K8fYif3zRQQVXr9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r0kdp/btqVkLOHGds/82mku6K8fYif3zRQQVXr9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr0kdp%2FbtqVkLOHGds%2F82mku6K8fYif3zRQQVXr9k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;먼저 컨트롤러에 반복적으로 쓰게될 .html 을 좀 제거하려한다.&lt;/p&gt;
&lt;p&gt;그리고 경로도 기본경로를 templates/thymeleaf 로 변경할 생각이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;191&quot; data-origin-height=&quot;163&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/df6ehV/btqVe7ktzO5/NNxiW51IovVzo0K2vdx6E1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/df6ehV/btqVe7ktzO5/NNxiW51IovVzo0K2vdx6E1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/df6ehV/btqVe7ktzO5/NNxiW51IovVzo0K2vdx6E1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdf6ehV%2FbtqVe7ktzO5%2FNNxiW51IovVzo0K2vdx6E1%2Fimg.png&quot; data-origin-width=&quot;191&quot; data-origin-height=&quot;163&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmT1gL/btqVugzThqZ/64EyV4oo83fPDIyXEMISG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmT1gL/btqVugzThqZ/64EyV4oo83fPDIyXEMISG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmT1gL/btqVugzThqZ/64EyV4oo83fPDIyXEMISG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmT1gL%2FbtqVugzThqZ%2F64EyV4oo83fPDIyXEMISG0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;당연히 설정은 application.yml 파일로 간다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;spring.thymeleaf 만 쳐도 설정가능한것이 우루루 나온다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SxAYy/btqVufOtIOm/kFeRkH7qlBiAqxnkreNtWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SxAYy/btqVufOtIOm/kFeRkH7qlBiAqxnkreNtWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SxAYy/btqVufOtIOm/kFeRkH7qlBiAqxnkreNtWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSxAYy%2FbtqVufOtIOm%2FkFeRkH7qlBiAqxnkreNtWk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;prefix(접두어) 는 설정을 안하면 classpath:templates/ 가 default 값이다.&lt;/p&gt;
&lt;p&gt;그래서 나는 templates/thymeleaf 로 변경 해주었고.&lt;/p&gt;
&lt;p&gt;suffix(접미어)는 Controller에서 .html을 그만쓰기 위해서 .html 로 해주었다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 cache 는 false로 해주지 않으면 새로고침시 적용이 되지 않는다고 한다.&lt;/p&gt;
&lt;p&gt;그래서 개발시에는 false 옵션을 주고 개발하는 것이 좋다고 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAAK6x/btqVh7R1nCD/urzQq8MLGtksr2ltK2Kjs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAAK6x/btqVh7R1nCD/urzQq8MLGtksr2ltK2Kjs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAAK6x/btqVh7R1nCD/urzQq8MLGtksr2ltK2Kjs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAAK6x%2FbtqVh7R1nCD%2FurzQq8MLGtksr2ltK2Kjs0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;설정 후 controller에서도 .html 을 빼준다.&lt;/p&gt;
&lt;p&gt;return 값에 들어가는 String 값이 깔끔해진다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0Rdmr/btqVdMgz0rP/nuzYsRQr8CGc6zUF9xbSv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0Rdmr/btqVdMgz0rP/nuzYsRQr8CGc6zUF9xbSv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0Rdmr/btqVdMgz0rP/nuzYsRQr8CGc6zUF9xbSv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0Rdmr%2FbtqVdMgz0rP%2FnuzYsRQr8CGc6zUF9xbSv0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;설정을 한 후 URL 을 쳐주면~올바르게 작동하는걸 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서 혹시나... Spring 이 알아서.. 경로를 찾는건 아닐까 혹시나 하는 마음에&amp;nbsp;&lt;/p&gt;
&lt;p&gt;login.html 을 이동하여 테스트 해봤다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dv9x6o/btqVuhyLIuM/XfCBuBKXd4cxDkWnFzKlJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dv9x6o/btqVuhyLIuM/XfCBuBKXd4cxDkWnFzKlJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dv9x6o/btqVuhyLIuM/XfCBuBKXd4cxDkWnFzKlJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdv9x6o%2FbtqVuhyLIuM%2FXfCBuBKXd4cxDkWnFzKlJ0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;thymeleaf 밖으로 나온 login.html&amp;nbsp;&lt;/p&gt;
&lt;p&gt;앞전에는 됐었는데 기본 경로 설정을 바꿨으므로 안되어야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;과연..?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JBlzV/btqVnX2o8p9/Hy7LHiWgkLYGKAnwMRlek0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JBlzV/btqVnX2o8p9/Hy7LHiWgkLYGKAnwMRlek0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JBlzV/btqVnX2o8p9/Hy7LHiWgkLYGKAnwMRlek0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJBlzV%2FbtqVnX2o8p9%2FHy7LHiWgkLYGKAnwMRlek0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;예상대로 에러 페이지가 나왔다.&lt;/p&gt;</description>
      <category>옛날 창고/스프링</category>
      <category>spring</category>
      <category>springboot</category>
      <category>thymeleaf</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/174</guid>
      <comments>https://allmana.tistory.com/174#entry174comment</comments>
      <pubDate>Tue, 2 Feb 2021 00:07:20 +0900</pubDate>
    </item>
    <item>
      <title>Spring boot application.properties 를 가독성있게 바꿔보자</title>
      <link>https://allmana.tistory.com/173</link>
      <description>&lt;p&gt;Spring Boot 에 application.properties 은 다르게도 쓸수있다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#mapping-yaml-to-properties&quot;&gt;https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#mapping-yaml-to-properties&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1612189423827&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Spring Boot Features&quot; data-og-description=&quot;Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and with both reactive and Servlet-based web applications. It occurs as part of closing the application context and is performed in the earliest &quot; data-og-host=&quot;docs.spring.io&quot; data-og-source-url=&quot;https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#mapping-yaml-to-properties&quot; data-og-url=&quot;https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#mapping-yaml-to-properties&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#mapping-yaml-to-properties&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#mapping-yaml-to-properties&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;&gt;Spring Boot Features&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and with both reactive and Servlet-based web applications. It occurs as part of closing the application context and is performed in the earliest&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;docs.spring.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;spring 공식 docs 에 들어가도 나온다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GUZux/btqVqG66Rqx/wADFJK0BQgoDjAB0AgItvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GUZux/btqVqG66Rqx/wADFJK0BQgoDjAB0AgItvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GUZux/btqVqG66Rqx/wADFJK0BQgoDjAB0AgItvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGUZux%2FbtqVqG66Rqx%2FwADFJK0BQgoDjAB0AgItvk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;기본적인 properties는 예제 사진처럼&lt;/p&gt;
&lt;p&gt;environments.dev.url&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;environments.dev.name&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;environments.dev &lt;/span&gt;가 반복적으로 써내려가듯 모든 설정에 반복 단어가 많다.&lt;/p&gt;
&lt;p&gt;즉 가독성이 떨어진다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만 YAML 방식은 JSON 형식과 유사하고 작성에도 용이하다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그럼 yaml 로 바꾸고싶으면 어떻게 해야할까..?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0Mhjy/btqVkK96egV/y44gPG0kbrTkXXhcjSkZxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0Mhjy/btqVkK96egV/y44gPG0kbrTkXXhcjSkZxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0Mhjy/btqVkK96egV/y44gPG0kbrTkXXhcjSkZxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0Mhjy%2FbtqVkK96egV%2Fy44gPG0kbrTkXXhcjSkZxk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;방법은 무지 간단하다 &lt;b&gt;이름을 yml 로 변경하자.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpphsJ/btqVkLOHyGM/PKlX0Z5LV2rJKlQXKfJvUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpphsJ/btqVkLOHyGM/PKlX0Z5LV2rJKlQXKfJvUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpphsJ/btqVkLOHyGM/PKlX0Z5LV2rJKlQXKfJvUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpphsJ%2FbtqVkLOHyGM%2FPKlX0Z5LV2rJKlQXKfJvUk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;변경 후 내용을 입력하면 기존 것과 다를거 없어보인다.&lt;/p&gt;
&lt;p&gt;하지만 자동완성을 이용해보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgpxPE/btqVe8KoopO/QWGFVQQHYTFcUwaXGJC1CK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgpxPE/btqVe8KoopO/QWGFVQQHYTFcUwaXGJC1CK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgpxPE/btqVe8KoopO/QWGFVQQHYTFcUwaXGJC1CK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgpxPE%2FbtqVe8KoopO%2FQWGFVQQHYTFcUwaXGJC1CK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;자동으로 yaml 방식으로 만들어준다.&lt;/p&gt;
&lt;p&gt;개발자라면 한땀 한땀 쓰지말구 툴을 언제나 활용하자&lt;/p&gt;
&lt;p&gt;&lt;b&gt;우리가 툴을 쓰는 이유는 편하게 개발하기 위해서다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그럼 이제 yml 파일로 spring에 가독성 있는 설정파일을 만들어 쓰길 바란다.&lt;/p&gt;</description>
      <category>옛날 창고/스프링</category>
      <category>Properties</category>
      <category>spring</category>
      <category>YAML</category>
      <category>yml</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/173</guid>
      <comments>https://allmana.tistory.com/173#entry173comment</comments>
      <pubDate>Mon, 1 Feb 2021 23:30:03 +0900</pubDate>
    </item>
    <item>
      <title>Spring boot starter 로 Thymeleaf 사용하기</title>
      <link>https://allmana.tistory.com/172</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;일단 난 처음에 이거 어케 읽어야할지도 난감했다.. &lt;/p&gt;
&lt;p&gt;읽는법은 타임리프로 읽으면 된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;기존 자주 사용해왔던 JSP 는 Spring Boot에서는 권장하지 않고 Thymeleaf 사용을 권장한다.&lt;/p&gt;
&lt;p&gt;이유는 JSP 보다는 Thymeleaf가 Spring boot 에 적합한가보다&lt;/p&gt;
&lt;p&gt;깊은 내용은 나도 모른다. &lt;s&gt;나는 야매 개발자니까&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;자 Spring boot starter 는 정말 정말 편하다~&lt;/p&gt;
&lt;p&gt;혹시 .. Spring boot Stater 로 프로젝트를 안만들었다면.. 참고&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://allmana.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2021/02/01 - [IT/스프링] - eclipse STS 로 Spring Boot 프로젝트 시작하기&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1612188109874&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;eclipse STS 로 Spring Boot 프로젝트 시작하기&quot; data-og-description=&quot;https://spring.io/tools Spring Tools 4 is the next generation of Spring tooling Largely rebuilt from scratch, Spring Tools 4 provides world-class support for developing Spring-based enterprise appli..&quot; data-og-host=&quot;allmana.tistory.com&quot; data-og-source-url=&quot;https://allmana.tistory.com/171&quot; data-og-url=&quot;https://allmana.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/m8jox/hyI8TvwqQ2/rniXjsV7Y5d0UPfO3nX2ik/img.png?width=800&amp;amp;height=727&amp;amp;face=730_42_776_93,https://scrap.kakaocdn.net/dn/jo8PL/hyI7fAa5T7/EKzMfMDyMwh95Kx8jr7FUK/img.png?width=800&amp;amp;height=727&amp;amp;face=730_42_776_93,https://scrap.kakaocdn.net/dn/mJAeD/hyI81UA9QU/uGgZRp3zRE5otRCgbzmRh0/img.png?width=822&amp;amp;height=747&amp;amp;face=743_41_794_96&quot;&gt;&lt;a href=&quot;https://allmana.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allmana.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/m8jox/hyI8TvwqQ2/rniXjsV7Y5d0UPfO3nX2ik/img.png?width=800&amp;amp;height=727&amp;amp;face=730_42_776_93,https://scrap.kakaocdn.net/dn/jo8PL/hyI7fAa5T7/EKzMfMDyMwh95Kx8jr7FUK/img.png?width=800&amp;amp;height=727&amp;amp;face=730_42_776_93,https://scrap.kakaocdn.net/dn/mJAeD/hyI81UA9QU/uGgZRp3zRE5otRCgbzmRh0/img.png?width=822&amp;amp;height=747&amp;amp;face=743_41_794_96');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;eclipse STS 로 Spring Boot 프로젝트 시작하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;https://spring.io/tools Spring Tools 4 is the next generation of Spring tooling Largely rebuilt from scratch, Spring Tools 4 provides world-class support for developing Spring-based enterprise appli..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;allmana.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;기존 다른 블로거들 글들 보면 의존성 주입하려면 복붙을 하던가 찾아야하는데&lt;/p&gt;
&lt;p&gt;Starter는 (dependency) 의존성 주입이 너무 편하다&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C2JfT/btqVvPhFsBS/EQBb1wHv9ZnT0vHMwRFpT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C2JfT/btqVvPhFsBS/EQBb1wHv9ZnT0vHMwRFpT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C2JfT/btqVvPhFsBS/EQBb1wHv9ZnT0vHMwRFpT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC2JfT%2FbtqVvPhFsBS%2FEQBb1wHv9ZnT0vHMwRFpT1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;프로젝트를 오른쪽 클릭해서 &lt;b&gt;Spring &amp;gt; Add Starters&lt;/b&gt; 를 클릭해준다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/be51np/btqVkKIZoKl/emh48KYq3bQB6hJlub6G00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/be51np/btqVkKIZoKl/emh48KYq3bQB6hJlub6G00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/be51np/btqVkKIZoKl/emh48KYq3bQB6hJlub6G00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbe51np%2FbtqVkKIZoKl%2Femh48KYq3bQB6hJlub6G00%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;POM.xml에 dependency 를 추가하겠다는거에 확인하는 과정이다.&lt;/p&gt;
&lt;p&gt;기존에는 maven 에 직접 넣어주던가 다른곳에서 복붙해서 줬다면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Starter에선 그냥 선택하면 알아서 넣어준다.&lt;/p&gt;
&lt;p&gt;Finish 한다면 maven 이 알아서 다운받아준다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;컨트롤러 설정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F4dZ8/btqVuf1ZkwU/DQrmhcxJonIDDhKNAAe09k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F4dZ8/btqVuf1ZkwU/DQrmhcxJonIDDhKNAAe09k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F4dZ8/btqVuf1ZkwU/DQrmhcxJonIDDhKNAAe09k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF4dZ8%2FbtqVuf1ZkwU%2FDQrmhcxJonIDDhKNAAe09k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;컨트롤러에 model 에 mana 라는 파라미터를 던져볼 예정이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DneRI/btqVvPhFHnx/Btjn1KOi4eoA15wvc7RwOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DneRI/btqVvPhFHnx/Btjn1KOi4eoA15wvc7RwOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DneRI/btqVvPhFHnx/Btjn1KOi4eoA15wvc7RwOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDneRI%2FbtqVvPhFHnx%2FBtjn1KOi4eoA15wvc7RwOk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;login.html에는 th:text=${파라미터}&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이게 thymeleaf 사용법이다. th 는 타임리프겠고 그다음은 텍스트 등등있을꺼고&lt;/p&gt;
&lt;p&gt;${파라미터} 를 해서 사용한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dNtxdJ/btqVugs4jgQ/xMDjfTJkmVnPeHW50ljzm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dNtxdJ/btqVugs4jgQ/xMDjfTJkmVnPeHW50ljzm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dNtxdJ/btqVugs4jgQ/xMDjfTJkmVnPeHW50ljzm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdNtxdJ%2FbtqVugs4jgQ%2FxMDjfTJkmVnPeHW50ljzm1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;URL 을 입력하면 mana 라는 자리에 블로그가 들어가있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;이전 글에서는 Spring boot 첫 controller 를 사용하였을때는 static 밑의 경로로 잡혔는데&lt;/p&gt;
&lt;p&gt;thyleaf를 설치하고 나니 templates 밑의 경로로 컨트롤러가 잡힌다.. 흠..&lt;/p&gt;
&lt;p&gt;기본적으로 설정이 변하는걸까..?&lt;/p&gt;</description>
      <category>옛날 창고/스프링</category>
      <category>spring</category>
      <category>thymeleaf</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/172</guid>
      <comments>https://allmana.tistory.com/172#entry172comment</comments>
      <pubDate>Mon, 1 Feb 2021 23:13:12 +0900</pubDate>
    </item>
    <item>
      <title>eclipse STS 로 Spring Boot 프로젝트 시작하기</title>
      <link>https://allmana.tistory.com/171</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://spring.io/tools&quot;&gt;https://spring.io/tools&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1612106749940&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Spring Tools 4 is the next generation of Spring tooling&quot; data-og-description=&quot;Largely rebuilt from scratch, Spring Tools 4 provides world-class support for developing Spring-based enterprise applications, whether you prefer Eclipse, Visual Studio Code, or Theia IDE.&quot; data-og-host=&quot;spring.io&quot; data-og-source-url=&quot;https://spring.io/tools&quot; data-og-url=&quot;https://spring.io/tools&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b9TEqU/hyI8Wd8FGy/obzgTdrzqkyGzTW01TPcw0/img.jpg?width=493&amp;amp;height=338&amp;amp;face=0_0_493_338,https://scrap.kakaocdn.net/dn/bGqIaY/hyI64kAF5H/5NxkDNyAnRoNfs0jCATTKk/img.jpg?width=493&amp;amp;height=315&amp;amp;face=0_0_493_315,https://scrap.kakaocdn.net/dn/gs6FB/hyI80t4FrB/rZv8ARyIrByhNgQKgcPMek/img.jpg?width=493&amp;amp;height=281&amp;amp;face=0_0_493_281&quot;&gt;&lt;a href=&quot;https://spring.io/tools&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://spring.io/tools&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b9TEqU/hyI8Wd8FGy/obzgTdrzqkyGzTW01TPcw0/img.jpg?width=493&amp;amp;height=338&amp;amp;face=0_0_493_338,https://scrap.kakaocdn.net/dn/bGqIaY/hyI64kAF5H/5NxkDNyAnRoNfs0jCATTKk/img.jpg?width=493&amp;amp;height=315&amp;amp;face=0_0_493_315,https://scrap.kakaocdn.net/dn/gs6FB/hyI80t4FrB/rZv8ARyIrByhNgQKgcPMek/img.jpg?width=493&amp;amp;height=281&amp;amp;face=0_0_493_281');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Spring Tools 4 is the next generation of Spring tooling&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Largely rebuilt from scratch, Spring Tools 4 provides world-class support for developing Spring-based enterprise applications, whether you prefer Eclipse, Visual Studio Code, or Theia IDE.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;spring.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;STS 는 위에 사이트에서 eclipse 버전으로 다운받으면 됩니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;예전 처음 Spring 배웠을때는 starter 가 있었는지 모르겠지만&lt;/p&gt;
&lt;p&gt;요즘엔 Starter 가 있어서 기본 설정들이 쉬운거 같다.&lt;/p&gt;
&lt;p&gt;Starter란..? 간단히 자주 쓰이는 설정들을 기본적으로 다 편하게 해줄 수 있는거라고 생각하면 될듯.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Spring Boot 에 Spring Stater Project 로 프로젝트를 만들 것이다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;참고) 일반적으로 말하는 Spring 과 Spring Boot 는 다르다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;br /&gt;모든지 시작할때 &lt;/span&gt;&lt;b&gt;Hello World&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;보는게 첫 시작 국룰 이니&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgaY16/btqVnXNO1gt/SkmufIBbClRWagObHuUcdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgaY16/btqVnXNO1gt/SkmufIBbClRWagObHuUcdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgaY16/btqVnXNO1gt/SkmufIBbClRWagObHuUcdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgaY16%2FbtqVnXNO1gt%2FSkmufIBbClRWagObHuUcdK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;starter project 로 해주고 프로젝트 이름과 JAVA 는 8 그리고 패키지 명을 설정해주고 다음을 클릭해준다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8TKwA/btqVbXvkDjE/MWlimfO5s0PFqGKSxOzeC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8TKwA/btqVbXvkDjE/MWlimfO5s0PFqGKSxOzeC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8TKwA/btqVbXvkDjE/MWlimfO5s0PFqGKSxOzeC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8TKwA%2FbtqVbXvkDjE%2FMWlimfO5s0PFqGKSxOzeC1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Spring Web 만 추가 해준다.&lt;/p&gt;
&lt;p&gt;- Spring Web 을 추가해주면 Apache Tomcat 설정이 완료된다. (굳이 톰캣 사이트 가서 다운받고 설정안해도된다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J7c3Q/btqVcrCYqbc/6htkw4vGY1YrltPwsHnkHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J7c3Q/btqVcrCYqbc/6htkw4vGY1YrltPwsHnkHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J7c3Q/btqVcrCYqbc/6htkw4vGY1YrltPwsHnkHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ7c3Q%2FbtqVcrCYqbc%2F6htkw4vGY1YrltPwsHnkHK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;프로젝트가 완료된다.&lt;/p&gt;
&lt;p&gt;여기서 나는&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Controller 패키지를 만들것이다.&lt;/p&gt;
&lt;p&gt;@RestController 와 @Controller 파일을 구분지을것이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;@RestController 와 @Controller 의 차이..?&lt;/p&gt;
&lt;p&gt;@RestController 는 Spring 4.0 부터 나오게 되었다.&lt;/p&gt;
&lt;p&gt;이전에는 Controller 에 View를 포워딩 하고, Data를 반환할때는 @ResponseBody를 써줘야 했다.&lt;/p&gt;
&lt;p&gt;@RestController는 @&lt;span style=&quot;color: #333333;&quot;&gt;ResponseBody 를 굳이 해주지 않아도 @ResponseBody가 붙어서 간다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;s&gt;&lt;span style=&quot;color: #333333;&quot;&gt;깊은 지식은 나도 모르므로 패스&lt;/span&gt;&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;나는 Controller - View 반환 하는 파일&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;RestController - Data 반환 하는 파일로 구성할 생각.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9wDeY/btqVnYFXXAP/G3XK5MQzppUw1lnMpPahzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9wDeY/btqVnYFXXAP/G3XK5MQzppUw1lnMpPahzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9wDeY/btqVnYFXXAP/G3XK5MQzppUw1lnMpPahzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9wDeY%2FbtqVnYFXXAP%2FG3XK5MQzppUw1lnMpPahzK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;login의 web 패키지 아래 LoginController 라는 Class를 만들었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dVsIdJ/btqVdNMggHN/JEwuHO6uWkqBFY7ZWyQU90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dVsIdJ/btqVdNMggHN/JEwuHO6uWkqBFY7ZWyQU90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dVsIdJ/btqVdNMggHN/JEwuHO6uWkqBFY7ZWyQU90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdVsIdJ%2FbtqVdNMggHN%2FJEwuHO6uWkqBFY7ZWyQU90%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;컨트롤러 파일이 될것이므로 @Controller써준다.&lt;/p&gt;
&lt;p&gt;@GetMapping 에는 /login URI 가 오면 login.html 파일을 포워딩 해줄것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LZeIh/btqVnX77Wqm/GzKFMplYkUT0sOHwX3Q7QK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LZeIh/btqVnX77Wqm/GzKFMplYkUT0sOHwX3Q7QK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LZeIh/btqVnX77Wqm/GzKFMplYkUT0sOHwX3Q7QK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLZeIh%2FbtqVnX77Wqm%2FGzKFMplYkUT0sOHwX3Q7QK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;기본적으로 컨트롤러의 기본 경로는 &lt;span style=&quot;color: #333333;&quot;&gt;(src/main/resources/static)&lt;/span&gt; 하위이다.&lt;br /&gt;login.html 파일을 생성해준다.&lt;/p&gt;
&lt;p&gt;그다음 Hello world 를 작성.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bchJM0/btqVddYJ6tk/sNCnvpqcODop0q4aVwc0D0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bchJM0/btqVddYJ6tk/sNCnvpqcODop0q4aVwc0D0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bchJM0/btqVddYJ6tk/sNCnvpqcODop0q4aVwc0D0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbchJM0%2FbtqVddYJ6tk%2FsNCnvpqcODop0q4aVwc0D0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그럼 실행해 보자. 기본적으로 처음에는 포트도 8080로 되어있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AYbyi/btqVnXNPfN2/wvvxuZiadCzRPat2OCYdtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AYbyi/btqVnXNPfN2/wvvxuZiadCzRPat2OCYdtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AYbyi/btqVnXNPfN2/wvvxuZiadCzRPat2OCYdtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAYbyi%2FbtqVnXNPfN2%2FwvvxuZiadCzRPat2OCYdtk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;실행을 하면 console 에 로그가 쭉쭉 올라온다.&lt;/p&gt;
&lt;p&gt;그다음 URL 을 http://localhost:8080/login 을 입력해서 확인해보면&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vgt8Z/btqVddRZAgh/yvJTDKp211bJ55EpsfEGW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vgt8Z/btqVddRZAgh/yvJTDKp211bJ55EpsfEGW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vgt8Z/btqVddRZAgh/yvJTDKp211bJ55EpsfEGW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvgt8Z%2FbtqVddRZAgh%2FyvJTDKp211bJ55EpsfEGW0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Hello world 가 나오는걸 확인 할 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;현재 회사에서 스프링을 미리 세팅되어있던 것만 그냥 편하게 쓰다보니..&lt;/p&gt;
&lt;p&gt;기본적인 설정도 내가 하려니 쉽지 않았다.. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번 기회에 차차 조금씩 여러가지 기능도 넣어보고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;내가 환경을 좀 구성해보려고 한다.&lt;/p&gt;</description>
      <category>옛날 창고/스프링</category>
      <category>Boot</category>
      <category>Eclipse</category>
      <category>spring</category>
      <category>springstarter</category>
      <category>sts</category>
      <category>이클립스</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/171</guid>
      <comments>https://allmana.tistory.com/171#entry171comment</comments>
      <pubDate>Mon, 1 Feb 2021 00:52:01 +0900</pubDate>
    </item>
    <item>
      <title>개발자 추천 폰트 - Bitstream Vera Sans Mono</title>
      <link>https://allmana.tistory.com/170</link>
      <description>&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cKfGpK/btqVdeo3cwU/6HK2FLUWtJsGjIK8A7xVMk/VeraMono.ttf?attach=1&amp;amp;knm=tfile.ttf&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;VeraMono.ttf&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.05MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;개발자라면 폰트에도 좀 신경을 써야한다.&lt;/p&gt;
&lt;p&gt;나도 그렇게 새로운 툴같은거 크게 신경을 잘 안쓰기는 하지만..&lt;/p&gt;
&lt;p&gt;심각한 사람들은 그냥 메모장 만 이용하는 사람도 있다..&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;텍스트 에디터 툴을 사용하면 정말 편한일도 많고..&lt;/p&gt;
&lt;p&gt;툴에서 지원하는 플러그인 등등...&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그런사소한 차이가 쌓이고 쌓여서 야근을 덜할수 있게(?) ㅋㅋㅋ도 해주는건데..&lt;/p&gt;
&lt;p&gt;내가 첫 개발할때는 그냥 기본적인 consoles 를 썼는데&lt;/p&gt;
&lt;p&gt;사수 분이 이 폰트를 추천해줬고지금까지도 계속 쓰고있는 폰트이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;br /&gt;이 폰트의 가장 큰 장점 한가지만 설명하고 끝내겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vzNTd/btqU4ZApVgW/r4tI574Mwf73NtALKVwagK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vzNTd/btqU4ZApVgW/r4tI574Mwf73NtALKVwagK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vzNTd/btqU4ZApVgW/r4tI574Mwf73NtALKVwagK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvzNTd%2FbtqU4ZApVgW%2Fr4tI574Mwf73NtALKVwagK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;순서대로 영어 L(엘),i(아이), 숫자 1, 그리고 | 파이프 라인이다.&lt;/p&gt;
&lt;p&gt;심한 폰트는 모두가 비슷하지만 이&amp;nbsp; bitstream 은 모든게 구분되어진다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;지금 이 글을 쓰는 이 폰트도 엘과 아이, 파이프 라인의 구분이 쉽지 않다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&amp;nbsp; l I |&amp;nbsp;&lt;/span&gt; ㅋㅋ 길이만 다를 뿐 구분이 쉽지 않다.&lt;/p&gt;
&lt;p&gt;consoles 쓰는 사람이라면 이 폰트에 익숙해지도록..&lt;/p&gt;</description>
      <category>옛날 창고/개발</category>
      <category>bitstream</category>
      <category>개발자</category>
      <category>추천</category>
      <category>폰트</category>
      <author>Dev JS</author>
      <guid isPermaLink="true">https://allmana.tistory.com/170</guid>
      <comments>https://allmana.tistory.com/170#entry170comment</comments>
      <pubDate>Sat, 30 Jan 2021 08:30:44 +0900</pubDate>
    </item>
  </channel>
</rss>