<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>WHITEPAEK Tech Docs</title>
    <link>https://whitepaek.tistory.com/</link>
    <description>WHITEPAEK Tech Docs - 하루 하루, 설레는 기분으로 #</description>
    <language>ko</language>
    <pubDate>Tue, 14 Apr 2026 16:50:20 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>WHITEPAEK</managingEditor>
    <image>
      <title>WHITEPAEK Tech Docs</title>
      <url>https://tistory1.daumcdn.net/tistory/2953014/attach/73998a57de9c41e0b85fcfc232b41c38</url>
      <link>https://whitepaek.tistory.com</link>
    </image>
    <item>
      <title>스프링 프로젝트에 애플 인 앱 결제(IAP, In-App Purchase) 서버 개발</title>
      <link>https://whitepaek.tistory.com/62</link>
      <description>&lt;p&gt;애플(Apple)의 &lt;b&gt;&lt;a href=&quot;https://developer.apple.com/documentation/storekit/in-app_purchase&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;인 앱 결제(In-App Purchase)&lt;/a&gt;&lt;/b&gt;를 통해 구입한 상품 데이터를&lt;br /&gt;스프링(Spring) 프로젝트로 구현한 서버(Server)에서 검증을 하고&amp;nbsp;데이터베이스에 저장하여 구입이 완료된 상품을 관리할 수 있도록 프로세스를 확인해보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;상품 구매에 대한 인 앱 결제 프로세스를 확인해보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IAP_FLOW.png&quot; data-origin-width=&quot;1577&quot; data-origin-height=&quot;870&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/txrVs/btqO71whMxm/XJV9KEYElGVgcNcbNFgxtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/txrVs/btqO71whMxm/XJV9KEYElGVgcNcbNFgxtK/img.png&quot; data-alt=&quot;[그림 1] 인 앱 결제 프로세스(In-App Purchase Process)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/txrVs/btqO71whMxm/XJV9KEYElGVgcNcbNFgxtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtxrVs%2FbtqO71whMxm%2FXJV9KEYElGVgcNcbNFgxtK%2Fimg.png&quot; data-filename=&quot;IAP_FLOW.png&quot; data-origin-width=&quot;1577&quot; data-origin-height=&quot;870&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;figcaption&gt;[그림 1] 인 앱 결제 프로세스(In-App Purchase Process)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;1. App은 Server에서 상품 목록 API를 호출합니다.&lt;br /&gt;&amp;nbsp; &amp;nbsp;- Server는 관리자가 실제로 App Store Connect에서 등록한 상품을 DB에서 관리하며, 목록을 App에게 제공합니다.&lt;br /&gt;2. App은 선택한 상품의 구매 가능 여부를 Server에 요청합니다.&lt;br /&gt;&amp;nbsp; &amp;nbsp;- Server는 유저가 선택한 상품이 구매한 적이 있는 상품인지 확인하여 App에게 제공합니다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(상품 구매가 가능한 경우, Server에서 고유한 ID를 생성해서 [3 ~ 5-2] 과정을 Server 입장에서 하나의 트랜잭션으로 관리하여 데이터 안정성을 관리할 수 있지 않을까..? 고유한 ID가 생성되면 DB에 저장 - 서버 입장에서의 구매 트랜잭션 시작)&lt;/span&gt;&lt;br /&gt;3. App은 구매 가능한 상품인 경우에 App Store에 결제를 진행합니다.&lt;br /&gt;&amp;nbsp; &amp;nbsp;- 결제가 완료되면 App은 receipt-data를 생성합니다. (트랜잭션 시작)&lt;br /&gt;&lt;b&gt;4. App은 생성한 receipt-data로 Server에 상품 결제 검증 요청 API를 호출합니다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;4-1. Server는 App에서 전달받은 receipt-data로 App Store에게 영수증 검증(/&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;verifyReceipt) API를 호출합니다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;4-2. Server는 App Store에게 JSON 형태의 영수증 데이터를 응답받습니다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;4-3. Server는 응답받은 영수증 데이터에서 필요한 값을 파싱 하여 DB에 저장하도록 합니다. (유저가 구입한 상품을 DB에 저장)&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;4-4. 유저가 구입한 상품을 DB에 저장 완료했다면 Server는 성공 응답 값을 App에게 전달합니다.&lt;/b&gt;&lt;br /&gt;5. App은 Server에게 성공 응답 값을 받으면 트랜잭션을 종료시키고 Server에게 구매 완료 API를 호출합니다.&lt;br /&gt;&amp;nbsp; &amp;nbsp;5-1. Server는 App에게 구매 완료 요청을 받으면 [4-3]과정에서 DB에 저장한 영수증 데이터에 완료에 대한 업데이트를 합니다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;([2-2] 과정에서 Server가 생성한 고유한 ID로 구매 완료된 상품에 대한 데이터를 찾아서 업데이트 - 서버 입장에서의 구매 트랜잭션 종료)&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;5-2. App은 인 앱 결제에 대한 프로세스가 최종적으로 종료됩니다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;서버(Server)는 인 앱 결제 프로세스에서 &quot;상품 목록, 상품 구매 가능 여부, 상품 결제 검증, 상품 구매 완료&quot; 4개의 API를 App에게 제공해주면 됩니다. &quot;상품 목록, 상품 구매 가능 여부, 상품 구매 완료&quot; API는 해당 서비스 정책에 따라서 다르기 때문에 플로우(Flow)에서만 설명하도록 하고, &lt;b&gt;해당 글에서는 [Step 03 ~ Step 04] 과정에 대한 코드를 확인하고 발생할 수 있는 이슈 사항에 대해 체크해보도록 하겠습니다.&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;인 앱 결제에 대한 서버 코드에 대해 확인하기 전, 애플에서 제공하는 상품 종류에 따른 몇 가지 특징에 대해서는 확인해보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;애플에서 제공하는 인 앱 결제에 대한 상품 종류는 총 4가지입니다.&lt;br /&gt;&lt;b&gt;Apple Document ‣ &lt;a href=&quot;https://help.apple.com/app-store-connect/#/dev3cd978dbd&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;help.apple.com/app-store-connect/#/dev3cd978dbd&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 167px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 33px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center; height: 33px;&quot;&gt;&lt;b&gt;상품명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center; height: 33px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center; height: 33px;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;소모품(&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Consumable)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 20px;&quot;&gt;앱 내에서 사용하면 소모되는 일회성 상품입니다.&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 20px;&quot;&gt;정상적으로 구매가 완료(App에서 트랜잭션을 종료) 되었다면 &quot;/verifyReceipt&quot;를 호출하였을 때 소모품에 대한 응답 값은 확인할 수 없습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px; text-align: center;&quot;&gt;&lt;b&gt;비소모품(Non-&lt;span style=&quot;color: #333333;&quot;&gt;Consumable)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;한 번 구매하면 기간 제한없이 계속 사용할 수 있는 상품입니다.&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;- &quot;/verifyReceipt&quot;를 호출하면 비소모품에 대한 데이터를 포함한 응답 값을 반환합니다.&lt;br /&gt;- 복원(Restore)되면 transaction_id는 변경됩니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px; text-align: center;&quot;&gt;&lt;b&gt;자동 갱신 구독(&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Auto-Renewable Subscription&lt;/span&gt;)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;구매 후 고객이 취소하기 전까지 자동으로 결제가 이루어지는 상품입니다.&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- &lt;span style=&quot;color: #333333;&quot;&gt;&quot;/verifyReceipt&quot;를 호출할 때 &quot;receipt-data, password&quot; 2개의 값이 필요합니다.&lt;/span&gt;&lt;br /&gt;- &quot;/verifyReceipt&quot;를 호출하면 자동 갱신 구독에 대한 데이터를 포함한 응답 값을 반환합니다.&lt;br /&gt;- 갱신되면 transaction_id는 변경되며 상품에 대한 receipt 데이터는 응답 값에 추가됩니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 76px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 76px; text-align: center;&quot;&gt;&lt;b&gt;비자동 갱신 구독(&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Non-Renewable Subscription&lt;/span&gt;)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 76px;&quot;&gt;구매 후 특정 기간동안 사용할 수 있으며, 자동으로 결제가 이루어지지 않습니다. 고객이 재구매를 통해 기간을 연장할 수 있는 상품입니다.&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 76px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- &quot;/verifyReceipt&quot;를 호출하면 비자동 갱신 구독에 대한 데이터를 포함한 응답 값을 반환합니다.&lt;br /&gt;- 갱신되면 transaction_id는 변경되며 상품에 대한 receipt 데이터는 응답 값에 추가됩니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;각 상품 특징에 대해 확인했습니다. 그렇다면 상품에 대한 receipt-data는 어떻게 얻을까요?&lt;br /&gt;App 개발자와 협업을 통해 테스트 앱 혹은 데이터를 얻을 수 있다면 큰 문제는 되지 않습니다.&lt;br /&gt;하지만 상황이 여의치 않다면 직접 테스트 앱을 만들어서 필요한 데이터를 얻는 수밖에..&lt;br /&gt;저는 여의치 않은 상황이었고, 앱 쪽에서 상품 구매와 완료 처리되는 게 궁금했기 때문에 다른 분의 작성한 글을 참고하여 테스트 앱을 실행 후 데이터를 얻었습니다.&lt;br /&gt;( 참고 ‣ &lt;a href=&quot;https://www.raywenderlich.com/5456-in-app-purchase-tutorial-getting-started&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.raywenderlich.com/5456-in-app-purchase-tutorial-getting-started&lt;/a&gt; )&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.apple.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Developer&lt;/a&gt;와 &lt;a href=&quot;https://appstoreconnect.apple.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;App Store Connect&lt;/a&gt; 설정과 테스트 앱 실행까지 설명하면 좋겠지만, 인 앱 결제 처리에 대한 서버 프로세스에 집중하도록 하겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;테스트 앱에서 제가 얻은 각 상품에 대한 &lt;b&gt;receipt-data&lt;/b&gt;는 아래와 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;◼︎&amp;nbsp;소모품(Consumable)의 receipt-data&lt;/b&gt;&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&gt;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&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;◼︎&amp;nbsp;&lt;/b&gt;비소모품(Non-&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Consumable)&lt;/span&gt;의 receipt-data&lt;/span&gt;&lt;/b&gt;&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&gt;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&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;◼︎&amp;nbsp;&lt;/b&gt;자동 갱신 구독(&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Auto-Renewable Subscription&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;의 receipt-data&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&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&gt;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&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;◼︎&amp;nbsp;&lt;/b&gt;비자동 갱신 구독(&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Non-Renewable Subscription&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;의 receipt-data&lt;/span&gt;&lt;/b&gt;&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&gt;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&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;서버 프로세스를 간략하게 이해하고, 애플에서 제공하는 상품 4가지에 대해서 알아봤습니다.&lt;br /&gt;receipt-data까지 준비가 완료되었다면 스프링 프로젝트의 로직을 확인하도록 하겠습니다.&lt;br /&gt;(receipt-data 준비가 어렵다면 위에 제가 제공해드린 receipt-data를 사용해도 상관없습니다.)&lt;/p&gt;
&lt;p&gt;글에서 설명드리는 코드가 필요하신 분은 아래 GitHub URL을 통해서 다운로드하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;GitHub URL ‣ &lt;a href=&quot;https://github.com/WHITEPAEK/demo-in-app-purchase&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;github.com/WHITEPAEK/demo-in-app-purchase&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-11-30 15.42.44.png&quot; data-origin-width=&quot;1576&quot; data-origin-height=&quot;1012&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buEq4B/btqOKYF2bL5/J64Uh8bha9UeXA3c10UDfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buEq4B/btqOKYF2bL5/J64Uh8bha9UeXA3c10UDfk/img.png&quot; data-alt=&quot;[그림 2] application.properties 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buEq4B/btqOKYF2bL5/J64Uh8bha9UeXA3c10UDfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuEq4B%2FbtqOKYF2bL5%2FJ64Uh8bha9UeXA3c10UDfk%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-11-30 15.42.44.png&quot; data-origin-width=&quot;1576&quot; data-origin-height=&quot;1012&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;figcaption&gt;[그림 2] application.properties 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;application.properties&lt;/b&gt;는 따로 설정할 필요가 없을 거 같습니다.&lt;br /&gt;&quot;APPLE.PASSWORD&quot;는 자동 갱신 구독 상품에 대한 서비스를 제공하고 있다면&lt;br /&gt;App Store Connect에서 생성한 &lt;b&gt;공유 암호&lt;/b&gt;를 넣어주시면 됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;하지만 이 글에서는 소모품 상품에 대해서만 테스트해보도록 하겠습니다.&lt;br /&gt;(소모품 상품에 대해서만 테스트를 진행한 이유는 아래에서 설명드리도록 하겠습니다.)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;소모품 외에도 &quot;비소모품, 비자동 갱신 구독&quot; 상품은 따로 password가 필요하지 않기 때문에 문제없이 진행할 수 있습니다.&lt;br /&gt;(자동 갱신 구독 상품에 대한 구매 이력이 포함되어 있는 receipt-data는 password가 필요합니다.)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;[Process. 4] 상품 결제 검증 요청 ‣ App에서 &quot;receipt-data&quot; 요청받기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1606719233660&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@RestController
public class AppleController {

    private final AppleService appleService;

    public AppleController(AppleService appleService) {
        this.appleService = appleService;
    }

