<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>개발초보의 Study-log</title>
    <link>https://pro-pennek.tistory.com/</link>
    <description>공부한 내용을 정리하고 복기할 때 씁니다.</description>
    <language>ko</language>
    <pubDate>Thu, 16 Apr 2026 10:07:44 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>펜네임</managingEditor>
    <image>
      <title>개발초보의 Study-log</title>
      <url>https://tistory1.daumcdn.net/tistory/3142206/attach/259131e3950d467ab72086a3eebdf92c</url>
      <link>https://pro-pennek.tistory.com</link>
    </image>
    <item>
      <title>[DB 설계] 멀티테넌트와 싱글테넌트의 차이</title>
      <link>https://pro-pennek.tistory.com/entry/DB-%EC%84%A4%EA%B3%84-%EB%A9%80%ED%8B%B0%ED%85%8C%EB%84%8C%ED%8A%B8%EC%99%80-%EC%8B%B1%EA%B8%80%ED%85%8C%EB%84%8C%ED%8A%B8%EC%9D%98-%EC%B0%A8%EC%9D%B4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;고객사를 여러개 둔 서비스를 개발하려고 할 때, DB 설계 방식에서 고민을 하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 멀티테넌트와 싱글테넌트의 차이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;멀티테넌트 (테이블을 통합하는 방식)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고객사들이 스키마를 공유한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 주요 테이블에 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;tenant_id를 넣는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;고객사들의 데이터 보안을 위해 쿼리에 반드시 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;tenant_id를 넣도록 강제해야 한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;스키마 구조 변경이 쉬워&lt;/b&gt;서 &lt;b&gt;고객사가 많을수록 채택&lt;/b&gt;할만하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;싱글테넌트 (테이블을 별도로 두는 방식)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고객사들이 스키마를 따로 갖는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고객사별로 필드, 권한 등의 &lt;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;&amp;nbsp;&lt;/p&gt;</description>
      <category>주니어에서 시니어로/개발일기</category>
      <author>펜네임</author>
      <guid isPermaLink="true">https://pro-pennek.tistory.com/229</guid>
      <comments>https://pro-pennek.tistory.com/entry/DB-%EC%84%A4%EA%B3%84-%EB%A9%80%ED%8B%B0%ED%85%8C%EB%84%8C%ED%8A%B8%EC%99%80-%EC%8B%B1%EA%B8%80%ED%85%8C%EB%84%8C%ED%8A%B8%EC%9D%98-%EC%B0%A8%EC%9D%B4#entry229comment</comments>
      <pubDate>Wed, 27 Aug 2025 10:26:00 +0900</pubDate>
    </item>
    <item>
      <title>[React, Next.js] 프론트엔드와 백엔드가 분리된 프로젝트일 때, 프론트에서 백을 호출하는 법</title>
      <link>https://pro-pennek.tistory.com/entry/React-Nextjs-%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%EC%99%80-%EB%B0%B1%EC%97%94%EB%93%9C%EA%B0%80-%EB%B6%84%EB%A6%AC%EB%90%9C-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%9D%BC-%EB%95%8C-%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%90%EC%84%9C-%EB%B0%B1%EC%9D%84-%ED%98%B8%EC%B6%9C%ED%95%98%EB%8A%94-%EB%B2%95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Front-end&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FE 메인페이지(index.js 나 page.jsx 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1756175289498&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;use client&quot;;

import { useEffect, useState } from &quot;react&quot;;