    @PostMapping(&quot;/purchase&quot;)
    public ResponseEntity purchase(@RequestBody UserReceipt userReceipt) {

        String code = appleService.updatePurchaseHistory(userReceipt);

        return ResponseEntity.ok(code);
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;receipt-data는 문자열이 상당히 길기 때문에 RequestBody로 받아야 합니다. - @RequestBody UserReceipt userReceipt&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;pre id=&quot;code_1606719356749&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class UserReceipt {

    // TODO - User(구매자) 정보에 대한 Fields 필요.

    @JsonAlias(&quot;receipt-data&quot;)
    private String receiptData;

    public String getReceiptData() {
        return receiptData;
    }

    public void setReceiptData(String receiptData) {
        this.receiptData = receiptData;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;유저가 구매한 상품을 서버에서 관리하기 위해서는 App에게 receipt-data 외에도 유저(구매자)에 대한 데이터도 받아야 합니다.&lt;br /&gt;실제 서비스를 구현할 때는 UserReceipt.java 파일에서 유저 관리에 필요한 Fields를 적절하게 정의해주도록 하세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;테스트에서는 receipt-data만 받아서 진행하도록 하겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;[Process. 4-1] 영수증 검증 요청 ‣ App Store에게 receipt-data 검증 요청 (&lt;b&gt;/verfityReceipt&lt;/b&gt;)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1606720072803&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// AppleUtils.java - 43 라인

public AppStoreResponse verifyReceipt(UserReceipt userReceipt) throws JsonProcessingException, IllegalStateException {

        Map&amp;lt;String, String&amp;gt; appStoreRequest = new HashMap&amp;lt;&amp;gt;();
        appStoreRequest.put(&quot;receipt-data&quot;, userReceipt.getReceiptData());
//        appStoreRequest.put(&quot;password&quot;, PASSWORD);

        String response = HttpClientUtils.doPost(APPLE_PRODUCTION_URL, appStoreRequest);
        AppStoreResponse appStoreResponse = objectMapper.readValue(response, AppStoreResponse.class);

        int statusCode = appStoreResponse.getStatus();
        if (statusCode == 21007) {
            response = HttpClientUtils.doPost(APPLE_SANDBOX_URL, appStoreRequest);
            appStoreResponse = objectMapper.readValue(response, AppStoreResponse.class);
        } else if (statusCode != 0) {
            verifyStatusCode(statusCode);
        }

        return appStoreResponse;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;receipt-data 데이터와 함께 &quot;[POST]&amp;nbsp;&lt;span&gt;https://buy.itunes.apple.com/verifyReceipt&lt;/span&gt;&quot;를 호출합니다.&lt;br /&gt;호출 후 전달받은 JSON 응답 값에서 status 코드 값이 &lt;b&gt;21007&lt;/b&gt;인 경우에는&lt;br /&gt;&quot;[POST] &lt;span&gt;https://sandbox.itunes.apple.com/verifyReceipt&lt;/span&gt;&quot;를 다시 호출하도록 합니다.&lt;br /&gt;(password는 자동 구독 갱신 상품에 대한 receipt-data 혹은 이력이 포함된 receipt-data를 검증하는 경우에 필요합니다.)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;인 앱 결제 테스트를 진행하는 경우에는 Sandbox Test URL을 호출하여야 합니다.&lt;br /&gt;애플 공식 문서에 따르면 Production URL을 먼저 호출하고 21007 코드를 받으면&lt;br /&gt;Sandbox URL을 호출하여 계속 진행하라고 합니다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Apple Document ‣ &lt;a href=&quot;https://developer.apple.com/documentation/appstorereceipts/verifyreceipt&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;developer.apple.com/documentation/appstorereceipts/verifyreceipt&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;[Process. 4-2 ~ 4-3] 영수증 검증 후 응답받은 데이터를 DB에 저장&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1606720903483&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// AppleServiceImpl.java - 24 라인

public String updatePurchaseHistory(UserReceipt userReceipt) {

        AppStoreResponse appStoreResponse;
        try {
            appStoreResponse = appleUtils.verifyReceipt(userReceipt);
        } catch (Exception e) {
            logger.error(&quot;Verify receipt fail..&quot;);
            e.printStackTrace();
            return &quot;Fail&quot;;
        }

        UserReceiptInfo userReceiptInfo = null;
        if (appStoreResponse.getReceipt().getInApp().size() == 1) { // 소모품 (Consumable)
            userReceiptInfo = getUserReceiptInfo(appStoreResponse.getReceipt().getInApp().get(0));
        } else {
            // TODO - 비소모품(Non-Consumable), 자동 갱신 구독(Auto-Renewable Subscription), 비자동 갱신 구독(Non-Renewable Subscription)에 대한 로직 필요.
        }

        logger.info(&quot;===== DATABASE INSERT IGNORE =====&quot;);
        logger.info(&quot;product_id ‣ &quot; + userReceiptInfo.getProductId());
        logger.info(&quot;transaction_id ‣ &quot; + userReceiptInfo.getTransactionId());
        logger.info(&quot;original_transaction_id ‣ &quot; + userReceiptInfo.getOriginalTransactionId());
        logger.info(&quot;purchase_data_ms ‣ &quot; + userReceiptInfo.getPurchaseDateMs());
        logger.info(&quot;expiration_date ‣ &quot; + userReceiptInfo.getExpirationDate());
        logger.info(&quot;====================================&quot;);

        return &quot;Success&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&quot;/verifyReceipt&quot;을 호출 후 응답받은 JSON 형태의 영수증(receipt) 데이터에서 필요한 값을 파싱 하고&lt;br /&gt;데이터베이스에 저장하여 유저가 구매한 상품 이력을 관리해주어야 합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;저는 &lt;b&gt;소모품&lt;/b&gt;&amp;nbsp;상품에 대한 영수증 데이터를 파싱 하여 데이터베이스에 저장하는 대신 &lt;b&gt;logger&lt;/b&gt;로 찍었습니다.&lt;br /&gt;실제 서비스에서 상품에 대한 정책과 DB에서 관리할 영수증 데이터가 정해지지 않았기 때문에&lt;br /&gt;각 상품에 대한 상황을 체크하여 프로세스를 확인하는 게 목적이기 때문에 소모품 상품에 대한 영수증을 기반으로 로직을 작성하였습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;응답받은 영수증 데이터에서 소모품의 경우에는 in_app에 1건의 데이터만 존재합니다.&lt;br /&gt;(&quot;비소모품, 자동 갱신 구독, 비자동 갱신 구독&quot; 상품의 결제를 진행했다면 소모품 상품 외 이력이 in_app에 존재합니다.&lt;br /&gt;또한 트랜잭션이 종료되지 않은 상품의 경우에도 이력이 존재합니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Apple에게 &quot;/verifyReceipt&quot; API 요청 후 응답받은 상품 별 영수증 데이터(JSON)는 아래와 같습니다.&lt;br /&gt;JSON의 Properties 설명은 공식 문서를 참고해주세요.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Apple Document ‣ &lt;a href=&quot;https://developer.apple.com/documentation/appstorereceipts/responsebody&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;developer.apple.com/documentation/appstorereceipts/responsebody&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;◼︎ 소모품(Consumable) 영수증 데이터 (JSON)&lt;/span&gt;&lt;/b&gt;&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&gt;{&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;receipt&quot;:{&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;receipt_type&quot;:&quot;ProductionSandbox&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;adam_id&quot;:0,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;app_item_id&quot;:0,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;bundle_id&quot;:&quot;com.whitepaek.apps&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;application_version&quot;:&quot;1&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;download_id&quot;:0,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;version_external_identifier&quot;:0,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;receipt_creation_date&quot;:&quot;2020-11-30 04:02:18 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;receipt_creation_date_ms&quot;:&quot;1606708938000&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;receipt_creation_date_pst&quot;:&quot;2020-11-29 20:02:18 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;request_date&quot;:&quot;2020-11-30 04:03:44 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;request_date_ms&quot;:&quot;1606709024832&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;request_date_pst&quot;:&quot;2020-11-29 20:03:44 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date&quot;:&quot;2013-08-01 07:00:00 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date_ms&quot;:&quot;1375340400000&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date_pst&quot;:&quot;2013-08-01 00:00:00 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_application_version&quot;:&quot;1.0&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;in_app&quot;:[&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;quantity&quot;:&quot;1&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;product_id&quot;:&quot;products.consumable&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;transaction_id&quot;:&quot;1000000747843075&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_transaction_id&quot;:&quot;1000000747843075&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;purchase_date&quot;:&quot;2020-11-30 04:02:18 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;purchase_date_ms&quot;:&quot;1606708938000&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;purchase_date_pst&quot;:&quot;2020-11-29 20:02:18 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date&quot;:&quot;2020-11-30 04:02:18 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date_ms&quot;:&quot;1606708938000&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date_pst&quot;:&quot;2020-11-29 20:02:18 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;is_trial_period&quot;:&quot;false&quot;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;}&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;]&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;},&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;environment&quot;:&quot;Sandbox&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;status&quot;:0}&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;◼︎ 비소모품(Non-Consumable) 영수증 데이터 (JSON)&lt;/span&gt;&lt;/b&gt;&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&gt;{&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;receipt&quot;:{&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;receipt_type&quot;:&quot;ProductionSandbox&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;adam_id&quot;:0,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;app_item_id&quot;:0,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;bundle_id&quot;:&quot;com.whitepaek.apps&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;application_version&quot;:&quot;1&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;download_id&quot;:0,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;version_external_identifier&quot;:0,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;receipt_creation_date&quot;:&quot;2020-11-30 04:18:33 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;receipt_creation_date_ms&quot;:&quot;1606709913000&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;receipt_creation_date_pst&quot;:&quot;2020-11-29 20:18:33 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;request_date&quot;:&quot;2020-11-30 04:19:15 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;request_date_ms&quot;:&quot;1606709955191&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;request_date_pst&quot;:&quot;2020-11-29 20:19:15 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date&quot;:&quot;2013-08-01 07:00:00 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date_ms&quot;:&quot;1375340400000&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date_pst&quot;:&quot;2013-08-01 00:00:00 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_application_version&quot;:&quot;1.0&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;in_app&quot;:[&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;quantity&quot;:&quot;1&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;product_id&quot;:&quot;products.nonConsumable&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;transaction_id&quot;:&quot;1000000747845239&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_transaction_id&quot;:&quot;1000000747845239&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;purchase_date&quot;:&quot;2020-11-30 04:18:33 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;purchase_date_ms&quot;:&quot;1606709913000&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;purchase_date_pst&quot;:&quot;2020-11-29 20:18:33 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date&quot;:&quot;2020-11-30 04:18:33 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date_ms&quot;:&quot;1606709913000&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date_pst&quot;:&quot;2020-11-29 20:18:33 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;is_trial_period&quot;:&quot;false&quot;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;]&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;},&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;environment&quot;:&quot;Sandbox&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;status&quot;:0&lt;br /&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;◼︎ &lt;span style=&quot;color: #333333;&quot;&gt;자동 갱신 구독(&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Auto-Renewable Subscription&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;&amp;nbsp;영수증 데이터 (JSON)&lt;/span&gt;&lt;/b&gt;&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&gt;{&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;environment&quot;:&quot;Sandbox&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;receipt&quot;:{&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;receipt_type&quot;:&quot;ProductionSandbox&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;adam_id&quot;:0,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;app_item_id&quot;:0,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;bundle_id&quot;:&quot;com.whitepaek.apps&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;application_version&quot;:&quot;1&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;download_id&quot;:0,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;version_external_identifier&quot;:0,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;receipt_creation_date&quot;:&quot;2020-11-30 04:22:32 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;receipt_creation_date_ms&quot;:&quot;1606710152000&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;receipt_creation_date_pst&quot;:&quot;2020-11-29 20:22:32 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;request_date&quot;:&quot;2020-11-30 04:23:30 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;request_date_ms&quot;:&quot;1606710210501&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;request_date_pst&quot;:&quot;2020-11-29 20:23:30 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date&quot;:&quot;2013-08-01 07:00:00 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date_ms&quot;:&quot;1375340400000&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date_pst&quot;:&quot;2013-08-01 00:00:00 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_application_version&quot;:&quot;1.0&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;in_app&quot;:[&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;quantity&quot;:&quot;1&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;product_id&quot;:&quot;products.autoRenewableSubscription&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;transaction_id&quot;:&quot;1000000747846047&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_transaction_id&quot;:&quot;1000000747846047&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;purchase_date&quot;:&quot;2020-11-30 04:22:31 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;purchase_date_ms&quot;:&quot;1606710151000&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;purchase_date_pst&quot;:&quot;2020-11-29 20:22:31 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date&quot;:&quot;2020-11-30 04:22:32 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date_ms&quot;:&quot;1606710152000&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date_pst&quot;:&quot;2020-11-29 20:22:32 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;expires_date&quot;:&quot;2020-11-30 04:25:31 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;expires_date_ms&quot;:&quot;1606710331000&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;expires_date_pst&quot;:&quot;2020-11-29 20:25:31 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;web_order_line_item_id&quot;:&quot;1000000057838979&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;is_trial_period&quot;:&quot;false&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;is_in_intro_offer_period&quot;:&quot;false&quot;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;]&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;},&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;latest_receipt_info&quot;:[&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;quantity&quot;:&quot;1&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;product_id&quot;:&quot;products.autoRenewableSubscription&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;transaction_id&quot;:&quot;1000000747846047&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_transaction_id&quot;:&quot;1000000747846047&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;purchase_date&quot;:&quot;2020-11-30 04:22:31 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;purchase_date_ms&quot;:&quot;1606710151000&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;purchase_date_pst&quot;:&quot;2020-11-29 20:22:31 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date&quot;:&quot;2020-11-30 04:22:32 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date_ms&quot;:&quot;1606710152000&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date_pst&quot;:&quot;2020-11-29 20:22:32 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;expires_date&quot;:&quot;2020-11-30 04:25:31 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;expires_date_ms&quot;:&quot;1606710331000&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;expires_date_pst&quot;:&quot;2020-11-29 20:25:31 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;web_order_line_item_id&quot;:&quot;1000000057838979&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;is_trial_period&quot;:&quot;false&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;is_in_intro_offer_period&quot;:&quot;false&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;subscription_group_identifier&quot;:&quot;20704611&quot;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;],&lt;br /&gt;&amp;nbsp; &quot;latest_receipt&quot;:&quot;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\/Qrk8H9Pm\/KwfU8qY9SGsAlCnYO3v6Z\/v\/Ca\/VbXqxzUUkIVonMQ5DMjoEC0KCXtlyxoWlph5AQaCYmObgdEHOwCl3Fc9DfdjvYLdmIHuPsB8\/ijtDT+iZVge\/iA0kjAgMBAAGjggHXMIIB0zA\/BggrBgEFBQcBAQQzMDEwLwYIKwYBBQUHMAGGI2h0dHA6Ly9vY3NwLmFwcGxlLmNvbS9vY3NwMDMtd3dkcjA0MB0GA1UdDgQWBBSRpJz8xHa3n6CK9E31jzZd7SsEhTAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFIgnFwmpthhgi+zruvZHWcVSVKO3MIIBHgYDVR0gBIIBFTCCAREwggENBgoqhkiG92NkBQYBMIH+MIHDBggrBgEFBQcCAjCBtgyBs1JlbGlhbmNlIG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3VtZXMgYWNjZXB0YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJkIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwgY2VydGlmaWNhdGUgcG9saWN5IGFuZCBjZXJ0aWZpY2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudHMuMDYGCCsGAQUFBwIBFipodHRwOi8vd3d3LmFwcGxlLmNvbS9jZXJ0aWZpY2F0ZWF1dGhvcml0eS8wDgYDVR0PAQH\/BAQDAgeAMBAGCiqGSIb3Y2QGCwEEAgUAMA0GCSqGSIb3DQEBBQUAA4IBAQANphvTLj3jWysHbkKWbNPojEMwgl\/gXNGNvr0PvRr8JZLbjIXDgFnf4+LXLgUUrA3btrj+\/DUufMutF2uOfx\/kd7mxZ5W0E16mGYZ2+FogledjjA9z\/Ojtxh+umfhlSFyg4Cg6wBA3LbmgBDkfc7nIBf3y3n8aKipuKwH8oCBc2et9J6Yz+PWY4L5E27FMZ\/xuCk\/J4gao0pfzp45rUaJahHVl0RYEYuPBX\/UIqc9o2ZIAycGMs\/iNAGS6WGDAfK+PdcppuVsq1h1obphC9UynNxmbzDscehlD86Ntv0hgBgw2kivs3hi1EdotI9CO\/KBpnBcbnoB7OUdFMGEvxxOoMIIEIjCCAwqgAwIBAgIIAd68xDltoBAwDQYJKoZIhvcNAQEFBQAwYjELMAkGA1UEBhMCVVMxEzARBgNVBAoTCkFwcGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRYwFAYDVQQDEw1BcHBsZSBSb290IENBMB4XDTEzMDIwNzIxNDg0N1oXDTIzMDIwNzIxNDg0N1owgZYxCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKOFSmy1aqyCQ5SOmM7uxfuH8mkbw0U3rOfGOAYXdkXqUHI7Y5\/lAtFVZYcC1+xG7BSoU+L\/DehBqhV8mvexj\/avoVEkkVCBmsqtsqMu2WY2hSFT2Miuy\/axiV4AOsAX2XBWfODoWVN2rtCbauZ81RZJ\/GXNG8V25nNYB2NqSHgW44j9grFU57Jdhav06DwY3Sk9UacbVgnJ0zTlX5ElgMhrgWDcHld0WNUEi6Ky3klIXh6MSdxmilsKP8Z35wugJZS3dCkTm59c3hTO\/AO0iMpuUhXf1qarunFjVg0uat80YpyejDi+l5wGphZxWy8P3laLxiX27Pmd3vG2P+kmWrAgMBAAGjgaYwgaMwHQYDVR0OBBYEFIgnFwmpthhgi+zruvZHWcVSVKO3MA8GA1UdEwEB\/wQFMAMBAf8wHwYDVR0jBBgwFoAUK9BpR5R2Cf70a40uQKb3R01\/CF4wLgYDVR0fBCcwJTAjoCGgH4YdaHR0cDovL2NybC5hcHBsZS5jb20vcm9vdC5jcmwwDgYDVR0PAQH\/BAQDAgGGMBAGCiqGSIb3Y2QGAgEEAgUAMA0GCSqGSIb3DQEBBQUAA4IBAQBPz+9Zviz1smwvj+4ThzLoBTWobot9yWkMudkXvHcs1Gfi\/ZptOllc34MBvbKuKmFysa\/Nw0Uwj6ODDc4dR7Txk4qjdJukw5hyhzs+r0ULklS5MruQGFNrCk4QttkdUGwhgAqJTleMa1s8Pab93vcNIx0LSiaHP7qRkkykGRIZbVf1eliHe2iK5IaMSuviSRSqpd1VAKmuu0swruGgsbwpgOYJd+W+NKIByn\/c4grmO7i77LpilfMFY0GCzQ87HUyVpNur+cmV6U\/kTecmmYHpvPm0KdIBembhLoz2IYrF+Hjhga6\/05Cdqa3zr\/04GpZnMBxRpVzscYqCtGwPDBUfMIIEuzCCA6OgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQGEwJVUzETMBEGA1UEChMKQXBwbGUgSW5jLjEmMCQGA1UECxMdQXBwbGUgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxFjAUBgNVBAMTDUFwcGxlIFJvb3QgQ0EwHhcNMDYwNDI1MjE0MDM2WhcNMzUwMjA5MjE0MDM2WjBiMQswCQYDVQQGEwJVUzETMBEGA1UEChMKQXBwbGUgSW5jLjEmMCQGA1UECxMdQXBwbGUgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxFjAUBgNVBAMTDUFwcGxlIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkkakJH5HbHkdQ6wXtXnmELes2oldMVeyLGYne+Uts9QerIjAC6Bg++FAJ039BqJj50cpmnCRrEdCju+QbKsMflZ56DKRHi1vUFjczy8QPTc4UadHJGXL1XQ7Vf1+b8iUDulWPTV0N8WQ1IxVLFVkds5T39pyez1C6wVhQZ48ItCD3y6wsIG9wtj8BMIy3Q88PnT3zK0koGsj+zrW5DtleHNbLPbU6rfQPDgCSC7EhFi501TwN22IWq6NxkkdTVcGvL0Gz+PvjcM3mo0xFfh9Ma1CWQYnEdGILEINBhzOKgbEwWOxaBDKMaLOPHd5lc\/9nXmW8Sdh2nzMUZaF3lMktAgMBAAGjggF6MIIBdjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH\/BAUwAwEB\/zAdBgNVHQ4EFgQUK9BpR5R2Cf70a40uQKb3R01\/CF4wHwYDVR0jBBgwFoAUK9BpR5R2Cf70a40uQKb3R01\/CF4wggERBgNVHSAEggEIMIIBBDCCAQAGCSqGSIb3Y2QFATCB8jAqBggrBgEFBQcCARYeaHR0cHM6Ly93d3cuYXBwbGUuY29tL2FwcGxlY2EvMIHDBggrBgEFBQcCAjCBthqBs1JlbGlhbmNlIG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3VtZXMgYWNjZXB0YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJkIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwgY2VydGlmaWNhdGUgcG9saWN5IGFuZCBjZXJ0aWZpY2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudHMuMA0GCSqGSIb3DQEBBQUAA4IBAQBcNplMLXi37Yyb3PN3m\/J20ncwT8EfhYOFG5k9RzfyqZtAjizUsZAS2L70c5vu0mQPy3lPNNiiPvl4\/2vIB+x9OYOLUyDTOMSxv5pPCmv\/K\/xZpwUJfBdAVhEedNO3iyM7R6PVbyTi69G3cN8PReEnyvFteO3ntRcXqNx+IjXKJdXZD9Zr1KIkIxH3oayPc4FgxhtbCS+SsvhESPBgOJ4V9T0mZyCKM2r3DYLP3uujL\/lTaltkwGMzd\/c6ByxW69oPIQ7aunMZT7XZNn\/Bh1XZp5m5MkL72NVxnn6hUrcbvZNCJBIqxw8dtk2cXmPIS4AXUKqK1drk\/NAJBzewdXUhMYIByzCCAccCAQEwgaMwgZYxCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkCCA7rV4fnngmNMAkGBSsOAwIaBQAwDQYJKoZIhvcNAQEBBQAEggEAKW5ec5xp9kgM8xy++jeQ5SNJaNR5PDPEbxLPvpC6tVRKJokBNePdhxdZ1fNP3ghxU2sY6BsjTw3ir4Hxe2YC0lCsap32lncG0sCPnifMKaAN7IlyFTF27Ubl0d8ete7THiSzqz5ZOiVG2sBoYNDe0v107HS7w929twp7uLyDwim3GqMFdpv+IdNUJ6g2e94r\/Zo3nVwzRNge\/CD1Lj6oVTKqNdU2QiyiuZN5804mi9dToXZxHk8ihL4tflSA6Aqfm\/DisJgwc9gmwhwuRVl6DiaZZmitoMn0AberUDh1LheGg9cA0pL7fZfZ7UCC00ELh71X07cKelWb8i1Q\/PECvQ==&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;pending_renewal_info&quot;:[&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;auto_renew_product_id&quot;:&quot;products.autoRenewableSubscription&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_transaction_id&quot;:&quot;1000000747846047&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;product_id&quot;:&quot;products.autoRenewableSubscription&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;auto_renew_status&quot;:&quot;1&quot;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;],&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;status&quot;:0&lt;br /&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;◼︎&lt;span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;비자동 갱신 구독(&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Non-Renewable Subscription&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;영수증 데이터 (JSON)&lt;/span&gt;&lt;/b&gt;&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&gt;{&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;receipt&quot;:{&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;receipt_type&quot;:&quot;ProductionSandbox&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;adam_id&quot;:0,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;app_item_id&quot;:0,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;bundle_id&quot;:&quot;com.whitepaek.apps&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;application_version&quot;:&quot;1&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;download_id&quot;:0,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;version_external_identifier&quot;:0,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;receipt_creation_date&quot;:&quot;2020-11-30 04:29:57 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;receipt_creation_date_ms&quot;:&quot;1606710597000&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;receipt_creation_date_pst&quot;:&quot;2020-11-29 20:29:57 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;request_date&quot;:&quot;2020-11-30 04:30:32 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;request_date_ms&quot;:&quot;1606710632165&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;request_date_pst&quot;:&quot;2020-11-29 20:30:32 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date&quot;:&quot;2013-08-01 07:00:00 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date_ms&quot;:&quot;1375340400000&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date_pst&quot;:&quot;2013-08-01 00:00:00 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_application_version&quot;:&quot;1.0&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;in_app&quot;:[&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;{&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;quantity&quot;:&quot;1&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;product_id&quot;:&quot;products.nonRenewableSubscription&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;transaction_id&quot;:&quot;1000000747847882&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_transaction_id&quot;:&quot;1000000747847882&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;purchase_date&quot;:&quot;2020-11-30 04:29:57 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;purchase_date_ms&quot;:&quot;1606710597000&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;purchase_date_pst&quot;:&quot;2020-11-29 20:29:57 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date&quot;:&quot;2020-11-30 04:29:57 Etc\/GMT&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date_ms&quot;:&quot;1606710597000&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;original_purchase_date_pst&quot;:&quot;2020-11-29 20:29:57 America\/Los_Angeles&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&quot;is_trial_period&quot;:&quot;false&quot;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;]&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;},&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;environment&quot;:&quot;Sandbox&quot;,&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&quot;status&quot;:0&lt;br /&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;해당 로직에서 &lt;b&gt;발생할 수 있는 이슈를 확인해보도록 하겠습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IAP_FLOW_ISSUE.png&quot; data-origin-width=&quot;1577&quot; data-origin-height=&quot;870&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UjPJx/btqO0SAvJzZ/7H6l5ZAaKtzsbV24RirbaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UjPJx/btqO0SAvJzZ/7H6l5ZAaKtzsbV24RirbaK/img.png&quot; data-alt=&quot;[그림 3] 인 앱 결제 프로세스 이슈(In-App Purchase Process Issue)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UjPJx/btqO0SAvJzZ/7H6l5ZAaKtzsbV24RirbaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUjPJx%2FbtqO0SAvJzZ%2F7H6l5ZAaKtzsbV24RirbaK%2Fimg.png&quot; data-filename=&quot;IAP_FLOW_ISSUE.png&quot; data-origin-width=&quot;1577&quot; data-origin-height=&quot;870&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;figcaption&gt;[그림 3] 인 앱 결제 프로세스 이슈(In-App Purchase Process Issue)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;구매한 상품의 트랜잭션이 정상적으로 종료되지 않는 문제에 대해 아래와 같은 케이스를 생각해볼 수 있습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;1. &lt;span style=&quot;color: #333333;&quot;&gt;App에서 발생한 문제&lt;br /&gt;&amp;nbsp; &amp;nbsp; 1-1. App에서 receipt-data를 Server에 전달하기 전 비정상적으로 종료된 경우 &lt;span style=&quot;color: #333333;&quot;&gt;- [Process. 4] 이슈&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; 1-2. App에서 receipt-data를 Server에 전달한 후 비정상적으로 종료된 경우 &lt;span style=&quot;color: #333333;&quot;&gt;- [Process. 4-1 ~ 4-4] 이슈&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; 1-3. App에서 구매 완료(트랜잭션 종료) 후 Server에게 구매 완료 요청 API를 호출하기 전 종료된 경우 &lt;span style=&quot;color: #333333;&quot;&gt;- [Process. 5] 이슈&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;2. &lt;span style=&quot;color: #333333;&quot;&gt;Server에서 발생한 문제&lt;br /&gt;&amp;nbsp; &amp;nbsp; 2-1. 데이터베이스에 영수증 데이터를 저장 후 Server 문제 발생으로 App에게 응답 값을 전달하지 못한 경우 - [Process. 4-4] 이슈&lt;br /&gt;&amp;nbsp; &amp;nbsp; 2-2. 영수증 검증 오류와 같은 이슈로 데이터베이스에 저장하지 못하고 App에게 실패(fail)의 응답 값을 전달한 경우 &lt;span style=&quot;color: #333333;&quot;&gt;- [Process. 4-4] 이슈&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;위 5가지의 문제에 대해 제가 생각해본 해결 포인트는 아래와 같습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 95px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 38px;&quot;&gt;1-1. App이 재구동될 때 종료되지 않은 트랜잭션의 receipt-data를 재생성하여 Server에 재요청하기 때문에 Server 쪽에서는 신경 쓸 부분이 없다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;‣ App에서 처리해야하는 이슈&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 19px;&quot;&gt;1-2. App이 재구동 되면서 종료되지 않은 트랜잭션의 receipt-data를 재생성하여 Server에 재요청 한다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;이 경우에 Server는 기존 로직을 동일하게 진행하나 데이터베이스에 중복으로 유저의 상품 정보가 존재하는지 확인해야 한다.&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;‣ App &amp;amp; Server에서 처리해야하는 이슈&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;1-3. App에서 유저의 구매 이력과 DB에 저장된 유저의 구매 이력을 비교하여 DB를 현행화 해주는 Server 로직이 필요하다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;이 경우에는 어떻게 처리해야 할까.. 댓글로 의견 부탁드리겠습니다.&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;‣ 고객이 결제를 했으나, 상품 구매가 정상적으로 이루어지지 않았기 때문에 고객센터를 통해 문의를 한다.(?)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 19px;&quot;&gt;2-1. &lt;span style=&quot;color: #333333;&quot;&gt;App은&amp;nbsp;&lt;/span&gt;일정시간 동안 응답 값을 받지 못하면 Server에 재요청한다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;일정시간 혹은 재요청 후에도 응답 값을 받지 못하면 App은 결제 실패에 대한 트랜잭션을 처리할 로직을 구현해야 한다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(서버에 문제가 발생한 경우에는 서비스 전체 장애이기 때문에 절대 발생하는 일이 없기를..)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;‣ App &amp;amp; Server에서 처리해야하는 이슈&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 19px;&quot;&gt;2-2. App은 실패에 대한 응답 값을 전달받았기 때문에 Server에 재요청 한다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 이 경우에는 Apple 쪽 문제 혹은 Server에서 데이터 처리 과정에서 발생한 문제이기 때문에 관련 로그를 적절하게 남기고 빠른 시간 내에 장애를 처리해야 한다. (마찬가지로 발생해서는 안되는 문제이지만 만약 발생한 경우 App 쪽에서 결제 실패에 대한 트랜잭션을 처리할 로직을 구현해야한다.)&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;‣ &lt;span style=&quot;color: #333333;&quot;&gt;App &amp;amp; Server에서 처리해야하는 이슈&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;로직에서 고려해야 할 사항은 &lt;b&gt;(1) &quot;비소모품, 자동 갱신 구독, 비자동 갱신 구독&quot; 상품의&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;구매 이력이 존재하는 영수증 데이터에 대한 처리&lt;/b&gt;와&lt;br /&gt;&lt;/span&gt;&lt;b&gt;(2) 1-2 이슈 상황에 대한 부분&lt;/b&gt;일 거라고 생각합니다. 아래에서 두 가지 상황에 대해서 얘기를 해보겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;(1) 구매 이력이 존재하는 영수증&lt;/b&gt;&lt;br /&gt;in_app 프로퍼티에 상품의 구매 이력이 존재하는 영수증 데이터를 처리하는 로직은 현재 코드에서 구현하지 않았습니다.&lt;br /&gt;이유는 서비스 정책이 정해지지 않은 상황이지만,&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;앱 내에서 사용하는 &quot;기간제 &amp;amp; 무기한&quot;의 상품을 다룰 예정이고&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;유저의 구매 상품과 기간을 서버에서 관리할 것이기 때문에 transaction_id가 일관성 있게 유지되는&lt;/span&gt;&lt;br /&gt;&lt;b&gt;소모품(&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Consumable)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;옵션이 적절하다고 판단하였기 때문입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&quot;비소모품, 자동 갱신 구독, 비자동 갱신 구독&quot; 상품의 경우에는 App에서 &lt;b&gt;복원(Restore)&lt;/b&gt; 기능을 구현해야 합니다.&lt;br /&gt;복원 기능을 구현하지 않는다면 App Store에서 거절(reject) 사유에 해당되기 때문입니다.&lt;br /&gt;또한 복원을 하는 경우 transaction_id가 변경되어 구매 이력이 추가적으로 생성되기 때문에&lt;br /&gt;앱 내에서 사용하는 상품을 관리하기에는 적절하지 않다고 판단하였습니다.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1606746750745&quot; class=&quot;java&quot; style=&quot;margin: 20px auto 0px; display: block; overflow: auto; padding: 15px; color: #383a42; background-color: #f6f7f8; font-size: 14px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; cursor: default; z-index: 1; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none; background-position: initial initial; background-repeat: initial initial;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// AppleServiceImpl.java - 35 라인

UserReceiptInfo userReceiptInfo = null;
if (appStoreResponse.getReceipt().getInApp().size() == 1) { // 소모품 (Consumable)
	userReceiptInfo = getUserReceiptInfo(appStoreResponse.getReceipt().getInApp().get(0));
} else {
	// TODO - 비소모품(Non-Consumable), 자동 갱신 구독(Auto-Renewable Subscription), 비자동 갱신 구독(Non-Renewable Subscription)에 대한 로직 필요.
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;해당 부분에서 본인의 서비스 정책에 따른 상품의 영수증(receipt)에서 필요한 데이터를 파싱 하는 로직을 구현하면 됩니다.&lt;br /&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(추후에 정책이 정해지면 적절한 프로세스를 구현해보고 좀 더 자세하게 설명을 추가해보도록 하겠습니다.)&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;(2)&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;App에서 receipt-data를 Server에 전달한 후 비정상적으로 종료된 경우&lt;/b&gt;&lt;br /&gt;App에서는 receipt-data를 Server에 전달하였고 Server에서는 영수증 검증까지 완료하고 유저의 구매 상품의 정보를&lt;br /&gt;데이터베이스에 정상적으로 저장까지 완료하고 성공(Success)에 대한 응답 값을 App에게 전달하였으나,&lt;br /&gt;App이 비정상적으로 종료되어서 Server에서 보낸 성공에 대한 응답 값을 못 받았기 때문에 구매 트랜잭션을 종료하지 못한 상황입니다.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 경우에는 App이 재 구동된 시점에 종료되지 않은 트랜잭션에 대한 receipt-data를 재생성하여 Server에 다시 요청합니다.&lt;br /&gt;하지만 유저가 구매한 상품에 대한 정보가 데이터베이스에 저장된 상황이기 때문에&lt;br /&gt;Server는 transaction_id를 이용하여 데이터베이스에 저장된 데이터가 있는지 확인하고&lt;br /&gt;데이터가 존재한다면 App에게 성공(Success)에 대한 응답 값을 전달해주면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1606749444065&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// AppleServiceImpl.java - 42 라인

logger.info(&quot;===== DATABASE INSERT IGNORE =====&quot;);
logger.info(&quot;product_id ‣ &quot; + userReceiptInfo.getProductId());
logger.info(&quot;transaction_id ‣ &quot; + userReceiptInfo.getTransactionId());
logger.info(&quot;original_transaction_id ‣ &quot; + userReceiptInfo.getOriginalTransactionId());
logger.info(&quot;purchase_data_ms ‣ &quot; + userReceiptInfo.getPurchaseDateMs());
logger.info(&quot;expiration_date ‣ &quot; + userReceiptInfo.getExpirationDate());
logger.info(&quot;====================================&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;데이터베이스에 저장하는 로직은 현재 구현하지 않았고 logger로 필요한 데이터를 출력하였습니다.&lt;br /&gt;이미 존재하는 데이터에 대한 중복 저장에 대해서는 &lt;b&gt;INSERT IGNORE&lt;/b&gt;를 이용하여 처리하면 어떨까 하는 의견입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;마찬가지로 데이터베이스에서 관리할 상품 정보가 정해지지 않아서 몇 가지의 데이터만 뽑아서 확인했습니다.&lt;br /&gt;애플 공식 문서에서는 &lt;b&gt;&quot;transaction_id, original_transaction_id, product_id&quot;&lt;/b&gt;를 기준으로&lt;br /&gt;데이터베이스에서 상품을 관리하길 권장합니다.&lt;br /&gt;&lt;br /&gt;저는 데이터베이스에서 &quot;기간제 &amp;amp; 무기한&quot; 상품을 관리할 예정이기 때문에&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&quot;transaction_id, original_transaction_id, product_id&quot; 외에도&lt;br /&gt;상품을 구매한 유저의 정보와 구매한 상품에 대한 기간으로 계산한 만료 기간 등 추가로 넣어줄 예정입니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;[Process. 4-4] 상품 결제 검증 응답 ‣ 데이터베이스에 유저가 구매한 상품 정보를 정상적으로 저장하였다면&lt;br /&gt;App에게 성공(Success)에 대한 응답 값 반환&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1606752428033&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// AppleController.java - 19 라인

@PostMapping(&quot;/purchase&quot;)
public ResponseEntity purchase(@RequestBody UserReceipt userReceipt) {

	String code = appleService.updatePurchaseHistory(userReceipt);

	return ResponseEntity.ok(code);
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;애플(Apple) 인 앱 결제(In-App Purchase)에 대한 프로세스를 알아봤습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;가장 중요한 것은 서비스에 대한 정책을 어떻게 정하느냐에 따라 로직이 달라질 것입니다.&lt;br /&gt;인 앱 결제에서 관리할 데이터와 프로세스가 정해진다면&lt;br /&gt;프로토타입으로 간단하게 작성한 로직을 좀 더 구체화시킬 수 있을 거 같습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;해당 글 내용은 개인적인 판단으로 임의의 서비스 정책을 정한 후 작성한 글입니다.&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;또한 코드를 작성하는 실력이 아직 많이 부족하기 때문에 &lt;b&gt;부족함이 많은&lt;/b&gt; 프로토타입의 코드입니다.&lt;br /&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;애플의 인 앱 결제(In-App Purchase) 프로세스를 이해하는 부분에서 도움이 되었으면 합니다.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;인 앱 결제에서 사용되는 4가지 종류의 상품과 다양한 방식의 예외 사항을 테스트해봤습니다.&lt;br /&gt;프로세스 흐름에 따라 글을 작성하다 보니 제가 경험한 전부를 내용에 넣지는 못했습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;각자가 생각하는 다양한 프로세스 혹은 궁금한 점&lt;br /&gt;또는 글에서 부족하거나 틀린 점에 대해서 댓글을 통해 남겨주세요.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;제가 겪어본 상황과 아는 지식에 한해서 저 또한 의견을 공유드리도록 하겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;감사합니다 :)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Spring</category>
      <author>WHITEPAEK</author>
      <guid isPermaLink="true">https://whitepaek.tistory.com/62</guid>
      <comments>https://whitepaek.tistory.com/62#entry62comment</comments>
      <pubDate>Tue, 1 Dec 2020 01:13:25 +0900</pubDate>
    </item>
    <item>
      <title>[2] 스프링 프로젝트에 애플 로그인 API 연동하기</title>
      <link>https://whitepaek.tistory.com/61</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://whitepaek.tistory.com/60&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[1] 스프링 프로젝트에 애플 로그인 API 연동을 위한 Apple Developer 설정&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[2] 스프링 프로젝트에 애플 로그인 API 연동하기 - (현재 글)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이전 포스트에서 &quot;Sign in wtih Apple&quot; 연동을 위한 Apple Developer 3가지 설정을 진행하였습니다.&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;깃허브 URL ‣ &lt;a href=&quot;https://github.com/WHITEPAEK/demo-sign-in-with-apple&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;github.com/WHITEPAEK/demo-sign-in-with-apple&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;macOS Catalina 버전 10.15.6 운영체제에서 IntelliJ IDEA Ultimate 환경에서 Spring Boot 프로젝트로 포스트를 설명하도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;JWT 관련 라이브러리는 &quot;nimbus-jose-jwt(v3.10)&quot;를 이용했습니다. 해당 버전의 라이브러리를 이용한 이유는 애플 로그인 API를 적용시킬 프로젝트에서 사용하고 있기 때문에 그대로 유지하여 사용하기로 결정하였기 때문입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-08-30 23.20.18.png&quot; data-origin-width=&quot;3196&quot; data-origin-height=&quot;2054&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Hz2VT/btqHA3OQzHL/g5Fdx8gYbdqo4aqDfyDVo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Hz2VT/btqHA3OQzHL/g5Fdx8gYbdqo4aqDfyDVo0/img.png&quot; data-alt=&quot;[그림 1] application.properties 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Hz2VT/btqHA3OQzHL/g5Fdx8gYbdqo4aqDfyDVo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHz2VT%2FbtqHA3OQzHL%2Fg5Fdx8gYbdqo4aqDfyDVo0%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-08-30 23.20.18.png&quot; data-origin-width=&quot;3196&quot; data-origin-height=&quot;2054&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;figcaption&gt;[그림 1] application.properties 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;프로젝트 다운로드하여 실행하였다면 &lt;b&gt;application.properties&lt;/b&gt; 파일로 이동해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://whitepaek.tistory.com/60&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;이전 포스트&lt;/a&gt;에서 설정 후 얻은 값을 아래와 동일한 위치에 입력해주면 됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1598797643342&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# [그림 1.8] Team ID 값 입력
APPLE.TEAM.ID=[Team ID]

# [그림 2.5] Return URLs 값 입력
APPLE.WEBSITE.URL=[Website URLs]

# [그림 2.6] Identifier 값 입력
APPLE.AUD=[Client ID]

# [그림 3.5] Key ID 값 입력
APPLE.KEY.ID=[Key ID]

# [그림 3.5]에서 다운로드 받은 Private Key 파일을 해당 위치로 이동 후, 파일명 입력
APPLE.KEY.PATH=static/AuthKey_[KeyID].p8&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-08-30 23.36.44.png&quot; data-origin-width=&quot;1232&quot; data-origin-height=&quot;656&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ezwSmW/btqHAl3jbWK/kyb1Tlr5KdFI7YzctgsB5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ezwSmW/btqHAl3jbWK/kyb1Tlr5KdFI7YzctgsB5k/img.png&quot; data-alt=&quot;[그림 2] &amp;amp;quot;localhost:8080/&amp;amp;quot; 접속&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ezwSmW/btqHAl3jbWK/kyb1Tlr5KdFI7YzctgsB5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FezwSmW%2FbtqHAl3jbWK%2Fkyb1Tlr5KdFI7YzctgsB5k%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-08-30 23.36.44.png&quot; data-origin-width=&quot;1232&quot; data-origin-height=&quot;656&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;figcaption&gt;[그림 2] &quot;localhost:8080/&quot; 접속&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;프로젝트를 실행 후 &quot;localhost:8080/&quot;으로 접속하면 &lt;b&gt;Sign in with Apple&lt;/b&gt; 로그인 화면이 정상적으로 실행됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;그리고 앞서 application.properties에 설정이 정상적이라면 로그인을 진행하고 값을 반환받을 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;프로젝트 실행은 설정 값만 적용한다면 쉽게 진행할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;간단하게 애플 로그인 프로세스와 코드에 대해서 설명드리도록 하겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[1] 애플 로그인 버튼 페이지&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;[Apple Document]&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;‣&amp;nbsp;&lt;a href=&quot;https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_js/configuring_your_webpage_for_sign_in_with_apple&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_js/configuring_your_webpage_for_sign_in_with_apple&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1598799180392&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// AppleController.java - 30 라인

@GetMapping(value = &quot;/&quot;)
public String appleLoginPage(ModelMap model) {

  Map&amp;lt;String, String&amp;gt; metaInfo = appleService.getLoginMetaInfo();

  model.addAttribute(&quot;client_id&quot;, metaInfo.get(&quot;CLIENT_ID&quot;));
  model.addAttribute(&quot;redirect_uri&quot;, metaInfo.get(&quot;REDIRECT_URI&quot;));
  model.addAttribute(&quot;nonce&quot;, metaInfo.get(&quot;NONCE&quot;));

  return &quot;index&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[&quot;localhost:8080/&quot; - Sign in with Apple]&amp;nbsp;&lt;/span&gt;애플 로그인 버튼이 보이는 화면입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;유저가 버튼을 클릭하면 로그인이 진행되는데 이때 메타정보와 유저 아이디, 비밀번호가 애플에게 요청됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 152px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;필드&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;ID&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;유저 아이디&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;Password&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;유저 비밀번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;appleid-signin-client-id&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;Services ID - Identifier 값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;appleid-signin-scope&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;애플에게 전달받을 유저 정보 - name email&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;appleid-signin-redirect-uri&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;Services ID - Return URLs 값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;appleid-signin-state&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;상태 값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;appleid-signin-nonce&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;임시 값&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[2] 유저 로그인 후 정보 받기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;[Apple Document]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;‣&amp;nbsp;&lt;a href=&quot;https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_rest_api/authenticating_users_with_sign_in_with_apple&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_rest_api/authenticating_users_with_sign_in_with_apple&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1598799246211&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// AppleController.java - 69 라인

@PostMapping(value = &quot;/redirect&quot;)
@ResponseBody
public TokenResponse servicesRedirect(ServicesResponse serviceResponse) {

  if (serviceResponse == null) {
  	return null;
  }

  String code = serviceResponse.getCode();
  String client_secret = appleService.getAppleClientSecret(serviceResponse.getId_token());

  logger.debug(&quot;================================&quot;);
  logger.debug(&quot;id_token ‣ &quot; + serviceResponse.getId_token());
  logger.debug(&quot;payload ‣ &quot; + appleService.getPayload(serviceResponse.getId_token()));
  logger.debug(&quot;client_secret ‣ &quot; + client_secret);
  logger.debug(&quot;================================&quot;);

  return appleService.requestCodeValidations(client_secret, code, null);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;정의된 7개의 데이터와 함께 &lt;b&gt;&quot;https://appleid.apple.com/auth/authorize&quot;&lt;/b&gt; 호출되고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;애플은 Services ID에 정의된 Return URLs로 JSON 데이터를 반환합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1598799638957&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;state&quot;:&quot;test&quot;,
  &quot;code&quot;:&quot;c50d317be38c742c0beb19d8743de014c.0.nruy.1NtQvAmp9uhyrsMj1mp7kg&quot;,
  &quot;id_token&quot;:&quot;eyJraWQiOiI4NkQ4OEtmIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLndoaXRlcGFlay5zZXJ2aWNlcyIsImV4cCI6MTU5ODgwMDEyOCwiaWF0IjoxNTk4Nzk5NTI4LCJzdWIiOiIwMDAxNDguZjA2ZDgyMmNlMGIyNDgzYWFhOTdkMjczYjA5NzgzMjUuMTcxNyIsIm5vbmNlIjoiMjBCMjBELTBTOC0xSzgiLCJjX2hhc2giOiJ1aFFiV0gzQUFWdEc1OUw4eEpTMldRIiwiZW1haWwiOiJpNzlmaWl0OWIzQHByaXZhdGVyZWxheS5hcHBsZWlkLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjoidHJ1ZSIsImlzX3ByaXZhdGVfZW1haWwiOiJ0cnVlIiwiYXV0aF90aW1lIjoxNTk4Nzk5NTI4LCJub25jZV9zdXBwb3J0ZWQiOnRydWV9.GQBCUHza0yttOfpQ-J5OvyZoGe5Zny8pI06sKVDIJaQY3bdiphllg1_pHMtPUp7FLv3ccthcmqmZn7NWVoIPkc9-_8squ_fp9F68XM-UsERKVzBvVR92TwQuKOPFr4lRn-2FlBzN4NegicMS-IV8Ad3AKTIRMIhvAXG4UgNxgPAuCpHwCwEAJijljfUfnRYO-_ywgTcF26szluBz9w0Y1nn_IIVCUzAwYiEMdLo53NoyJmWYFWu8pxmXRpunbMHl5nvFpf9nK-OGtMJrmZ4DlpTc2Gv64Zs2bwHDEvOyQ1WiRUB6_FWRH5FV10JSsccMlm6iOByOLYd03RRH2uYtFw&quot;,
  &quot;user&quot;:&quot;{
    \&quot;email\&quot;:\&quot;i79fiit9b3@privaterelay.appleid.com\&quot;,
    \&quot;name\&quot;:{
      \&quot;firstName\&quot;:\&quot;SEUNGJOO\&quot;,
      \&quot;lastName\&quot;:\&quot;PAEK\&quot;
    }
  }&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;반환받은 JSON 데이터는 &quot;state, code, id_token, user&quot; 4개의 키로 이루어져 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;여기서 알고 있어야 할 부분은 user 키는 유저가 서비스 최초 가입할 때만 받을 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;또한, 유저는 자신의 email을 공유할 수도 있고, 하지 않을 수도 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;(JSON 데이터는 유저가 email을 공유하지 않은 데이터이며, &quot;code&quot; 키의 값은 5분 동안 유효합니다.)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;[3] id_token 5가지 유효성 검증&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;[Apple Document]&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;‣&amp;nbsp;&lt;/b&gt;&lt;a href=&quot;https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_rest_api/verifying_a_user&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_rest_api/verifying_a_user&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;‣&amp;nbsp;&lt;a href=&quot;https://developer.apple.com/documentation/sign_in_with_apple/fetch_apple_s_public_key_for_verifying_token_signature&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;developer.apple.com/documentation/sign_in_with_apple/fetch_apple_s_public_key_for_verifying_token_signature&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1598800155954&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// AppleUtils.java - 69 라인

public boolean verifyIdentityToken(String id_token) {

  try {
    SignedJWT signedJWT = SignedJWT.parse(id_token);
    ReadOnlyJWTClaimsSet payload = signedJWT.getJWTClaimsSet();

  // EXP
    Date currentTime = new Date(System.currentTimeMillis());
    if (!currentTime.before(payload.getExpirationTime())) {
    	return false;
    }

    // NONCE(Test value), ISS, AUD
    if (!&quot;20B20D-0S8-1K8&quot;.equals(payload.getClaim(&quot;nonce&quot;)) || !ISS.equals(payload.getIssuer()) || !AUD.equals(payload.getAudience().get(0))) {
    	return false;
    }

    // RSA
    if (verifyPublicKey(signedJWT)) {
    	return true;
    }
  } catch (ParseException e) {
  	e.printStackTrace();
  }

  return false;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;애플에게 로그인 유저에 대한 정보를 JSON 데이터로 받은 후&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&quot;id_token&quot; 값을 decode 하여 &quot;RSA, exp, nonce, iss, aud&quot; 5가지의 검증 절차를 진행합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;[JWT]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;‣ &lt;/b&gt;&lt;a href=&quot;https://jwt.io&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;jwt.io&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-08-31 00.05.34.png&quot; data-origin-width=&quot;2442&quot; data-origin-height=&quot;1706&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QIbNo/btqHwgPrAeN/fvwQ1JyqyHJ33A2tYxs5t0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QIbNo/btqHwgPrAeN/fvwQ1JyqyHJ33A2tYxs5t0/img.png&quot; data-alt=&quot;[그림 3] id_token을 Decoded&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QIbNo/btqHwgPrAeN/fvwQ1JyqyHJ33A2tYxs5t0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQIbNo%2FbtqHwgPrAeN%2FfvwQ1JyqyHJ33A2tYxs5t0%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-08-31 00.05.34.png&quot; data-origin-width=&quot;2442&quot; data-origin-height=&quot;1706&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;figcaption&gt;[그림 3] id_token을 Decoded&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&quot;exp, nonce, iss, aud&quot;의 값은 &quot;id_token&quot; 값을 decode 하면 PAYLOAD 영역에 존재합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-08-31 00.15.23.png&quot; data-origin-width=&quot;2402&quot; data-origin-height=&quot;2152&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brrWgT/btqHzFnFvap/kPisCXkSVia69c8JO7wLUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brrWgT/btqHzFnFvap/kPisCXkSVia69c8JO7wLUk/img.png&quot; data-alt=&quot;[그림 4] id_token을 공개키 서명 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brrWgT/btqHzFnFvap/kPisCXkSVia69c8JO7wLUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrrWgT%2FbtqHzFnFvap%2FkPisCXkSVia69c8JO7wLUk%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-08-31 00.15.23.png&quot; data-origin-width=&quot;2402&quot; data-origin-height=&quot;2152&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;figcaption&gt;[그림 4] id_token을 공개키 서명 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;RSA 검증은 &lt;b&gt;&quot;[GET]&amp;nbsp;https://appleid.apple.com/auth/keys&quot;&lt;/b&gt;를 호출하여 공개키 리스트를 받은 후&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&quot;id_token&quot; 값의 HEADER 영역의 kid와 동일한 공개키 데이터로 서명 확인을 진행합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 114px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;키&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;값&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 19px; text-align: center;&quot;&gt;exp&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 19px; text-align: center;&quot;&gt;id_token 만료 시간 (10분)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 19px; text-align: center;&quot;&gt;iss&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 19px; text-align: center;&quot;&gt;https://appleid.apple.com&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 19px; text-align: center;&quot;&gt;aud&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Services ID - Identifier 값&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 19px; text-align: center;&quot;&gt;nonce&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 19px; text-align: center;&quot;&gt;생성된 임의 값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 19px; text-align: center;&quot;&gt;RSA&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 19px; text-align: center;&quot;&gt;Apple에서 제공받은 Public Key&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;[4] client_secret 생성&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;[Apple Document]&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;‣ &lt;a href=&quot;https://developer.apple.com/documentation/sign_in_with_apple/generate_and_validate_tokens&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;developer.apple.com/documentation/sign_in_with_apple/generate_and_validate_tokens&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1598801346911&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// AppleUtils.java - 131 라인

public String createClientSecret() {

        JWSHeader header = new JWSHeader.Builder(JWSAlgorithm.ES256).keyID(KEY_ID).build();
        JWTClaimsSet claimsSet = new JWTClaimsSet();
        Date now = new Date();

        claimsSet.setIssuer(TEAM_ID);
        claimsSet.setIssueTime(now);
        claimsSet.setExpirationTime(new Date(now.getTime() + 3600000));
        claimsSet.setAudience(ISS);
        claimsSet.setSubject(AUD);

        SignedJWT jwt = new SignedJWT(header, claimsSet);

        try {
            ECPrivateKey ecPrivateKey = new ECPrivateKeyImpl(readPrivateKey());
            JWSSigner jwsSigner = new ECDSASigner(ecPrivateKey.getS());

            jwt.sign(jwsSigner);

        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (JOSEException e) {
            e.printStackTrace();
        }

        return jwt.serialize();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;[3]에서 5가지의 검증 절차가 정상적으로 완료되었다면 &lt;b&gt;client_secret&lt;/b&gt;을 생성해주도록 합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;client_sercret&lt;/b&gt;은 JWT로 생성되며 필요한 값은 아래와 같습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 152px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;키&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;값&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;kid&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;애플에서 생성한 Private Key에 대한 Key ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;alg&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;ES256&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;iss&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;App ID 생성에 사용된 Team ID&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;iat&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;생성 시간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;exp&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;만료 시간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;aud&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;https://appleid.apple.com&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;sub&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Services ID - Identifier 값&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;위의 데이터로 &lt;b&gt;client_secret&lt;/b&gt;의 JWT가 생성되었다면,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;마지막으로 애플에서 다운로드한 Key 파일 안에 들어있는&amp;nbsp;Private Key로 서명을 해주면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;client_secret&lt;/b&gt;이 정상적으로 생성 완료됩니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;[5] 토큰 검증 및 발급&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;[Apple Document]&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;‣&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://developer.apple.com/documentation/sign_in_with_apple/generate_and_validate_tokens&quot;&gt;developer.apple.com/documentation/sign_in_with_apple/generate_and_validate_tokens&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;‣ &lt;a href=&quot;https://developer.apple.com/documentation/sign_in_with_apple/tokenresponse&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;developer.apple.com/documentation/sign_in_with_apple/tokenresponse&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1598802503386&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// AppleUtils.java - 189 라인

public TokenResponse validateAuthorizationGrantCode(String client_secret, String code) {

        Map&amp;lt;String, String&amp;gt; tokenRequest = new HashMap&amp;lt;&amp;gt;();

        tokenRequest.put(&quot;client_id&quot;, AUD);
        tokenRequest.put(&quot;client_secret&quot;, client_secret);
        tokenRequest.put(&quot;code&quot;, code);
        tokenRequest.put(&quot;grant_type&quot;, &quot;authorization_code&quot;);
        tokenRequest.put(&quot;redirect_uri&quot;, APPLE_WEBSITE_URL);

        return getTokenResponse(tokenRequest);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;[2]에서 전달받은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;code&lt;/b&gt;와 [4]에서 생성한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;client_secret&lt;/b&gt;의 값 그리고 &amp;nbsp;&lt;b&gt;&quot;client_id, grant_type, redirect_uri&quot;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;값으로&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span&gt;&lt;b&gt;&quot;[POST] https://appleid.apple.com/auth/token&quot;&lt;/b&gt;을 호출하여 권한 부여를 위한 토큰 검증을 진행하도록 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&quot;code&quot;는 5분간 유효한 값이므로 주의하도록 한다.)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 228px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;키&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;값&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;client_id&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Services ID - Identifier 값&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 114px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 114px;&quot;&gt;client_secret&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 114px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;eyJraWQiOiJWTTJOOFMzN1RSIiwiYWxnIjoiRVMyNTYifQ.eyJzdWIiOiJjb20ud2hpdGVwYWVrLnNlcnZpY2VzIiwiYXVkIjoiaHR0cHM6XC9cL2FwcGxlaWQuYXBwbGUuY29tIiwiaXNzIjoiODNNNlk1QllLVCIsImV4cCI6MTU5ODgwNTU2NSwiaWF0IjoxNTk4ODAxOTY1fQ.2HO_p7883orlgHS4GQ893haS8SLbRBGLhxNSCZl2i1bwc8uTZSEn4gCQcmvwCqs6lN7zRiUGE5iLQvqNlkJNPQ&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 38px;&quot;&gt;code&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 38px;&quot;&gt;c3944a20072b7446b97633646556204f8.0.rruy.Gjgud84EqqpCvP31MrudDw&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;grant_type&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;authorization_code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;redirect_uri&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Services ID - Return URLs 값&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&quot;[POST] https://appleid.apple.com/auth/token&quot; &lt;/b&gt;호출이 정상적으로 완료되면 JSON 데이터를 반환받습니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1598802646741&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;access_token&quot;:&quot;a08c1600e80f84d44842ce3342abac413.0.mruy.IyMPSXmTYtMyUCDWDKKN3g&quot;,
  &quot;expires_in&quot;:3600,
  &quot;id_token&quot;:&quot;eyJraWQiOiJlWGF1bm1MIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLndoaXRlcGFlay5zZXJ2aWNlcyIsImV4cCI6MTU5ODgwMjU2NiwiaWF0IjoxNTk4ODAxOTY2LCJzdWIiOiIwMDAxNDguZjA2ZDgyMmNlMGIyNDgzYWFhOTdkMjczYjA5NzgzMjUuMTcxNyIsIm5vbmNlIjoiMjBCMjBELTBTOC0xSzgiLCJhdF9oYXNoIjoiaFNMOFBrZWxoNWdFblNGeURISGNIQSIsImVtYWlsIjoiaTc5ZmlpdDliM0Bwcml2YXRlcmVsYXkuYXBwbGVpZC5jb20iLCJlbWFpbF92ZXJpZmllZCI6InRydWUiLCJpc19wcml2YXRlX2VtYWlsIjoidHJ1ZSIsImF1dGhfdGltZSI6MTU5ODgwMTk2Miwibm9uY2Vfc3VwcG9ydGVkIjp0cnVlfQ.WqYWPuTi8apdqQnP9V6-yvVLBt84P48mYVbGa0e3io4sNKL919iIVZfNoE1GZ8F6WNOrXtcOQU_n3hclrfmNyYsidj-IH6R-0JwxwLobKJoFNH7lfKd067OyiYGxHJMFcleRaDoRWsBF4Wh_FUT3Nft_qy2CVd9pNEg-mFOruI6-5oUDdnPQwelywNCsqlkmECcKna4Psvs9eRn58ALfpke5SL-A762--peGzgp00RvrGMK4t26UWG9UN13LIXDvX3ydMCdg8gvmO7BizSoi4zJHgvKuYxLLT_heOkvNWxcT81h7dEdwqAczLTE3FBarTkAekxvtykVwlEBlfyoXcg&quot;,
  &quot;refresh_token&quot;:&quot;r8e88bc9f62bc496398b71117610c5aeb.0.mruy.UuuL5tpwnWaof86XPErqJg&quot;,
  &quot;token_type&quot;:&quot;Bearer&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;반환받은 JSON 데이터에서&lt;span&gt;&amp;nbsp;&lt;b&gt;&quot;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;id_token&quot;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;을 decode 하여 필요한 유저 정보를 얻을 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;[6] refresh_token 검증 및 토근 재발급&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;[Apple Document]&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;‣&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://developer.apple.com/documentation/sign_in_with_apple/generate_and_validate_tokens&quot;&gt;developer.apple.com/documentation/sign_in_with_apple/generate_and_validate_tokens&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;‣&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://developer.apple.com/documentation/sign_in_with_apple/tokenresponse&quot;&gt;developer.apple.com/documentation/sign_in_with_apple/tokenresponse&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1598803118297&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// AppleUtils.java - 210 라인

public TokenResponse validateAnExistingRefreshToken(String client_secret, String refresh_token) {

        Map&amp;lt;String, String&amp;gt; tokenRequest = new HashMap&amp;lt;&amp;gt;();

        tokenRequest.put(&quot;client_id&quot;, AUD);
        tokenRequest.put(&quot;client_secret&quot;, client_secret);
        tokenRequest.put(&quot;grant_type&quot;, &quot;refresh_token&quot;);
        tokenRequest.put(&quot;refresh_token&quot;, refresh_token);

        return getTokenResponse(tokenRequest);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;[5]에서 전달받은 &lt;b&gt;&quot;refresh_token&quot;&lt;/b&gt;에 대한 유효성 검증을 하고 싶다면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&quot;client_id, client_secret, grant_type, refresh_token&quot;&lt;/b&gt;의 값으로&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&quot;[POST] https://appleid.apple.com/auth/token&quot; &lt;/b&gt;호출하여 검증을 진행합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;키&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;값&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;client_id&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Services ID - Identifier 값&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;client_secret&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;eyJraWQiOiJWTTJOOFMzN1RSIiwiYWxnIjoiRVMyNTYifQ.eyJzdWIiOiJjb20ud2hpdGVwYWVrLnNlcnZpY2VzIiwiYXVkIjoiaHR0cHM6XC9cL2FwcGxlaWQuYXBwbGUuY29tIiwiaXNzIjoiODNNNlk1QllLVCIsImV4cCI6MTU5ODgwNTU2NSwiaWF0IjoxNTk4ODAxOTY1fQ.2HO_p7883orlgHS4GQ893haS8SLbRBGLhxNSCZl2i1bwc8uTZSEn4gCQcmvwCqs6lN7zRiUGE5iLQvqNlkJNPQ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;grant_type&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;refresh_token&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;refresh_token&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;r8e88bc9f62bc496398b71117610c5aeb.0.mruy.UuuL5tpwnWaof86XPErqJg&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&quot;refresh_token&quot;&lt;/b&gt;에 대한 &lt;b&gt;&quot;[POST] https://appleid.apple.com/auth/token&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;호출이 정상적으로 완료되면&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;JSON 데이터를 반환받습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1598803296984&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;access_token&quot;:&quot;aebbe3a8249d745d486af1573ac74b821.0.mruy.lamBfraOUXnmnhxb4NxjAA&quot;,
  &quot;expires_in&quot;:3600,
  &quot;id_token&quot;:&quot;eyJraWQiOiI4NkQ4OEtmIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLndoaXRlcGFlay5zZXJ2aWNlcyIsImV4cCI6MTU5ODgwMzYxOSwiaWF0IjoxNTk4ODAzMDE5LCJzdWIiOiIwMDAxNDguZjA2ZDgyMmNlMGIyNDgzYWFhOTdkMjczYjA5NzgzMjUuMTcxNyIsImF0X2hhc2giOiJnN0N3WnhXSTBvOW5wdUhvSjE3azRBIiwiZW1haWwiOiJpNzlmaWl0OWIzQHByaXZhdGVyZWxheS5hcHBsZWlkLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjoidHJ1ZSIsImlzX3ByaXZhdGVfZW1haWwiOiJ0cnVlIn0.R77ost9PyivMguFyXYLyng-RZbH9lPq_GAA-35cr6DtanfInCg4UtlxFmoaGV6_euxK7vCVu_32vEiEkrktJwJF7H1RSOdQ8JBgBZt6Qdnr4hR_vfQTpb6D1JMoiLD_GCmjz_rfwvI0ityON1yjBCuYsJbV6RMasrNw6LvWueqAQ0v_nls68gxAqwGR0XOtl9SwK7CJK7Nj-BqJMcQT_H3sw8QM6zw1XopuEqSk7Ci8Qirh8Z36a9oSfilgXs7vT-H99CGk50HkYkLU9-DawoyaWc_iAMC3ROAo_WvxI_tlPs9CjtwZNXlBvz4ExLl9zVgAM9Rh8oE5R2evXeag3SQ&quot;,
  &quot;token_type&quot;:&quot;Bearer&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;반환받은 JSON 데이터에서 &lt;b&gt;&quot;id_token&quot;&lt;/b&gt;을 decode 하여 필요한 유저 정보를 얻을 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;대략적인 애플 로그인(Sign in with Apple) 연동에 대해서 설명했습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;코드와 같이 풀어서 쉽게 설명하려고 했으나 생각보다 더 복잡하고 헷갈릴 수 있을 거 같습니다..^^;;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Apple Developer Documentation을 참고하며 코드를 보면서 이해하신다면 포스트보다 이해하기가 좀 더 수월하실 거라 생각합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;[Sign in with Apple - Step by step !! (정리)]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;[Step. 01] &quot;Sign in with Apple&quot; 버튼이 있는 애플 로그인 페이지&lt;/p&gt;
&lt;p&gt;[Step. 02] &quot;https://appleid.apple.com/auth/authorize&quot; 호출 - (유저 로그인)&lt;/p&gt;
&lt;p&gt;[Step. 03] &quot;https://appleid.apple.com/auth/keys&quot; 공개 키 호출 및 검증 - (&lt;span style=&quot;color: #333333;&quot;&gt;rsa, exp, nonce, iss, aud&lt;/span&gt;)&lt;/p&gt;
&lt;p&gt;[Step. 04] &quot;client_secret&quot; 생성 - (jwt + private key)&lt;/p&gt;
&lt;p&gt;[Step. 05] &quot;https://appleid.apple.com/auth/token&quot; 호출 - (&lt;span style=&quot;color: #333333;&quot;&gt;authorization_code&lt;/span&gt;)&lt;/p&gt;
&lt;p&gt;[Step. 06] &lt;span style=&quot;color: #333333;&quot;&gt;&quot;https://&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;appleid.apple.com/auth/token&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&quot; 호출 - (refresh_token&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&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;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[추가 내용(1) - 이메일 변경, 서비스 해지, 애플 계정 탈퇴 이벤트가 발생한 경우]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1598805661675&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// AppleController.java - 108 라인

@PostMapping(value = &quot;/apps/to/endpoint&quot;)
    @ResponseBody
    public void appsToEndpoint(@RequestBody AppsResponse appsResponse) {
        logger.debug(&quot;[/path/to/endpoint] RequestBody ‣ &quot; + appsResponse.getPayload());
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;유저의 애플 계정에 대한 이벤트가 발생하면 body안에 payload 키로 jwt 형태의 데이터가 담겨서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&quot;App ID에 등록된 Endpoint URL&quot;로 전송됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1598805867479&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;payload&quot; : &quot;eyJraWQiOiI4NkQ4OEtmIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLnNrdC5tYXNzaXZlYXJzaWduaW4iLCJleHAiOjE1OTg0MzU0MTIsImlhdCI6MTU5ODM0OTAxMiwianRpIjoiZDNvTUVfWE1tcjVqcC1KWlRMUHVIUSIsImV2ZW50cyI6IntcInR5cGVcIjpcImNvbnNlbnQtcmV2b2tlZFwiLFwic3ViXCI6XCIwMDAxNDguYzEyZjdlNmI4Yjk2NDExNGEzYzRiZTdmYzY5M2I0MzYuMDgxNlwiLFwiZXZlbnRfdGltZVwiOjE1OTgzNDg5ODQyMTJ9In0.EDWOfSnbdBDdNVGeSL7KBymsYV8NkcRz9XY1mCPIcWrOABK1tVLyLqdlclRwqD4lBKeJgGS74tE_YMAx1Z9iJcZVjL_56OuCbvKRge_-RXn8PLXbTJWONh8PBrsNSrbwZvykwLbKEcKfhNWcJWzoPNsuKLxVS5aPSQ59OjaegP8WNzYpRfDwO-f7prWSHPnkEO4vv6WQvYmKD3zQMl4DqkZwAIbWCv4TzAKP3h-vzy4RVNghF1WBrAG4MANdVY_Y6gJdvDnAy1tcghqpD5k13r04PaWpT3GU1QI--ps0EaNLekSJxrNUDZrD9bUxb1fLEthoQv4v4lcR_Y2xlp_Pbg&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;payload의 값은 jwt이므로 decode 하면 HEADER와 PAYLOAD 데이터 영역으로 나뉩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1598806064850&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;--HEADER--
{
  &quot;kid&quot;: &quot;86D88Kf&quot;,
  &quot;alg&quot;: &quot;RS256&quot;
}

--PAYLOAD--
{
  &quot;iss&quot;:&quot;https:\/\/appleid.apple.com&quot;,
  &quot;aud&quot;:&quot;com.whitepaek.services&quot;,
  &quot;exp&quot;:1598929977,
  &quot;iat&quot;:1598843577,
  &quot;events&quot;:&quot;{
    \&quot;type\&quot;:\&quot;consent-revoked\&quot;,
    \&quot;sub\&quot;:\&quot;000148.f06d822ce0b2483aaa97d273b0978325.1717\&quot;,
    \&quot;event_time\&quot;:1598843567475
  }&quot;,
  &quot;jti&quot;:&quot;uZmGepCUZyA_0by3Jh7JCQ&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;유저가 서비스 해지를 한 경우,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;전달된 payload의 값을 decode 한 결과입니다.&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;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;[추가 내용(2) - 애플 로그인 페이지]&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1598805426304&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// AppleController.java - 48 라인

@GetMapping(value = &quot;/apple/login&quot;)
    public String appleLogin(ModelMap model) {

        Map&amp;lt;String, String&amp;gt; metaInfo = appleService.getLoginMetaInfo();

        model.addAttribute(&quot;client_id&quot;, metaInfo.get(&quot;CLIENT_ID&quot;));
        model.addAttribute(&quot;redirect_uri&quot;, metaInfo.get(&quot;REDIRECT_URI&quot;));
        model.addAttribute(&quot;nonce&quot;, metaInfo.get(&quot;NONCE&quot;));
        model.addAttribute(&quot;response_type&quot;, &quot;code id_token&quot;);
        model.addAttribute(&quot;scope&quot;, &quot;name email&quot;);
        model.addAttribute(&quot;response_mode&quot;, &quot;form_post&quot;);

        return &quot;redirect:https://appleid.apple.com/auth/authorize&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;추가적으로 앱(App)에 Sign in with Apple 버튼이 존재하는 페이지가 아닌&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;애플 로그인 페이지 화면을 제공해야 하는 경우에는&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&quot;https://appleid.apple.com/auth/authorize&quot;를 redirect 해주면&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ID와 Password를 입력하는 화면으로 바로 이동됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-11-11 10.18.06.png&quot; data-origin-width=&quot;1013&quot; data-origin-height=&quot;513&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAahup/btqM64vsJEN/4EXsQILXz0CN8pgnJNZQNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAahup/btqM64vsJEN/4EXsQILXz0CN8pgnJNZQNK/img.png&quot; data-alt=&quot;[그림 5] Apple ID 로그인 화면으로 이동&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAahup/btqM64vsJEN/4EXsQILXz0CN8pgnJNZQNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAahup%2FbtqM64vsJEN%2F4EXsQILXz0CN8pgnJNZQNK%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-11-11 10.18.06.png&quot; data-origin-width=&quot;1013&quot; data-origin-height=&quot;513&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;figcaption&gt;[그림 5] Apple ID 로그인 화면으로 이동&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;이상으로&amp;nbsp;&lt;b&gt;Sign in with Apple&lt;/b&gt; API를 Spring 프로젝트에 연동 방법에 대해 알아봤습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;잘못된 내용 혹은 궁금하신 점은 댓글 남겨주시면 확인 후 답변드리도록 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;감사합니다 :)&lt;/p&gt;</description>
      <category>Spring</category>
      <author>WHITEPAEK</author>
      <guid isPermaLink="true">https://whitepaek.tistory.com/61</guid>
      <comments>https://whitepaek.tistory.com/61#entry61comment</comments>
      <pubDate>Mon, 31 Aug 2020 01:52:41 +0900</pubDate>
    </item>
    <item>
      <title>[1] 스프링 프로젝트에 애플 로그인 API 연동을 위한 Apple Developer 설정</title>
      <link>https://whitepaek.tistory.com/60</link>
      <description>&lt;p&gt;[1] 스프링 프로젝트에 애플 로그인 API 연동을 위한 Apple Developer 설정 - (현재 글)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://whitepaek.tistory.com/61&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[2] 스프링 프로젝트에 애플 로그인 API 연동하기&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Spring API Server에서 Apple Login API를 연동하여 앱(App)에 제공하기 위한 개발을 해봤습니다.&lt;/p&gt;
&lt;p&gt;애플에게 사용자 인증 토큰을 발급받는 로직뿐 아니라 Android와 ios 12 이하 버전에서는 로그인 페이지를 앱에게 제공해주어야 합니다.&lt;/p&gt;
&lt;p&gt;(ios 13 버전 이상에서는 SDK가 제공되는 걸로 알고 있습니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;나이스 한 코드를 작성할 실력은 부족하지만&amp;nbsp;Apple&amp;nbsp;Developer&amp;nbsp;Documentation을 보면서 프로세스를 이해하고 글을 작성해볼 기회를 가졌다는 것에 의미를 두도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;애플 로그인 API(Sign In with Apple) 연동을 하기 위해서는 Apple Developer 사이트에서 필요한 설정을 먼저 해줘야 합니다.&lt;/p&gt;
&lt;p&gt;(참고로 Apple Developer에서 필요한 API 서비스를 이용하기 위해서는 매년 결제를 진행해야 이용할 수 있습니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/account/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Account - Apple Developer&lt;/a&gt; 사이트로 이동하여 3가지 설정을 진행하도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;[1] App ID 등록하기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;app_ids_0.png&quot; data-origin-width=&quot;2681&quot; data-origin-height=&quot;1575&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biJtOa/btqHvAUROLo/R7kb5Vywe3nzNYXDOoAOiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biJtOa/btqHvAUROLo/R7kb5Vywe3nzNYXDOoAOiK/img.png&quot; data-alt=&quot;[그림 1.1] Account - Apple Developer&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biJtOa/btqHvAUROLo/R7kb5Vywe3nzNYXDOoAOiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiJtOa%2FbtqHvAUROLo%2FR7kb5Vywe3nzNYXDOoAOiK%2Fimg.png&quot; data-filename=&quot;app_ids_0.png&quot; data-origin-width=&quot;2681&quot; data-origin-height=&quot;1575&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;figcaption&gt;[그림 1.1] Account - Apple Developer&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://developer.apple.com/account/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Account - Apple Developer&lt;/a&gt; 사이트로 이동 후 &lt;b&gt;&quot;Certificates, Identifiers &amp;amp; Profiles&quot;&lt;/b&gt;를 클릭해주세요.&lt;/span&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;style6&quot; /&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;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;app_ids_1.png&quot; data-origin-width=&quot;2472&quot; data-origin-height=&quot;589&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byDmCW/btqHxcr9oRO/mexA5XBPpZDwjrKOF9KxR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byDmCW/btqHxcr9oRO/mexA5XBPpZDwjrKOF9KxR1/img.png&quot; data-alt=&quot;[그림 1.2] Identifiers 메뉴&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byDmCW/btqHxcr9oRO/mexA5XBPpZDwjrKOF9KxR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyDmCW%2FbtqHxcr9oRO%2FmexA5XBPpZDwjrKOF9KxR1%2Fimg.png&quot; data-filename=&quot;app_ids_1.png&quot; data-origin-width=&quot;2472&quot; data-origin-height=&quot;589&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;figcaption&gt;[그림 1.2] Identifiers 메뉴&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&quot;Identifiers&quot;&lt;/b&gt; 메뉴로 이동 후 &lt;b&gt;&quot;+&quot;&lt;/b&gt; 버튼을 클릭해주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;app_ids_2.png&quot; data-origin-width=&quot;2403&quot; data-origin-height=&quot;1925&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWqRde/btqHy6kUiLD/rQM9khV2gF7IM3BXRwGKwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWqRde/btqHy6kUiLD/rQM9khV2gF7IM3BXRwGKwk/img.png&quot; data-alt=&quot;[그림 1.3] App IDs 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWqRde/btqHy6kUiLD/rQM9khV2gF7IM3BXRwGKwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWqRde%2FbtqHy6kUiLD%2FrQM9khV2gF7IM3BXRwGKwk%2Fimg.png&quot; data-filename=&quot;app_ids_2.png&quot; data-origin-width=&quot;2403&quot; data-origin-height=&quot;1925&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;figcaption&gt;[그림 1.3] App IDs 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&quot;App IDs&quot;&lt;/b&gt;를 선택 후 진행해주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;app_ids_3.png&quot; data-origin-width=&quot;2456&quot; data-origin-height=&quot;676&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vU4yj/btqHA4NKzcv/XUklSaJzyQyPqEFJVKpQ8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vU4yj/btqHA4NKzcv/XUklSaJzyQyPqEFJVKpQ8K/img.png&quot; data-alt=&quot;[그림 1.4] App 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vU4yj/btqHA4NKzcv/XUklSaJzyQyPqEFJVKpQ8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvU4yj%2FbtqHA4NKzcv%2FXUklSaJzyQyPqEFJVKpQ8K%2Fimg.png&quot; data-filename=&quot;app_ids_3.png&quot; data-origin-width=&quot;2456&quot; data-origin-height=&quot;676&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;figcaption&gt;[그림 1.4] App 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&quot;App&quot;&lt;/b&gt; 타입을 선택 후 진행해주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;app_ids_5.png&quot; data-origin-width=&quot;2479&quot; data-origin-height=&quot;717&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhDasX/btqHy57pyF2/IwvSKLrgT9XIIWpKPu32ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhDasX/btqHy57pyF2/IwvSKLrgT9XIIWpKPu32ok/img.png&quot; data-alt=&quot;[그림 1.5] App ID 정보 입력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhDasX/btqHy57pyF2/IwvSKLrgT9XIIWpKPu32ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdhDasX%2FbtqHy57pyF2%2FIwvSKLrgT9XIIWpKPu32ok%2Fimg.png&quot; data-filename=&quot;app_ids_5.png&quot; data-origin-width=&quot;2479&quot; data-origin-height=&quot;717&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;figcaption&gt;[그림 1.5] App ID 정보 입력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&quot;Description&quot;&lt;/b&gt;에 해당 App ID에 대한 간략한 설명을 적고, &lt;b&gt;&quot;Bundle ID&quot;&lt;/b&gt;는 네이밍 예시처럼 입력해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;(ex. Bundle ID : com.domainname.appname)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;app_ids_6.png&quot; data-origin-width=&quot;2310&quot; data-origin-height=&quot;1979&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNngP8/btqHGTED2cU/aUYkIlb5puDgwexs7k0KZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNngP8/btqHGTED2cU/aUYkIlb5puDgwexs7k0KZ0/img.png&quot; data-alt=&quot;[그림 1.6] Sign In with Apple 등록&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNngP8/btqHGTED2cU/aUYkIlb5puDgwexs7k0KZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNngP8%2FbtqHGTED2cU%2FaUYkIlb5puDgwexs7k0KZ0%2Fimg.png&quot; data-filename=&quot;app_ids_6.png&quot; data-origin-width=&quot;2310&quot; data-origin-height=&quot;1979&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;figcaption&gt;[그림 1.6] Sign In with Apple 등록&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;아래로 스크롤하여 &lt;b&gt;&quot;Sign In with Apple&quot;&lt;/b&gt;를 선택 후 &lt;b&gt;&quot;Edit&quot;&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;app_ids_7.png&quot; data-origin-width=&quot;2463&quot; data-origin-height=&quot;2175&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ezLcDs/btqHEEAY1eG/6ht0leFtTTI7njyPCmv7J1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ezLcDs/btqHEEAY1eG/6ht0leFtTTI7njyPCmv7J1/img.png&quot; data-alt=&quot;[그림 1.7] &amp;amp;quot;Sign In with Apple&amp;amp;quot; 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ezLcDs/btqHEEAY1eG/6ht0leFtTTI7njyPCmv7J1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FezLcDs%2FbtqHEEAY1eG%2F6ht0leFtTTI7njyPCmv7J1%2Fimg.png&quot; data-filename=&quot;app_ids_7.png&quot; data-origin-width=&quot;2463&quot; data-origin-height=&quot;2175&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;figcaption&gt;[그림 1.7] &quot;Sign In with Apple&quot; 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&quot;Enable as a primary App ID&quot;&lt;/b&gt;를 선택하고, &lt;b&gt;&quot;Endpoint&quot;&lt;/b&gt; URL를 작성해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Endpoint URL는 도메인 형식이며 기본 443 포트로 SSL 적용이 되어 있어야 합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;애플에서 유저가 &quot;이메일 변경, 앱 서비스 해지, 애플 계정 탈퇴&quot;를 했을 경우,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;입력한 Endpoint URL로 유저 정보와 이벤트에 대한 PAYLOAD 데이터를 전송합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;만약, 상황이 여의치 않아서 URI를 갖추지 못하였다면 형식을 맞춰서 임의로 작성해주도록 합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;유저의 &quot;이메일 변경, 앱 서비스 해지, 애플 계정 탈퇴&quot;에 대해서는 테스트하지 못하겠지만&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;애플 로그인에 연동은 문제없이 진행할 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;app_ids_8.png&quot; data-origin-width=&quot;2467&quot; data-origin-height=&quot;883&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWeWfW/btqHuh8EwT6/izBsvySDLwzUjyaEYKZ1u0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWeWfW/btqHuh8EwT6/izBsvySDLwzUjyaEYKZ1u0/img.png&quot; data-alt=&quot;[그림 1.8] App ID 등록 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWeWfW/btqHuh8EwT6/izBsvySDLwzUjyaEYKZ1u0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWeWfW%2FbtqHuh8EwT6%2FizBsvySDLwzUjyaEYKZ1u0%2Fimg.png&quot; data-filename=&quot;app_ids_8.png&quot; data-origin-width=&quot;2467&quot; data-origin-height=&quot;883&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;figcaption&gt;[그림 1.8] App ID 등록 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;App ID가 등록 완료되었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Team ID는 보안상의 이유로 이미지에서 지웠지만, 자신의 &lt;b&gt;&quot;Team ID&quot;&lt;/b&gt;를 알고 있어 주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Team ID는 &lt;b&gt;클라이언트 시크릿(Client sercret)&lt;/b&gt;을 생성할 때 필요한 정보입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;[2] Services ID 등록하기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;services_ids_2.png&quot; data-origin-width=&quot;2472&quot; data-origin-height=&quot;1914&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pmydu/btqHAmVn3fh/vPAK5JkxrVCSdOe7BD7Xtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pmydu/btqHAmVn3fh/vPAK5JkxrVCSdOe7BD7Xtk/img.png&quot; data-alt=&quot;[그림 2.1] Services IDs 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pmydu/btqHAmVn3fh/vPAK5JkxrVCSdOe7BD7Xtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpmydu%2FbtqHAmVn3fh%2FvPAK5JkxrVCSdOe7BD7Xtk%2Fimg.png&quot; data-filename=&quot;services_ids_2.png&quot; data-origin-width=&quot;2472&quot; data-origin-height=&quot;1914&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;figcaption&gt;[그림 2.1] Services IDs 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;이번에는 애플 로그인(Sign In with Apple)을 진행한 유저의 정보를 전달받기 위한 Services ID를 등록하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;[그림 1.2]와 동일하게 &lt;b&gt;&quot;Identifiers&quot;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메뉴에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&quot;+&quot;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;버튼을 클릭 후&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&quot;Services IDs&quot;&lt;/b&gt;를 선택하여 진행해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;services_ids_3.png&quot; data-origin-width=&quot;2465&quot; data-origin-height=&quot;582&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhOlcU/btqHAmA4FXm/1KW5AKoMZOpnSZQTArIG61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhOlcU/btqHAmA4FXm/1KW5AKoMZOpnSZQTArIG61/img.png&quot; data-alt=&quot;[그림 2.2] Services ID 정보 입력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhOlcU/btqHAmA4FXm/1KW5AKoMZOpnSZQTArIG61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdhOlcU%2FbtqHAmA4FXm%2F1KW5AKoMZOpnSZQTArIG61%2Fimg.png&quot; data-filename=&quot;services_ids_3.png&quot; data-origin-width=&quot;2465&quot; data-origin-height=&quot;582&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;figcaption&gt;[그림 2.2] Services ID 정보 입력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&quot;Description&quot;&lt;/b&gt;에 Services ID에 대한 간략한 설명을 입력하고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&quot;Identifier&quot;&lt;/b&gt;에 Services ID를 식별할 수 있는 도메인을 작성해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;(ex. Identifier : com.domainname.appname)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;services_ids_5.png&quot; data-origin-width=&quot;2471&quot; data-origin-height=&quot;582&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvskNz/btqHzFumhjr/RO2ilgrDiZa4Ek50LRJvTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvskNz/btqHzFumhjr/RO2ilgrDiZa4Ek50LRJvTK/img.png&quot; data-alt=&quot;[그림 2.3] Services ID 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvskNz/btqHzFumhjr/RO2ilgrDiZa4Ek50LRJvTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvskNz%2FbtqHzFumhjr%2FRO2ilgrDiZa4Ek50LRJvTK%2Fimg.png&quot; data-filename=&quot;services_ids_5.png&quot; data-origin-width=&quot;2471&quot; data-origin-height=&quot;582&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;figcaption&gt;[그림 2.3] Services ID 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Services ID가 등록되었다면 Identifiers 메뉴 리스트에서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;등록한 Services ID를 클릭하여 설정 페이지로 이동해주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;services_ids_7.png&quot; data-origin-width=&quot;2465&quot; data-origin-height=&quot;776&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/daxbmC/btqHAm17jWS/iZci0Lb3kFHO9SkHSVypVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/daxbmC/btqHAm17jWS/iZci0Lb3kFHO9SkHSVypVk/img.png&quot; data-alt=&quot;[그림 2.4] Services ID 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/daxbmC/btqHAm17jWS/iZci0Lb3kFHO9SkHSVypVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdaxbmC%2FbtqHAm17jWS%2FiZci0Lb3kFHO9SkHSVypVk%2Fimg.png&quot; data-filename=&quot;services_ids_7.png&quot; data-origin-width=&quot;2465&quot; data-origin-height=&quot;776&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;figcaption&gt;[그림 2.4] Services ID 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Services ID 설정 페이지에서 &lt;b&gt;&quot;Sign In with Apple&quot;&lt;/b&gt;를 선택 후 &lt;b&gt;&quot;Configure&quot;&lt;/b&gt; 버튼을 클릭해주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;services_ids_8.png&quot; data-origin-width=&quot;2458&quot; data-origin-height=&quot;1520&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYEPrq/btqHAn1iVh0/ZjVDvi3mG22kwuckaY82m1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYEPrq/btqHAn1iVh0/ZjVDvi3mG22kwuckaY82m1/img.png&quot; data-alt=&quot;[그림 2.5] App ID와 Return URLs 등록&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYEPrq/btqHAn1iVh0/ZjVDvi3mG22kwuckaY82m1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYEPrq%2FbtqHAn1iVh0%2FZjVDvi3mG22kwuckaY82m1%2Fimg.png&quot; data-filename=&quot;services_ids_8.png&quot; data-origin-width=&quot;2458&quot; data-origin-height=&quot;1520&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;figcaption&gt;[그림 2.5] App ID와 Return URLs 등록&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;앞서 등록을 진행했던 App ID를 선택 후, &lt;b&gt;&quot;Domain&quot;&lt;/b&gt;과 &lt;b&gt;&quot;Return URLs&quot;&lt;/b&gt;를 입력해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;도메인이 준비가 안되었다면 임의의 도메인을 입력해주셔도 테스트에는 문제가 없습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;하지만, Return URLs는 현재 자신의 IP/Port, URL를 정확하게 입력해줘야 합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;등록한 Return URLs로 애플 로그인을 진행한 유저의 정보가 전달되기 때문입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;(Domain과 Return URLs은 여러 개 등록할 수 있습니다.)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;services_ids_10.png&quot; data-origin-width=&quot;2461&quot; data-origin-height=&quot;980&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZEBvs/btqHBSM6sws/fyTAFIVGpI9gselIpow3AK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZEBvs/btqHBSM6sws/fyTAFIVGpI9gselIpow3AK/img.png&quot; data-alt=&quot;[그림 2.6] Services ID 등록 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZEBvs/btqHBSM6sws/fyTAFIVGpI9gselIpow3AK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZEBvs%2FbtqHBSM6sws%2FfyTAFIVGpI9gselIpow3AK%2Fimg.png&quot; data-filename=&quot;services_ids_10.png&quot; data-origin-width=&quot;2461&quot; data-origin-height=&quot;980&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;figcaption&gt;[그림 2.6] Services ID 등록 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Services ID 등록이 완료되었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;자신의 Services ID의 &lt;b&gt;&quot;Identifier&quot;&lt;/b&gt;를 기억하고 있어야 합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Services ID의 식별자(Identifier)는 &lt;b&gt;client_id, aud&lt;/b&gt;의 값으로 사용됩니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;&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;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;[3] Private Key 생성하기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;keys_1.png&quot; data-origin-width=&quot;2480&quot; data-origin-height=&quot;588&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/34Qxy/btqHvJKARzG/YhE9ZopLSKHzfmEf4jd2V1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/34Qxy/btqHvJKARzG/YhE9ZopLSKHzfmEf4jd2V1/img.png&quot; data-alt=&quot;[그림 3.1] Keys 등록&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/34Qxy/btqHvJKARzG/YhE9ZopLSKHzfmEf4jd2V1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F34Qxy%2FbtqHvJKARzG%2FYhE9ZopLSKHzfmEf4jd2V1%2Fimg.png&quot; data-filename=&quot;keys_1.png&quot; data-origin-width=&quot;2480&quot; data-origin-height=&quot;588&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;figcaption&gt;[그림 3.1] Keys 등록&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;클라이언트 시크릿(client_secret)을 생성할 때 사용할 비밀 키(private key)를 생성하도록 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&quot;Keys&quot;&lt;/b&gt; 메뉴에서 &lt;b&gt;&quot;+&quot;&lt;/b&gt; 버튼을 클릭해주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&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;2465&quot; data-origin-height=&quot;1455&quot; data-filename=&quot;keys_2.png&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AXTin/btqHBS0Aoy2/5KsYTGgrjmPuhVN87QWPjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AXTin/btqHBS0Aoy2/5KsYTGgrjmPuhVN87QWPjk/img.png&quot; data-alt=&quot;[그림 3.2] Key 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AXTin/btqHBS0Aoy2/5KsYTGgrjmPuhVN87QWPjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAXTin%2FbtqHBS0Aoy2%2F5KsYTGgrjmPuhVN87QWPjk%2Fimg.png&quot; data-origin-width=&quot;2465&quot; data-origin-height=&quot;1455&quot; data-filename=&quot;keys_2.png&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;figcaption&gt;[그림 3.2] Key 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Key Name을 입력 후,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&quot;Sign in with Apple&quot;&lt;/b&gt;를 선택 후 &lt;b&gt;&quot;Configure&quot;&lt;/b&gt; 버튼을 클릭해주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;keys_3.png&quot; data-origin-width=&quot;2457&quot; data-origin-height=&quot;884&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eGSCRU/btqHui0OrXk/dRDzZjAOyCkhi3KuXZCUm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eGSCRU/btqHui0OrXk/dRDzZjAOyCkhi3KuXZCUm0/img.png&quot; data-alt=&quot;[그림 3.3] App ID 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eGSCRU/btqHui0OrXk/dRDzZjAOyCkhi3KuXZCUm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeGSCRU%2FbtqHui0OrXk%2FdRDzZjAOyCkhi3KuXZCUm0%2Fimg.png&quot; data-filename=&quot;keys_3.png&quot; data-origin-width=&quot;2457&quot; data-origin-height=&quot;884&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;figcaption&gt;[그림 3.3] App ID 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;앞서 생성했던 App ID를 선택해주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;keys_5.png&quot; data-origin-width=&quot;2464&quot; data-origin-height=&quot;976&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wkht7/btqHBynK5gD/6qKEbwKbxIqK2bGkCAJOOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wkht7/btqHBynK5gD/6qKEbwKbxIqK2bGkCAJOOk/img.png&quot; data-alt=&quot;[그림 3.4] Key 등록 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wkht7/btqHBynK5gD/6qKEbwKbxIqK2bGkCAJOOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwkht7%2FbtqHBynK5gD%2F6qKEbwKbxIqK2bGkCAJOOk%2Fimg.png&quot; data-filename=&quot;keys_5.png&quot; data-origin-width=&quot;2464&quot; data-origin-height=&quot;976&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;figcaption&gt;[그림 3.4] Key 등록 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Private Key 생성을 위한 &lt;b&gt;&quot;Key&quot;&lt;/b&gt; 등록은 비교적 쉽게 끝냈습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;keys_6.png&quot; data-origin-width=&quot;2464&quot; data-origin-height=&quot;832&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d7skNH/btqHscNg3qT/QaKj2LegKuMm1oPbOwpmek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d7skNH/btqHscNg3qT/QaKj2LegKuMm1oPbOwpmek/img.png&quot; data-alt=&quot;[그림 3.5]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d7skNH/btqHscNg3qT/QaKj2LegKuMm1oPbOwpmek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd7skNH%2FbtqHscNg3qT%2FQaKj2LegKuMm1oPbOwpmek%2Fimg.png&quot; data-filename=&quot;keys_6.png&quot; data-origin-width=&quot;2464&quot; data-origin-height=&quot;832&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;figcaption&gt;[그림 3.5]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;자신의 &lt;b&gt;&quot;Key ID&quot;&lt;/b&gt;를 기억해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;그리고 &lt;b&gt;&quot;Download&quot;&lt;/b&gt; 버튼을 클릭하여 Private Key 정보가 들어있는 &lt;b&gt;&quot;AuthKey_[KeyID].p8&quot;&lt;/b&gt; 파일을 다운로드하여주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;주의할 점은 다운로드는 최초 1회만 가능하고 이후에는 다시 다운로드하지 못하니 파일을 잘 보관해주도록 합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;(혹시, 파일을 잃어버렸다면 [그림 3.1]부터 다시 진행해주세요.)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Key ID와 파일은 클라이언트 시크릿(client secret)을 생성할 때 필요한 데이터입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;이상으로 애플 로그인 API 연동을 위한 Apple Developer의 3가지 설정을 완료했습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;설정에 대해서 다시 한번 정리해보도록 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[1] App ID - 자신의 App 서비스를 생성하고, 서비스에 애플 로그인으로 가입한 유저에 대한 이벤트를 전달받기 위한 설정입니다.&lt;/p&gt;
&lt;p&gt;클라이언트 시크릿을 생성할 때 사용될 &lt;b&gt;Team ID&lt;/b&gt;를 기억해주세요.&lt;/p&gt;
&lt;p&gt;(유저에 대한 이벤트는 &quot;이메일 변경, 서비스 해지, 애플 계정 탈퇴&quot;에 대한 것입니다.&lt;/p&gt;
&lt;p&gt;Endpoint URL에 등록한 URL로 PAYLOAD라는 키로 JWT 데이터를 전달받을 수 있습니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[2] Services ID - 애플 로그인을 진행한 유저의 정보를 전달받기 위한 설정입니다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;client_id&lt;/b&gt;와 &lt;b&gt;aud&lt;/b&gt;로 사용될&lt;b&gt; Identifier&lt;/b&gt;를 기억해주세요.&lt;/p&gt;
&lt;p&gt;(Return URLs에 등록된 URL로 유저 정보에 대한 JSON 데이터를 전달받을 수 있습니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[3] Key - 클라이언트 시크릿을 생성할 때 필요한 Private Key를 생성하기 위한 설정입니다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Key ID&lt;/b&gt;와 &lt;b&gt;.p8&lt;/b&gt; 파일은 기억해주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;모든 설정을 완료했으니,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;다음 포스트에서 코드를 참고하여 확인해보도록 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://whitepaek.tistory.com/61&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;다음 포스트 읽으러 가기 ‣&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <category>Spring</category>
      <category>apple</category>
      <category>Apple API</category>
      <category>apple login</category>
      <category>Sign in with Apple</category>
      <category>스프링 애플 로그인 연동</category>
      <category>애플 API</category>
      <category>애플 로그인</category>
      <category>애플 로그인 연동</category>
      <author>WHITEPAEK</author>
      <guid isPermaLink="true">https://whitepaek.tistory.com/60</guid>
      <comments>https://whitepaek.tistory.com/60#entry60comment</comments>
      <pubDate>Sun, 30 Aug 2020 23:00:56 +0900</pubDate>
    </item>
    <item>
      <title>[IntelliJ] 스프링 프로젝트 구성 설정</title>
      <link>https://whitepaek.tistory.com/56</link>
      <description>&lt;div style=&quot;border: 1px dashed; padding: 10px;&quot;&gt;&lt;b&gt;Step by step!&lt;/b&gt;&lt;br /&gt;&lt;span&gt;∙Step 01 ‣ &lt;a href=&quot;https://whitepaek.tistory.com/55&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;스프링 프로젝트 생성&lt;/a&gt;&lt;br /&gt;∙Step 02 ‣ (현재 글) 스프링 프로젝트 구성 설정&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href=&quot;https://whitepaek.tistory.com/55&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;스프링 프로젝트 생성&lt;/b&gt;&lt;/a&gt; 글에서 메이븐(Maven) 빌드 도구와 스프링 MVC(Spring MVC) 프레임워크를 이용해서 스프링 프로젝트를 생성하는 방법에 대해 알아봤습니다. 프로젝트를 만들기만 하였기 때문에 메이븐 관련 파일&amp;nbsp;&lt;b&gt;pom.xml&lt;/b&gt;과 스프링 MVC 프레임워크에 관련된&amp;nbsp;&lt;b&gt;web.xml, dispatcher-servlet.xml, applicationContext.xml&lt;/b&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;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;macOS&lt;/b&gt; 운영체제에서 &lt;b&gt;IntelliJ IDEA Ultimate(Version 2020.1.1)&lt;/b&gt;를 이용하여 진행하였습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;Windows에서도 IntelliJ IDEA의 GUI는 거의 동일하기 때문에 큰 어려움은 없을 거예요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;그리고 해당 글은 대부분 스프링 프레임워크에 대한 설명이기 때문에 IDE가 다르다고 해서 문제가 되지는 않습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;하지만, 약간의 몇몇 부분에 대해서는 IDE에 따라 설정 방식이 다른 부분이 있을 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;(IDE에 따른 설정 방식은 검색을 통해 확인 부탁드립니다.)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&quot;스프링 프레임워크 구조 또는 동작 방식&quot;에 대해 검색을 하면 관련 개념을 습득할 수 있습니다.&amp;nbsp;이 부분에 대한 자세한 이론 설명은 생략하도록 하고 인텔리제이(IntelliJ IDEA)와 이클립스(Eclipse)에서 스프링 프로젝트 생성 후 구성되는 디렉토리와 파일을 비교해서 확인해보겠습니다. 비교해서 설명하는 이유는 인텔리제이와 이클립스 또는 STS에서 생성되는 디렉토리 구성과 파일 명이 다르기 때문입니다. 저는 이해도가 없어서 헷갈리기도 했지만, 관련 내용을 검색해도 서로 다른 정보 때문에 괜한 찝찝함을 갖고 있었기 때문입니다. (특히 스프링 관련 서적을 확인해보면 이클립스(STS) 기반으로 작성되어 있는 경우가 대부분인데 인텔리제이에서&amp;nbsp;&lt;b&gt;&lt;a href=&quot;https://spring.io/tools&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;스프링(Spring)이 공식으로 지원&lt;/a&gt;하는 STS 구조로 프로젝트를 구성&lt;/b&gt;하여 IDE의 초기 구성 차이점에 대해 이해하고, 스프링 프로젝트를 진행하는데 찝찝함을 없애고 실습을 원활히 따라갈 수 있는게 목적입니다.)&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;아래 &lt;span style=&quot;color: #333333;&quot;&gt;[그림 1]과 [그림 2]를 참고해서 설명을 시작하도록 하겠습니다. &lt;span style=&quot;color: #ee2323;&quot;&gt;(1)번 빨간박스 영역들은 디렉토리를 나타낸 것&lt;/span&gt;이고, &lt;span style=&quot;color: #006dd7;&quot;&gt;(2)번 파란박스 영역들은 XML 파일을 나타낸 것&lt;/span&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;405&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;818&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OTHBK/btqEziCrlsQ/K9kOG9ztZBZ1PLYGGPmuQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OTHBK/btqEziCrlsQ/K9kOG9ztZBZ1PLYGGPmuQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OTHBK/btqEziCrlsQ/K9kOG9ztZBZ1PLYGGPmuQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOTHBK%2FbtqEziCrlsQ%2FK9kOG9ztZBZ1PLYGGPmuQk%2Fimg.png&quot; width=&quot;405&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;818&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;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;1020&quot; width=&quot;400&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JgvVE/btqEA1GE5ej/ikETJPRvtgFPVBKn6li3sK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JgvVE/btqEA1GE5ej/ikETJPRvtgFPVBKn6li3sK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JgvVE/btqEA1GE5ej/ikETJPRvtgFPVBKn6li3sK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJgvVE%2FbtqEA1GE5ej%2FikETJPRvtgFPVBKn6li3sK%2Fimg.png&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;1020&quot; width=&quot;400&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;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[그림 1] 인텔리제이에서 스프링 프로젝트를 생성했을 때 구성되는 디렉토리와 XML 파일&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[그림 2] 이클립스(STS)에서 스프링 프로젝트를 생성했을 때 구성되는 디렉토리와 XML 파일 (인텔리제이를 이용하여 예시를 구현한 화면)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;b&gt;디렉토리(빨간박스&amp;nbsp;영역)&lt;/b&gt;부터 확인해보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;아래 표를 참고하면 두 개의 IDE가 생성하는 디렉토리의 차이를 쉽게 이해할 수 있을 거예요.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 133px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px; text-align: center;&quot;&gt;&lt;b&gt;디렉토리&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px; text-align: center;&quot;&gt;&lt;b&gt;인텔리제이&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px; text-align: center;&quot;&gt;&lt;b&gt;이클립스 또는 STS&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;소스 루트(Source Root)&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;src/main/java&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;src/main/java&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;리소스 루트(Resources Root)&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;src/main/resources&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;src/main/resources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;테스트 소스 루트(Test Sources Root)&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;src/test/java&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;src/test/java&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;테스트 리소스 루트(Test Resources Root)&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px; text-align: center;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;src/test/resources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;웹 리소스(Web Resources)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;web&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;src/main/webapp&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;기타&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;web/WEB-INF/&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;src/webapp/&lt;span style=&quot;color: #333333;&quot;&gt;WEB-INF&lt;/span&gt;/classes&lt;br /&gt;src/webapp/&lt;span style=&quot;color: #333333;&quot;&gt;WEB-INF&lt;/span&gt;/spring/appServlet/&lt;br /&gt;src/webapp/&lt;span style=&quot;color: #333333;&quot;&gt;WEB-INF&lt;/span&gt;/views/&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;두 개의 IDE를 비교해보면 인텔리제이에서는 생성되지 않은 디렉토리가 있을 뿐 아니라&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;인텔리제이([그림 1])에서는&lt;span&gt;&amp;nbsp;&quot;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;src&quot; 디렉토리와 같은 레벨에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;웹 리소스 디렉토리(web)가&lt;/span&gt;&amp;nbsp;생성&lt;/b&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;이클립스([그림 2])에서는&lt;span&gt;&amp;nbsp;&quot;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;src/main/&quot; 디렉토리 하위에&amp;nbsp;웹 리소스 디렉토리(webapp)가 생성&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;된 걸 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;인텔리제이에서 [그림 1]과 같이 구성된 디렉토리 구조에서 생성되지 않은 디렉토리를 추가하고&amp;nbsp;&lt;/span&gt;설정을 통해 프로젝트를 진행하는데 문제는 없습니다.&amp;nbsp;하지만 스프링(Spring)에서 공식으로 제공하는 STS 디렉토리 구조를 따라 &lt;b&gt;웹 리소스 디렉토리(web)를 &quot;src/main/&quot; 디렉토리 하위로 이동시키고 디렉토리 명을 &quot;webapp&quot;으로 변경하여 진행&lt;/b&gt;하도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;변경하여 진행하는 이유는 많은 개발자들이 &lt;b&gt;STS 디렉토리 구조&lt;/b&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;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;2170&quot; data-origin-height=&quot;1268&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bchKsb/btqEBPZP2U3/tIoMTpnUonu5sDMnTuD0k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bchKsb/btqEBPZP2U3/tIoMTpnUonu5sDMnTuD0k0/img.png&quot; data-alt=&quot;[그림 3] war 플러그인 설정에 따른 디렉토리 기본 경로&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bchKsb/btqEBPZP2U3/tIoMTpnUonu5sDMnTuD0k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbchKsb%2FbtqEBPZP2U3%2FtIoMTpnUonu5sDMnTuD0k0%2Fimg.png&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;2170&quot; data-origin-height=&quot;1268&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;figcaption&gt;[그림 3] war 플러그인 설정에 따른 디렉토리 기본 경로&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;추가적인 이유로는&lt;b&gt;&amp;nbsp;war&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;플러그인에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;src/main/webapp&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;디렉토리를&lt;/span&gt; 기본 경로로 지정하고 있습니다. 그렇기 때문에 패키징 할 때&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;웹 리소스 디렉토리(webapp) 경로&lt;/b&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;Apache Maven WAR Plugin Document ‣ &lt;a href=&quot;http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;maven.apache.org/plugins/maven-war-plugin/war-mojo.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이번에는&amp;nbsp;&lt;b&gt;XML 파일(파란박스 영역)&lt;/b&gt;에 대한 차이를 알아보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 95px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;역할&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;인텔리제이&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;이클립스 또는 STS&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;WAS(Web Application Server, Tomcat)가 실행되고 웹 어플리케이션에 필요한 설정을 구성하는 XML 파일&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;web.xml&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;web.xml&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;[애플리케이션 컨텍스트(Application Context) 파일]&lt;br /&gt;웹 애플리케이션 공통으로 사용되는 빈(bean)을 설정하는 XML 파일&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;‣ 서로 다른 dispatcher-servlet.xml(servlet-context.xml)에서 공유해야 하는 빈을 설정한다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;applicationContext.xml&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;root-context.xml&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;[서블릿 컨텍스트(Servlet Context) 파일]&lt;br /&gt;필요한 상황에 맞춰 사용되는 빈(bean)을 설정하는 XML 파일, 일반적으로 Web 관련된 빈을 설정한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;‣ applicationContext.xml(root-context.xml)에 동일한 빈이 존재하는 경우에는 dispatcher-servlet.xml(servlet-context.xml) 설정된 빈이 우선적으로 적용된다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;dispatcher-servlet.xml&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;servlet-context.xml&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px;&quot;&gt;메이븐 설정 파일이며,&amp;nbsp;라이브러리 의존성 관리와 패키징 등 관련 설정을 구성하는 XML 파일&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px; text-align: center;&quot;&gt;pom.xml&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 19px; text-align: center;&quot;&gt;pom.xml&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;위의 표를 참고하여 각 파일이 어떤 역할을 하는지 읽어보세요. 인텔리제이와 이클립스에서 생성되는 파일 명이 다를 수 있고, 개발자에 따라 파일 명을 다르게 설정할 수 있기 때문에 기본으로 생성되는 파일 명을 기준으로 비교하여 표를 작성해봤습니다. (&quot;web.xml&quot;과 &quot;pom.xml&quot;은 동일하게 사용됩니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;디렉토리 설명에서 언급한 것처럼 XML 파일 또한 인텔리제이에서 생성된 컨텍스트 파일(applicationContext.xml)과 서블릿 컨텍스트 파일(dispatcher-servlet.xml)을 &lt;b&gt;STS에서 생성한 파일 명을 기준&lt;/b&gt;으로 변경하고 디렉토리 위치를 설정하여 프로젝트를 구성하도록 하겠습니다. (참고, &quot;web.xml&quot;에서 각 컨텍스트 파일을 설정하기 때문에 파일 명이 달라도 큰 의미가 없습니다. 특히 컨텍스트 분리 전략에 따라서 추가적인 컨텍스트 파일을 사용할 수도 있습니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;두 개의 IDE에 따른 디렉토리와 XML 파일에 대해 간략하게 비교해봤습니다. 위에서 설명드린 것처럼 &lt;a href=&quot;https://whitepaek.tistory.com/55&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;스프링 프로젝트 생성&lt;/b&gt;&lt;/a&gt;에 이어서 &lt;b&gt;인텔리제이에서 기본으로 생성된 디렉토리와 XML 파일의 구성을 스프링에서 공식으로 지원하는 STS 구성으로 변경&lt;/b&gt;해보도록 하겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;2778&quot; data-origin-height=&quot;1258&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xkVzN/btqEACHsL8F/tB0TzISXgj7eNo30SVfhj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xkVzN/btqEACHsL8F/tB0TzISXgj7eNo30SVfhj1/img.png&quot; data-alt=&quot;[그림 4] web 디렉토리 경로 변경 전&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xkVzN/btqEACHsL8F/tB0TzISXgj7eNo30SVfhj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxkVzN%2FbtqEACHsL8F%2FtB0TzISXgj7eNo30SVfhj1%2Fimg.png&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;2778&quot; data-origin-height=&quot;1258&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;figcaption&gt;[그림 4] web 디렉토리 경로 변경 전&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;web&lt;/b&gt; 디렉토리 경로를 &lt;b&gt;src/main&lt;/b&gt;&amp;nbsp;디렉토리 하위로 이동하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;web&lt;/b&gt; 디렉토리를 클릭 후 &lt;b&gt;F6&lt;/b&gt; 단축키를 눌러주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;1496&quot; data-origin-height=&quot;592&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/de7ctB/btqEChhEcTF/GujeVW4wncveSas1kwl8v1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/de7ctB/btqEChhEcTF/GujeVW4wncveSas1kwl8v1/img.png&quot; data-alt=&quot;[그림 5] 변경하는 디렉토리 경로 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/de7ctB/btqEChhEcTF/GujeVW4wncveSas1kwl8v1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fde7ctB%2FbtqEChhEcTF%2FGujeVW4wncveSas1kwl8v1%2Fimg.png&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;1496&quot; data-origin-height=&quot;592&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;figcaption&gt;[그림 5] 변경하는 디렉토리 경로 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Move 팝업 창이 나타나면 해당 프로젝트의 &lt;b&gt;&quot;/src/main&quot;&lt;/b&gt; 디렉토리 경로를 지정해주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;2778&quot; data-origin-height=&quot;1258&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8NQeP/btqEBnikpdk/3uIfI1EcXodwE5ZmbBAY6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8NQeP/btqEBnikpdk/3uIfI1EcXodwE5ZmbBAY6k/img.png&quot; data-alt=&quot;[그림 6] web 디렉토리 경로 변경 후&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8NQeP/btqEBnikpdk/3uIfI1EcXodwE5ZmbBAY6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8NQeP%2FbtqEBnikpdk%2F3uIfI1EcXodwE5ZmbBAY6k%2Fimg.png&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;2778&quot; data-origin-height=&quot;1258&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;figcaption&gt;[그림 6] web 디렉토리 경로 변경 후&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;web 디렉토리를 &amp;nbsp;&quot;src/main&quot; 디렉토리 하위로 이동시켰습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;이번에는&lt;b&gt; &quot;web&quot;&lt;/b&gt; 디렉토리 이름을 &lt;b&gt;&quot;webapp&quot;&lt;/b&gt;으로 변경하기 위해서 &lt;b&gt;web&lt;/b&gt; 디렉토리를 클릭 후 &lt;b&gt;Shift+F6&lt;/b&gt; 단축키를 눌러주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;728&quot; width=&quot;500&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddzNTk/btqEzzdpB6p/joEXGzr5VqVcis3yn9h83k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddzNTk/btqEzzdpB6p/joEXGzr5VqVcis3yn9h83k/img.png&quot; data-alt=&quot;[그림 7] &amp;amp;quot;web&amp;amp;quot; 디렉토리 이름을 &amp;amp;quot;webapp&amp;amp;quot;으로 변경&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddzNTk/btqEzzdpB6p/joEXGzr5VqVcis3yn9h83k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddzNTk%2FbtqEzzdpB6p%2FjoEXGzr5VqVcis3yn9h83k%2Fimg.png&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;728&quot; width=&quot;500&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;figcaption&gt;[그림 7] &quot;web&quot; 디렉토리 이름을 &quot;webapp&quot;으로 변경&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Rename 팝업 창이 나타나면 &lt;b&gt;&quot;web&quot;을 &quot;webapp&quot;으로 변경&lt;/b&gt;해주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;2778&quot; data-origin-height=&quot;1258&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mdjMR/btqEBP6J4qW/TXqYAt6euqUkVwVRtPVnrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mdjMR/btqEBP6J4qW/TXqYAt6euqUkVwVRtPVnrK/img.png&quot; data-alt=&quot;[그림 8] &amp;amp;quot;webapp&amp;amp;quot; 디렉토리 이름으로 변경 후&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mdjMR/btqEBP6J4qW/TXqYAt6euqUkVwVRtPVnrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmdjMR%2FbtqEBP6J4qW%2FTXqYAt6euqUkVwVRtPVnrK%2Fimg.png&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;2778&quot; data-origin-height=&quot;1258&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;figcaption&gt;[그림 8] &quot;webapp&quot; 디렉토리 이름으로 변경 후&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&quot;webapp&quot;으로 디렉토리 이름이 변경되었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;이번에는 웹 리소스 디렉토리 경로를 설정해야 합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;command+;(Ctrl+Alt+Shift+S)&lt;/b&gt; 단축키를 눌러주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2272&quot; data-origin-height=&quot;1420&quot; data-filename=&quot;9.png&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bX6awW/btqEz0IDfnS/FoFVI3i0xkv3aBkAcI9UaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bX6awW/btqEz0IDfnS/FoFVI3i0xkv3aBkAcI9UaK/img.png&quot; data-alt=&quot;[그림 9] 웹 리소스 디렉토리 경로 설정 전&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bX6awW/btqEz0IDfnS/FoFVI3i0xkv3aBkAcI9UaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbX6awW%2FbtqEz0IDfnS%2FFoFVI3i0xkv3aBkAcI9UaK%2Fimg.png&quot; data-origin-width=&quot;2272&quot; data-origin-height=&quot;1420&quot; data-filename=&quot;9.png&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;figcaption&gt;[그림 9] 웹 리소스 디렉토리 경로 설정 전&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Project Structure 창이 나타나면 Project Settings 목록에서 &lt;b&gt;Modules &amp;gt; Web을 선택&lt;/b&gt;하면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Web Resource Directory 경로가 빨간색으로 표시&lt;/b&gt;되는 걸 확인할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;빨간색으로 표시되는 경로를 더블클릭해주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;10.png&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;568&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1u4JI/btqEzZJHCyo/YOGrxnwXnAv8s7TwQjZrPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1u4JI/btqEzZJHCyo/YOGrxnwXnAv8s7TwQjZrPK/img.png&quot; data-alt=&quot;[그림 10] 웹 리소스 디렉토리 경로 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1u4JI/btqEzZJHCyo/YOGrxnwXnAv8s7TwQjZrPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1u4JI%2FbtqEzZJHCyo%2FYOGrxnwXnAv8s7TwQjZrPK%2Fimg.png&quot; data-filename=&quot;10.png&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;568&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;figcaption&gt;[그림 10] 웹 리소스 디렉토리 경로 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Web Resource Directory Path 팝업 창이 나타나면 웹 리소스 디렉토리 경로를 해당 프로젝트의&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&quot;/src/main/webapp&quot; 디렉토리 경로로 설정&lt;/b&gt;해주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;11.png&quot; data-origin-width=&quot;2272&quot; data-origin-height=&quot;1420&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beLU0f/btqEAEk2vZs/lzmbupsVZSXG9i1Uh9SAu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beLU0f/btqEAEk2vZs/lzmbupsVZSXG9i1Uh9SAu1/img.png&quot; data-alt=&quot;[그림 11] 웹 리소스 디렉토리 경로 설정 후&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beLU0f/btqEAEk2vZs/lzmbupsVZSXG9i1Uh9SAu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeLU0f%2FbtqEAEk2vZs%2FlzmbupsVZSXG9i1Uh9SAu1%2Fimg.png&quot; data-filename=&quot;11.png&quot; data-origin-width=&quot;2272&quot; data-origin-height=&quot;1420&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;figcaption&gt;[그림 11] 웹 리소스 디렉토리 경로 설정 후&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;웹 리소스 디렉토리 경로를 &quot;/src/main/webapp&quot; 디렉토리 위치로 설정이 정상적으로 완료되면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;빨간색 표시가 사라집니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;12.png&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;1266&quot; width=&quot;300&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FKB0l/btqEzAcpJoR/UOXXFA88YckpENUfnRrmS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FKB0l/btqEzAcpJoR/UOXXFA88YckpENUfnRrmS1/img.png&quot; data-alt=&quot;[그림 12] 디렉토리 생성 전&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FKB0l/btqEzAcpJoR/UOXXFA88YckpENUfnRrmS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFKB0l%2FbtqEzAcpJoR%2FUOXXFA88YckpENUfnRrmS1%2Fimg.png&quot; data-filename=&quot;12.png&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;1266&quot; width=&quot;300&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;figcaption&gt;[그림 12] 디렉토리 생성 전&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;웹 리소스 디렉토리 경로를 &quot;/src/main/webapp&quot;으로 설정을 완료했으면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;컨텍스트 파일을 관리할 디렉토리를 생성하도록 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;WEB-INF&lt;/b&gt; 디렉토리를 클릭 후 &lt;b&gt;command+N(Alt+Insert)&lt;/b&gt; 단축키를 눌러서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;팝업 메뉴를 활성화하고 &lt;b&gt;Directory&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;13.png&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;196&quot; width=&quot;500&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVinMo/btqEzAi3m66/fkDl5KuQHr9qMhWmFpfy3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVinMo/btqEzAi3m66/fkDl5KuQHr9qMhWmFpfy3K/img.png&quot; data-alt=&quot;[그림 13] 디렉토리 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVinMo/btqEzAi3m66/fkDl5KuQHr9qMhWmFpfy3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVinMo%2FbtqEzAi3m66%2FfkDl5KuQHr9qMhWmFpfy3K%2Fimg.png&quot; data-filename=&quot;13.png&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;196&quot; width=&quot;500&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;figcaption&gt;[그림 13] 디렉토리 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;/webapp/WEB-INF 디렉토리 하위에 스프링 컨텍스트 파일(Application Context, Servlet Context)을 관리할 &lt;b&gt;spring 디렉토리을 생성&lt;/b&gt;하고,&amp;nbsp;spring 디렉토리 하위에 서블릿 컨텍스트 파일을 관리할 &lt;b&gt;appServlet 디렉토리를 생성&lt;/b&gt;해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&quot;spring/appServlet&quot;으로 디렉토리 이름을 입력하면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;spring 디렉토리를 생성하고 하위에 appServlet 디렉토리를 한 번에 생성할 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;14.png&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;910&quot; width=&quot;300&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tx7Ay/btqEA1tlFsH/KKnhKhictBkOoXEBw3elb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tx7Ay/btqEA1tlFsH/KKnhKhictBkOoXEBw3elb1/img.png&quot; data-alt=&quot;[그림 14] 디렉토리 생성 후&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tx7Ay/btqEA1tlFsH/KKnhKhictBkOoXEBw3elb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftx7Ay%2FbtqEA1tlFsH%2FKKnhKhictBkOoXEBw3elb1%2Fimg.png&quot; data-filename=&quot;14.png&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;910&quot; width=&quot;300&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;figcaption&gt;[그림 14] 디렉토리 생성 후&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&quot;src/main/webapp/WEB-INF/spring/appServlet&quot;&lt;/b&gt; 디렉토리가 생성됐습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;[그림 12] ~ [그림 14]의 과정처럼&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;/WEB-INF&lt;/b&gt; 디렉토리 하위에 &lt;b&gt;views 디렉토리를 생성&lt;/b&gt;하고,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;/test&lt;/b&gt; 디렉토리 하위에 &lt;b&gt;resources 디렉토리를 생성&lt;/b&gt;해주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;15.png&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;988&quot; width=&quot;300&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckanQB/btqEzzEyDGp/r887g0yCj8LTwLZtfxLov0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckanQB/btqEzzEyDGp/r887g0yCj8LTwLZtfxLov0/img.png&quot; data-alt=&quot;[그림 15] 스프링 프로젝트 디렉토리 구성 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckanQB/btqEzzEyDGp/r887g0yCj8LTwLZtfxLov0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckanQB%2FbtqEzzEyDGp%2Fr887g0yCj8LTwLZtfxLov0%2Fimg.png&quot; data-filename=&quot;15.png&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;988&quot; width=&quot;300&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;figcaption&gt;[그림 15] 스프링 프로젝트 디렉토리 구성 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;인텔리제이에서 생성한 스프링 프로젝트의 디렉토리 구성을 &lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;STS 디렉토리 구성처럼&amp;nbsp;&lt;/span&gt;변경 완료&lt;/b&gt;했습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;[그림 15]는 디렉토리 구성이 최종적으로 완료된 상태입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&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;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;16.png&quot; data-origin-width=&quot;1576&quot; data-origin-height=&quot;2242&quot; width=&quot;500&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lUxCe/btqEzZpxfme/RHprBxAtAApQAAmYyHubx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lUxCe/btqEzZpxfme/RHprBxAtAApQAAmYyHubx1/img.png&quot; data-alt=&quot;[그림 16] 테스트 리소스 루트 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lUxCe/btqEzZpxfme/RHprBxAtAApQAAmYyHubx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlUxCe%2FbtqEzZpxfme%2FRHprBxAtAApQAAmYyHubx1%2Fimg.png&quot; data-filename=&quot;16.png&quot; data-origin-width=&quot;1576&quot; data-origin-height=&quot;2242&quot; width=&quot;500&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;figcaption&gt;[그림 16] 테스트 리소스 루트 설정&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;/test 디렉토리 하위에 생성한&lt;b&gt; resources 디렉토리 모양&lt;/b&gt;이 일반 디렉토리 모양인 경우라면 &lt;b&gt;테스트 리소스 루트(Test Resources Root) 설정이 안 된 것&lt;/b&gt;입니다. 이런 경우에는&amp;nbsp;resources 디렉토리를 우클릭 후 &lt;b&gt;Mark Directory as &amp;gt; Test Resources Root&lt;/b&gt;를 클릭해서 설정해주세요.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;이어서 컨텍스트 파일 이름을 변경하고 파일 경로를 컨텍스트를 관리하기 위해 생성한 디렉토리 위치로 변경하겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;17.png&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;988&quot; width=&quot;300&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D3qto/btqEBdAmEhW/Ngn9suRewE1pldHqbKS1LK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D3qto/btqEBdAmEhW/Ngn9suRewE1pldHqbKS1LK/img.png&quot; data-alt=&quot;[그림 17] 컨텍스트 파일 명 변경 전&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D3qto/btqEBdAmEhW/Ngn9suRewE1pldHqbKS1LK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD3qto%2FbtqEBdAmEhW%2FNgn9suRewE1pldHqbKS1LK%2Fimg.png&quot; data-filename=&quot;17.png&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;988&quot; width=&quot;300&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;figcaption&gt;[그림 17] 컨텍스트 파일 명 변경 전&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;두 개의 컨텍스트 파일 명을 STS의 컨텍스트 파일 명으로 변경하도록 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;[그림 6] ~ [그림 7]에서 진행했던 것처럼&amp;nbsp;컨텍스트 파일을 클릭 후 &lt;b&gt;Shift+F6&lt;/b&gt; 단축키를 눌러서 각 파일명을 변경해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;applicationContext.xml &amp;rarr; root-context.xml&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;dispatcher-servlet.xml &amp;rarr; servlet-context.xml&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;18.png&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;988&quot; width=&quot;300&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNAhOH/btqEA0H1r95/iMKSZsHA85oqzq2fyK84G1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNAhOH/btqEA0H1r95/iMKSZsHA85oqzq2fyK84G1/img.png&quot; data-alt=&quot;[그림 18] 컨텍스트 파일 명 변경 후&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNAhOH/btqEA0H1r95/iMKSZsHA85oqzq2fyK84G1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNAhOH%2FbtqEA0H1r95%2FiMKSZsHA85oqzq2fyK84G1%2Fimg.png&quot; data-filename=&quot;18.png&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;988&quot; width=&quot;300&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;figcaption&gt;[그림 18] 컨텍스트 파일 명 변경 후&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;각 컨텍스트 파일 명을 변경했으면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;[그림 4 ] ~ [그림 5]에서 진행했던 것처럼&amp;nbsp;&lt;b&gt;F6&lt;/b&gt; 단축키를 눌러서 디렉토리 경로를 변경해주도록 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;애플리케이션 컨텍스트&amp;nbsp;파일(&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;root-context.xml&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;은 &lt;b&gt;/spring&lt;/b&gt; 디렉토리 하위로 이동하고,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;서블릿 컨텍스트 파일(&lt;b&gt;servlet-context.xml&lt;/b&gt;) 파일은 &lt;b&gt;/spring/appServlet&lt;/b&gt; 디렉토리 하위로 이동해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;(추가적으로 index.jsp 파일은 &lt;b&gt;/views&lt;/b&gt; 디렉토리 하위로 이동해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;index.jsp 파일은 스프링의 컨텍스트 파일이 아닌 JSP 파일입니다.)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;19.png&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;988&quot; width=&quot;300&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VoIBk/btqECuHXkpY/ibW1LhzmEqH6oqJ6aauTW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VoIBk/btqECuHXkpY/ibW1LhzmEqH6oqJ6aauTW0/img.png&quot; data-alt=&quot;[그림 19] 컨텍스트 파일의 디렉토리 경로 변경 후&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VoIBk/btqECuHXkpY/ibW1LhzmEqH6oqJ6aauTW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVoIBk%2FbtqECuHXkpY%2FibW1LhzmEqH6oqJ6aauTW0%2Fimg.png&quot; data-filename=&quot;19.png&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;988&quot; width=&quot;300&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;figcaption&gt;[그림 19] 컨텍스트 파일의 디렉토리 경로 변경 후&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;인텔리제이에서 생성된 컨텍스트 파일의 이름과 디렉토리 경로를 &lt;b&gt;STS에서 생성된 스프링 프로젝트 구성처럼 변경 완료&lt;/b&gt;했습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;[그림 19]는 모든 구성이 완료된 스프링 프로젝트입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;디렉토리와 컨텍스트 파일에 생기는 빨간 줄은&amp;nbsp;&lt;b&gt;스프링 설정이 아직 안된 상태&lt;/b&gt;라서 생기는 것입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;다음 포스트는 스프링 설정을 진행해서 빨간 줄은 모두 없애고 프로젝트를 실행해보도록 하겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;현재까지의 포스트에서는 스프링 프로젝트를 생성하고 구성까지 완료했습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;스프링 프로젝트 구성 설정은 인텔리제이에서 생성되는 구성을 &lt;b&gt;&lt;a href=&quot;https://spring.io/tools&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;스프링(Spring)&lt;/a&gt;에서 공식으로 제공하는 STS를 기준으로 변경&lt;/b&gt;했습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 95px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 95px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 95px;&quot;&gt;&lt;b&gt;한마디,&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;저도 이해한 내용을 바탕으로 직접 실습해보고 관련 글을 작성하였습니다. 공부를 하면서 저의 관점에서 이해하는 데 어려움이 있었던 포인트를 기준으로 글을 작성하기 때문에 제 글이 도움이 안될 수도 있고 혹은 틀린 내용이 있을 수도 있습니다. 이런 부분은 댓글을 이용해서 피드백 부탁드립니다. 동일한 개념이라도 각자의 관점에서 이해하는 부분이 다를 수 있기 때문에 서로 대화를 통해서 올바른 지식을 공유하면 좋겠습니다.&amp;nbsp;감사합니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;● spring-project-initialize Repository ‣&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/WHITEPAEK/spring-project-initialize&quot;&gt;github.com/WHITEPAEK/spring-project-initialize&lt;/a&gt;&lt;/p&gt;</description>
      <category>IntelliJ IDEA</category>
      <author>WHITEPAEK</author>
      <guid isPermaLink="true">https://whitepaek.tistory.com/56</guid>
      <comments>https://whitepaek.tistory.com/56#entry56comment</comments>
      <pubDate>Wed, 3 Jun 2020 18:52:48 +0900</pubDate>
    </item>
    <item>
      <title>[IntelliJ] 스프링 프로젝트 생성</title>
      <link>https://whitepaek.tistory.com/55</link>
      <description>&lt;div style=&quot;border: 1px dashed; padding: 10px;&quot;&gt;&lt;b&gt;Step by step!&lt;/b&gt;&lt;br /&gt;&lt;span&gt;∙Step 01 ‣ (현재 글) 스프링 프로젝트 생성&lt;br /&gt;∙Step 02 ‣ &lt;a href=&quot;https://whitepaek.tistory.com/56&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;스프링 프로젝트 구성 설정&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;인텔리제이(IntelliJ IDEA)에서 스프링 프레임워크(Spring Framework) 프로젝트를 생성해보도록 하겠습니다.&amp;nbsp;스프링 프로젝트를 생성하는 방법을 찾아보면 설정 방식이 여러 개가 검색됩니다. 스프링에 대한 이해도가 높고 익숙하신 개발자에게는 어떤 방식을 검색하던 자신에게 필요한 부분을 쉽게 캐치해서 사용할 수 있습니다. 하지만 초급 개발자는 익숙하지 않기 때문에 필요한 부분을 캐치해서 적용하기란 쉽지 않습니다. 또한, 실무에서 이미 갖춰진 환경에서 개발을 진행하다 보면 직접 스프링을 설정할 기회가 거의 없을 수도 있기 때문에 많은 개발자분들이 필요할 때마다 검색해서 설정합니다. 그렇기 때문에 &quot;나는 왜 잘 못할까?&quot;라고 생각하실 필요 없습니다.&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;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;macOS&lt;/b&gt; 운영체제에서 &lt;b&gt;IntelliJ IDEA Ultimate(Version 2020.1.1)&lt;/b&gt;를 이용하여 진행하였습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Windows에서도 IntelliJ IDEA의 GUI는 거의 동일하기 때문에 큰 어려움은 없을 거예요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;하지만, IntelliJ IDEA는 Community&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;버전과는 차이가 있을 수 있기 때문에 &lt;/span&gt;&lt;b&gt;Ultimate&lt;/b&gt; 버전을 사용하는 걸 권장합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;b&gt;Maven + Spring MVC&lt;/b&gt;를&amp;nbsp;이용하여 메이븐(Maven)과 스프링으로 설정된 프로젝트를 생성해보도록 하겠습니다. 제가 설명하는 방식 외에도 여러 개의 설정 방식이 있습니다. 하지만, 설정 순서가 다를 뿐이지 결과적으로는 똑같다고 생각합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&quot;Spring MVC &amp;rarr; Maven&quot; 순서로 설정을 할 수도 있고, &amp;nbsp;&quot;Maven&quot;으로 프로젝트를 생성하고 &quot;Spring MVC&quot; 설정 없이 디렉토리 설정부터 직접 하나씩 구성할 수도 있습니다. 하지만 저는 &lt;b&gt;Maven &amp;rarr; Spring MVC&lt;/b&gt; 설정을 순서로 설정할 것이며 자동으로 &lt;b&gt;디렉토리 구성&lt;/b&gt;까지 될 것입니다. 나중에 경험이 쌓이고 스프링에 대한 이해도가 높아진다면 다양한 방식으로 스프링 프로젝트를 생성할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;(&quot;처음 공부할 때는 &amp;nbsp;전체적인 설정을 직접 해보는 게 도움이 된다.&quot;라는 얘기도 있습니다. 이 방식으로는 저는 이해도가 부족한지 더 어렵게 느껴지더라고요. 자신이 사용하는 IDE에 대한 이해도도 어느 정도 받쳐줘야 가능하기 때문에 저는 IDE에서 제공하는 방식을 활용해보도록 하겠습니다.)&lt;/p&gt;
&lt;p&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&gt;추가로 이클립스(Eclipse)에서는 &quot;Dynamic Web Project&quot; 또는 &quot;Maven Project&quot;를 생성하고 설정을 통해 스프링(Spring) 프로젝트를 만들 수 있습니다. 제가 설명하는 디렉토리 구성까지 완성된 스프링 프로젝트가 필요한 경우에는 &quot;Spring Legacy Project&quot;를 생성하면 기본적인 구조가 만들어진 프로젝트를 이용할 수 있습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1556&quot; data-origin-height=&quot;1188&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCwzio/btqEv7t88Rd/JJBsJKWan4xHPEKQTryWJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCwzio/btqEv7t88Rd/JJBsJKWan4xHPEKQTryWJK/img.png&quot; data-alt=&quot;[그림 1] IntelliJ IDEA 실행 및 &amp;amp;quot;Create New Project&amp;amp;quot; 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCwzio/btqEv7t88Rd/JJBsJKWan4xHPEKQTryWJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCwzio%2FbtqEv7t88Rd%2FJJBsJKWan4xHPEKQTryWJK%2Fimg.png&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1556&quot; data-origin-height=&quot;1188&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;figcaption&gt;[그림 1] IntelliJ IDEA 실행 및 &quot;Create New Project&quot; 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;인텔리제이를 실행하고 &lt;b&gt;Create New Project&lt;/b&gt;를 클릭해서 새 프로젝트를 생성하도록 하겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1676&quot; data-origin-height=&quot;1376&quot; data-filename=&quot;2.png&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biN9e4/btqEvYYwGey/YV6K312cVTgNdqNG9MoDiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biN9e4/btqEvYYwGey/YV6K312cVTgNdqNG9MoDiK/img.png&quot; data-alt=&quot;[그림 2] &amp;amp;quot;Maven&amp;amp;quot; 프로젝트 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biN9e4/btqEvYYwGey/YV6K312cVTgNdqNG9MoDiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiN9e4%2FbtqEvYYwGey%2FYV6K312cVTgNdqNG9MoDiK%2Fimg.png&quot; data-origin-width=&quot;1676&quot; data-origin-height=&quot;1376&quot; data-filename=&quot;2.png&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;figcaption&gt;[그림 2] &quot;Maven&quot; 프로젝트 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;프로젝트 템플릿 목록에서 &lt;b&gt;메이븐(Maven)&lt;/b&gt;을 선택하고 프로젝트에서 사용할 &lt;b&gt;Project SDK(JDK)&lt;/b&gt;를 선택해주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;1676&quot; data-origin-height=&quot;1164&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPQ458/btqExBtQOHn/FEAwoDdYOLRbljGa7kopz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPQ458/btqExBtQOHn/FEAwoDdYOLRbljGa7kopz0/img.png&quot; data-alt=&quot;[그림 3] &amp;amp;quot;GroupId&amp;amp;quot;와 &amp;amp;quot;ArtifactId&amp;amp;quot; 입력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPQ458/btqExBtQOHn/FEAwoDdYOLRbljGa7kopz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPQ458%2FbtqExBtQOHn%2FFEAwoDdYOLRbljGa7kopz0%2Fimg.png&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;1676&quot; data-origin-height=&quot;1164&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;figcaption&gt;[그림 3] &quot;GroupId&quot;와 &quot;ArtifactId&quot; 입력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;GroupId&lt;/b&gt;는 프로젝트의 가장 최상위 패키지(Top level package) 명으로 사용되고, &lt;b&gt;ArtifactId&lt;/b&gt;는 프로젝트 명으로 사용됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;(GroupId는 대표적으로 프로젝트가 진행되는 회사 도메인을 역순으로 작성합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;속한 회사가 없거나 단독으로 진행하는 사이드 프로젝트인 경우에는 자신이 사용할 도메인을 하나 정한 후 역순으로 작성해주세요.)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Version&lt;/b&gt;은 기본으로 &quot;1.0-SNAPSHOT&quot;으로 설정되어 있는데 &quot;SNAPSHOT&quot;은 해당 버전이 개발 버전이라는 걸 의미합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;(추가로 배포 버전은 &quot;RELEASE&quot;를 붙여서 사용합니다.&amp;nbsp;이해가 안 돼도 괜찮습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;경험이 쌓이면 자연스레 알게 되는 부분이므로 읽어보고 넘어가도록 합니다.)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;2780&quot; data-origin-height=&quot;1284&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOTt3B/btqEwSJPNil/xpqIKCBIurDmZBkeC5Dd6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOTt3B/btqEwSJPNil/xpqIKCBIurDmZBkeC5Dd6K/img.png&quot; data-alt=&quot;[그림 4] &amp;amp;quot;Maven&amp;amp;quot; 프로젝트 생성 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOTt3B/btqEwSJPNil/xpqIKCBIurDmZBkeC5Dd6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOTt3B%2FbtqEwSJPNil%2FxpqIKCBIurDmZBkeC5Dd6K%2Fimg.png&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;2780&quot; data-origin-height=&quot;1284&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;figcaption&gt;[그림 4] &quot;Maven&quot; 프로젝트 생성 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;메이븐 프로젝트가 생성되었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;좌측에 프로젝트 툴 윈도우(Project tool window)를 보면 &lt;b&gt;src&lt;/b&gt; 디렉토리와 &lt;b&gt;pom.xml&lt;/b&gt; 파일로 구성되어 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;1138&quot; data-origin-height=&quot;1558&quot; width=&quot;400&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G1WeB/btqEyfRo71v/9eRxuKZDAonKERmsLplaL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G1WeB/btqEyfRo71v/9eRxuKZDAonKERmsLplaL1/img.png&quot; data-alt=&quot;[그림 5] &amp;amp;quot;Add Framework Support...&amp;amp;quot; 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G1WeB/btqEyfRo71v/9eRxuKZDAonKERmsLplaL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG1WeB%2FbtqEyfRo71v%2F9eRxuKZDAonKERmsLplaL1%2Fimg.png&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;1138&quot; data-origin-height=&quot;1558&quot; width=&quot;400&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;figcaption&gt;[그림 5] &quot;Add Framework Support...&quot; 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;앞서, 메이븐(Maven) 프로젝트를 생성했기 때문에 이제부터는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;Spring MVC&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;를 설정할 순서입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;spring-project-initialize&lt;/b&gt; 모듈(Module)을 우클릭하여 &lt;b&gt;Add Framework Support... &lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;1760&quot; data-origin-height=&quot;1178&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/by0Keh/btqEwfMivOX/i8XUZpJadbK6uK9aMuXqtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/by0Keh/btqEwfMivOX/i8XUZpJadbK6uK9aMuXqtk/img.png&quot; data-alt=&quot;[그림 6] &amp;amp;quot;Spring MVC&amp;amp;quot; 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/by0Keh/btqEwfMivOX/i8XUZpJadbK6uK9aMuXqtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fby0Keh%2FbtqEwfMivOX%2Fi8XUZpJadbK6uK9aMuXqtk%2Fimg.png&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;1760&quot; data-origin-height=&quot;1178&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;figcaption&gt;[그림 6] &quot;Spring MVC&quot; 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;팝업 창이 나타나면 좌측 프레임워크 목록에서 &lt;b&gt;Spring MVC&lt;/b&gt;를 선택해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;(현재 인텔리제이에서는 5.2.3 버전의 스프링 프레임워크를 제공하고 있습니다.)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;752&quot; data-origin-height=&quot;1580&quot; width=&quot;300&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p1hhj/btqEw1T4ZuB/WITRbS6a59PGKh3254hoWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p1hhj/btqEw1T4ZuB/WITRbS6a59PGKh3254hoWK/img.png&quot; data-alt=&quot;[그림 7] &amp;amp;quot;Spring MVC&amp;amp;quot; 설정 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p1hhj/btqEw1T4ZuB/WITRbS6a59PGKh3254hoWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp1hhj%2FbtqEw1T4ZuB%2FWITRbS6a59PGKh3254hoWK%2Fimg.png&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;752&quot; data-origin-height=&quot;1580&quot; width=&quot;300&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;figcaption&gt;[그림 7] &quot;Spring MVC&quot; 설정 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Spring MVC&lt;/b&gt; 설정이 완료되었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;프로젝트 툴 윈도우를 확인해보면 &lt;b&gt;lib&lt;/b&gt;와 &lt;b&gt;web&lt;/b&gt; 디렉토리가 추가되었습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;878&quot; data-origin-height=&quot;1470&quot; width=&quot;300&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ueInE/btqEwSXpsX2/WV7pzoETRqKK9LW2WaPrB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ueInE/btqEwSXpsX2/WV7pzoETRqKK9LW2WaPrB0/img.png&quot; data-alt=&quot;[그림 8] &amp;amp;quot;lib&amp;amp;quot; 디렉토리 삭제&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ueInE/btqEwSXpsX2/WV7pzoETRqKK9LW2WaPrB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FueInE%2FbtqEwSXpsX2%2FWV7pzoETRqKK9LW2WaPrB0%2Fimg.png&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;878&quot; data-origin-height=&quot;1470&quot; width=&quot;300&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;figcaption&gt;[그림 8] &quot;lib&quot; 디렉토리 삭제&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;lib&lt;/b&gt; 디렉토리를 삭제해주도록 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;삭제하는 이유는&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;[그림 6]&lt;/b&gt;을 다시 확인해보면&amp;nbsp;인텔리제이에서는 &lt;b&gt;Spring 5.2.3 버전을 제공&lt;/b&gt;하고 있다는 것을 알 수 있고,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;인텔리제이에서 제공하는 프레임워크는 lib 디렉토리에 기본 라이브러리를 자동으로 추가시킵니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;그러나 기본으로 제공되는 라이브러리를 사용하지 않고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;메이븐 저장소(Maven Repository)&lt;/b&gt;를 이용하여 라이브러리를 관리할 것이기 때문에&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;인텔리제이가 추가한 라이브러리를 삭제하는 것입니다.&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 style=&quot;text-align: center;&quot;&gt;메이븐 저장소를 이용하지 않을 경우, 필요한 라이브러리를 일일이 다운로드 후 프로젝트에 추가해주는 작업을 해야 합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;이런 방식은 라이브러리를 관리하기가 까다롭습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;(라이브러리 버전이 변경되었을 때 기존 라이브러리를 삭제하고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;필요한 버전의 라이브러리를 다운로드 후 다시 프로젝트에 추가해주는 작업을 반복해야 합니다.)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;1796&quot; data-origin-height=&quot;930&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4WLLQ/btqEyeLLOuK/5QXk1QsQyX6qomMK1zj5B1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4WLLQ/btqEyeLLOuK/5QXk1QsQyX6qomMK1zj5B1/img.png&quot; data-alt=&quot;[그림 9] 프로젝트에 추가된 라이브러리 삭제&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4WLLQ/btqEyeLLOuK/5QXk1QsQyX6qomMK1zj5B1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4WLLQ%2FbtqEyeLLOuK%2F5QXk1QsQyX6qomMK1zj5B1%2Fimg.png&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;1796&quot; data-origin-height=&quot;930&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;figcaption&gt;[그림 9] 프로젝트에 추가된 라이브러리 삭제&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Command+;(Ctrl+Alt+Shift+S)&lt;/b&gt; 단축키를 이용하여 &lt;b&gt;Project Structure&lt;/b&gt; 창을 활성화하고,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;프로젝트 설정(Project Settings) 목록에서 &lt;b&gt;Libraries&lt;/b&gt;에 추가되어 있는&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Spring MVC-5.2.3.RELEASE와 Spring-5.2.3.RELEASE를&amp;nbsp;&lt;/b&gt;&lt;b&gt;삭제&lt;/b&gt;해야 합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;(&lt;b&gt;[그림 8]&lt;/b&gt;에서 lib 디렉토리와 인텔리제이에서 자동으로 추가한 라이브러리를 전부 삭제했기 때문에&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;프로젝트에 설정된 라이브러리는 존재하지 않아 무의미하기 때문입니다.)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;10.png&quot; data-origin-width=&quot;1796&quot; data-origin-height=&quot;930&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cO0fF0/btqExsqpW38/1ehofotaVt5jzoMBzqexG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cO0fF0/btqExsqpW38/1ehofotaVt5jzoMBzqexG1/img.png&quot; data-alt=&quot;[그림 10] 프로젝트에 설정된 라이브러리가 없는 상태&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cO0fF0/btqExsqpW38/1ehofotaVt5jzoMBzqexG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcO0fF0%2FbtqExsqpW38%2F1ehofotaVt5jzoMBzqexG1%2Fimg.png&quot; data-filename=&quot;10.png&quot; data-origin-width=&quot;1796&quot; data-origin-height=&quot;930&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;figcaption&gt;[그림 10] 프로젝트에 설정된 라이브러리가 없는 상태&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;11.png&quot; data-origin-width=&quot;2884&quot; data-origin-height=&quot;1206&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rBQpa/btqEwJTWznU/NGur8TgF2J4ZUGbRda3dbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rBQpa/btqEwJTWznU/NGur8TgF2J4ZUGbRda3dbK/img.png&quot; data-alt=&quot;[그림 11] 스프링 프로젝트 생성 완료 (Maven + Spring MVC)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rBQpa/btqEwJTWznU/NGur8TgF2J4ZUGbRda3dbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrBQpa%2FbtqEwJTWznU%2FNGur8TgF2J4ZUGbRda3dbK%2Fimg.png&quot; data-filename=&quot;11.png&quot; data-origin-width=&quot;2884&quot; data-origin-height=&quot;1206&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;figcaption&gt;[그림 11] 스프링 프로젝트 생성 완료 (Maven + Spring MVC)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;인텔리제이에서 스프링 프로젝트 생성을 완료했습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;(&lt;b&gt;[그림 10]&lt;/b&gt;과 &lt;b&gt;[그림 11]&lt;/b&gt;은 스프링 프로젝트가 완성된 결과 화면입니다.)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;메이븐(Maven) 프로젝트를 생성([그림 2] 참고) 후&amp;nbsp;스프링 MVC(Spring MVC) 프레임워크를 추가([그림 5] 참고)하고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;인텔리제이에서 기본으로 제공되는 라이브러리를 삭제([그림 9] 참고)하여&amp;nbsp;스프링 레거시 프로젝트(Spring Legacy Project) 초기 생성을 해봤습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;(참고,&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;일반적으로&amp;nbsp;&lt;/span&gt;스프링(Spring) 프로젝트라고 말하는 것은 &lt;span style=&quot;color: #333333;&quot;&gt;&quot;Spring MVC&quot; 프레임워크를 뜻하는 걸로 알고 있습니다.&lt;/span&gt;)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://whitepaek.tistory.com/56&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;다음 글 이어서 보기 ‣&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;한마디,&lt;/b&gt;&lt;br /&gt;&amp;nbsp;저도 이해한 내용을 바탕으로 직접 실습해보고 관련 글을 작성하였습니다. 공부를 하면서 저의 관점에서 이해하는 데 어려움이 있었던 포인트를 기준으로 글을 작성하기 때문에 제 글이 도움이 안될 수도 있고 혹은 틀린 내용이 있을 수도 있습니다. 이런 부분은 댓글을 이용해서 피드백 부탁드립니다. 동일한 개념이라도 각자의 관점에서 이해하는 부분이 다를 수 있기 때문에 서로 대화를 통해서 올바른 지식을 공유하면 좋겠습니다.&amp;nbsp;감사합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;● spring-project-initialize Repository ‣&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/WHITEPAEK/spring-project-initialize&quot;&gt;github.com/WHITEPAEK/spring-project-initialize&lt;/a&gt;&lt;/p&gt;</description>
      <category>IntelliJ IDEA</category>
      <author>WHITEPAEK</author>
      <guid isPermaLink="true">https://whitepaek.tistory.com/55</guid>
      <comments>https://whitepaek.tistory.com/55#entry55comment</comments>
      <pubDate>Sun, 31 May 2020 20:47:08 +0900</pubDate>
    </item>
    <item>
      <title>[IntelliJ] Git에서 멀티 프로젝트 Checkout 구성 방법</title>
      <link>https://whitepaek.tistory.com/52</link>
      <description>&lt;p&gt;프로젝트를 진행하면 단일 프로젝트로 구성되는 경우보다는 기능 별로 프로젝트가 나뉘어 있는 경우가 더 많습니다. 팀원 간 프로젝트를 협업하다 보면 깃(Git)을 이용해서 프로젝트를 내려받아야 합니다. 하지만 프로젝트가 여러 개의 경우 이클립스(Eclipse)와 다르게 인텔리제이(IntelliJ)에서 구성 방식과 설정에 대해 약간의 헷갈림이 있습니다. (물론, 저처럼 개발 초보자는 인텔리제이에 익숙하지 않거나 처음 해보시는 분들은 도큐먼트(Document)를 봐도 이해하기 힘듭니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;현업 실습을 경험하면서 깨우친(?) 깃에 있는 여러 개의 프로젝트를 인텔리제이에 구성하고 체크아웃(Checkout) 할 수 있도록 설정하는 방법을 설명드리도록 하겠습니다. (자신의 PC 디렉토리 구조와 터미널에서 기본적인 깃 사용 방법은 알고 있어야 합니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래 글을 읽기 전 인텔리제이 멀티 프로젝트(모듈)에 대해 잘 모르시는 분은 &lt;a href=&quot;https://whitepaek.tistory.com/47&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;이 글을 참고&lt;/a&gt;하시면 이해하시는데 도움이 될 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[1] Git에서 프로젝트 Clone 하기&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 16.31.21.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/birEAh/btqy0TmIcMz/t6gqQPf8KyI6AwkCFILz8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/birEAh/btqy0TmIcMz/t6gqQPf8KyI6AwkCFILz8k/img.png&quot; data-alt=&quot;[그림 1.1] 디렉토리 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/birEAh/btqy0TmIcMz/t6gqQPf8KyI6AwkCFILz8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbirEAh%2Fbtqy0TmIcMz%2Ft6gqQPf8KyI6AwkCFILz8k%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 16.31.21.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1.1] 디렉토리 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;터미널을 실행 후&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;자신이 원하는 위치에 여러 개의 프로젝트를 클론(Clone) 하기 위한 디렉토리를 &lt;b&gt;mkdir&lt;/b&gt; 명령어로 생성해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;(파인더로 해당 위치의 디렉토리로 이동하여 직접 폴더를 생성해도 상관없습니다.)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;새로 생성한 폴더(test-web)는 인텔리제이에서 루트 프로젝트로 사용됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1570863250992&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; mkdir /.../[디렉토리 위치]/[새로운 폴더명]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 16.31.32.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n44Ef/btqy1f3TEb0/PtOksppL5VQwefRnE9eGeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n44Ef/btqy1f3TEb0/PtOksppL5VQwefRnE9eGeK/img.png&quot; data-alt=&quot;[그림 1.2] 현재 디렉토리 위치 변경&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n44Ef/btqy1f3TEb0/PtOksppL5VQwefRnE9eGeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn44Ef%2Fbtqy1f3TEb0%2FPtOksppL5VQwefRnE9eGeK%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 16.31.32.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1.2] 현재 디렉토리 위치 변경&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;새로 생성한 폴더의 위치로 &lt;b&gt;cd&lt;/b&gt; 명령어로 변경해주세요.&lt;/p&gt;
&lt;pre id=&quot;code_1570863491757&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd /.../[디렉토리 위치]/[이동할 폴더명]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-12 16.01.15.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddHsAa/btqy0EXCkFB/zcHxt4L0DWkFpXDlxBz3p0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddHsAa/btqy0EXCkFB/zcHxt4L0DWkFpXDlxBz3p0/img.png&quot; data-alt=&quot;[그림 1.3] Clone 할 프로젝트 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddHsAa/btqy0EXCkFB/zcHxt4L0DWkFpXDlxBz3p0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddHsAa%2Fbtqy0EXCkFB%2FzcHxt4L0DWkFpXDlxBz3p0%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-12 16.01.15.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1.3] Clone 할 프로젝트 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;클론을 수행할 프로젝트가 있는 깃으로 이동해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;저는 Spring Boot + Maven 기반의 프로젝트 3개를 예시로 설명드리겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 16.31.50.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sUZUU/btqy1Ix08uy/PSnQKJAD2wj0bjmJR4MZR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sUZUU/btqy1Ix08uy/PSnQKJAD2wj0bjmJR4MZR1/img.png&quot; data-alt=&quot;[그림 1.4] web URL 복사&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sUZUU/btqy1Ix08uy/PSnQKJAD2wj0bjmJR4MZR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsUZUU%2Fbtqy1Ix08uy%2FPSnQKJAD2wj0bjmJR4MZR1%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 16.31.50.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1.4] web URL 복사&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;클론 하기 위한 프로젝트로 이동 후 Web URL을 복사해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;저는 3개의 프로젝트 중 test-web-common을 먼저 수행하도록 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 16.32.03.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1AGc7/btqy0pl7mpe/MZz9cKQIo9gQTT4rKpKIhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1AGc7/btqy0pl7mpe/MZz9cKQIo9gQTT4rKpKIhk/img.png&quot; data-alt=&quot;[그림 1.5] 프로젝트 Clone&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1AGc7/btqy0pl7mpe/MZz9cKQIo9gQTT4rKpKIhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1AGc7%2Fbtqy0pl7mpe%2FMZz9cKQIo9gQTT4rKpKIhk%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 16.32.03.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1.5] 프로젝트 Clone&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;복사한 Web URL을 터미널에서 &lt;b&gt;git clone&lt;/b&gt; 명령어와 함께 입력하여 프로젝트를 클론 해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;(자신이 생성한 디렉토리 위치에서 명령어를 수행하여야 합니다.)&lt;/p&gt;
&lt;pre id=&quot;code_1570864539445&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git clone [복사한 Web URL]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 16.33.07.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ef9e1G/btqyZYI7gKo/bsNYd0ka4GBM1F1uUTLbJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ef9e1G/btqyZYI7gKo/bsNYd0ka4GBM1F1uUTLbJ1/img.png&quot; data-alt=&quot;[그림 1.6] 모든 프로젝트 Clone&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ef9e1G/btqyZYI7gKo/bsNYd0ka4GBM1F1uUTLbJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fef9e1G%2FbtqyZYI7gKo%2FbsNYd0ka4GBM1F1uUTLbJ1%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 16.33.07.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1.6] 모든 프로젝트 Clone&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;[그림 1.4 ~ 그림 1.5]와 동일한 방법으로 나머지 프로젝트도 클론 해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;ls -l&lt;/b&gt; 명령어로 해당 디렉토리 위치에서 프로젝트가 클론 된 걸 확인할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 16.32.47.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EGiKU/btqyZYvuzX8/tESmhoBHGa8FxrEVOlOhK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EGiKU/btqyZYvuzX8/tESmhoBHGa8FxrEVOlOhK0/img.png&quot; data-alt=&quot;[그림 1.7] 디렉토리 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EGiKU/btqyZYvuzX8/tESmhoBHGa8FxrEVOlOhK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEGiKU%2FbtqyZYvuzX8%2FtESmhoBHGa8FxrEVOlOhK0%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 16.32.47.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1.7] 디렉토리 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;해당 디렉토리로 직접 이동하여 확인해봐도 정상적으로 프로젝트가 클론 된 걸 확인할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;그러면 이제 인텔리제이에 구성할 프로젝트 준비는 끝났습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[2] IntelliJ에 프로젝트 열기&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 16.33.18.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DDiyb/btqyY3D1EYl/ysG0tj0UOVpqAJpGpRwWYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DDiyb/btqyY3D1EYl/ysG0tj0UOVpqAJpGpRwWYK/img.png&quot; data-alt=&quot;[그림 2.1] 프로젝트 열기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DDiyb/btqyY3D1EYl/ysG0tj0UOVpqAJpGpRwWYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDDiyb%2FbtqyY3D1EYl%2FysG0tj0UOVpqAJpGpRwWYK%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 16.33.18.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 2.1] 프로젝트 열기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;인텔리제이를 실행 후 시작 화면(Welcom Screen)에서 &lt;b&gt;Open&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 16.33.26.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lVrIk/btqy1gPiap2/aMNw6h04kIRltpkLdLQb81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lVrIk/btqy1gPiap2/aMNw6h04kIRltpkLdLQb81/img.png&quot; data-alt=&quot;[그림 2.2] 프로젝트 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lVrIk/btqy1gPiap2/aMNw6h04kIRltpkLdLQb81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlVrIk%2Fbtqy1gPiap2%2FaMNw6h04kIRltpkLdLQb81%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 16.33.26.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 2.2] 프로젝트 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;준비한 루트 프로젝트(test-web)를 선택 후 &lt;b&gt;Open&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 16.33.40.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6CKwX/btqyZXcj7ad/geIk5ZTAjI1ZjkvYAs1PG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6CKwX/btqyZXcj7ad/geIk5ZTAjI1ZjkvYAs1PG0/img.png&quot; data-alt=&quot;[그림 2.3] 인텔리제이 프로젝트 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6CKwX/btqyZXcj7ad/geIk5ZTAjI1ZjkvYAs1PG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6CKwX%2FbtqyZXcj7ad%2FgeIk5ZTAjI1ZjkvYAs1PG0%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 16.33.40.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 2.3] 인텔리제이 프로젝트 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;루트 프로젝트(test-web) 하위에 준비한 3개의 프로젝트가 구성된 걸 확인할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[3] 프로젝트 Module 설정하기&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 16.33.49.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKk7AX/btqy1IdJeqz/WXKtObwbh2gzzj1rm1weG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKk7AX/btqy1IdJeqz/WXKtObwbh2gzzj1rm1weG0/img.png&quot; data-alt=&quot;[그림 3.1] 모듈 설정을 진행할 프로젝트 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKk7AX/btqy1IdJeqz/WXKtObwbh2gzzj1rm1weG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKk7AX%2Fbtqy1IdJeqz%2FWXKtObwbh2gzzj1rm1weG0%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 16.33.49.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 3.1] 모듈 설정을 진행할 프로젝트 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;이제 준비한 프로젝트를 루트 프로젝트(test-web)의 모듈(Module)로 설정해주도록 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;모듈 설정을 진행할 프로젝트를 선택해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;저는 test-web-admin 프로젝트를 먼저 진행하도록 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 16.34.34.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qfp3l/btqyY3KQPuZ/2oResr1JMuWOd6ac1tqHik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qfp3l/btqyY3KQPuZ/2oResr1JMuWOd6ac1tqHik/img.png&quot; data-alt=&quot;[그림 3.2] 선택한 프로젝트 모듈 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qfp3l/btqyY3KQPuZ/2oResr1JMuWOd6ac1tqHik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqfp3l%2FbtqyY3KQPuZ%2F2oResr1JMuWOd6ac1tqHik%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 16.34.34.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 3.2] 선택한 프로젝트 모듈 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;프로젝트를 선택 후 &lt;b&gt;File &amp;gt; New &amp;gt; Module from Existing Sources... &lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 16.35.00.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5tCYb/btqyZsDAcNk/kKujDNxUi4vruDmWsLUhk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5tCYb/btqyZsDAcNk/kKujDNxUi4vruDmWsLUhk0/img.png&quot; data-alt=&quot;[그림 3.3] 디렉토리 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5tCYb/btqyZsDAcNk/kKujDNxUi4vruDmWsLUhk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5tCYb%2FbtqyZsDAcNk%2FkKujDNxUi4vruDmWsLUhk0%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 16.35.00.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 3.3] 디렉토리 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;루트 프로젝트(test-web) 티렉토리 위치로 이동 후 &lt;b&gt;선택한 프로젝트와 동일한 디렉토리를 선택&lt;/b&gt;&amp;nbsp;후 Open을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;저는 인텔리제이에서 test-web-admin 프로젝트를 선택하였기 때문에&amp;nbsp;test-web-admin 디렉토리를 선택해주었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 16.41.22.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MnBul/btqy0qyAUgl/PHGfYrvaAL7hNBHqgkaQK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MnBul/btqy0qyAUgl/PHGfYrvaAL7hNBHqgkaQK1/img.png&quot; data-alt=&quot;[그림 3.4] 빌드 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MnBul/btqy0qyAUgl/PHGfYrvaAL7hNBHqgkaQK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMnBul%2Fbtqy0qyAUgl%2FPHGfYrvaAL7hNBHqgkaQK1%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 16.41.22.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 3.4] 빌드 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;프로젝트 설정되어 있는 빌드를 선택 후 &lt;b&gt;Next&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;(저는 Maven으로 구성된 프로젝트이므로 Maven을 선택하겠습니다.)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 16.35.32.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEBFwM/btqyY3xqkdw/7phzEnVaIclR4EkBfMazT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEBFwM/btqyY3xqkdw/7phzEnVaIclR4EkBfMazT1/img.png&quot; data-alt=&quot;[그림 3.5] 프로젝트 옵션 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEBFwM/btqyY3xqkdw/7phzEnVaIclR4EkBfMazT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEBFwM%2FbtqyY3xqkdw%2F7phzEnVaIclR4EkBfMazT1%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 16.35.32.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 3.5] 프로젝트 옵션 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;'Import Maven projects automatically'&lt;/b&gt;를 체크 후 &lt;b&gt;Next&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 16.35.35.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oxfpv/btqyZs4EGJb/jMF5ibwcRejaKmqZaI8Bm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oxfpv/btqyZs4EGJb/jMF5ibwcRejaKmqZaI8Bm1/img.png&quot; data-alt=&quot;[그림 3.6] Import Module&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oxfpv/btqyZs4EGJb/jMF5ibwcRejaKmqZaI8Bm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Foxfpv%2FbtqyZs4EGJb%2FjMF5ibwcRejaKmqZaI8Bm1%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 16.35.35.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 3.6] Import Module&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;모듈로 설정할 프로젝트를 선택 후 &lt;b&gt;Finish&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;(각각의 프로젝트를 따로 설정해주므로 해당 프로젝트에 관련된 것 한개만 목록에 나올 거예요.)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 16.35.44.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QaBI2/btqyZtW0oaY/n2hpKoFQj1uLkdSmXYKk2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QaBI2/btqyZtW0oaY/n2hpKoFQj1uLkdSmXYKk2k/img.png&quot; data-alt=&quot;[그림 3.7] 모듈 설정 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QaBI2/btqyZtW0oaY/n2hpKoFQj1uLkdSmXYKk2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQaBI2%2FbtqyZtW0oaY%2Fn2hpKoFQj1uLkdSmXYKk2k%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 16.35.44.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 3.7] 모듈 설정 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;test-web-admin 프로젝트가 정상적으로 루트 프로젝트(test-web)의 모듈로 설정되었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[4] Module로 설정된 프로젝트 실행 환경설정&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 16.37.55.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byT3Kh/btqyY3qC1jD/kB9okH5uQeoTWdajgL0Mz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byT3Kh/btqyY3qC1jD/kB9okH5uQeoTWdajgL0Mz1/img.png&quot; data-alt=&quot;[그림 4.1] Edit Configurations...&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byT3Kh/btqyY3qC1jD/kB9okH5uQeoTWdajgL0Mz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyT3Kh%2FbtqyY3qC1jD%2FkB9okH5uQeoTWdajgL0Mz1%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 16.37.55.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 4.1] Edit Configurations...&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;프로젝트가 모듈로 설정이 되었으면 실행 환경설정도 해주어야 합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Edit Configurations... &lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 16.38.32.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbEE8B/btqyYQSusWS/gWuLWgqqudIBW9tDGMAirk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbEE8B/btqyYQSusWS/gWuLWgqqudIBW9tDGMAirk/img.png&quot; data-alt=&quot;[그림 4.2] Working directory 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbEE8B/btqyYQSusWS/gWuLWgqqudIBW9tDGMAirk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbEE8B%2FbtqyYQSusWS%2FgWuLWgqqudIBW9tDGMAirk%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 16.38.32.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 4.2] Working directory 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Run/Debug Configurations 창 목록에서 해당 프로젝트의 Application을 선택 후 &lt;b&gt;Environment&lt;/b&gt;를 클릭해서 펼쳐주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;그리고 Working directory의 목록에서 &lt;b&gt;'$MODULE_WORKING_DIR$'&lt;/b&gt;을 선택 후 &lt;b&gt;OK&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;test-web-admin 프로젝트의 모듈 실행 환경설정까지 모든 설정이 끝났습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[5] 여러 개 프로젝트를 Multi Module로 설정하기&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;0.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q9Lfn/btqyY3xqSjj/5oEu5pyWHrXtMz3Ey7ueg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q9Lfn/btqyY3xqSjj/5oEu5pyWHrXtMz3Ey7ueg1/img.png&quot; data-alt=&quot;[그림 5.1] 하위 프로젝트 모듈 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q9Lfn/btqyY3xqSjj/5oEu5pyWHrXtMz3Ey7ueg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq9Lfn%2FbtqyY3xqSjj%2F5oEu5pyWHrXtMz3Ey7ueg1%2Fimg.png&quot; data-filename=&quot;0.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.1] 하위 프로젝트 모듈 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;test-web-common 프로젝트 경우 하위에 2개의 프로젝트가 추가로 포함되어 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;이 경우 또한 [그림 3.1 ~ 그림 4.2]와 동일한 방식으로 각 프로젝트에 대해 모듈 설정을 해주면 됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;2.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yWv5i/btqy0FCipqM/pH292UV6Z7MZd0kRpsXKK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yWv5i/btqy0FCipqM/pH292UV6Z7MZd0kRpsXKK0/img.png&quot; data-alt=&quot;[그림 5.2] 멀티 프로젝트(모듈) 설정 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yWv5i/btqy0FCipqM/pH292UV6Z7MZd0kRpsXKK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyWv5i%2Fbtqy0FCipqM%2FpH292UV6Z7MZd0kRpsXKK0%2Fimg.png&quot; data-filename=&quot;2.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.2] 멀티 프로젝트(모듈) 설정 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;[그림 3.1 ~ 그림 4.2]와 동일한 방식으로 나머지 프로젝트도 모듈 설정을 전부 해주면 됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;모듈 설정&lt;/b&gt;과 &lt;b&gt;실행 환경설정&lt;/b&gt;을 정상적으로 하였다면 프로젝트 실행도 정상적으로 작동되는 걸 확인할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;3.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IviQu/btqyZtP5XhI/PO7WREYINJSUImqtAcfanK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IviQu/btqyZtP5XhI/PO7WREYINJSUImqtAcfanK/img.png&quot; data-alt=&quot;[그림 5.3] 각 모듈별 git 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IviQu/btqyZtP5XhI/PO7WREYINJSUImqtAcfanK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIviQu%2FbtqyZtP5XhI%2FPO7WREYINJSUImqtAcfanK%2Fimg.png&quot; data-filename=&quot;3.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.3] 각 모듈별 git 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;모듈 설정이 완료된 프로젝트를 확인해보면 모듈 별로 깃(git) 설정이 정상적으로 돼있는 걸 확인할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;모듈 별로 깃 설정 및 기능을 사용할 수 있습니다.&lt;/p&gt;</description>
      <category>IntelliJ IDEA</category>
      <author>WHITEPAEK</author>
      <guid isPermaLink="true">https://whitepaek.tistory.com/52</guid>
      <comments>https://whitepaek.tistory.com/52#entry52comment</comments>
      <pubDate>Sat, 12 Oct 2019 18:56:13 +0900</pubDate>
    </item>
    <item>
      <title>macOS 카탈리나 클린 설치(2) : MacBook Pro, MacBook Air, iMac Pro, Mac mini</title>
      <link>https://whitepaek.tistory.com/51</link>
      <description>&lt;p style=&quot;font-size: 0.94em;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;# macOS Catalina clean install(2)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;a href=&quot;https://whitepaek.tistory.com/50&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;클린 설치를 위한 USB&lt;/a&gt;&lt;/b&gt;를 만들었습니다. 이제 USB를 이용해서 맥OS(macOS)를 클린 설치해보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;맥OS를 카탈리나로 업데이트하기 전 자신이 사용하는 프로그램(앱)이 32비트인지 확인해보세요.&amp;nbsp;카탈리나(Catalina)부터는 32비트 앱은 지원을 중단하고 64비트 앱만 지원하기 때문에 기존의 32비트 앱은 카탈리나에서 사용할 수 없으므로 참고하여 업데이트하시기 바랍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;카탈리나를 업데이트로 진행할 경우 사용하지 못하는 32비트 프로그램이 남아있기 때문에 이 부분이 찝찝하신 분에게는 &lt;b&gt;클린 설치를 추천드립니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음 설명과 같은 설정은 클린 설치에 문제 되는 부분이 아니므로 본 글에 내용이 포함되어 있지 않더라도 안심하고 진행하셔도 됩니다.&lt;/p&gt;
&lt;p&gt;- 2016 및 이후 모델(터치바 모델)부터는 지문 인식, True Tone 설정이 추가적으로 진행됩니다.&lt;/p&gt;
&lt;p&gt;- 와이파이(Wi-Fi) 연결 상태에 따라 Apple ID 등 일부 설정을 건너뛸 수도 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; (건너뛴 설정은 macOS 클린 설치가 완료된 후 추가로 설정할 수 있습니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[1] macOS Catalina 클린 설치 준비&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IMG_4952.jpg&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1zkuL/btqy0rjJrvM/jymXiq6fAkpIsgzyMPK6nK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1zkuL/btqy0rjJrvM/jymXiq6fAkpIsgzyMPK6nK/img.jpg&quot; data-alt=&quot;[그림 1.1] 설치 USB 연결&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1zkuL/btqy0rjJrvM/jymXiq6fAkpIsgzyMPK6nK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1zkuL%2Fbtqy0rjJrvM%2FjymXiq6fAkpIsgzyMPK6nK%2Fimg.jpg&quot; data-filename=&quot;IMG_4952.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1.1] 설치 USB 연결&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;전원을 끈 상태에서 USB 설치 디스크를 포트에 연결해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[2] 시동 보안 설정&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;iMac Pro, Mac mini, MacBook Air, MacBook Pro 2018 및 이후 모델은 Apple T2 보안 칩이 장착되어 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;클린 설치 전 시동 보안 유틸리티를 설정해주어야 하므로 아래 설명과 동일하게 진행해주시면 됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;2018 이전 모델의 경우 [그림 3.1]부터 진행해주시면 됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;(USB 연결 &amp;gt; 전원 ON &amp;gt; option 키 누르기)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 22.54.41.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XsCSS/btqyZth3Wrg/ZgknpXTBpFnLgABGKJpjVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XsCSS/btqyZth3Wrg/ZgknpXTBpFnLgABGKJpjVK/img.png&quot; data-alt=&quot;[그림 2.1] 전원 버튼 + command + R&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XsCSS/btqyZth3Wrg/ZgknpXTBpFnLgABGKJpjVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXsCSS%2FbtqyZth3Wrg%2FZgknpXTBpFnLgABGKJpjVK%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 22.54.41.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 2.1] 전원 버튼 + command + R&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;전원을 켠 후 &lt;b&gt;command + R&lt;/b&gt; 키를 길게 누르고 있어 주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;macOS 복구로 시동됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 22.58.55.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/by4jnQ/btqyYQSjuSu/9xM1LMSxaNNKtrTv1uqhm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/by4jnQ/btqyYQSjuSu/9xM1LMSxaNNKtrTv1uqhm1/img.png&quot; data-alt=&quot;[그림 2.2] macOS 유틸리티 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/by4jnQ/btqyYQSjuSu/9xM1LMSxaNNKtrTv1uqhm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fby4jnQ%2FbtqyYQSjuSu%2F9xM1LMSxaNNKtrTv1uqhm1%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 22.58.55.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 2.2] macOS 유틸리티 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;macOS 유틸리티 창이 나타나면 command + R 키를 그만 누르고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;메뉴 막대에서 &lt;b&gt;유틸리티 &amp;gt; 시동 보안 유틸리티&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IMG_4958.jpg&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFjJOL/btqy02KlVMn/UZgFgEKkarKJsuK0EMFUC1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFjJOL/btqy02KlVMn/UZgFgEKkarKJsuK0EMFUC1/img.jpg&quot; data-alt=&quot;[그림 2.3] 시동 보안 유틸리티 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFjJOL/btqy02KlVMn/UZgFgEKkarKJsuK0EMFUC1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFjJOL%2Fbtqy02KlVMn%2FUZgFgEKkarKJsuK0EMFUC1%2Fimg.jpg&quot; data-filename=&quot;IMG_4958.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 2.3] 시동 보안 유틸리티 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;'macOS 암호 입력...'&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IMG_4962.jpg&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cay7pd/btqyY3KGDdB/K2ik5ahykfKROZO8G6Kpc1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cay7pd/btqyY3KGDdB/K2ik5ahykfKROZO8G6Kpc1/img.jpg&quot; data-alt=&quot;[그림 2.4] macOS 암호 입력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cay7pd/btqyY3KGDdB/K2ik5ahykfKROZO8G6Kpc1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcay7pd%2FbtqyY3KGDdB%2FK2ik5ahykfKROZO8G6Kpc1%2Fimg.jpg&quot; data-filename=&quot;IMG_4962.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 2.4] macOS 암호 입력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;자신의 macOS 암호를 입력하고 &lt;b&gt;확인&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IMG_4967.jpg&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbI3Sx/btqyY253edo/cu5D46GlQyB4fvW9opKOI1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbI3Sx/btqyY253edo/cu5D46GlQyB4fvW9opKOI1/img.jpg&quot; data-alt=&quot;[그림 2.5] 시동 보안 유틸리티 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbI3Sx/btqyY253edo/cu5D46GlQyB4fvW9opKOI1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbI3Sx%2FbtqyY253edo%2Fcu5D46GlQyB4fvW9opKOI1%2Fimg.jpg&quot; data-filename=&quot;IMG_4967.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 2.5] 시동 보안 유틸리티 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;보안 시동에서&lt;b&gt; '보안 없음'&lt;/b&gt;을 선택하고 허용된 시동 미디어에서 &lt;b&gt;'외부 또는 제거 가능한 미디어에서 시동 허용'&lt;/b&gt;을 선택 후&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;시동 보안 유틸리티 창을 닫아주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 23.15.01.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xV0oY/btqy0pTLzif/6LVucwpMZJWkenOgvMyWD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xV0oY/btqy0pTLzif/6LVucwpMZJWkenOgvMyWD1/img.png&quot; data-alt=&quot;[그림 2.6] 재시동&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xV0oY/btqy0pTLzif/6LVucwpMZJWkenOgvMyWD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxV0oY%2Fbtqy0pTLzif%2F6LVucwpMZJWkenOgvMyWD1%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 23.15.01.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 2.6] 재시동&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;좌측 상단 을 클릭 후 &lt;b&gt;'재시동'&lt;/b&gt;을 클릭 후 &lt;b&gt;option&lt;/b&gt; 키를 길게 누르고 있어 주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[3] macOS Catalina 클린 설치 시작&lt;/b&gt;&lt;/h4&gt;
&lt;figure data-ke-type=&quot;image&quot; data-ke-style=&quot;alignCenter&quot;&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-11 22.54.41.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLY1O9/btqyYql42yg/a5ejK2Qyf76EnYdC98Khq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLY1O9/btqyYql42yg/a5ejK2Qyf76EnYdC98Khq1/img.png&quot; data-alt=&quot;[그림 3.1] macOS 재시동&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLY1O9/btqyYql42yg/a5ejK2Qyf76EnYdC98Khq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLY1O9%2FbtqyYql42yg%2Fa5ejK2Qyf76EnYdC98Khq1%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-11 22.54.41.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 3.1] macOS 재시동&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;재시동 후 macOS 부팅이 시작되면 option 키를 그만 눌러도 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IMG_4951.jpg&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGsOL4/btqy0p0yq3c/PrEvKj6bUvr3P6yXQyQ3T0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGsOL4/btqy0p0yq3c/PrEvKj6bUvr3P6yXQyQ3T0/img.jpg&quot; data-alt=&quot;[그림 3.2] Install macOS Catalina 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGsOL4/btqy0p0yq3c/PrEvKj6bUvr3P6yXQyQ3T0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGsOL4%2Fbtqy0p0yq3c%2FPrEvKj6bUvr3P6yXQyQ3T0%2Fimg.jpg&quot; data-filename=&quot;IMG_4951.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 3.2] Install macOS Catalina 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;'Install macOS Catalina'&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;03.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/99bhB/btqyY2wWWXZ/ZXnqS8VEkUyVL3KXZqA391/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/99bhB/btqyY2wWWXZ/ZXnqS8VEkUyVL3KXZqA391/img.png&quot; data-alt=&quot;[그림 3.3] macOS 로딩 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/99bhB/btqyY2wWWXZ/ZXnqS8VEkUyVL3KXZqA391/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F99bhB%2FbtqyY2wWWXZ%2FZXnqS8VEkUyVL3KXZqA391%2Fimg.png&quot; data-filename=&quot;03.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 3.3] macOS 로딩 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;로딩을 기다려주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;04.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uvz6F/btqyWVeGYyD/CYb6QqBDttMq9NiBQkvmak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uvz6F/btqyWVeGYyD/CYb6QqBDttMq9NiBQkvmak/img.png&quot; data-alt=&quot;[그림 3.4] 언어 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uvz6F/btqyWVeGYyD/CYb6QqBDttMq9NiBQkvmak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fuvz6F%2FbtqyWVeGYyD%2FCYb6QqBDttMq9NiBQkvmak%2Fimg.png&quot; data-filename=&quot;04.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 3.4] 언어 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;macOS에서 사용할 &lt;b&gt;기본 언어(한국어)&lt;/b&gt;를 선택 후 &lt;b&gt;계속&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[4] 디스크 지우기(포맷)&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;05.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pxoFc/btqyYO6M6sy/5laZywlxcpCXtgDyAEykbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pxoFc/btqyYO6M6sy/5laZywlxcpCXtgDyAEykbk/img.png&quot; data-alt=&quot;[그림 4.1] 디스크 유틸리티 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pxoFc/btqyYO6M6sy/5laZywlxcpCXtgDyAEykbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpxoFc%2FbtqyYO6M6sy%2F5laZywlxcpCXtgDyAEykbk%2Fimg.png&quot; data-filename=&quot;05.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 4.1] 디스크 유틸리티 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;macOS 유틸리티 화면이 나타나면&lt;b&gt; 디스크 유틸리티&lt;/b&gt;를 선택 후 &lt;b&gt;계속&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;06.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMYZZk/btqyWKqYenS/gOMQbkDrnaAeQjDQKO5pak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMYZZk/btqyWKqYenS/gOMQbkDrnaAeQjDQKO5pak/img.png&quot; data-alt=&quot;[그림 4.2] Macintosh HD 포맷&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMYZZk/btqyWKqYenS/gOMQbkDrnaAeQjDQKO5pak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMYZZk%2FbtqyWKqYenS%2FgOMQbkDrnaAeQjDQKO5pak%2Fimg.png&quot; data-filename=&quot;06.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 4.2] Macintosh HD 포맷&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Macintosh HD&lt;/b&gt;를 선택 후 &lt;b&gt;지우기&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;07.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cT14sR/btqyWVZ4W6x/EuzrSDV8E1CFirhuNqnUKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cT14sR/btqyWVZ4W6x/EuzrSDV8E1CFirhuNqnUKk/img.png&quot; data-alt=&quot;[그림 4.3] Macintosh HD 포맷 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cT14sR/btqyWVZ4W6x/EuzrSDV8E1CFirhuNqnUKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcT14sR%2FbtqyWVZ4W6x%2FEuzrSDV8E1CFirhuNqnUKk%2Fimg.png&quot; data-filename=&quot;07.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 4.3] Macintosh HD 포맷 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;이름은&lt;b&gt; Macintosh HD&lt;/b&gt;, 포맷은 &lt;b&gt;APFS&lt;/b&gt; 기본 설정을 그대로 &lt;b&gt;지우기&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;08.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GBgBd/btqyWWShigF/ZlTpoxGOp4SQfmz7SKp1o0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GBgBd/btqyWWShigF/ZlTpoxGOp4SQfmz7SKp1o0/img.png&quot; data-alt=&quot;[그림 4.4] Macintosh HD 포맷 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GBgBd/btqyWWShigF/ZlTpoxGOp4SQfmz7SKp1o0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGBgBd%2FbtqyWWShigF%2FZlTpoxGOp4SQfmz7SKp1o0%2Fimg.png&quot; data-filename=&quot;08.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 4.4] Macintosh HD 포맷 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;지우기 작업이 완료되면 &lt;b&gt;디스크 유틸리티&lt;/b&gt; 창을 닫아주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[5] macOS Catalina 설치&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;10.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djNmKC/btqyWW5Jsfz/KvE9UsoPc1Gd0mj7vvQF0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djNmKC/btqyWW5Jsfz/KvE9UsoPc1Gd0mj7vvQF0K/img.png&quot; data-alt=&quot;[그림 5.1] macOS 설치 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djNmKC/btqyWW5Jsfz/KvE9UsoPc1Gd0mj7vvQF0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjNmKC%2FbtqyWW5Jsfz%2FKvE9UsoPc1Gd0mj7vvQF0K%2Fimg.png&quot; data-filename=&quot;10.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.1] macOS 설치 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;macOS 유틸리티 창으로 돌아온 후 &lt;b&gt;macOS 설치&lt;/b&gt;를 선택 후 &lt;b&gt;계속&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;11.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhSygW/btqyWK5wOG4/SiIz6JUxeiIiHHoTVGiyp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhSygW/btqyWK5wOG4/SiIz6JUxeiIiHHoTVGiyp1/img.png&quot; data-alt=&quot;[그림 5.2] macOS Catalina 설치 시작&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhSygW/btqyWK5wOG4/SiIz6JUxeiIiHHoTVGiyp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhSygW%2FbtqyWK5wOG4%2FSiIz6JUxeiIiHHoTVGiyp1%2Fimg.png&quot; data-filename=&quot;11.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.2] macOS Catalina 설치 시작&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;macOS Catalina 설치를 시작합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;계속&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;12.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvK3L5/btqyWL4saY5/oVEN4uPPHl1flB11tnF9p0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvK3L5/btqyWL4saY5/oVEN4uPPHl1flB11tnF9p0/img.png&quot; data-alt=&quot;[그림 5.3] 소프트웨어 사용권 계약의 이용 약관 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvK3L5/btqyWL4saY5/oVEN4uPPHl1flB11tnF9p0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvK3L5%2FbtqyWL4saY5%2FoVEN4uPPHl1flB11tnF9p0%2Fimg.png&quot; data-filename=&quot;12.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.3] 소프트웨어 사용권 계약의 이용 약관 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;동의&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;13.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpuG3r/btqyWKxGCbX/cjc08L27hSgRaTfEvVGUO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpuG3r/btqyWKxGCbX/cjc08L27hSgRaTfEvVGUO0/img.png&quot; data-alt=&quot;[그림 5.4] 소프트웨어 사용권 계약의 이용 약관&amp;amp;amp;nbsp;동의&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpuG3r/btqyWKxGCbX/cjc08L27hSgRaTfEvVGUO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpuG3r%2FbtqyWKxGCbX%2Fcjc08L27hSgRaTfEvVGUO0%2Fimg.png&quot; data-filename=&quot;13.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.4] 소프트웨어 사용권 계약의 이용 약관&amp;nbsp;동의&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;동의&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;14.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pQQUT/btqyWLclGjo/HoogRHvRBjoKJaRcHw2xqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pQQUT/btqyWLclGjo/HoogRHvRBjoKJaRcHw2xqk/img.png&quot; data-alt=&quot;[그림 5.5] 디스크 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pQQUT/btqyWLclGjo/HoogRHvRBjoKJaRcHw2xqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpQQUT%2FbtqyWLclGjo%2FHoogRHvRBjoKJaRcHw2xqk%2Fimg.png&quot; data-filename=&quot;14.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.5] 디스크 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;macOS Catalina를 설치할 &lt;b&gt;디스크(Macintosh HD)&lt;/b&gt;를 선택 후 &lt;b&gt;설치&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;15.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPm5yR/btqyXxYLV3f/BNHZefr1m4AV1RQWzvo5zK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPm5yR/btqyXxYLV3f/BNHZefr1m4AV1RQWzvo5zK/img.png&quot; data-alt=&quot;[그림 5.6] macOS Catalina 설치 중&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPm5yR/btqyXxYLV3f/BNHZefr1m4AV1RQWzvo5zK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPm5yR%2FbtqyXxYLV3f%2FBNHZefr1m4AV1RQWzvo5zK%2Fimg.png&quot; data-filename=&quot;15.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.6] macOS Catalina 설치 중&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;디스크에 macOS Catalina가 설치되고 있습니다. 기다려주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;16.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2cPwU/btqyZYHEnQf/BUrRy7CJeVOeKTOdVxFiI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2cPwU/btqyZYHEnQf/BUrRy7CJeVOeKTOdVxFiI1/img.png&quot; data-alt=&quot;[그림 5.7] macOS 부팅 중&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2cPwU/btqyZYHEnQf/BUrRy7CJeVOeKTOdVxFiI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2cPwU%2FbtqyZYHEnQf%2FBUrRy7CJeVOeKTOdVxFiI1%2Fimg.png&quot; data-filename=&quot;16.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.7] macOS 부팅 중&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;디스크 설치가 완료되면 macOS가 부팅됩니다. 기다려주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;17.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EAVUg/btqyXqr4ZBu/G0MAkk4vgFVw6a6zo3ftF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EAVUg/btqyXqr4ZBu/G0MAkk4vgFVw6a6zo3ftF1/img.png&quot; data-alt=&quot;[그림 5.8] 국가 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EAVUg/btqyXqr4ZBu/G0MAkk4vgFVw6a6zo3ftF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEAVUg%2FbtqyXqr4ZBu%2FG0MAkk4vgFVw6a6zo3ftF1%2Fimg.png&quot; data-filename=&quot;17.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.8] 국가 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;국가(대한민국)를&lt;/b&gt; 선택 후 &lt;b&gt;계속&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;을 클릭해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;18.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lJYdI/btqyY3Qe15u/Kjmd7MfKmrSA04pbpEEAJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lJYdI/btqyY3Qe15u/Kjmd7MfKmrSA04pbpEEAJ1/img.png&quot; data-alt=&quot;[그림 5.9] 언어 기본설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lJYdI/btqyY3Qe15u/Kjmd7MfKmrSA04pbpEEAJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlJYdI%2FbtqyY3Qe15u%2FKjmd7MfKmrSA04pbpEEAJ1%2Fimg.png&quot; data-filename=&quot;18.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.9] 언어 기본설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;자신이 사용할 언어에 맞게 설정 후 &lt;b&gt;계속&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;기본 설정으로 진행하시면 됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;19.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7LhJS/btqyYp0tcHq/siUv9Kik0m9D2tolWo3bzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7LhJS/btqyYp0tcHq/siUv9Kik0m9D2tolWo3bzk/img.png&quot; data-alt=&quot;[그림 5.10] 인터넷 연결 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7LhJS/btqyYp0tcHq/siUv9Kik0m9D2tolWo3bzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7LhJS%2FbtqyYp0tcHq%2FsiUv9Kik0m9D2tolWo3bzk%2Fimg.png&quot; data-filename=&quot;19.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.10] 인터넷 연결 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;연결 방법을 설정해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;'컴퓨터가 인터넷에 연결되어 있지 않습니다.'&lt;/b&gt;를 선택 후 진행하도록 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;(인터넷 연결 상태에 따라 해당 설정은 생략될 수 있습니다.)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;20.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWZUIu/btqyZtgNyXW/647YXOsV4srJa9ZsOdBzxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWZUIu/btqyZtgNyXW/647YXOsV4srJa9ZsOdBzxk/img.png&quot; data-alt=&quot;[그림 5.11] 인터넷 연결 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWZUIu/btqyZtgNyXW/647YXOsV4srJa9ZsOdBzxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWZUIu%2FbtqyZtgNyXW%2F647YXOsV4srJa9ZsOdBzxk%2Fimg.png&quot; data-filename=&quot;20.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.11] 인터넷 연결 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;계속&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;21.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZGWLl/btqyXyi2f9i/5DJfAQD1gQeLK6BQMm6F11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZGWLl/btqyXyi2f9i/5DJfAQD1gQeLK6BQMm6F11/img.png&quot; data-alt=&quot;[그림 5.12] 데이터 및 개인 정보 보호 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZGWLl/btqyXyi2f9i/5DJfAQD1gQeLK6BQMm6F11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZGWLl%2FbtqyXyi2f9i%2F5DJfAQD1gQeLK6BQMm6F11%2Fimg.png&quot; data-filename=&quot;21.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.12] 데이터 및 개인 정보 보호 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;계속&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;22.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p5191/btqyWKxGOVR/YbKS1K3qoTQvr8DnF7mWe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p5191/btqyWKxGOVR/YbKS1K3qoTQvr8DnF7mWe1/img.png&quot; data-alt=&quot;[그림 5.13] 정보 전송 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p5191/btqyWKxGOVR/YbKS1K3qoTQvr8DnF7mWe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp5191%2FbtqyWKxGOVR%2FYbKS1K3qoTQvr8DnF7mWe1%2Fimg.png&quot; data-filename=&quot;22.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.13] 정보 전송 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;'지금 정보를 전송하지 않음'&lt;/b&gt;을 선택 후 &lt;b&gt;계속&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;23.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YsELm/btqyXrxFNm7/0GEIAaMKDIQk7KdeJjRQ70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YsELm/btqyXrxFNm7/0GEIAaMKDIQk7KdeJjRQ70/img.png&quot; data-alt=&quot;[그림 5.14] 이용 약관&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YsELm/btqyXrxFNm7/0GEIAaMKDIQk7KdeJjRQ70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYsELm%2FbtqyXrxFNm7%2F0GEIAaMKDIQk7KdeJjRQ70%2Fimg.png&quot; data-filename=&quot;23.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.14] 이용 약관&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;동의&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;24.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8YvFx/btqyZW36Ztr/Glmx5kAoeg7QvztKuOOJ2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8YvFx/btqyZW36Ztr/Glmx5kAoeg7QvztKuOOJ2K/img.png&quot; data-alt=&quot;[그림 5.15] 이용 약관 동의&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8YvFx/btqyZW36Ztr/Glmx5kAoeg7QvztKuOOJ2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8YvFx%2FbtqyZW36Ztr%2FGlmx5kAoeg7QvztKuOOJ2K%2Fimg.png&quot; data-filename=&quot;24.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.15] 이용 약관 동의&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;동의&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;25.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KZWXW/btqyZXvbb6Z/L0CWww8IU82Gg0NBxNZVrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KZWXW/btqyZXvbb6Z/L0CWww8IU82Gg0NBxNZVrK/img.png&quot; data-alt=&quot;[그림 5.16] 계정 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KZWXW/btqyZXvbb6Z/L0CWww8IU82Gg0NBxNZVrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKZWXW%2FbtqyZXvbb6Z%2FL0CWww8IU82Gg0NBxNZVrK%2Fimg.png&quot; data-filename=&quot;25.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.16] 계정 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;전체 이름은 &lt;b&gt;macOS 사용자 이름&lt;/b&gt;이며, 계정 이름은 &lt;b&gt;홈 폴더 이름&lt;/b&gt;으로 사용됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;정보를 입력 후 &lt;b&gt;계속&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;26.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vaF2L/btqyZtA5ur9/NDJ3TZyPscLwHSDkXZPBr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vaF2L/btqyZtA5ur9/NDJ3TZyPscLwHSDkXZPBr0/img.png&quot; data-alt=&quot;[그림 5.17] 빠른 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vaF2L/btqyZtA5ur9/NDJ3TZyPscLwHSDkXZPBr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvaF2L%2FbtqyZtA5ur9%2FNDJ3TZyPscLwHSDkXZPBr0%2Fimg.png&quot; data-filename=&quot;26.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.17] 빠른 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;계속&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;27.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k4dou/btqyY15TsTy/kDD6M1vbzNG0023qvv4Ab1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k4dou/btqyY15TsTy/kDD6M1vbzNG0023qvv4Ab1/img.png&quot; data-alt=&quot;[그림 5.18] 시간대 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k4dou/btqyY15TsTy/kDD6M1vbzNG0023qvv4Ab1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk4dou%2FbtqyY15TsTy%2FkDD6M1vbzNG0023qvv4Ab1%2Fimg.png&quot; data-filename=&quot;27.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.18] 시간대 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;가장 가까운 도시&lt;/b&gt;를 선택 후 &lt;b&gt;계속&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;28.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dywFXl/btqyWLpVdIJ/0ujRe8fjHq9KPuwb9N8rr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dywFXl/btqyWLpVdIJ/0ujRe8fjHq9KPuwb9N8rr1/img.png&quot; data-alt=&quot;[그림 5.19] 분석 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dywFXl/btqyWLpVdIJ/0ujRe8fjHq9KPuwb9N8rr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdywFXl%2FbtqyWLpVdIJ%2F0ujRe8fjHq9KPuwb9N8rr1%2Fimg.png&quot; data-filename=&quot;28.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.19] 분석 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;계속&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;29.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kCKRF/btqyXwes2jd/gVQyHKmHunTmIXoksIq770/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kCKRF/btqyXwes2jd/gVQyHKmHunTmIXoksIq770/img.png&quot; data-alt=&quot;[그림 5.20] 스크린 타임 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kCKRF/btqyXwes2jd/gVQyHKmHunTmIXoksIq770/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkCKRF%2FbtqyXwes2jd%2FgVQyHKmHunTmIXoksIq770%2Fimg.png&quot; data-filename=&quot;29.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.20] 스크린 타임 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;스크린 타임에 관련된 설정은 나중에 시스템 환경설정에서 변경 가능합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;계속&lt;/b&gt;을 클릭해서 기본 설정으로 진행해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;30.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J03dH/btqyYpzntwx/vGtOZ87oqAQJ81COZU8QO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J03dH/btqyYpzntwx/vGtOZ87oqAQJ81COZU8QO0/img.png&quot; data-alt=&quot;[그림 5.21] 보기 모드 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J03dH/btqyYpzntwx/vGtOZ87oqAQJ81COZU8QO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ03dH%2FbtqyYpzntwx%2FvGtOZ87oqAQJ81COZU8QO0%2Fimg.png&quot; data-filename=&quot;30.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.21] 보기 모드 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;자신에게 맞는 화면 모드를 선택 후 &lt;b&gt;계속&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;나중에 시스템 환경설정에서 변경 가능합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;31.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sw1CA/btqyXp7KzQY/OwTefWMTmpkHdT0W74aLpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sw1CA/btqyXp7KzQY/OwTefWMTmpkHdT0W74aLpK/img.png&quot; data-alt=&quot;[그림 5.22] 전체 설정 중&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sw1CA/btqyXp7KzQY/OwTefWMTmpkHdT0W74aLpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsw1CA%2FbtqyXp7KzQY%2FOwTefWMTmpkHdT0W74aLpK%2Fimg.png&quot; data-filename=&quot;31.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.22] 전체 설정 중&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;지금까지 진행한 설정이 세팅되는 중입니다. 기다려주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;32.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHhwdr/btqyZt8Vh1s/kCOnaKkmyzvNkkBXYQIOkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHhwdr/btqyZt8Vh1s/kCOnaKkmyzvNkkBXYQIOkk/img.png&quot; data-alt=&quot;[그림 5.23] macOS Catalina&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHhwdr/btqyZt8Vh1s/kCOnaKkmyzvNkkBXYQIOkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHhwdr%2FbtqyZt8Vh1s%2FkCOnaKkmyzvNkkBXYQIOkk%2Fimg.png&quot; data-filename=&quot;32.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.23] macOS Catalina&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;모든 설정이 완료되면 macOS Catalina가 시작됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;* 시동 보안 설정을 하신 분은 [그림 2.1 ~ 그림 2.6]을 참고해서 기본 설정으로 다시 바꿔주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;보안 시동은 &lt;b&gt;'전체 보안'&lt;/b&gt;으로 허용된 시동 미디어는 &lt;b&gt;'외부 또는 제거 가능한 미디어에서 시동 허용 안 함'&lt;/b&gt;으로 선택 후 &lt;b&gt;재시동&lt;/b&gt;해주세요.&lt;/p&gt;</description>
      <category>macOS</category>
      <author>WHITEPAEK</author>
      <guid isPermaLink="true">https://whitepaek.tistory.com/51</guid>
      <comments>https://whitepaek.tistory.com/51#entry51comment</comments>
      <pubDate>Fri, 11 Oct 2019 10:39:27 +0900</pubDate>
    </item>
    <item>
      <title>macOS 카탈리나 클린 설치(1) : USB 만들기</title>
      <link>https://whitepaek.tistory.com/50</link>
      <description>&lt;p style=&quot;font-size: 0.94em;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;# macOS Catalina clean install(1)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;맥OS(macOS) 카탈리나(Catalina)가 정식 배포되었습니다. 이번 카탈리나 버전에서 가장 기대되는 부분은 사이드카(Sidecar) 기능으로 아이패드(iPad)를 확장 모니터로 사용할 수 있는 부분입니다. 많은 애플 유저분들이 업데이트를 어떤 방식으로 할지 고민할 텐데요. 맥OS를 업데이트하는 방법은 두 가지가 있습니다. 첫 번째는 &lt;b&gt;시스템 환경설정에서 소프트웨어 업데이트를 하는 방법&lt;/b&gt;과 두 번째는 윈도우의 포맷과 동일한 개념의 &lt;b&gt;클린 설치&lt;/b&gt;가 있습니다. 저는 두 번째 방법인 클린 설치를 이용한 업데이트 방법을 알려드리도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;클린 설치는 이전 모하비(Mojave)에서 설명드린 방법과 대부분 동일합니다. 그래도 혹시라도 헷갈리시는 분들을 위해 다시 한번 설명해드리도록 하겠습니다. 클린 설치를 하기 앞서 &lt;b&gt;16GB 이상의 USB를 준비해주세요.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[1] macOS Catalina Install 앱 다운로드&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;01.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XVVyY/btqyWKDUfHs/CCyxEs6ROv7KkImhwYg451/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XVVyY/btqyWKDUfHs/CCyxEs6ROv7KkImhwYg451/img.png&quot; data-alt=&quot;[그림 1.1] 시스템 환경설정 -&amp;amp;amp;gt; 소프트웨어 업데이트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XVVyY/btqyWKDUfHs/CCyxEs6ROv7KkImhwYg451/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXVVyY%2FbtqyWKDUfHs%2FCCyxEs6ROv7KkImhwYg451%2Fimg.png&quot; data-filename=&quot;01.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1.1] 시스템 환경설정 -&amp;gt; 소프트웨어 업데이트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;좌측 상단에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt; &lt;/b&gt;아이콘을 클릭 후&amp;nbsp;&lt;/span&gt;&lt;b&gt;시스템 환경설정...&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;02.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYIu3O/btqyV5WcNqE/nTS2mioxUD6a2O1sZlxJLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYIu3O/btqyV5WcNqE/nTS2mioxUD6a2O1sZlxJLK/img.png&quot; data-alt=&quot;[그림 1.2] 지금 업그레이드하기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYIu3O/btqyV5WcNqE/nTS2mioxUD6a2O1sZlxJLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYIu3O%2FbtqyV5WcNqE%2FnTS2mioxUD6a2O1sZlxJLK%2Fimg.png&quot; data-filename=&quot;02.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1.2] 지금 업그레이드하기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;소프트웨어 업데이트&lt;/b&gt; 아이콘을 클릭 후 &lt;b&gt;지금 업그레이드하기&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;03.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkfRyy/btqyXxw8Q5K/bfqZUcZMDaxoZuFuJLiCY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkfRyy/btqyXxw8Q5K/bfqZUcZMDaxoZuFuJLiCY1/img.png&quot; data-alt=&quot;[그림 1.3] 새로운 업데이트 다운로드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkfRyy/btqyXxw8Q5K/bfqZUcZMDaxoZuFuJLiCY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkfRyy%2FbtqyXxw8Q5K%2FbfqZUcZMDaxoZuFuJLiCY1%2Fimg.png&quot; data-filename=&quot;03.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1.3] 새로운 업데이트 다운로드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;다운로드가 전부 완료될 때까지 기다려주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;03-01.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x51R4/btqyU9R2A3d/PKVMTldLdK3FmUkGKpUwk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x51R4/btqyU9R2A3d/PKVMTldLdK3FmUkGKpUwk0/img.png&quot; data-alt=&quot;[그림 1.4] App Store에서 다운로드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x51R4/btqyU9R2A3d/PKVMTldLdK3FmUkGKpUwk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx51R4%2FbtqyU9R2A3d%2FPKVMTldLdK3FmUkGKpUwk0%2Fimg.png&quot; data-filename=&quot;03-01.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1.4] App Store에서 다운로드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;[그림 1.1 ~ 그림1.3] 방법이 잘 안될 때는 앱 스토어(App Store)에서 macOS Catalina를 다운로드해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;05.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMMx1i/btqyWWxoPZ1/jv45ULKKm6SuOKkjylOzzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMMx1i/btqyWWxoPZ1/jv45ULKKm6SuOKkjylOzzk/img.png&quot; data-alt=&quot;[그림 1.5] macOS Catalina 설치 화면 종료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMMx1i/btqyWWxoPZ1/jv45ULKKm6SuOKkjylOzzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMMx1i%2FbtqyWWxoPZ1%2Fjv45ULKKm6SuOKkjylOzzk%2Fimg.png&quot; data-filename=&quot;05.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1.5] macOS Catalina 설치 화면 종료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;다운로드가 완료되면 위 사진처럼 &lt;b&gt;macOS Catalina 설치 화면&lt;/b&gt;이 나타납니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;이때 진행하지 마시고&lt;b&gt; macOS 설치 종료(command + Q)를 클릭&lt;/b&gt;해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[2] USB 포맷&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IMG_4952.jpg&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R3hhr/btqyY3Yl1Wl/GMRC8iZMXG4WPLt29kED30/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R3hhr/btqyY3Yl1Wl/GMRC8iZMXG4WPLt29kED30/img.jpg&quot; data-alt=&quot;[그림 2.1] 16GB 이상의 USB 연결&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R3hhr/btqyY3Yl1Wl/GMRC8iZMXG4WPLt29kED30/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR3hhr%2FbtqyY3Yl1Wl%2FGMRC8iZMXG4WPLt29kED30%2Fimg.jpg&quot; data-filename=&quot;IMG_4952.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 2.1] 16GB 이상의 USB 연결&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;16GB 이상의 USB&lt;/b&gt;를 포트에 꽂아주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;07.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d4zLna/btqyYP5aQd4/vfPAKlYr0l0cYjoVOPXXtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d4zLna/btqyYP5aQd4/vfPAKlYr0l0cYjoVOPXXtk/img.png&quot; data-alt=&quot;[그림 2.2] Spotlight -&amp;amp;amp;gt; 디스크 유틸리티 입력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d4zLna/btqyYP5aQd4/vfPAKlYr0l0cYjoVOPXXtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd4zLna%2FbtqyYP5aQd4%2FvfPAKlYr0l0cYjoVOPXXtk%2Fimg.png&quot; data-filename=&quot;07.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 2.2] Spotlight -&amp;gt; 디스크 유틸리티 입력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;command + space bar 단축키를 눌러서 스팟라이트(Spotlight)를 실행하고&lt;b&gt; 디스크 유틸리티&lt;/b&gt;를 입력해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;08.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bx8gRQ/btqyYQiI7sg/hwI1ktc2zS1j0ObzhsrIM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bx8gRQ/btqyYQiI7sg/hwI1ktc2zS1j0ObzhsrIM0/img.png&quot; data-alt=&quot;[그림 2.3] USB 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bx8gRQ/btqyYQiI7sg/hwI1ktc2zS1j0ObzhsrIM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbx8gRQ%2FbtqyYQiI7sg%2FhwI1ktc2zS1j0ObzhsrIM0%2Fimg.png&quot; data-filename=&quot;08.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 2.3] USB 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;디스크 유틸리티를 실행하고 자신의&lt;b&gt; USB를 선택 후 지우기를 클릭&lt;/b&gt;해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;09.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kHKZF/btqyV6AKZzp/9WdoKemn9f2CwqMCcn0qv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kHKZF/btqyV6AKZzp/9WdoKemn9f2CwqMCcn0qv0/img.png&quot; data-alt=&quot;[그림 2.4] USB 포맷&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kHKZF/btqyV6AKZzp/9WdoKemn9f2CwqMCcn0qv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkHKZF%2FbtqyV6AKZzp%2F9WdoKemn9f2CwqMCcn0qv0%2Fimg.png&quot; data-filename=&quot;09.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 2.4] USB 포맷&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;이름을 MyVolume&lt;/b&gt;으로 입력하고 포맷은 &lt;b&gt;Mac OS 확장(저널링)&lt;/b&gt;을 선택 후&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;지우기를 클릭&lt;/b&gt;해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;10.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dWvmMA/btqyXw57BfS/Q1Ofh6t7WF4BbAxUji3KE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dWvmMA/btqyXw57BfS/Q1Ofh6t7WF4BbAxUji3KE0/img.png&quot; data-alt=&quot;[그림 2.5] USB 포맷 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dWvmMA/btqyXw57BfS/Q1Ofh6t7WF4BbAxUji3KE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdWvmMA%2FbtqyXw57BfS%2FQ1Ofh6t7WF4BbAxUji3KE0%2Fimg.png&quot; data-filename=&quot;10.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 2.5] USB 포맷 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;정상적으로 포맷이 끝나면 &lt;b&gt;완료&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[3] macOS Catalina 설치 USB 만들기&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;11.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOd1cW/btqyU8Mo7pQ/mmjGcQtwcJDkQKcl8yvCyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOd1cW/btqyU8Mo7pQ/mmjGcQtwcJDkQKcl8yvCyK/img.png&quot; data-alt=&quot;[그림 3.1] Spotlight -&amp;amp;amp;gt; 터미널 입력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOd1cW/btqyU8Mo7pQ/mmjGcQtwcJDkQKcl8yvCyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOd1cW%2FbtqyU8Mo7pQ%2FmmjGcQtwcJDkQKcl8yvCyK%2Fimg.png&quot; data-filename=&quot;11.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 3.1] Spotlight -&amp;gt; 터미널 입력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;스팟라이트를 실행하고&lt;b&gt; 터미널&lt;/b&gt;을 입력해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;13.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXNhjE/btqyWnoLByG/goX1XB4zLa7ddMkOlVdm00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXNhjE/btqyWnoLByG/goX1XB4zLa7ddMkOlVdm00/img.png&quot; data-alt=&quot;[그림 3.2] 터미널에서 &amp;amp;#39;createinstallmedia&amp;amp;#39; 명령어 입력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXNhjE/btqyWnoLByG/goX1XB4zLa7ddMkOlVdm00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXNhjE%2FbtqyWnoLByG%2FgoX1XB4zLa7ddMkOlVdm00%2Fimg.png&quot; data-filename=&quot;13.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 3.2] 터미널에서 'createinstallmedia' 명령어 입력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;터미널을 실행하고 아래의 명령어를 입력 후 return(enter) 키를 눌러주세요.&lt;/p&gt;
&lt;pre id=&quot;code_1570690328924&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo /Applications/Install\ macOS\ catalina.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;14.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPicKH/btqyULDPk6N/0MbCT9K6H08kMWgW8zDoh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPicKH/btqyULDPk6N/0MbCT9K6H08kMWgW8zDoh1/img.png&quot; data-alt=&quot;[그림 3.3] macOS 비밀번호 입력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPicKH/btqyULDPk6N/0MbCT9K6H08kMWgW8zDoh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPicKH%2FbtqyULDPk6N%2F0MbCT9K6H08kMWgW8zDoh1%2Fimg.png&quot; data-filename=&quot;14.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 3.3] macOS 비밀번호 입력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;자신의 맥OS 비밀번호를 입력해주세요.&amp;nbsp;입력을 해도 아무것도 입력되지 않습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;무시하고 &lt;b&gt;자신의 비밀번호를 입력 후 return(enter) 키를 눌러주세요.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;15.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLt1yD/btqyV6Hzj5d/x7AYv1kcw43BW7STtO8QA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLt1yD/btqyV6Hzj5d/x7AYv1kcw43BW7STtO8QA1/img.png&quot; data-alt=&quot;[그림 3.4] Y 입력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLt1yD/btqyV6Hzj5d/x7AYv1kcw43BW7STtO8QA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLt1yD%2FbtqyV6Hzj5d%2Fx7AYv1kcw43BW7STtO8QA1%2Fimg.png&quot; data-filename=&quot;15.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 3.4] Y 입력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;'If you wish to continue type (Y) then press return:'&lt;/b&gt;이라는 문구가 출력되면&lt;b&gt; Y&lt;/b&gt;를 입력 후 return(enter) 키를 눌러주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;16.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHJ0eF/btqyWLJGflP/RTem8dsTFsgPL9O9H9Hb0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHJ0eF/btqyWLJGflP/RTem8dsTFsgPL9O9H9Hb0K/img.png&quot; data-alt=&quot;[그림 3.5] 설치 USB 완성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHJ0eF/btqyWLJGflP/RTem8dsTFsgPL9O9H9Hb0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHJ0eF%2FbtqyWLJGflP%2FRTem8dsTFsgPL9O9H9Hb0K%2Fimg.png&quot; data-filename=&quot;16.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 3.5] 설치 USB 완성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;로딩이 완료될 때까지 기다려주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Install media now available at &quot;/Volumes/Install macOS Catalina&quot;&lt;/b&gt;라는 문구가 출력되면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;맥OS 카탈리나 설치를 위한 USB가 완성된 거예요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[4] macOS Catalina 클린 설치&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;32.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjmoCp/btqyXrdq4S6/2XTKKBqJmq1MP0g0nNc0gK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjmoCp/btqyXrdq4S6/2XTKKBqJmq1MP0g0nNc0gK/img.png&quot; data-alt=&quot;[그림 4.1] macOS Catalina&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjmoCp/btqyXrdq4S6/2XTKKBqJmq1MP0g0nNc0gK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjmoCp%2FbtqyXrdq4S6%2F2XTKKBqJmq1MP0g0nNc0gK%2Fimg.png&quot; data-filename=&quot;32.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 4.1] macOS Catalina&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center; font-size: 1.12em;&quot;&gt;&lt;a href=&quot;https://whitepaek.tistory.com/51&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;macOS Catalina 클린 설치하러 가기!&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <category>macOS</category>
      <author>WHITEPAEK</author>
      <guid isPermaLink="true">https://whitepaek.tistory.com/50</guid>
      <comments>https://whitepaek.tistory.com/50#entry50comment</comments>
      <pubDate>Thu, 10 Oct 2019 16:10:47 +0900</pubDate>
    </item>
    <item>
      <title>[IntelliJ] 자바 멀티 프로젝트(모듈) 생성하기</title>
      <link>https://whitepaek.tistory.com/47</link>
      <description>&lt;p&gt;인텔리제이(IntelliJ)에서 이클립스(Eclipse)처럼 워크스페이스(Workspace)에 여러 개의 프로젝트를 생성하는 방법을 알아보도록 하겠습니다. 우선 설명에 앞서 인텔리제이와 이클립스에서의 용어와 개념 차이에 대해 먼저 이해해야 하기 때문에 설명드리도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;다음 표는 인텔리제이와 이클립스에서의 용어 차이입니다. 인텔리제이에서 프로젝트는 이클립스의 워크스페이스라고 생각하시면 되는데 용어적인 차이점일 뿐 주의하셔야 합니다. 이클립스의 &lt;b&gt;워크스페이스 같은 경우 하나의 디렉토리&lt;/b&gt;라고 생각할 수 있지만 인텔리제이의 &lt;b&gt;프로젝트는 하나의 프로젝트 개념&lt;/b&gt;으로 생각해야 합니다. 즉, 이클립스의 프로젝트처럼 코드를 작성하고 컴파일할 수 있는 하나의 프로젝트입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;IntelliJ IDEA&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;Eclipse&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;Project&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;Workspace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;Module&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;Project&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음 표와 같이 설명하는 게 적절한지는 모르겠지만 이해를 돕기 위해서 다시 한번 위의 표를 수정해서 보여드리겠습니다. 이전 표에서는 용어적인 차이점에서 보여줬다면 다음 표는 개념적인 차이점에서 본 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 76px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;IntelliJ IDEA&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;Eclipse&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;Workspace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;Project&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;Project&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;Module&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그렇다면 워크스페이스 개념이 없는 인텔리제이는 여러 개의 프로젝트를 하나의 윈도우에 어떻게 구성할까요? 위의 표를 보면 이클립스와 다르게 인텔리제이에서는 모듈(Module)이라는 개념이 있습니다. 모듈은 하나의 작은 프로젝트라고 생각하면 됩니다. 인텔리제이에서는&amp;nbsp;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;프로젝트 안에 여러 개의 작은 프로젝트(모듈)를 구성할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;좀 더 이해하기 편하게 말씀드리자면 이클립스의 워크스페이스에서는 서로 관련이 없는 프로젝트를 구성하여 사용하는 경우가 있지만, 인텔리제이의 경우 프로젝트 안에 작은 프로젝트(모듈)를 구성하는 것이기 때문에 &lt;b&gt;서로 연관이 있는 프로젝트를 구성&lt;/b&gt;해서 사용하는 것이 바람직합니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;(물론, 서로 관련이 없는 프로젝트를 구성하여 사용할 수 있으나 인텔리제이 규칙(?)에 어긋나는 방법이므로 권장하지 않습니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;인텔리제이와 이클립스의 차이점에 대한 설명은 여기까지입니다. 인텔리제이에서 직접 멀티 프로젝트(모듈)를 생성하고 위에서 설명한 인텔리제이의 프로젝트와 모듈에 대해 좀 더 이해할 수 있도록 해보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;[1] 빈 프로젝트(Empty Project) 모듈 구성하기&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;font-size: 0.87em;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px; color: #9d9d9d;&quot;&gt;# Java Multi Project&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 0.87em;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px; color: #9d9d9d;&quot;&gt;# Java Multi Module&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-05 21.06.04.png&quot; data-origin-width=&quot;1778&quot; data-origin-height=&quot;1188&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Xluew/btqyQ5UMkX0/1XUvEWcoC5fkvfnWyMjqRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Xluew/btqyQ5UMkX0/1XUvEWcoC5fkvfnWyMjqRk/img.png&quot; data-alt=&quot;[그림 1.1] 새 프로젝트 생성(Create New Project) 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Xluew/btqyQ5UMkX0/1XUvEWcoC5fkvfnWyMjqRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXluew%2FbtqyQ5UMkX0%2F1XUvEWcoC5fkvfnWyMjqRk%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-05 21.06.04.png&quot; data-origin-width=&quot;1778&quot; data-origin-height=&quot;1188&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;figcaption&gt;[그림 1.1] 새 프로젝트 생성(Create New Project) 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;인텔리제이를 실행 후 시작 화면(Welcom Screen)에서 새 프로젝트를 생성해주세요.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-05 21.06.10.png&quot; data-origin-width=&quot;2114&quot; data-origin-height=&quot;1732&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GmSjX/btqyPtJvG9A/1wr54jNs4f6YXJMOD0kUIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GmSjX/btqyPtJvG9A/1wr54jNs4f6YXJMOD0kUIk/img.png&quot; data-alt=&quot;[그림 1.2] Empty Project 선택 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GmSjX/btqyPtJvG9A/1wr54jNs4f6YXJMOD0kUIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGmSjX%2FbtqyPtJvG9A%2F1wr54jNs4f6YXJMOD0kUIk%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-05 21.06.10.png&quot; data-origin-width=&quot;2114&quot; data-origin-height=&quot;1732&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;figcaption&gt;[그림 1.2] Empty Project 선택 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;빈 프로젝트(Empty Project)를 선택 후 Next를 클릭해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-05 21.08.18.png&quot; data-origin-width=&quot;2114&quot; data-origin-height=&quot;1732&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAbhSs/btqyPWLu8Vf/0XbZpYx9nchVw8k3aAo0kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAbhSs/btqyPWLu8Vf/0XbZpYx9nchVw8k3aAo0kK/img.png&quot; data-alt=&quot;[그림 1.3] Project name 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAbhSs/btqyPWLu8Vf/0XbZpYx9nchVw8k3aAo0kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAbhSs%2FbtqyPWLu8Vf%2F0XbZpYx9nchVw8k3aAo0kK%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-05 21.08.18.png&quot; data-origin-width=&quot;2114&quot; data-origin-height=&quot;1732&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;figcaption&gt;[그림 1.3] Project name 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;프로젝트 이름(Project name)을 입력하고 Finish를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-05 21.23.55.png&quot; data-origin-width=&quot;2880&quot; data-origin-height=&quot;1986&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rpWs5/btqyQMg1Qu8/VQXN4odKYf5TbvXntFCCFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rpWs5/btqyQMg1Qu8/VQXN4odKYf5TbvXntFCCFK/img.png&quot; data-alt=&quot;[그림 1.4] New Module 선택 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rpWs5/btqyQMg1Qu8/VQXN4odKYf5TbvXntFCCFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrpWs5%2FbtqyQMg1Qu8%2FVQXN4odKYf5TbvXntFCCFK%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-05 21.23.55.png&quot; data-origin-width=&quot;2880&quot; data-origin-height=&quot;1986&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;figcaption&gt;[그림 1.4] New Module 선택 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Project Structure 윈도우가 나타나면 New Module를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-05 21.08.52.png&quot; data-origin-width=&quot;2114&quot; data-origin-height=&quot;1732&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIxooH/btqyOnJO4FP/1DlB2K3hvMFnmVNQRDuKiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIxooH/btqyOnJO4FP/1DlB2K3hvMFnmVNQRDuKiK/img.png&quot; data-alt=&quot;[그림 1.5] Module : Java 프로젝트 생성 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIxooH/btqyOnJO4FP/1DlB2K3hvMFnmVNQRDuKiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIxooH%2FbtqyOnJO4FP%2F1DlB2K3hvMFnmVNQRDuKiK%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-05 21.08.52.png&quot; data-origin-width=&quot;2114&quot; data-origin-height=&quot;1732&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;figcaption&gt;[그림 1.5] Module : Java 프로젝트 생성 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Java를 선택 후 Next를 클릭해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; font-size: 0.94em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; font-size: 0.94em;&quot;&gt;&lt;b&gt;모듈은 작은 프로젝트&lt;/b&gt;라고 설명했던 부분이 기억나시나요?&lt;/p&gt;
&lt;p style=&quot;text-align: center; font-size: 0.94em;&quot;&gt;모듈도 프로젝트 단위이기 때문에 프로젝트와 동일한 방식으로 생성되는 것입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center; font-size: 0.94em;&quot;&gt;(예제는 이해를 돕기 위해서 자바 프로젝트를 생성하도록 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center; font-size: 0.94em;&quot;&gt;나중에 자신이 진행하는 프로젝트 환경에 맞게 생성하시면 됩니다.)&lt;/p&gt;
&lt;p style=&quot;text-align: center; font-size: 0.94em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-05 21.36.31.png&quot; data-origin-width=&quot;2114&quot; data-origin-height=&quot;1732&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b66udG/btqyQrj9lky/vlSCptG4bHwsBlQRKeBAdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b66udG/btqyQrj9lky/vlSCptG4bHwsBlQRKeBAdk/img.png&quot; data-alt=&quot;[그림 1.6] Module name 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b66udG/btqyQrj9lky/vlSCptG4bHwsBlQRKeBAdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb66udG%2FbtqyQrj9lky%2FvlSCptG4bHwsBlQRKeBAdk%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-05 21.36.31.png&quot; data-origin-width=&quot;2114&quot; data-origin-height=&quot;1732&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;figcaption&gt;[그림 1.6] Module name 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;모듈 이름(Module name)을 입력 후 Finish를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Module file location에서 생성될 모듈 위치를 설정해줄 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-05 21.09.53.png&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;1562&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQxnja/btqyQT1kvez/u3xOLviiVYJkqTHovolZxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQxnja/btqyQT1kvez/u3xOLviiVYJkqTHovolZxK/img.png&quot; data-alt=&quot;[그림 1.7] Module 생성 결과 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQxnja/btqyQT1kvez/u3xOLviiVYJkqTHovolZxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQxnja%2FbtqyQT1kvez%2Fu3xOLviiVYJkqTHovolZxK%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-05 21.09.53.png&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;1562&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;figcaption&gt;[그림 1.7] Module 생성 결과 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;새로운 모듈이 생성된 걸 확인할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-05 21.10.15.png&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;1562&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmq6pV/btqyPWLvKkv/Is2VDfvMSzoj3s2mkKlpBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmq6pV/btqyPWLvKkv/Is2VDfvMSzoj3s2mkKlpBK/img.png&quot; data-alt=&quot;[그림 1.8] 모듈 추가 생성 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmq6pV/btqyPWLvKkv/Is2VDfvMSzoj3s2mkKlpBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbmq6pV%2FbtqyPWLvKkv%2FIs2VDfvMSzoj3s2mkKlpBK%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-05 21.10.15.png&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;1562&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;figcaption&gt;[그림 1.8] 모듈 추가 생성 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(그림 1.4 ~ 그림 1.7)과 같은 방식으로 모듈을 2개 더 생성해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;총 3개의 모듈을 생성하였으면 OK를 클릭해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-05 21.10.39.png&quot; data-origin-width=&quot;2808&quot; data-origin-height=&quot;1668&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N8G4R/btqyRNGlCK2/4khgDH5E7CtELd9zjsoZvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N8G4R/btqyRNGlCK2/4khgDH5E7CtELd9zjsoZvk/img.png&quot; data-alt=&quot;[그림 1.9] 멀티 프로젝트(모듈) 구성 완료 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N8G4R/btqyRNGlCK2/4khgDH5E7CtELd9zjsoZvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN8G4R%2FbtqyRNGlCK2%2F4khgDH5E7CtELd9zjsoZvk%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-05 21.10.39.png&quot; data-origin-width=&quot;2808&quot; data-origin-height=&quot;1668&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;figcaption&gt;[그림 1.9] 멀티 프로젝트(모듈) 구성 완료 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;프로젝트 툴 윈도우(Project tool window)에 3개의 모듈이 구성된 걸 확인할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2019-10-05 21.55.12.png&quot; data-origin-width=&quot;2878&quot; data-origin-height=&quot;1646&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rmwPP/btqyQzvv0qc/bEsvKxuqGhDgZ8pKQaVmzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rmwPP/btqyQzvv0qc/bEsvKxuqGhDgZ8pKQaVmzK/img.png&quot; data-alt=&quot;[그림 1.10] 멀티 프로젝트(모듈) 구성 완료 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rmwPP/btqyQzvv0qc/bEsvKxuqGhDgZ8pKQaVmzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrmwPP%2FbtqyQzvv0qc%2FbEsvKxuqGhDgZ8pKQaVmzK%2Fimg.png&quot; data-filename=&quot;스크린샷 2019-10-05 21.55.12.png&quot; data-origin-width=&quot;2878&quot; data-origin-height=&quot;1646&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;figcaption&gt;[그림 1.10] 멀티 프로젝트(모듈) 구성 완료 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;각 모듈 안에 Sources Root인 src 폴더가 있는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;이제 각 모듈 안에 필요한 Java 파일을 생성할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;이상으로 Empty Project안에 자바 멀티 프로젝트(모듈)를 생성이 끝났습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[2] 루트 프로젝트(Root Project) 모듈 구성하기&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;font-size: 0.87em;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;# Maven Multi Project&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 0.87em;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;# Maven Multi Module&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 0.87em;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;# Gradle Multi Project&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 0.87em;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;# Gradle Multi Module&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;서비스가 단일 프로젝트로 구성되는 경우가 아니라면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;공통 프로젝트와 여러 개의 프로젝트가 멀티로 구성되어 서로 상호작용하는 방식으로 구성될 것입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;이러한 방식의 프로젝트를 구성하기 위해서는 &lt;b&gt;루트 프로젝트를 생성&lt;/b&gt;하고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;여러 개의 프로젝트를 루트 프로젝트의 &lt;b&gt;멀티 모듈로 구성&lt;/b&gt;해야 합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;메이븐(Maven) 기반의 멀티 프로젝트(모듈)와 그래들(Gradle) 기반의 멀티 프로젝트(모듈)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;두 가지에 대해 설명하겠습니다.&lt;/p&gt;</description>
      <category>IntelliJ IDEA</category>
      <category>Gradle Multi Module</category>
      <category>Gradle Multi Project</category>
      <category>IntelliJ Multi Module</category>
      <category>IntelliJ Multi Project</category>
      <category>Java Multi Module</category>
      <category>Java Multi Project</category>
      <category>Maven Multi Module</category>
      <category>maven multi project</category>
      <author>WHITEPAEK</author>
      <guid isPermaLink="true">https://whitepaek.tistory.com/47</guid>
      <comments>https://whitepaek.tistory.com/47#entry47comment</comments>
      <pubDate>Sat, 5 Oct 2019 22:43:10 +0900</pubDate>
    </item>
    <item>
      <title>[IntelliJ] Spring MVC, Maven 프로젝트 설정 방법</title>
      <link>https://whitepaek.tistory.com/41</link>
      <description>&lt;h2 style=&quot;color: #424242; border-left: 10px solid #424242; border-bottom: 3px solid #424242; padding: 5px; padding-left: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;시작하기에 앞서..&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;해당&amp;nbsp;포스트에서는&amp;nbsp;스프링에&amp;nbsp;대한&amp;nbsp;이론적인&amp;nbsp;설명은&amp;nbsp;작성하지&amp;nbsp;않았습니다.&amp;nbsp;이론적인&amp;nbsp;부분은&amp;nbsp;훌륭한&amp;nbsp;참고&amp;nbsp;서적이&amp;nbsp;많기&amp;nbsp;때문에&amp;nbsp;해당&amp;nbsp;서적을&amp;nbsp;구입하여&amp;nbsp;반복적으로&amp;nbsp;학습하는&amp;nbsp;것을&amp;nbsp;추천해&amp;nbsp;드립니다.&amp;nbsp;저와&amp;nbsp;마찬가지로&amp;nbsp;많은&amp;nbsp;초보자가&amp;nbsp;스프링&amp;nbsp;설정에서&amp;nbsp;많은&amp;nbsp;어려움을&amp;nbsp;겪는다고&amp;nbsp;생각하여&amp;nbsp;제가&amp;nbsp;공부하고&amp;nbsp;설정한&amp;nbsp;방식을&amp;nbsp;최대한&amp;nbsp;자세하게&amp;nbsp;작성하는&amp;nbsp;데&amp;nbsp;집중하였습니다.&amp;nbsp;개인적으로&amp;nbsp;이론은&amp;nbsp;한&amp;nbsp;번에&amp;nbsp;익히지&amp;nbsp;못할뿐더러&amp;nbsp;직접&amp;nbsp;코드를&amp;nbsp;작성해가면서&amp;nbsp;이해하는&amp;nbsp;것이&amp;nbsp;가장&amp;nbsp;효과적이라고&amp;nbsp;생각합니다.&amp;nbsp;하지만,&amp;nbsp;소스&amp;nbsp;코드를&amp;nbsp;작성하기도&amp;nbsp;전에&amp;nbsp;설정&amp;nbsp;부분에서&amp;nbsp;막혀버리면&amp;nbsp;생각보다&amp;nbsp;큰&amp;nbsp;좌절감이&amp;nbsp;다가옵니다.&amp;nbsp;코드&amp;nbsp;한&amp;nbsp;줄이라도&amp;nbsp;작성해볼&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;프로젝트&amp;nbsp;생성과&amp;nbsp;설정&amp;nbsp;방법에&amp;nbsp;관해&amp;nbsp;설명하였습니다.&lt;br /&gt;&lt;br /&gt;[포스트에서&amp;nbsp;사용된&amp;nbsp;환경]&lt;br /&gt;-&amp;nbsp;운영체제:&amp;nbsp;macOS&amp;nbsp;Mojave&lt;br /&gt;-&amp;nbsp;도구:&amp;nbsp;IntelliJ&amp;nbsp;IDEA&amp;nbsp;ULTIMATE&lt;br /&gt;-&amp;nbsp;프레임워크:&amp;nbsp;Spring MVC +&amp;nbsp;Maven&lt;br /&gt;-&amp;nbsp;데이터베이스:&amp;nbsp;Oracle&lt;br /&gt;-&amp;nbsp;서버:&amp;nbsp;Tomcat&lt;br /&gt;&lt;br /&gt;인텔리J에서&amp;nbsp;스프링&amp;nbsp;프로젝트를&amp;nbsp;설정하는&amp;nbsp;방법은&amp;nbsp;다양합니다.&amp;nbsp;하지만&amp;nbsp;설정&amp;nbsp;순서의&amp;nbsp;차이와&amp;nbsp;인텔리J에서&amp;nbsp;자동으로&amp;nbsp;설정해주는&amp;nbsp;부분을&amp;nbsp;수동으로&amp;nbsp;직접&amp;nbsp;설정하는&amp;nbsp;차이일&amp;nbsp;뿐입니다.&lt;br /&gt;&lt;br /&gt;데이터베이스의&amp;nbsp;경우&amp;nbsp;Oracle을&amp;nbsp;사용하였지만&amp;nbsp;다른&amp;nbsp;데이터베이스&amp;nbsp;또한&amp;nbsp;설정&amp;nbsp;방식이&amp;nbsp;비슷하고&amp;nbsp;해당&amp;nbsp;포스트에서는&amp;nbsp;설명하지&amp;nbsp;않은&amp;nbsp;MyBatis와&amp;nbsp;같은&amp;nbsp;데이터베이스를&amp;nbsp;위한&amp;nbsp;프레임워크&amp;nbsp;등&amp;nbsp;다양한&amp;nbsp;프레임워크와&amp;nbsp;라이브러리가&amp;nbsp;존재합니다.&amp;nbsp;본격적인&amp;nbsp;프로젝트&amp;nbsp;개발을&amp;nbsp;시작하게&amp;nbsp;된다면&amp;nbsp;효율적인&amp;nbsp;다양한&amp;nbsp;설정&amp;nbsp;방법과&amp;nbsp;방식이&amp;nbsp;존재합니다.&amp;nbsp;설정&amp;nbsp;방법을&amp;nbsp;차근차근&amp;nbsp;이해하면서&amp;nbsp;따라&amp;nbsp;한다면&amp;nbsp;설명하지&amp;nbsp;않은&amp;nbsp;부분도&amp;nbsp;추가로&amp;nbsp;설정하여&amp;nbsp;이용하실&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #424242; border-left: 10px solid #424242; border-bottom: 3px solid #424242; padding: 5px; padding-left: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;[1] Maven 프로젝트 &amp;nbsp;생성하기&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;01-maven.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1160O/btqxmvCaqnc/lwLRHbljxykdqm1rWPItUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1160O/btqxmvCaqnc/lwLRHbljxykdqm1rWPItUK/img.png&quot; data-alt=&quot;[그림 1.1] IntelliJ 실행&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1160O/btqxmvCaqnc/lwLRHbljxykdqm1rWPItUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1160O%2FbtqxmvCaqnc%2FlwLRHbljxykdqm1rWPItUK%2Fimg.png&quot; data-filename=&quot;01-maven.png&quot; width=&quot;700&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;figcaption&gt;[그림 1.1] IntelliJ 실행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;IntelliJ를 실행 후 &lt;b&gt;Create New Project&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;02.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Occs5/btqxnmLwTdp/T5BO2vTBAQ8EADkt34ukK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Occs5/btqxnmLwTdp/T5BO2vTBAQ8EADkt34ukK1/img.png&quot; data-alt=&quot;[그림 1.2] Maven 프로젝트 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Occs5/btqxnmLwTdp/T5BO2vTBAQ8EADkt34ukK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOccs5%2FbtqxnmLwTdp%2FT5BO2vTBAQ8EADkt34ukK1%2Fimg.png&quot; data-filename=&quot;02.png&quot; width=&quot;700&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;figcaption&gt;[그림 1.2] Maven 프로젝트 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;New Project 목록에서 &lt;b&gt;Maven&lt;/b&gt;을 클릭하고 Project SDK에서 자신이 사용할 &lt;a href=&quot;https://whitepaek.tistory.com/10&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;JDK 버전&lt;/a&gt;에 맞게 선택해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Next&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;03.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckhjxa/btqxqWkiXX2/Gkn3A9caAN9MSBAgXsPP51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckhjxa/btqxqWkiXX2/Gkn3A9caAN9MSBAgXsPP51/img.png&quot; data-alt=&quot;[그림 1.3] GroupId, ArtifactId 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckhjxa/btqxqWkiXX2/Gkn3A9caAN9MSBAgXsPP51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fckhjxa%2FbtqxqWkiXX2%2FGkn3A9caAN9MSBAgXsPP51%2Fimg.png&quot; data-filename=&quot;03.png&quot; width=&quot;700&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;figcaption&gt;[그림 1.3] GroupId, ArtifactId 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;GroupId&lt;/b&gt;는 자신의 프로젝트를 식별해주는 고유 아이디입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;프로젝트에서 컨트롤하는 도메인 이름과 동일하게 입력해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;ArtifactId&lt;/b&gt;는 버전 정보를 생략한 이름(jar)입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;프로젝트 이름과 동일하게 입력해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Next&lt;/b&gt;를 클릭해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;04.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOiesi/btqxpelGZeQ/JHM3jvITvpV9nMNtFIerv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOiesi/btqxpelGZeQ/JHM3jvITvpV9nMNtFIerv0/img.png&quot; data-alt=&quot;[그림 1.4] Project name 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOiesi/btqxpelGZeQ/JHM3jvITvpV9nMNtFIerv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOiesi%2FbtqxpelGZeQ%2FJHM3jvITvpV9nMNtFIerv0%2Fimg.png&quot; data-filename=&quot;04.png&quot; width=&quot;700&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;figcaption&gt;[그림 1.4] Project name 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;앞에서 설정한&amp;nbsp;ArtifactId와 동일하게 프로젝트 이름을 입력해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Finish&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;05.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mnpih/btqxpezfUEV/EpJOmbpbO87Ec82Xx6KKbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mnpih/btqxpezfUEV/EpJOmbpbO87Ec82Xx6KKbk/img.png&quot; data-alt=&quot;[그림 1.5] Maven 프로젝트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mnpih/btqxpezfUEV/EpJOmbpbO87Ec82Xx6KKbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmnpih%2FbtqxpezfUEV%2FEpJOmbpbO87Ec82Xx6KKbk%2Fimg.png&quot; data-filename=&quot;05.png&quot; width=&quot;700&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;figcaption&gt;[그림 1.5] Maven 프로젝트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Enable Auto-Import&lt;/b&gt;를 클릭하면 메이븐 프로젝트 생성이 완료된거예요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #424242; border-left: 10px solid #424242; border-bottom: 3px solid #424242; padding: 5px; padding-left: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;[2] Spring Framework 설정하기&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;07-spring.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ci82IM/btqxpd78o90/GLUr5HHNay4KaichCR64P1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ci82IM/btqxpd78o90/GLUr5HHNay4KaichCR64P1/img.png&quot; data-alt=&quot;[그림 2.1] 스프링 프레임워크 설정하기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ci82IM/btqxpd78o90/GLUr5HHNay4KaichCR64P1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fci82IM%2Fbtqxpd78o90%2FGLUr5HHNay4KaichCR64P1%2Fimg.png&quot; data-filename=&quot;07-spring.png&quot; width=&quot;700&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;figcaption&gt;[그림 2.1] 스프링 프레임워크 설정하기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;루트 디렉토리 &lt;b&gt;SpringMavenProject&lt;/b&gt;에서 우측 마우스를 클릭 후 &lt;b&gt;Add Framework Support....&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;08.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/et9wwS/btqxmkOnwyw/K8KwJkLGUKZhLlsvc3hCo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/et9wwS/btqxmkOnwyw/K8KwJkLGUKZhLlsvc3hCo0/img.png&quot; data-alt=&quot;[그림 2.2] Spring MVC 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/et9wwS/btqxmkOnwyw/K8KwJkLGUKZhLlsvc3hCo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fet9wwS%2FbtqxmkOnwyw%2FK8KwJkLGUKZhLlsvc3hCo0%2Fimg.png&quot; data-filename=&quot;08.png&quot; width=&quot;700&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;figcaption&gt;[그림 2.2] Spring MVC 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Add Frameworks Support 목록에서 &lt;b&gt;Spring MVC (4.3.18.RELEASE)&lt;/b&gt;를 선택하고 &lt;b&gt;OK&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;IntelliJ에서는 기본값으로 Spring 4.3 버전을 제공하고 있습니다,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;09.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpZWYs/btqxnmLwZt0/vyGGXfU0Ok68674SsnvOlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpZWYs/btqxnmLwZt0/vyGGXfU0Ok68674SsnvOlk/img.png&quot; data-alt=&quot;[그림 2.3] web 디렉토리 자동 추가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpZWYs/btqxnmLwZt0/vyGGXfU0Ok68674SsnvOlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdpZWYs%2FbtqxnmLwZt0%2FvyGGXfU0Ok68674SsnvOlk%2Fimg.png&quot; data-filename=&quot;09.png&quot; width=&quot;700&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;figcaption&gt;[그림 2.3] web 디렉토리 자동 추가&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;web&lt;/b&gt; 디렉토리와 파일들이 자동으로 생성된 걸 확인할 수 있습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;&lt;b&gt;관련 설정&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;IntelliJ&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Eclipse&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;빈(bean) 설정&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;applicationContext.xml&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;root-context.xml&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;내부 웹 관련 처리 작업 설정&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;dispatcher-servlet.xml&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;servlet-context.xml&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;톰캣(tomcat) 구동 관련 설정&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;web.xml&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;web.xml&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #424242; border-left: 10px solid #424242; border-bottom: 3px solid #424242; padding: 5px; padding-left: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;[3] Tomcat 설정하기&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;10-tomcat.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SMhkP/btqxooWBihV/N4EJkyP4q1yf54LPRckHi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SMhkP/btqxooWBihV/N4EJkyP4q1yf54LPRckHi0/img.png&quot; data-alt=&quot;[그림 3.1] Add Configuration... 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SMhkP/btqxooWBihV/N4EJkyP4q1yf54LPRckHi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSMhkP%2FbtqxooWBihV%2FN4EJkyP4q1yf54LPRckHi0%2Fimg.png&quot; data-filename=&quot;10-tomcat.png&quot; width=&quot;700&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;figcaption&gt;[그림 3.1] Add Configuration... 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;우측 상단 툴바에서 &lt;b&gt;Add Configuration...&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;12.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EtJre/btqxpdUAL1S/kxuOpQc2j0IcqokIvnhuu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EtJre/btqxpdUAL1S/kxuOpQc2j0IcqokIvnhuu0/img.png&quot; data-alt=&quot;[그림 3.2] 톰캣 설정 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EtJre/btqxpdUAL1S/kxuOpQc2j0IcqokIvnhuu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEtJre%2FbtqxpdUAL1S%2FkxuOpQc2j0IcqokIvnhuu0%2Fimg.png&quot; data-filename=&quot;12.png&quot; width=&quot;700&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;figcaption&gt;[그림 3.2] 톰캣 설정 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Run/Debug Configurations 창에서 좌측 상단 &lt;b&gt;+&lt;/b&gt;를 클릭하여 &lt;b&gt;Tomcat Server-&amp;gt;Local&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;13.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/567Hg/btqxoni60B8/PonEekvQyBXBoUGG1BwCn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/567Hg/btqxoni60B8/PonEekvQyBXBoUGG1BwCn0/img.png&quot; data-alt=&quot;[그림 3.3] 톰캣 Fix 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/567Hg/btqxoni60B8/PonEekvQyBXBoUGG1BwCn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F567Hg%2Fbtqxoni60B8%2FPonEekvQyBXBoUGG1BwCn0%2Fimg.png&quot; data-filename=&quot;13.png&quot; width=&quot;700&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;figcaption&gt;[그림 3.3] 톰캣 Fix 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;Fix&lt;/b&gt; 버튼을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;15.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kA6Jk/btqxnlMBGCK/EbgqMTnQTHCbVtPutSNWik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kA6Jk/btqxnlMBGCK/EbgqMTnQTHCbVtPutSNWik/img.png&quot; data-alt=&quot;[그림 3.4] 톰캣 루트 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kA6Jk/btqxnlMBGCK/EbgqMTnQTHCbVtPutSNWik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkA6Jk%2FbtqxnlMBGCK%2FEbgqMTnQTHCbVtPutSNWik%2Fimg.png&quot; data-filename=&quot;15.png&quot; width=&quot;700&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;figcaption&gt;[그림 3.4] 톰캣 루트 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Deployment 화면으로 이동되면&lt;b&gt; Application context&lt;/b&gt;를 &lt;b&gt;/&lt;/b&gt;로 입력해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;16.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dM08yJ/btqxpeMJtGS/5kSFr2fQ1yuDZOtrUCUzKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dM08yJ/btqxpeMJtGS/5kSFr2fQ1yuDZOtrUCUzKk/img.png&quot; data-alt=&quot;[그림 3.5] 톰캣 설정 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dM08yJ/btqxpeMJtGS/5kSFr2fQ1yuDZOtrUCUzKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdM08yJ%2FbtqxpeMJtGS%2F5kSFr2fQ1yuDZOtrUCUzKk%2Fimg.png&quot; data-filename=&quot;16.png&quot; width=&quot;700&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;figcaption&gt;[그림 3.5] 톰캣 설정 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;톰캣(tomcat) 설정이 완료되었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #424242; border-left: 10px solid #424242; border-bottom: 3px solid #424242; padding: 5px; padding-left: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;[4] Lombok Plugin 설치하기&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Lombok 라이브러리는 getter/setter, toString(), 생성자 등을 자동으로&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;생성하여 반복적인 코드를 제거하므로 코드 라인 수를 줄여 가독성을 높여주고&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;생산성 향상에 큰 도움이 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;17-lombok.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rXTZI/btqxqJrXPFt/kNSs93BL6hKVIVvAJHk6G1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rXTZI/btqxqJrXPFt/kNSs93BL6hKVIVvAJHk6G1/img.png&quot; data-alt=&quot;[그림 4.1] Plugins 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rXTZI/btqxqJrXPFt/kNSs93BL6hKVIVvAJHk6G1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrXTZI%2FbtqxqJrXPFt%2FkNSs93BL6hKVIVvAJHk6G1%2Fimg.png&quot; data-filename=&quot;17-lombok.png&quot; width=&quot;700&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;figcaption&gt;[그림 4.1] Plugins 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;command + , (Ctrl+Alt+S) 단축키를 이용하여&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Preferences(Settings) 창으로 이동 후 &lt;b&gt;Plugins&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;18.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zrkK7/btqxnmEKypv/z8YZFczApYXJi8bZwm4lPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zrkK7/btqxnmEKypv/z8YZFczApYXJi8bZwm4lPK/img.png&quot; data-alt=&quot;[그림 4.2] Lombok 검색&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zrkK7/btqxnmEKypv/z8YZFczApYXJi8bZwm4lPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzrkK7%2FbtqxnmEKypv%2Fz8YZFczApYXJi8bZwm4lPK%2Fimg.png&quot; data-filename=&quot;18.png&quot; width=&quot;700&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;figcaption&gt;[그림 4.2] Lombok 검색&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;검색 창에 &lt;b&gt;Lombok&lt;/b&gt;을 입력 후 해당 플러그인을 설치해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;[그림 4.2]는 이미 설치되어서 활성화된 상태입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #424242; border-left: 10px solid #424242; border-bottom: 3px solid #424242; padding: 5px; padding-left: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;[5] Database 설정하기&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;다양한 데이터베이스를 설정할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;저는 Oracle Database를 이용하여 설정하는 방법을 알려드리도록 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://whitepaek.tistory.com/40&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;☛ 오라클 데이터베이스 설치 방법&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://whitepaek.tistory.com/16&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;☛ MySQL 데이터베이스 설치 방법&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;19-oracle.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kAvgI/btqxqYoS8yp/OekckrJCkbS1WEIlO744R1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kAvgI/btqxqYoS8yp/OekckrJCkbS1WEIlO744R1/img.png&quot; data-alt=&quot;[그림 5.1] 오라클 홈페이지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kAvgI/btqxqYoS8yp/OekckrJCkbS1WEIlO744R1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkAvgI%2FbtqxqYoS8yp%2FOekckrJCkbS1WEIlO744R1%2Fimg.png&quot; data-filename=&quot;19-oracle.png&quot; width=&quot;700&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;figcaption&gt;[그림 5.1] 오라클 홈페이지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;JDBC 설치를 위해 &lt;a href=&quot;https://www.oracle.com/technetwork/database/application-development/jdbc/downloads/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;오라클 홈페이지&lt;/a&gt;로 접속 후 자신의 오라클 데이터베이스 버전에 맞는 드라이버를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;저는 Oracle Databases 11g Release 2 (11.2.0.4) drivers를 클릭하도록 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;20.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgf78o/btqxomYM03o/Hjb0JS8fXUqk9oXQ4Q7xnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgf78o/btqxomYM03o/Hjb0JS8fXUqk9oXQ4Q7xnK/img.png&quot; data-alt=&quot;[그림 5.2] ojdbc6.jar 다운로드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgf78o/btqxomYM03o/Hjb0JS8fXUqk9oXQ4Q7xnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbgf78o%2FbtqxomYM03o%2FHjb0JS8fXUqk9oXQ4Q7xnK%2Fimg.png&quot; data-filename=&quot;20.png&quot; width=&quot;700&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;figcaption&gt;[그림 5.2] ojdbc6.jar 다운로드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span&gt;&lt;b&gt;Accept License Agreement&lt;/b&gt;를 클릭 후 &lt;b&gt;ojdbc6.jar&lt;/b&gt;를 클릭하여 다운로드해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span&gt;다운로드가 완료되었으면 IntelliJ 화면으로 이동해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;21.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btXMOx/btqxqK5thqW/e7AWGKyk84ONGCk1LUNrzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btXMOx/btqxqK5thqW/e7AWGKyk84ONGCk1LUNrzk/img.png&quot; data-alt=&quot;[그림 5.3] ojdbc 라이브러리 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btXMOx/btqxqK5thqW/e7AWGKyk84ONGCk1LUNrzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtXMOx%2FbtqxqK5thqW%2Fe7AWGKyk84ONGCk1LUNrzk%2Fimg.png&quot; data-filename=&quot;21.png&quot; width=&quot;700&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;figcaption&gt;[그림 5.3] ojdbc 라이브러리 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;command + ; (Ctrl+Alt+Shift+S) 단축키를 이용하여 Project Structure 창으로 이동해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;좌측 상단에 &lt;b&gt;+&lt;/b&gt; 버튼을 클릭 후 &lt;b&gt;Java&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;22.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QMn8k/btqxmv3egRq/ixVqxqMJT5JPehNqTwkuhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QMn8k/btqxmv3egRq/ixVqxqMJT5JPehNqTwkuhK/img.png&quot; data-alt=&quot;[그림 5.4] ojdbc6.jar 추가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QMn8k/btqxmv3egRq/ixVqxqMJT5JPehNqTwkuhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQMn8k%2Fbtqxmv3egRq%2FixVqxqMJT5JPehNqTwkuhK%2Fimg.png&quot; data-filename=&quot;22.png&quot; width=&quot;700&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;figcaption&gt;[그림 5.4] ojdbc6.jar 추가&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;다운로드한&lt;b&gt; ojdbc6.jar&lt;/b&gt; 파일을 선택 후 &lt;b&gt;Open&lt;/b&gt;을 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;23.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvgT64/btqxqKRWWQ0/ssQiQBn0889814SpPcJhfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvgT64/btqxqKRWWQ0/ssQiQBn0889814SpPcJhfK/img.png&quot; data-alt=&quot;[그림 5.5] 모듈 선택 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvgT64/btqxqKRWWQ0/ssQiQBn0889814SpPcJhfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvgT64%2FbtqxqKRWWQ0%2FssQiQBn0889814SpPcJhfK%2Fimg.png&quot; data-filename=&quot;23.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 5.5] 모듈 선택 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;OK&lt;/b&gt;를 클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;24.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFr6bR/btqxmLY5oZk/KoyjoRUOQSd7aZQ1qwy3BK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFr6bR/btqxmLY5oZk/KoyjoRUOQSd7aZQ1qwy3BK/img.png&quot; data-alt=&quot;[그림 5.6] ojdbc6 라이브러리 추가 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFr6bR/btqxmLY5oZk/KoyjoRUOQSd7aZQ1qwy3BK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFr6bR%2FbtqxmLY5oZk%2FKoyjoRUOQSd7aZQ1qwy3BK%2Fimg.png&quot; data-filename=&quot;24.png&quot; width=&quot;700&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;figcaption&gt;[그림 5.6] ojdbc6 라이브러리 추가 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;라이브러리에 정상적으로 ojdbc6가 추가되었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #424242; border-left: 10px solid #424242; border-bottom: 3px solid #424242; padding: 5px; padding-left: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;[6] pom.xml 파일 설정&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;25-pom.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFzl7z/btqxmKTn5an/9RDE9a72kTv47JTjCTnPs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFzl7z/btqxmKTn5an/9RDE9a72kTv47JTjCTnPs1/img.png&quot; data-alt=&quot;[그림 6.1] pom.xml 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFzl7z/btqxmKTn5an/9RDE9a72kTv47JTjCTnPs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFzl7z%2FbtqxmKTn5an%2F9RDE9a72kTv47JTjCTnPs1%2Fimg.png&quot; data-filename=&quot;25-pom.png&quot; width=&quot;700&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;figcaption&gt;[그림 6.1] pom.xml 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;pom.xml&lt;/b&gt; 파일에서 프로젝트 설정, 라이브러리 의존성 설정, 빌드 설정을 할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;기본적인 부분에 대해서만 설정할 것이며 프로젝트를 진행하면서 필요한 라이브러리는 상황에 맞게 추가해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;26.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u48ko/btqxqJZOi7K/rPhcXvqx2dpzr9MPSNsgl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u48ko/btqxqJZOi7K/rPhcXvqx2dpzr9MPSNsgl1/img.png&quot; data-alt=&quot;[그림 6.2] pom.xml 라이브러리 의존성 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u48ko/btqxqJZOi7K/rPhcXvqx2dpzr9MPSNsgl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu48ko%2FbtqxqJZOi7K%2FrPhcXvqx2dpzr9MPSNsgl1%2Fimg.png&quot; data-filename=&quot;26.png&quot; width=&quot;700&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;figcaption&gt;[그림 6.2] pom.xml 라이브러리 의존성 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;아래의 코드를 &lt;b&gt;&amp;lt;project&amp;gt; ... &amp;lt;/project&amp;gt;&lt;/b&gt; 태그 사이에 입력해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1565483184796&quot; class=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    &amp;lt;properties&amp;gt;
        &amp;lt;java-version&amp;gt;1.8&amp;lt;/java-version&amp;gt;
        &amp;lt;org.springframework-version&amp;gt;4.3.18.RELEASE&amp;lt;/org.springframework-version&amp;gt;
        &amp;lt;org.aspectj-version&amp;gt;1.6.10&amp;lt;/org.aspectj-version&amp;gt;
        &amp;lt;org.slf4j-version&amp;gt;1.6.6&amp;lt;/org.slf4j-version&amp;gt;
    &amp;lt;/properties&amp;gt;

    &amp;lt;dependencies&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;spring-context&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;${org.springframework-version}&amp;lt;/version&amp;gt;
            &amp;lt;exclusions&amp;gt;
                &amp;lt;exclusion&amp;gt;
                    &amp;lt;groupId&amp;gt;commons-logging&amp;lt;/groupId&amp;gt;
                    &amp;lt;artifactId&amp;gt;commons-logging&amp;lt;/artifactId&amp;gt;
                &amp;lt;/exclusion&amp;gt;
            &amp;lt;/exclusions&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;spring-webmvc&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;${org.springframework-version}&amp;lt;/version&amp;gt;
        &amp;lt;/dependency&amp;gt;

        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.aspectj&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;aspectjrt&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;${org.aspectj-version}&amp;lt;/version&amp;gt;
        &amp;lt;/dependency&amp;gt;

        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.slf4j&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;slf4j-api&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;${org.slf4j-version}&amp;lt;/version&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.slf4j&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;jcl-over-slf4j&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;${org.slf4j-version}&amp;lt;/version&amp;gt;
            &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.slf4j&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;slf4j-log4j12&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;${org.slf4j-version}&amp;lt;/version&amp;gt;
            &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;log4j&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;log4j&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;1.2.17&amp;lt;/version&amp;gt;
            &amp;lt;exclusions&amp;gt;
                &amp;lt;exclusion&amp;gt;
                    &amp;lt;groupId&amp;gt;javax.mail&amp;lt;/groupId&amp;gt;
                    &amp;lt;artifactId&amp;gt;mail&amp;lt;/artifactId&amp;gt;
                &amp;lt;/exclusion&amp;gt;
                &amp;lt;exclusion&amp;gt;
                    &amp;lt;groupId&amp;gt;javax.jms&amp;lt;/groupId&amp;gt;
                    &amp;lt;artifactId&amp;gt;jms&amp;lt;/artifactId&amp;gt;
                &amp;lt;/exclusion&amp;gt;
                &amp;lt;exclusion&amp;gt;
                    &amp;lt;groupId&amp;gt;com.sun.jdmk&amp;lt;/groupId&amp;gt;
                    &amp;lt;artifactId&amp;gt;jmxtools&amp;lt;/artifactId&amp;gt;
                &amp;lt;/exclusion&amp;gt;
                &amp;lt;exclusion&amp;gt;
                    &amp;lt;groupId&amp;gt;com.sun.jmx&amp;lt;/groupId&amp;gt;
                    &amp;lt;artifactId&amp;gt;jmxri&amp;lt;/artifactId&amp;gt;
                &amp;lt;/exclusion&amp;gt;
            &amp;lt;/exclusions&amp;gt;
        &amp;lt;/dependency&amp;gt;

        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;javax.servlet&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;javax.servlet-api&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;3.1.0&amp;lt;/version&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;javax.servlet.jsp&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;jsp-api&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;2.1&amp;lt;/version&amp;gt;
            &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;javax.servlet&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;jstl&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;1.2&amp;lt;/version&amp;gt;
        &amp;lt;/dependency&amp;gt;

        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;junit&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;junit&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;4.12&amp;lt;/version&amp;gt;
            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
        &amp;lt;/dependency&amp;gt;

        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;spring-test&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;${org.springframework-version}&amp;lt;/version&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.projectlombok&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;lombok&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;1.18.0&amp;lt;/version&amp;gt;
            &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;
        &amp;lt;/dependency&amp;gt;
    &amp;lt;/dependencies&amp;gt;

    &amp;lt;build&amp;gt;
        &amp;lt;plugins&amp;gt;
            &amp;lt;plugin&amp;gt;
                &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
                &amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;
                &amp;lt;version&amp;gt;2.5.1&amp;lt;/version&amp;gt;
                &amp;lt;configuration&amp;gt;
                    &amp;lt;source&amp;gt;1.8&amp;lt;/source&amp;gt;
                    &amp;lt;target&amp;gt;1.8&amp;lt;/target&amp;gt;
                    &amp;lt;compilerArgument&amp;gt;-Xlint:all&amp;lt;/compilerArgument&amp;gt;
                    &amp;lt;showWarnings&amp;gt;true&amp;lt;/showWarnings&amp;gt;
                    &amp;lt;showDeprecation&amp;gt;true&amp;lt;/showDeprecation&amp;gt;
                &amp;lt;/configuration&amp;gt;
            &amp;lt;/plugin&amp;gt;
        &amp;lt;/plugins&amp;gt;
    &amp;lt;/build&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;27.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c5td0T/btqxqWxRhRp/icfOSNnZjJskIYoFx4lSvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c5td0T/btqxqWxRhRp/icfOSNnZjJskIYoFx4lSvK/img.png&quot; data-alt=&quot;[그림 6.3] pom.xml에 추가한 라이브러리&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c5td0T/btqxqWxRhRp/icfOSNnZjJskIYoFx4lSvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc5td0T%2FbtqxqWxRhRp%2FicfOSNnZjJskIYoFx4lSvK%2Fimg.png&quot; data-filename=&quot;27.png&quot; width=&quot;700&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;figcaption&gt;[그림 6.3] pom.xml에 추가한 라이브러리&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;command + ; (Ctrl+Alt+Shift+S) 단축키를 이용하여 Project Structure 창으로 이동해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;목록에서 &lt;b&gt;Artifacts&lt;/b&gt;를 클릭 후 &lt;b&gt;Output Layout-&amp;gt;Available Elements&lt;/b&gt;의 라이브러리를 전부 더블클릭해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;28.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpwqh1/btqxqJerVf7/3u62YKAbcbdgbWFJ6iqmfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpwqh1/btqxqJerVf7/3u62YKAbcbdgbWFJ6iqmfK/img.png&quot; data-alt=&quot;[그림 6.4] Artifacts lib 추가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpwqh1/btqxqJerVf7/3u62YKAbcbdgbWFJ6iqmfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdpwqh1%2FbtqxqJerVf7%2F3u62YKAbcbdgbWFJ6iqmfK%2Fimg.png&quot; data-filename=&quot;28.png&quot; width=&quot;700&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;figcaption&gt;[그림 6.4] Artifacts lib 추가&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;더블클릭한 라이브러리들이 프로젝트 lib 디렉토리에 정상적으로 추가되었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #424242; border-left: 10px solid #424242; border-bottom: 3px solid #424242; padding: 5px; padding-left: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;[7] log4j.xml 파일 설정하기&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;29-log.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WaicP/btqxmLrdckW/d3zdBQz4ElvSTcAoFaw8RK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WaicP/btqxmLrdckW/d3zdBQz4ElvSTcAoFaw8RK/img.png&quot; data-alt=&quot;[그림 7.1] 로그 파일 설정하기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WaicP/btqxmLrdckW/d3zdBQz4ElvSTcAoFaw8RK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWaicP%2FbtqxmLrdckW%2Fd3zdBQz4ElvSTcAoFaw8RK%2Fimg.png&quot; data-filename=&quot;29-log.png&quot; width=&quot;700&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;figcaption&gt;[그림 7.1] 로그 파일 설정하기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;로그를 남기기 위해 자반 기반 로깅 유틸리티인 Log4j를 사용하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Log4j를 사용하기 위해서는 log4j.xml 파일을 생성해서 설정을 해주어야 합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&amp;nbsp;src/main/resources&lt;/b&gt; 디렉토리에 &lt;b&gt;log4j.xml&lt;/b&gt; 파일을 생성하고 아래 코드를 입력해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1565484132526&quot; class=&quot;java&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 log4j:configuration PUBLIC &quot;-//APACHE//DTD LOG4J 1.2//EN&quot; &quot;log4j.dtd&quot;&amp;gt;
&amp;lt;log4j:configuration xmlns:log4j=&quot;http://jakarta.apache.org/log4j/&quot;&amp;gt;

	&amp;lt;appender name=&quot;console&quot; class=&quot;org.apache.log4j.ConsoleAppender&quot;&amp;gt;
		&amp;lt;param name=&quot;Target&quot; value=&quot;System.out&quot; /&amp;gt;
		&amp;lt;layout class=&quot;org.apache.log4j.PatternLayout&quot;&amp;gt;
			&amp;lt;param name=&quot;ConversionPattern&quot; value=&quot;%-5p: %c - %m%n&quot; /&amp;gt;
		&amp;lt;/layout&amp;gt;
	&amp;lt;/appender&amp;gt;

	&amp;lt;logger name=&quot;org.springframework.core&quot;&amp;gt;
		&amp;lt;level value=&quot;info&quot; /&amp;gt;
	&amp;lt;/logger&amp;gt;	
	
	&amp;lt;logger name=&quot;org.springframework.beans&quot;&amp;gt;
		&amp;lt;level value=&quot;info&quot; /&amp;gt;
	&amp;lt;/logger&amp;gt;
	
	&amp;lt;logger name=&quot;org.springframework.context&quot;&amp;gt;
		&amp;lt;level value=&quot;info&quot; /&amp;gt;
	&amp;lt;/logger&amp;gt;

	&amp;lt;logger name=&quot;org.springframework.web&quot;&amp;gt;
		&amp;lt;level value=&quot;info&quot; /&amp;gt;
	&amp;lt;/logger&amp;gt;

	&amp;lt;!-- Root Logger --&amp;gt;
	&amp;lt;root&amp;gt;
		&amp;lt;priority value=&quot;info&quot; /&amp;gt;
		&amp;lt;appender-ref ref=&quot;console&quot; /&amp;gt;
	&amp;lt;/root&amp;gt;
	
&amp;lt;/log4j:configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #424242; border-left: 10px solid #424242; border-bottom: 3px solid #424242; padding: 5px; padding-left: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;[8] Database 연동 테스트&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;30-jdbcTest.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgMHDM/btqxnmLyZRs/IEcsq9XYJrZVGkJruHxPS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgMHDM/btqxnmLyZRs/IEcsq9XYJrZVGkJruHxPS0/img.png&quot; data-alt=&quot;[그림 8.1] JDBC 테스트 코드 작성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgMHDM/btqxnmLyZRs/IEcsq9XYJrZVGkJruHxPS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgMHDM%2FbtqxnmLyZRs%2FIEcsq9XYJrZVGkJruHxPS0%2Fimg.png&quot; data-filename=&quot;30-jdbcTest.png&quot; width=&quot;700&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;figcaption&gt;[그림 8.1] JDBC 테스트 코드 작성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;오라클 데이터베이스가 정상적으로 연결이 되었는지 확인하는 테스트 코드를 작성해보도록 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;데이터베이스 서버가 실행되어 있어야 하고, jdbc 라이브러리가 프로젝트에 추가되어있어야 합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;src/test/java&lt;/b&gt; 디렉토리에 &lt;b&gt;JDBCTest.class&lt;/b&gt; 파일을 생성 후 아래 코드를 입력해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1565484873007&quot; class=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import lombok.extern.log4j.Log4j;
import org.junit.Test;

import java.sql.Connection;
import java.sql.DriverManager;

import static org.junit.Assert.fail;

@Log4j
public class JDBCTest {
    static {
        try {
            Class.forName(&quot;oracle.jdbc.driver.OracleDriver&quot;);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void connection() {
        try(Connection conn = DriverManager.getConnection(
                &quot;jdbc:oracle:thin:@localhost:1521:XE&quot;, &quot;system&quot;, &quot;oracle&quot;)) {
            log.info(conn);
        } catch (Exception e) {
            fail(e.getMessage());
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;31.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yNRhY/btqxpzXrbeO/42zx5PoxetHVkk7QBj5WXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yNRhY/btqxpzXrbeO/42zx5PoxetHVkk7QBj5WXk/img.png&quot; data-alt=&quot;[그림 8.2] JDBC 테스트 코드 실행&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yNRhY/btqxpzXrbeO/42zx5PoxetHVkk7QBj5WXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyNRhY%2FbtqxpzXrbeO%2F42zx5PoxetHVkk7QBj5WXk%2Fimg.png&quot; data-filename=&quot;31.png&quot; width=&quot;700&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;figcaption&gt;[그림 8.2] JDBC 테스트 코드 실행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;control+shift+R (Ctrl+Shift+F10) 단축키를 이용하여 테스트 코드를 실행해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;그림처럼 결과창에 log가 출력되었다면 정상적으로 데이터베이스가 연결된 거예요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #424242; border-left: 10px solid #424242; border-bottom: 3px solid #424242; padding: 5px; padding-left: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;[9] Spring MVC - Controller 테스트&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;33.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c313Gg/btqxnmSkg5g/88TBw8JFwBsK3Hm0uhZyVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c313Gg/btqxnmSkg5g/88TBw8JFwBsK3Hm0uhZyVk/img.png&quot; data-alt=&quot;[그림 9.1] web.xml 파일 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c313Gg/btqxnmSkg5g/88TBw8JFwBsK3Hm0uhZyVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc313Gg%2FbtqxnmSkg5g%2F88TBw8JFwBsK3Hm0uhZyVk%2Fimg.png&quot; data-filename=&quot;33.png&quot; width=&quot;700&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;figcaption&gt;[그림 9.1] web.xml 파일 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;MVC2 방식의 Controller가 정상적으로 실행되는지 확인하기 위해서 관련 파일을 설정하도록 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;먼저 web.xml 파일에서 &lt;b&gt;&amp;lt;url-pattern&amp;gt; ... &amp;lt;/url-pattern&amp;gt;&lt;/b&gt; 태그 사이를 &lt;b&gt;/&lt;/b&gt;로 수정해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;34.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMYQ8I/btqxqXQ49ZC/RA0V4zhrmiG9Jt29v4ocnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMYQ8I/btqxqXQ49ZC/RA0V4zhrmiG9Jt29v4ocnk/img.png&quot; data-alt=&quot;[그림 9.2] HelloController.class 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMYQ8I/btqxqXQ49ZC/RA0V4zhrmiG9Jt29v4ocnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMYQ8I%2FbtqxqXQ49ZC%2FRA0V4zhrmiG9Jt29v4ocnk%2Fimg.png&quot; data-filename=&quot;34.png&quot; width=&quot;700&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;figcaption&gt;[그림 9.2] HelloController.class 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;src/main/java&lt;/b&gt; 디렉토리에 &lt;b&gt;com.whitepaek.controller&lt;/b&gt; 패키지를 생성해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;그리고 해당 패키지에 &lt;b&gt;HomeController.class&lt;/b&gt; 파일을 생성하고 아래 코드를 입력해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1565485768391&quot; class=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.whitepaek.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping(&quot;/home/*&quot;)
public class HomeController {

    @GetMapping(&quot;test&quot;)
    public @ResponseBody String homeTest() {
        return &quot;Spring + Maven&quot;;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;35.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYMeTe/btqxqJFvTZw/WBbAcXdFvATcxWmAn0rTk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYMeTe/btqxqJFvTZw/WBbAcXdFvATcxWmAn0rTk1/img.png&quot; data-alt=&quot;[그림 9.3] dispatcher-servlet.xml&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYMeTe/btqxqJFvTZw/WBbAcXdFvATcxWmAn0rTk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYMeTe%2FbtqxqJFvTZw%2FWBbAcXdFvATcxWmAn0rTk1%2Fimg.png&quot; data-filename=&quot;35.png&quot; width=&quot;700&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;figcaption&gt;[그림 9.3] dispatcher-servlet.xml&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;dispatcher-servlet.xml 파일에 아래 코드를 추가해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1565485999995&quot; class=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;context:component-scan base-package=&quot;com.whitepaek.controller&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;40.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1q6FN/btqxom5A8iv/XRIbrlKFkJGymphj7kx5wk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1q6FN/btqxom5A8iv/XRIbrlKFkJGymphj7kx5wk/img.png&quot; data-alt=&quot;[그림 9.4] 프로젝트 실행&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1q6FN/btqxom5A8iv/XRIbrlKFkJGymphj7kx5wk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1q6FN%2Fbtqxom5A8iv%2FXRIbrlKFkJGymphj7kx5wk%2Fimg.png&quot; data-filename=&quot;40.png&quot; width=&quot;700&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;figcaption&gt;[그림 9.4] 프로젝트 실행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;모든 설정이 끝났습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;위에서 테스트 코드를 실행하였기 때문에 프로젝트 실행 전 톰캣으로 설정을 확인하고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;control + R (Shift+F10) 단축키를 이용하여 프로젝트를 실행해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screen Shot 2019-08-11 at 06.00.38.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tFeh2/btqxoPGtu7M/b7uKTshjQptIkiL5xk7msK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tFeh2/btqxoPGtu7M/b7uKTshjQptIkiL5xk7msK/img.png&quot; data-alt=&quot;[그림 9.5] 브라우저 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tFeh2/btqxoPGtu7M/b7uKTshjQptIkiL5xk7msK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtFeh2%2FbtqxoPGtu7M%2Fb7uKTshjQptIkiL5xk7msK%2Fimg.png&quot; data-filename=&quot;Screen Shot 2019-08-11 at 06.00.38.png&quot; width=&quot;700&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;figcaption&gt;[그림 9.5] 브라우저 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;브라우저에 URL을 &lt;b&gt;localhost:8080/home/test&lt;/b&gt;로 입력하여 정상적으로 결과가 나오는 걸 확인할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;이것으로 Spring MVC + Maven + Tomcat + OracleDB 프로젝트 생성 및 설정에 대한 설명이 끝났습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #424242; border-left: 10px solid #424242; border-bottom: 3px solid #424242; padding: 5px; padding-left: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;[10] Tomcat, OracleDB 포트번호 충돌 해결&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;37.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dCjXfR/btqxqYbohvV/6v2b5FwvmuVqEkpalNHt81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dCjXfR/btqxqYbohvV/6v2b5FwvmuVqEkpalNHt81/img.png&quot; data-alt=&quot;[그림 10.1] 포트 충돌로 인한 브라우저 접속 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dCjXfR/btqxqYbohvV/6v2b5FwvmuVqEkpalNHt81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdCjXfR%2FbtqxqYbohvV%2F6v2b5FwvmuVqEkpalNHt81%2Fimg.png&quot; data-filename=&quot;37.png&quot; width=&quot;700&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;figcaption&gt;[그림 10.1] 포트 충돌로 인한 브라우저 접속 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Tomcat과 OracleDB는 기본값으로 8080 포트를 사용합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;그렇기 때문에 충돌이 되면 결과창에 에러 메시지와 함께 브라우저에 Sign in 모달 창이 나오는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;font-family: -webkit-standard;&quot; width=&quot;100px&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;39.png&quot; width=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/35NrI/btqxpd1poli/7QKJyEAfhg0eh4Yf8sFAR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/35NrI/btqxpd1poli/7QKJyEAfhg0eh4Yf8sFAR1/img.png&quot; data-alt=&quot;[그림 10.2] 톰캣 포트번호 수정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/35NrI/btqxpd1poli/7QKJyEAfhg0eh4Yf8sFAR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F35NrI%2Fbtqxpd1poli%2F7QKJyEAfhg0eh4Yf8sFAR1%2Fimg.png&quot; data-filename=&quot;39.png&quot; width=&quot;700&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;figcaption&gt;[그림 10.2] 톰캣 포트번호 수정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;[그림 3.3]에서 설명했던 톰캣 설정 창으로 이동 후 HTTP port 번호를 8080을 제외한 다른 포트번호로 수정해주세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;설명에서는 8081 포트로 수정하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;포트번호를 수정하였으면 다시 톰캣을 실행 후 브라우저 URL에 localhost:&lt;b&gt;8081&lt;/b&gt;/home/test와 같이&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;수정한 포트로 다시 접속하면 정상적으로 결과가 출력되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;다른 방법으로는 Oracle 데이터베이스 포트 번호를 바꿔줘도 됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;padding: 0px 0px 0px 7px; border-left-width: 10px; border-left-style: solid; border-left-color: #424242; margin: 0px 0px 10px; letter-spacing: -1px; line-height: normal; font-stretch: normal;&quot;&gt;Reference&lt;/h4&gt;
&lt;div&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;box-sizing: border-box; font-size: 2px; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; padding: 10px; margin: 0px; line-height: 1.5; background-color: #ffffff; border: 2px solid #424242;&quot;&gt;
&lt;p style=&quot;font-size: 13px; font-family: '맑은 고딕', sans-serif; color: #656565; text-align: left;&quot;&gt;&lt;a href=&quot;https://whitepaek.tistory.com/6&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;● IntelliJ IDEA ULTIMATE 학생 인증으로 무료로 사용하기&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 13px; font-family: '맑은 고딕', sans-serif; color: #656565; text-align: left;&quot;&gt;&lt;a href=&quot;https://whitepaek.tistory.com/10&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;● InteliiJ Java 설정 방법&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 13px; font-family: '맑은 고딕', sans-serif; color: #656565; text-align: left;&quot;&gt;&lt;a href=&quot;https://whitepaek.tistory.com/12&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;● Tomcat 설정 방법&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 13px; font-family: '맑은 고딕', sans-serif; color: #656565; text-align: left;&quot;&gt;&lt;a href=&quot;https://whitepaek.tistory.com/18&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;● MySQL 설정 방법&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 13px; font-family: '맑은 고딕', sans-serif; color: #656565; text-align: left;&quot;&gt;&lt;a href=&quot;https://whitepaek.tistory.com/40&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;&lt;span&gt;● Oracle DB 설정 방법&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IntelliJ IDEA</category>
      <author>WHITEPAEK</author>
      <guid isPermaLink="true">https://whitepaek.tistory.com/41</guid>
      <comments>https://whitepaek.tistory.com/41#entry41comment</comments>
      <pubDate>Sun, 11 Aug 2019 11:02:43 +0900</pubDate>
    </item>
  </channel>
</rss>