export default function Home() {
  const [data, setData] = useState(null);
  const [error, setError] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() =&amp;gt; {
    fetch(&quot;http://localhost:8080/api/sample&quot;) // BE 주소
      .then((res) =&amp;gt; {
        if (!res.ok) {
          throw new Error(&quot;서버 응답 오류: &quot; + res.status);
        }
        return res.json();
      })
      .then((json) =&amp;gt; {
        setData(json);
        setError(null);
      })
      .catch((err) =&amp;gt; {
        setError(err.message);
        setData(null);
      })
      .finally(() =&amp;gt; {
        setLoading(false);
      });
  }, []);

  if (loading) return &amp;lt;p&amp;gt;불러오는 중...&amp;lt;/p&amp;gt;;
  if (error) return &amp;lt;p style={{ color: &quot;red&quot; }}&amp;gt;에러: {error}&amp;lt;/p&amp;gt;;

  return (
    &amp;lt;div&amp;gt;
      &amp;lt;h1&amp;gt;백엔드 데이터 가져오기&amp;lt;/h1&amp;gt;
      &amp;lt;pre&amp;gt;{JSON.stringify(data, null, 2)}&amp;lt;/pre&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Back-end&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;1. 연결을 확인할 때 임시로 쓰는 방법 &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;호출할 API가 있는 컨트롤러에&lt;span&gt; &lt;/span&gt;&lt;/span&gt;@CrossOrigin(origins = &quot;http://localhost:3000&quot;)을 붙인다.&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;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1756175452425&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@CrossOrigin(origins = &quot;http://localhost:3000&quot;)
@RestController
@RequestMapping(&quot;/api&quot;)
public class SampleController {
    @GetMapping(&quot;/sample&quot;)
    public Map&amp;lt;String, String&amp;gt; sample() {
        return Map.of(&quot;message&quot;, &quot;Hello from BE&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 전역 설정 방법 (권장)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WebConfig.java를 추가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1756183371755&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping(&quot;/**&quot;)
                .allowedOrigins(&quot;http://localhost:3000&quot;)
                .allowedMethods(&quot;GET&quot;, &quot;POST&quot;, &quot;PUT&quot;, &quot;DELETE&quot;, &quot;OPTIONS&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발툴</category>
      <author>펜네임</author>
      <guid isPermaLink="true">https://pro-pennek.tistory.com/228</guid>
      <comments>https://pro-pennek.tistory.com/entry/React-Nextjs-%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%EC%99%80-%EB%B0%B1%EC%97%94%EB%93%9C%EA%B0%80-%EB%B6%84%EB%A6%AC%EB%90%9C-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%9D%BC-%EB%95%8C-%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%90%EC%84%9C-%EB%B0%B1%EC%9D%84-%ED%98%B8%EC%B6%9C%ED%95%98%EB%8A%94-%EB%B2%95#entry228comment</comments>
      <pubDate>Tue, 26 Aug 2025 13:06:16 +0900</pubDate>
    </item>
    <item>
      <title>[Java] HashMap 안의 데이터 확인하기 - HashMap.entrySet()</title>
      <link>https://pro-pennek.tistory.com/entry/Java-HashMap-%EC%95%88%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0-HashMapentrySet</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Map과 HashMap 의 차이&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Map은 인터페이스, HashMap은 Map을 구현한 클래스다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;그래서 HashMap이 Map 형태로 생성된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; HashMap.keySet()&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;HashMap.keySet() 메서드를 쓰면 key&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;들이 담긴 바구니를 받는다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;(바구니는 셋 뷰Set View 라고 함)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1747447307640&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// Java program to demonstrate the working of keySet()
import java.util.HashMap;

public class Geeks {
    public static void main(String[] args) {

        // Creating an empty HashMap
        HashMap&amp;lt;Integer, String&amp;gt; m = new HashMap&amp;lt;&amp;gt;();

        // Adding key-value pairs
        m.put(1, &quot;Geeks&quot;);
        m.put(2, &quot;For&quot;);
        m.put(3, &quot;Geeks&quot;);
        m.put(4, &quot;Welcomes&quot;);
        m.put(5, &quot;You&quot;);

        // Displaying the HashMap
        System.out.println(&quot;넣은 값: &quot; + m);

        // Using keySet() to get the set view of keys
        System.out.println(&quot;키: &quot; + m.keySet());
    }
}
// 출처 : https://www.geeksforgeeks.org/hashmap-keyset-method-in-java&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;Output&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;java&quot; style=&quot;background-color: #e0e0e0; color: #000000; text-align: left;&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;넣은 값: {1=Geeks, 2=For, 3=Geeks, 4=Welcomes, 5=You}
키: [1, 2, 3, 4, 5]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;출력 결과에서 볼 수 있듯이, value 값과 상관없이 key만 보여준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;HashMap.entrySet()&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;entrySet()을 쓰면 key와 value를 둘 다 갖춘 데이터들이 바구니에 담긴다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1747448307224&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// Java Program to demonstrate the entrySet() method
import java.util.*;

public class GFG {
    public static void main(String[] args) {

        // Creating an empty HashMap
        HashMap&amp;lt;Integer, String&amp;gt; hm = new HashMap&amp;lt;&amp;gt;();

        // Mapping string values to integer keys
        hm.put(10, &quot;Geeks&quot;);
        hm.put(15, &quot;for&quot;);
        hm.put(20, &quot;Geeks&quot;);
        hm.put(25, &quot;Welcomes&quot;);
        hm.put(30, &quot;You&quot;);

        // Displaying the HashMap
        System.out.println(&quot;넣은 값: &quot; + hm);

        // Using entrySet() to get the set view
        System.out.println(&quot;키와 밸류 쌍: &quot; + hm.entrySet());
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;Output&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;java&quot; style=&quot;background-color: #e0e0e0; color: #000000; text-align: left;&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;넣은 값: {Geeks=20, for=15, You=30, Welcomes=25}
키와 밸류 쌍: [Geeks=20, for=15, You=30, Welcomes=25]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이렇게 '키=값' 형태의 데이터를 받을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; HashMap.entrySet()을 활용해 데이터 순회하기&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;일반적으로 entrySet()을 쓰는 이유는 키와 값을 따로 부르기 위해서다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1747449430526&quot; class=&quot;java&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        HashMap&amp;lt;Integer, String&amp;gt; hm = new HashMap&amp;lt;&amp;gt;();

        hm.put(1, &quot;엔트리셋에서&quot;);
        hm.put(2, &quot;데이터&quot;);
        hm.put(3, &quot;확인하기!&quot;);

        for (Map.Entry&amp;lt;Integer, String&amp;gt; entry : hm.entrySet()) {
            System.out.println(entry.getKey() + &quot; ::: &quot; + entry.getValue());
        }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;Output&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;java&quot; style=&quot;background-color: #e0e0e0; color: #000000; text-align: left;&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;1 ::: 엔트리셋에서
2 ::: 데이터
3 ::: 확인하기!&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;예제와 같이 Entry.getKey()와 getValue()를 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;소스코드 출처&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;a href=&quot;https://www.geeksforgeeks.org/hashmap-keyset-method-in-java/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.geeksforgeeks.org&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Java</category>
      <category>hashmap 밸류값</category>
      <category>map value</category>
      <author>펜네임</author>
      <guid isPermaLink="true">https://pro-pennek.tistory.com/226</guid>
      <comments>https://pro-pennek.tistory.com/entry/Java-HashMap-%EC%95%88%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0-HashMapentrySet#entry226comment</comments>
      <pubDate>Sat, 17 May 2025 11:38:40 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] Unity Hub에서 안드로이드 빌드하기(성공) add modules가 보이지 않을 때</title>
      <link>https://pro-pennek.tistory.com/entry/Unity-Unity-Hub%EC%97%90%EC%84%9C-add-modules%EA%B0%80-%EB%B3%B4%EC%9D%B4%EC%A7%80-%EC%95%8A%EC%9D%84-%EB%95%8C</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;원인&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;해당 버전을 유니티 허브에서 설치한 게 아니라면 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;add modules가&amp;nbsp;&lt;/span&gt; 보이지 않는다고 한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;(나는 허브에서 설치했는데?! -&amp;gt; 그래도 보이지 않는 경우가 가끔 있다고.)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; &lt;b&gt;재설치로 해결되는 경우도 있다고 하는데, 나는 재설치 없이 해결하고 싶어서 다른 방법을 찾아 보았다.&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://discussions.unity.com/t/unity-2021-3-19f1-is-no-longer-available-from-the-hub-cant-add-modules-to-manual-installation/911073&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;안드로이드 빌드 관련 파일들을 수동으로 설치해 해결&lt;/a&gt;했다는 사람도 있었다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;시도1&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;1.&amp;nbsp;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://unity.com/kr/releases/editor/archive&quot;&gt;유니티 다운로드 아카이브&lt;/a&gt;에서 해당하는 버전을 찾고, See all 버튼을 클릭한다.&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1626&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cT9vUx/btsLmHfIRdP/yw5ptR6KIVDPTOcj0HsmFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cT9vUx/btsLmHfIRdP/yw5ptR6KIVDPTOcj0HsmFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cT9vUx/btsLmHfIRdP/yw5ptR6KIVDPTOcj0HsmFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcT9vUx%2FbtsLmHfIRdP%2Fyw5ptR6KIVDPTOcj0HsmFk%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;1626&quot; height=&quot;512&quot; data-origin-width=&quot;1626&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;2. Component installers에서 내 컴퓨터의 OS를 선택한다.&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1419&quot; data-origin-height=&quot;829&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqrq0Y/btsLlp8amQC/jQX6fjna7Df0YOHxfyce70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqrq0Y/btsLlp8amQC/jQX6fjna7Df0YOHxfyce70/img.png&quot; data-alt=&quot;나는 Windows를 사용하기 때문에 Windows를 선택했다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqrq0Y/btsLlp8amQC/jQX6fjna7Df0YOHxfyce70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbqrq0Y%2FbtsLlp8amQC%2FjQX6fjna7Df0YOHxfyce70%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;1419&quot; height=&quot;829&quot; data-origin-width=&quot;1419&quot; data-origin-height=&quot;829&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;나는 Windows를 사용하기 때문에 Windows를 선택했다.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;3. Android Build Support를 선택해 다운로드한다.&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;935&quot; data-origin-height=&quot;577&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oMlTX/btsLlKEp3B7/isQ0eDDKZ10KDh6YLiluL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oMlTX/btsLlKEp3B7/isQ0eDDKZ10KDh6YLiluL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oMlTX/btsLlKEp3B7/isQ0eDDKZ10KDh6YLiluL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoMlTX%2FbtsLlKEp3B7%2FisQ0eDDKZ10KDh6YLiluL1%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;935&quot; height=&quot;577&quot; data-origin-width=&quot;935&quot; data-origin-height=&quot;577&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;4. 다운로드한 프로그램을 실행(설치)한다.&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;161&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drHOnN/btsLlhCplyX/RtkAzscNFfLfcMbHfQzgX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drHOnN/btsLlhCplyX/RtkAzscNFfLfcMbHfQzgX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drHOnN/btsLlhCplyX/RtkAzscNFfLfcMbHfQzgX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrHOnN%2FbtsLlhCplyX%2FRtkAzscNFfLfcMbHfQzgX1%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;713&quot; height=&quot;161&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;161&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;5. 설치가 완료되면&amp;nbsp;Unity에서 아무 프로젝트나 열고,&amp;nbsp;Build Settings (Ctrl+Shift+B) 창에서 Platform을 바꿔준다.&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;643&quot; data-origin-height=&quot;605&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdVTl8/btsLl9X48TS/4cyr0iiS4ocxK3OiNSoDB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdVTl8/btsLl9X48TS/4cyr0iiS4ocxK3OiNSoDB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdVTl8/btsLl9X48TS/4cyr0iiS4ocxK3OiNSoDB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdVTl8%2FbtsLl9X48TS%2F4cyr0iiS4ocxK3OiNSoDB0%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;643&quot; height=&quot;605&quot; data-origin-width=&quot;643&quot; data-origin-height=&quot;605&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;좌측 Platform에서 'Android' 클릭&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&amp;gt; 우측 하단 Switch Platform 버튼 클릭 후 완료되기를 기다린다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&amp;gt; 그림처럼 'Build' 버튼이 뜨면 세팅이 완료된 것이다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;*Build Settings 창을 여는 또 다른 방법 : Unity 창 &amp;gt; 좌상단 File &amp;gt; Build Setting&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;시도2&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;1. Unity hub 설치 탭에 원하는 버전이 있는 걸 확인한다.&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2p9cV/btsLlZaqDJ5/K36hl0125a6n7CGx5iiPl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2p9cV/btsLlZaqDJ5/K36hl0125a6n7CGx5iiPl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2p9cV/btsLlZaqDJ5/K36hl0125a6n7CGx5iiPl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2p9cV%2FbtsLlZaqDJ5%2FK36hl0125a6n7CGx5iiPl0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;600&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;2. Unity Hub를 완전히 종료한다.&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;411&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bc3eRd/btsLmLJevJp/zMRsPBlGG1DjXx9fMvh9u0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bc3eRd/btsLmLJevJp/zMRsPBlGG1DjXx9fMvh9u0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bc3eRd/btsLmLJevJp/zMRsPBlGG1DjXx9fMvh9u0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc3eRd%2FbtsLmLJevJp%2FzMRsPBlGG1DjXx9fMvh9u0%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;411&quot; height=&quot;404&quot; data-origin-width=&quot;411&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;Windows일 경우 그림을 따라한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;컴퓨터 화면 우측 하단의 화살표 버튼 클릭 &amp;gt; Unity Hub 아이콘 우클릭 &amp;gt; Quit Unity Hub&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;3. 이 경로로 간다.&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;C:\Users\유저이름\AppData\Roaming\UnityHub&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #3b4045; text-align: left;&quot;&gt;4. 파일&amp;nbsp;&lt;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;editors.json&lt;/span&gt;&amp;nbsp;을 찾아서 연다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;642&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sHVz2/btsLmVrquIC/206aiV68tC1tDvEu3vJSIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sHVz2/btsLmVrquIC/206aiV68tC1tDvEu3vJSIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sHVz2/btsLmVrquIC/206aiV68tC1tDvEu3vJSIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsHVz2%2FbtsLmVrquIC%2F206aiV68tC1tDvEu3vJSIK%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;642&quot; height=&quot;460&quot; data-origin-width=&quot;642&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;5. 파일 내용에서 원하는 버전을 찾는다.&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;905&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7xYLm/btsLmN79naC/nXu0XPLTeYBFsFVlZGbBhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7xYLm/btsLmN79naC/nXu0XPLTeYBFsFVlZGbBhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7xYLm/btsLmN79naC/nXu0XPLTeYBFsFVlZGbBhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7xYLm%2FbtsLmN79naC%2FnXu0XPLTeYBFsFVlZGbBhk%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;905&quot; height=&quot;586&quot; data-origin-width=&quot;905&quot; data-origin-height=&quot;586&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;6. 그 버전에 해당하는 &quot;manual&quot;:true 를 &quot;manual&quot;:false 로 바꾸고 파일을 저장한다.&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;905&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b280IS/btsLlfyaG40/7T4o48nnHB0KMIYs0VkGSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b280IS/btsLlfyaG40/7T4o48nnHB0KMIYs0VkGSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b280IS/btsLlfyaG40/7T4o48nnHB0KMIYs0VkGSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb280IS%2FbtsLlfyaG40%2F7T4o48nnHB0KMIYs0VkGSK%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;905&quot; height=&quot;586&quot; data-origin-width=&quot;905&quot; data-origin-height=&quot;586&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;7. Unity Hub를 열어 Add modules가 추가되었는지 확인한다.&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk8BJM/btsLmmC72Gq/nkhdOVbppTlogFkzRWsjB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk8BJM/btsLmmC72Gq/nkhdOVbppTlogFkzRWsjB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk8BJM/btsLmmC72Gq/nkhdOVbppTlogFkzRWsjB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk8BJM%2FbtsLmmC72Gq%2FnkhdOVbppTlogFkzRWsjB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;600&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;+) 혹시 추가되지 않았다면&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;1. UnityHub 폴더에 editors-v2.json이 있는지 확인한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;642&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GUO4d/btsLlbQbyqp/c6rraIuOCQRwFfpekD6pe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GUO4d/btsLlbQbyqp/c6rraIuOCQRwFfpekD6pe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GUO4d/btsLlbQbyqp/c6rraIuOCQRwFfpekD6pe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGUO4d%2FbtsLlbQbyqp%2Fc6rraIuOCQRwFfpekD6pe0%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;642&quot; height=&quot;460&quot; data-origin-width=&quot;642&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;2. &quot;manual&quot;:true 를 &quot;manual&quot;:false 로 바꾸고 저장한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;905&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5sP1b/btsLlr57Q4D/C2wgpvDh32jk5b4nrapWrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5sP1b/btsLlr57Q4D/C2wgpvDh32jk5b4nrapWrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5sP1b/btsLlr57Q4D/C2wgpvDh32jk5b4nrapWrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5sP1b%2FbtsLlr57Q4D%2FC2wgpvDh32jk5b4nrapWrk%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;905&quot; height=&quot;586&quot; data-origin-width=&quot;905&quot; data-origin-height=&quot;586&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;3. Unity Hub &amp;gt; 설정 버튼 &amp;gt; Add modules를 누른다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk8BJM/btsLmmC72Gq/nkhdOVbppTlogFkzRWsjB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk8BJM/btsLmmC72Gq/nkhdOVbppTlogFkzRWsjB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk8BJM/btsLmmC72Gq/nkhdOVbppTlogFkzRWsjB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk8BJM%2FbtsLmmC72Gq%2FnkhdOVbppTlogFkzRWsjB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;600&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;4. 오류 발생   : Unity 2022.3.13f1 is no longer available from the Hub&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mKU0r/btsLmswwr6j/DBDrOxu7pskkshltVwdRi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mKU0r/btsLmswwr6j/DBDrOxu7pskkshltVwdRi0/img.png&quot; data-alt=&quot;사진 출처 : https://discussions.unity.com/t/unity-2021-3-19f1-is-no-longer-available-from-the-hub-cant-add-modules-to-manual-installation/911073&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mKU0r/btsLmswwr6j/DBDrOxu7pskkshltVwdRi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmKU0r%2FbtsLmswwr6j%2FDBDrOxu7pskkshltVwdRi0%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;690&quot; height=&quot;450&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;450&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진 출처 : https://discussions.unity.com/t/unity-2021-3-19f1-is-no-longer-available-from-the-hub-cant-add-modules-to-manual-installation/911073&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/56817573/cant-add-modules-to-installed-unity-editors&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;참고 링크&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;⭕ 수동 설치 (성공)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Hub의 Installs 목록에서 Unity 기존 버전을 제거한 다음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;유니티 다운로드 아카이브에서 해당 버전의 Install 버튼을 누르면 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Download 위치(D:\dev\Unity\Download)에 툴들이 다운로드된다. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;유니티 허브 설치 창에서 Editor 설치가 무한 validating에 걸려서 못 넘어갈 때&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;안드로이드 빌드 관련 파일들을 빼내서 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;수동으로 설치를 한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;✅ 빌드 파일 설치 위치&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Edit &amp;gt; Preferences &amp;gt; External Tools &amp;gt; Android에서&amp;nbsp; ~(recommended)가 붙은 체크박스를 클릭해 확인했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;OpenJDK 설치&lt;/span&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;jdk[버전].zip을 압축해제.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;...\Unity [버전]\Editor\Data\PlaybackEngines\AndroidPlayer 위치에 &quot;OpenJDK&quot; 폴더를 만들고&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;압축 해제한 파일들을&amp;nbsp;넣었다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Edit &amp;gt; Preferences &amp;gt; External Tools &amp;gt; Android &amp;gt; JDK 의 위치가 동일하도록 연결해준다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;✅ JDK 위치가 다르게 설정되어 있을 경우&lt;/b&gt;&lt;br /&gt;- 'JDK Installed with Unity (recommended)' 를 체크하거나&lt;br /&gt;- 체크해제 후 Browse를 눌러 올바른 위치를 선택한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;build-tools에 들어가는 폴더명은 오류 내용 참고해서 32.0.0으로 고쳤음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;SDK 설치&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;...\Unity [버전]\Editor\Data\PlaybackEngines\AndroidPlayer\SDK 위치에 넣었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #333333; text-align: start;&quot;&gt; &lt;b&gt;✅ &lt;/b&gt;이 때 툴들의 위치는 Android Studio의 SDK 폴더 구조를 참고해서, 동일한 폴더이름을 생성해 넣어줬다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;216&quot; data-origin-height=&quot;421&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Sof1W/btsMhxwsrtW/B7QwK3sluYAlRJzxlarfok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Sof1W/btsMhxwsrtW/B7QwK3sluYAlRJzxlarfok/img.png&quot; data-alt=&quot;Android Studio의 SDK 폴더 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Sof1W/btsMhxwsrtW/B7QwK3sluYAlRJzxlarfok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSof1W%2FbtsMhxwsrtW%2FB7QwK3sluYAlRJzxlarfok%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;216&quot; height=&quot;421&quot; data-origin-width=&quot;216&quot; data-origin-height=&quot;421&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Android Studio의 SDK 폴더 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;423&quot; data-origin-height=&quot;233&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/emCJ3r/btsMgrcXCWX/mOARYDIptBOXnk05xqSYBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/emCJ3r/btsMgrcXCWX/mOARYDIptBOXnk05xqSYBK/img.png&quot; data-alt=&quot;Unity의 SDK 폴더 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/emCJ3r/btsMgrcXCWX/mOARYDIptBOXnk05xqSYBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FemCJ3r%2FbtsMgrcXCWX%2FmOARYDIptBOXnk05xqSYBK%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;423&quot; height=&quot;233&quot; data-origin-width=&quot;423&quot; data-origin-height=&quot;233&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Unity의 SDK 폴더 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;NDK 설치 &lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;...\Unity [버전]&lt;/span&gt; \Editor\Data\PlaybackEngines\AndroidPlayer\NDK 에 넣는다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>유니티</category>
      <category>유니티 모듈 추가</category>
      <category>유니티 모듈 추가 안 됨</category>
      <category>유니티 허브 모듈</category>
      <author>펜네임</author>
      <guid isPermaLink="true">https://pro-pennek.tistory.com/225</guid>
      <comments>https://pro-pennek.tistory.com/entry/Unity-Unity-Hub%EC%97%90%EC%84%9C-add-modules%EA%B0%80-%EB%B3%B4%EC%9D%B4%EC%A7%80-%EC%95%8A%EC%9D%84-%EB%95%8C#entry225comment</comments>
      <pubDate>Tue, 17 Dec 2024 15:41:43 +0900</pubDate>
    </item>
    <item>
      <title>[HTML / JavaScript] a태그 클릭 시 사용자에게 확인 받고(confirm) 함수 실행하기</title>
      <link>https://pro-pennek.tistory.com/entry/HTML-JavaScript-a%ED%83%9C%EA%B7%B8-%ED%81%B4%EB%A6%AD-%EC%8B%9C-%EC%82%AC%EC%9A%A9%EC%9E%90%EC%97%90%EA%B2%8C-%ED%99%95%EC%9D%B8-%EB%B0%9B%EA%B3%A0confirm-%ED%95%A8%EC%88%98-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0-a%ED%83%9C%EA%B7%B8-onclick-%ED%95%A8%EC%88%98%EC%97%90%EC%84%9C-href-%EC%86%8D%EC%84%B1-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-confirm-%EB%B0%9B%EC%9D%80-%ED%9B%84-form-%EC%A0%9C%EC%B6%9C%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;*jQuery를 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;a태그를 클릭한 사용자가 confirm 창에서 '확인'을 누른 후에 form이 전송되게 하고 싶다면 어떻게 해야 할까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;또는, &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;사용자에게 확인을 받고 난 후 a태그의 &lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;href 속성에 있는 링크로 이동시키고 싶다면?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #ffffff; background-color: #000000;&quot;&gt;&amp;nbsp;1. 사용자에게서 confirm 받고 form 제출하기&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;코드가 세련된 느낌은 아니지만, a태그의 상위 태그를 선택해서&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;form에 있는 내용들을 즉각 submit할 수 있다는 점이 장점이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1710312737367&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;a onclick=&quot;if (confirm('글을 등록하시겠습니까?')) { jQuery(this).parents(\'form\').submit() };&quot;&amp;gt;등록하기&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #000000; color: #ffffff;&quot;&gt;&amp;nbsp;2. 사용자에게서 confirm 받고 href 링크 태우기&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;간단한 코드만으로 유저가 링크 실행 여부를 선택하게 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1710311914119&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;&amp;lt;a onclick=&quot;return confirm('취소하고 목록으로 돌아가시겠습니까?');&quot; href=&quot;https://naver.com&quot;&amp;gt;취소하기&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #000000; color: #ffffff;&quot;&gt;&amp;nbsp;3. &lt;span style=&quot;text-align: start;&quot;&gt;사용자에게서 confirm 받고 ajax로 form 제출하기&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; script를 사용할 수 있는 경우,&amp;nbsp; &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000; text-align: start;&quot;&gt;a의 onclick에서 JS 함수를 호출한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;HTML&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1710313142789&quot; class=&quot;html xml&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;!-- $this는 Jquery의 선택자다. a태그 자신을 호출해 JS에 보낸다. --&amp;gt;
&amp;lt;a onclick=&quot;submitButton($this)&quot; data-message=&quot;글을 등록하시겠습니까?&quot; data-name=&quot;apply&quot;&amp;gt;등록하기&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;JS&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1710313142790&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function submitButton(bt){

	// a태그에 &quot;data-message&quot; 속성을 넣어 confirm창에서 그 속성 값을 메시지로 띄워준다.
	if(bt.attr(&quot;data-message&quot;)){
		var check = confirm(bt.attr(&quot;data-message&quot;));
		if(!check) return;
	}
    
	var form = new FormData();
    
	// a태그에 들어있는, &quot;data-&quot;로 시작하는 속성들을 가져와 form(FormData 객체) 안에 넣어준다.
	bt.each(function() {
 		jQuery.each(this.attributes, function() {
			if(this.specified &amp;amp;&amp;amp; this.name.match(&quot;data-&quot;) !== null){
				form.append(this.name.replace(&quot;data-&quot;, &quot;&quot;), this.value);
			}
		});
	});
	submitFormdata(form);
}

// ajax를 이용해 데이터를 제출한다.
function submitFormdata(formdata){
	jQuery.ajax({
		type: 'POST',
		url: jquery.ajaxurl,
		data: formdata,
		dataType: &quot;json&quot;,
		contentType: false,
		processData: false,
		success: function(res){
			afterAjax(res);
		},
		error : function(res){
			alert(jquery.msg_error);
		}
	});
}&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;참고 페이지&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1756184818473&quot; style=&quot;color: #333333; text-align: start;&quot; contenteditable=&quot;false&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bSKv1f/hyVxpp19WR/gE8IVW3P2DGIkINsLfQwu1/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot; data-og-url=&quot;https://stackoverflow.com/questions/10462839/how-to-display-a-confirmation-dialog-when-clicking-an-a-link&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/10462839/how-to-display-a-confirmation-dialog-when-clicking-an-a-link&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-description=&quot;I want this link to have a JavaScript dialog that asks the user &amp;ldquo;Are you sure? Y/N&amp;rdquo;. &amp;lt;a href=&amp;quot;delete.php?id=22&amp;quot;&amp;gt;Link&amp;lt;/a&amp;gt; If the user clicks &amp;ldquo;Yes&amp;rdquo;, the link should load, if &amp;ldquo;No&amp;rdquo; nothin...&quot; data-og-title=&quot;How to display a confirmation dialog when clicking an &amp;lt;a&amp;gt; link?&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://stackoverflow.com/questions/10462839/how-to-display-a-confirmation-dialog-when-clicking-an-a-link&quot; data-source-url=&quot;https://stackoverflow.com/questions/10462839/how-to-display-a-confirmation-dialog-when-clicking-an-a-link&quot;&gt;
&lt;div style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bSKv1f/hyVxpp19WR/gE8IVW3P2DGIkINsLfQwu1/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;How to display a confirmation dialog when clicking an &amp;lt;a&amp;gt; link?&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;I want this link to have a JavaScript dialog that asks the user &amp;ldquo;Are you sure? Y/N&amp;rdquo;. &amp;lt;a href=&quot;delete.php?id=22&quot;&amp;gt;Link&amp;lt;/a&amp;gt; If the user clicks &amp;ldquo;Yes&amp;rdquo;, the link should load, if &amp;ldquo;No&amp;rdquo; nothin...&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&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>HTML &amp;amp; CSS</category>
      <category>a태그 confirm</category>
      <category>a태그 confirm href</category>
      <category>a태그 onclick</category>
      <category>a태그 onclick href</category>
      <category>a태그 submit</category>
      <category>html a태그</category>
      <category>html button link</category>
      <category>html 버튼 링크</category>
      <author>펜네임</author>
      <guid isPermaLink="true">https://pro-pennek.tistory.com/224</guid>
      <comments>https://pro-pennek.tistory.com/entry/HTML-JavaScript-a%ED%83%9C%EA%B7%B8-%ED%81%B4%EB%A6%AD-%EC%8B%9C-%EC%82%AC%EC%9A%A9%EC%9E%90%EC%97%90%EA%B2%8C-%ED%99%95%EC%9D%B8-%EB%B0%9B%EA%B3%A0confirm-%ED%95%A8%EC%88%98-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0-a%ED%83%9C%EA%B7%B8-onclick-%ED%95%A8%EC%88%98%EC%97%90%EC%84%9C-href-%EC%86%8D%EC%84%B1-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-confirm-%EB%B0%9B%EC%9D%80-%ED%9B%84-form-%EC%A0%9C%EC%B6%9C%ED%95%98%EA%B8%B0#entry224comment</comments>
      <pubDate>Wed, 13 Mar 2024 16:11:46 +0900</pubDate>
    </item>
  </channel>
</rss>