<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>iOSangBong</title>
    <link>https://iosangbong.tistory.com/</link>
    <description>iOS개발자를 위한 기술 저장소</description>
    <language>ko</language>
    <pubDate>Fri, 10 Apr 2026 08:32:51 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>bongbong9708</managingEditor>
    <image>
      <title>iOSangBong</title>
      <url>https://tistory1.daumcdn.net/tistory/6305275/attach/dc28f7880e4a4454af6f4dc029148bf6</url>
      <link>https://iosangbong.tistory.com</link>
    </image>
    <item>
      <title>[iOS] GitLab CI + Fastlane CI/CD 적용기 - 4</title>
      <link>https://iosangbong.tistory.com/38</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요. iOSangBong 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3탄으로 간단하게 CI/CD 적용기가 끝날 줄 몰랐지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 문제가 있더라구요...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 4탄으로 돌아올지 몰랐는데.. 다시 돌아왔습니다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://iosangbong.tistory.com/37&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://iosangbong.tistory.com/37&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1774326574445&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[iOS] GitLab CI + Fastlane CI/CD 적용기 - 3&quot; data-og-description=&quot;안녕하세요. iOSangBong입니다.바로 이어서 GitLab Runner 설정을 해보겠습니다.https://iosangbong.tistory.com/36 [iOS] GitLab CI + Fastlane CI/CD 적용기 - 2안녕하세요. iOSangBong입니다.출근하자마자 블로그를 작성하&quot; data-og-host=&quot;iosangbong.tistory.com&quot; data-og-source-url=&quot;https://iosangbong.tistory.com/37&quot; data-og-url=&quot;https://iosangbong.tistory.com/37&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/tant2/dJMb9cBHBnk/zSaOHpfRFhhZea5KCkNJKk/img.png?width=800&amp;amp;height=117&amp;amp;face=0_0_800_117,https://scrap.kakaocdn.net/dn/bT9xrL/dJMb84p8aQ8/k0gZQ7rva3Cwani3R1ZONK/img.png?width=800&amp;amp;height=117&amp;amp;face=0_0_800_117,https://scrap.kakaocdn.net/dn/Tbqc3/dJMb9kmcgSj/6RULe8naFmveVSw1kM7UC1/img.png?width=2552&amp;amp;height=374&amp;amp;face=0_0_2552_374&quot;&gt;&lt;a href=&quot;https://iosangbong.tistory.com/37&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://iosangbong.tistory.com/37&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/tant2/dJMb9cBHBnk/zSaOHpfRFhhZea5KCkNJKk/img.png?width=800&amp;amp;height=117&amp;amp;face=0_0_800_117,https://scrap.kakaocdn.net/dn/bT9xrL/dJMb84p8aQ8/k0gZQ7rva3Cwani3R1ZONK/img.png?width=800&amp;amp;height=117&amp;amp;face=0_0_800_117,https://scrap.kakaocdn.net/dn/Tbqc3/dJMb9kmcgSj/6RULe8naFmveVSw1kM7UC1/img.png?width=2552&amp;amp;height=374&amp;amp;face=0_0_2552_374');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[iOS] GitLab CI + Fastlane CI/CD 적용기 - 3&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. iOSangBong입니다.바로 이어서 GitLab Runner 설정을 해보겠습니다.https://iosangbong.tistory.com/36 [iOS] GitLab CI + Fastlane CI/CD 적용기 - 2안녕하세요. iOSangBong입니다.출근하자마자 블로그를 작성하&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;iosangbong.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1️⃣ 현 상황&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GitLab CI + Fastlane을 적용해보니&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로는 원하는데로 작동하지 않더라구요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 1. fastlane으로 increment_build_number를 했지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;info.plist의 CFBundleShortVersionString에 값이 하드코딩으로 고정되어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 빌드버전으로만 업로드되고 있었습니다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ㄴ project.pbxproj 내에 CURRENT_PROJECT_VERSION 값이 Target마다 달랐기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ㄴ agvtool 은 첫번째 값 기준으로 동작하기 때문에 항상 낮은 버전에서 +1 됐습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. SPM 라이브러리의 태그버전을 Resolve한 후에도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로 업로드한 버전으로 업데이트 되는게 아닌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 버전으로 적용되서 TestFlight 업로드 되었으며&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ㄴ Exact version으로 고정되어 있어 resolvePackageDependencies 실행시 원래 버전으로 돌아갔습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. (추가적으로) readme를 수정한 다음 빌드버전을 +1한 다음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GitLab에 커밋 푸시까지 해줘야 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2️⃣ 원인 파악&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 구조 파악&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현 상황을 해결하기 위해서&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CI/CD 구조를 파악해보겠습니다..&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBOuHi/dJMcabDz0bO/RKck6vNzev2LspUq0MiUzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBOuHi/dJMcabDz0bO/RKck6vNzev2LspUq0MiUzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBOuHi/dJMcabDz0bO/RKck6vNzev2LspUq0MiUzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBOuHi%2FdJMcabDz0bO%2FRKck6vNzev2LspUq0MiUzK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;1536&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1536&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;SPM 태그를 푸시하게 되면 트리거가 발생&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; background-color: #ffffff; color: #333333; text-align: center;&quot;&gt;&amp;darr;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;A앱과 B앱에서 연동하여 (&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;readme 수정, 빌드번호 +1, Commit&amp;amp;Push, SPM 태그 버전업&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; background-color: #ffffff; color: #333333; text-align: center;&quot;&gt;&amp;darr;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Fastlane 으로 TestFlight 배포&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이러한 과정으로 구성을 하였는데 아래와 같은 상황이였습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- readme 수정, Commit &amp;amp; Push(미구현)&lt;br /&gt;- SPM 태그 버전업(GitLab CI)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 빌드번호 +1(fastlane)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;난감하긴 하네요ㅋㅋㅋ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 역할 분석&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CI/CD 역할을 잘못 분배하고 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 구현할때 CI와 CD의 역할을 명확히 구분하지 않았습니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CI : 코드 push/trigger가 감지되면 실행되며 빌드 및 테스트를 진행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 트리거 감지(태그, Push)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 환경변수 관리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 빌드번호 변경&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Commit &amp;amp; Push&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- readme 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- SPM 버전 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CD : 앱 아카이브를 진행하고 TestFlight/App Store 업로드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 코드 서명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 아카이브(.ipa 생성)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- TestFlight 업로드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에 구현할때는 역할도 잘못 구현하였었네요...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 현재 구조&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. SPM 라이브러리 yml 파일(SUCCESS!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ㄴ 트리거 발동&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. A앱, B앱 yml 파일(&lt;span style=&quot;color: #ee2323;&quot;&gt;ERROR&lt;/span&gt;!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ㄴ SPM 버전업만 실행하고 있었음 &amp;lt;- 역할 부족&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;3. Fastlane(&lt;span style=&quot;color: #ee2323;&quot;&gt;ERROR&lt;/span&gt;!)&lt;br /&gt;ㄴ 버전업 및 TestFlight 배포 &amp;lt;- 역할 과부하&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빌드번호 변경, readme 업데이트, commit &amp;amp; push는 GitLab CI 가 담당해야하는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fastlane에서 일부 처리하려다 보니 문제가 생겼습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 2번 3번의 구조를 재구성해서&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 구현 해볼까요!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3️⃣ A앱 yml 파일 before&lt;/h2&gt;
&lt;pre id=&quot;code_1774330427205&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;stages:
&amp;nbsp; - deploy

variables:
&amp;nbsp; LANG: &quot;en_US.UTF-8&quot;
&amp;nbsp; LC_ALL: &quot;en_US.UTF-8&quot;

deploy_testflight:
&amp;nbsp; stage: deploy
&amp;nbsp; tags:
&amp;nbsp; &amp;nbsp; - iOS
&amp;nbsp; &amp;nbsp; - mac
&amp;nbsp; only:
&amp;nbsp; &amp;nbsp; - tags
&amp;nbsp; &amp;nbsp; - triggers
&amp;nbsp; script:
&amp;nbsp; &amp;nbsp; - cd \(A앱)
&amp;nbsp; &amp;nbsp; - |
&amp;nbsp; &amp;nbsp; &amp;nbsp; if [ -n &quot;$KLAGO_COMMON_VERSION&quot; ]; then
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot;KLAGO_Common 버전 업데이트: $KLAGO_COMMON_VERSION&quot;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sed -i '' '/klago_common/{n; s/&quot;version&quot; : &quot;[^&quot;]*&quot;/&quot;version&quot; : &quot;'&quot;$KLAGO_COMMON_VERSION&quot;'&quot;/g}' BcMullen.xcworkspace/xcshareddata/swiftpm/Package.resolved
&amp;nbsp; &amp;nbsp; &amp;nbsp; fi
&amp;nbsp; &amp;nbsp; - xcodebuild -resolvePackageDependencies -workspace \(A앱).xcworkspace -scheme \(A앱 scheme)
&amp;nbsp; &amp;nbsp; - export FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=120
&amp;nbsp; &amp;nbsp; - fastlane custom_lane&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 SPM 버전을 Package.resolved 에서 수정하고 resolve 후 업로드 했지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로는 버전이 반영되지 않았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4️⃣ 구조 재설계&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 필요한 요구 사항으로는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 기존 SPM의 태그가 발행됐을때 A앱, B앱에서 태그가 적용은 되어야 하지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내부 검수를 진행해야되기 때문에 실제로 developer 브랜치에 Commit 되진 않아야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. readme에 히스토리를 기록하기 위해 앱버전(빌드버전)을 기록한다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 조건들을 맞추기 위해서 아래의 구성으로 파이프라인 구조를 구현해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;SPM 라이브러리 태크 발행&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; background-color: #ffffff; color: #333333; text-align: center;&quot;&gt;&amp;darr;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;GitLab CI 트리거&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;- SPM 태그 버전 체크&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;- Git 설정&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;- 빌드번호 + 1 적용&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;- Readme 업데이트&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;- Commit &amp;amp; Push&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;- SPM 태그 버전으로 Package.swift 수정&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;- SPM 의존성 갱신&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; background-color: #ffffff; color: #333333; text-align: center;&quot;&gt;&amp;darr;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; background-color: #ffffff; color: #333333; text-align: center;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Fastlane&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;- TestFlight 배포&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5️⃣ A앱 yml 파일 After&lt;/h2&gt;
&lt;pre id=&quot;code_1774333885213&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;script:
    ##################################
    # 1. 버전 체크
    ##################################
    - echo &quot;  COMMON_VERSION = $COMMON_VERSION&quot;
    - |
      if [ -z &quot;$COMMON_VERSION&quot; ]; then
        echo &quot;❌ COMMON_VERSION이 비어있습니다.&quot;
        exit 1
      fi
    
    
    ##################################
    # 2. Git 설정
    ##################################
    - git config user.name &quot;CI Bot&quot;
    - git config user.email &quot;cibot@example.com&quot;
    - git remote set-url origin &quot;http://oauth2:${CI_PUSH_TOKEN}@your-gitlab.com/${CI_PROJECT_PATH}.git&quot;

    - git fetch origin
    - git checkout -B developer origin/developer
    - git pull --rebase origin developer
    
    
    ##################################
    # 3. 빌드번호 (CI 기준)
    ##################################
    - |
      CURRENT_BUILD=$(grep &quot;CURRENT_PROJECT_VERSION&quot; MyApp/MyApp.xcodeproj/project.pbxproj | grep -o '[0-9]*' | sort -n | tail -1)
      NEW_BUILD=$((CURRENT_BUILD + 1))
      sed -i '' \
        &quot;s/CURRENT_PROJECT_VERSION = [0-9]*/CURRENT_PROJECT_VERSION = ${NEW_BUILD}/g&quot; \
        MyApp/MyApp.xcodeproj/project.pbxproj
      echo &quot;✅ 빌드번호: $CURRENT_BUILD &amp;rarr; $NEW_BUILD&quot;
      echo $NEW_BUILD &amp;gt; .new_build
    
    
    ##################################
    # 4. README 업데이트
    ##################################
    - |
      NEW_BUILD=$(cat .new_build)
      TODAY=$(date &quot;+%Y. %m. %d&quot;)
      APP_VERSION=$(grep -A5 'LIBRARY_SEARCH_PATHS' MyApp/MyApp.xcodeproj/project.pbxproj | grep &quot;MARKETING_VERSION&quot; | sed -n '3p' | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
      sed -i '' &quot;18a\\
      \\
      [${APP_VERSION}(${NEW_BUILD})] - MyApp TestFlight 업로드\\
      \\
      ${TODAY} GitLab_CI Bot\\
      - Common [${COMMON_LIBRARY_VERSION}] 임시 적용\\
      &quot; README.md
    
    
    ##################################
    # 5. commit &amp;amp; push (빌드번호만)
    ##################################
    - git add MyApp/MyApp.xcodeproj/project.pbxproj
    - git add README.md
    - |
      NEW_BUILD=$(cat .new_build)
      APP_VERSION=$(grep -A5 'LIBRARY_SEARCH_PATHS' MyApp/MyApp.xcodeproj/project.pbxproj | grep &quot;MARKETING_VERSION&quot; | sed -n '3p' | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
      if git diff --cached --quiet; then
        echo &quot;⚠️ 변경사항 없음&quot;
      else
        git commit -m &quot;[developer] - COMMON 태그 ${COMMON_LIBRARY_VERSION} 으로 MyApp ${APP_VERSION}(${NEW_BUILD}) TestFlight 업로드&quot;
        git pull --rebase origin developer
        git push origin HEAD:developer
      fi
    
    
    ##################################
    # 6. SPM 버전 수정 (exact version 적용)
    ##################################
    - echo &quot;  common_library version &amp;rarr; $COMMON_LIBRARY_VERSION&quot;
    - |
      sed -i '' \
        &quot;/XCRemoteSwiftPackageReference \&quot;common_library\&quot;/{n;n;n;n;n;s/version = [0-9]*\.[0-9]*\.[0-9]*/version = ${COMMON_LIBRARY_VERSION}/;}&quot; \
        MyApp/MyApp.xcodeproj/project.pbxproj
    - echo &quot;✅ 버전 수정 완료&quot;
    - grep -A6 &quot;XCRemoteSwiftPackageReference \&quot;common_library\&quot;&quot; MyApp/MyApp.xcodeproj/project.pbxproj
    
    
    ##################################
    # 7. SPM 의존성 갱신
    ##################################
    - echo &quot;  Package.resolved 갱신...&quot;
    - rm -f MyApp/MyApp.xcworkspace/xcshareddata/swiftpm/Package.resolved
    - rm -rf ~/Library/Caches/org.swift.swiftpm/repositories/common_library-*
    - rm -f ~/Library/Caches/org.swift.swiftpm/repositories/common_library-*.lock
    - |
      xcodebuild -resolvePackageDependencies \
        -workspace MyApp/MyApp.xcworkspace \
        -scheme MyApp
    - |
      grep &quot;$COMMON_LIBRARY_VERSION&quot; MyApp/MyApp.xcworkspace/xcshareddata/swiftpm/Package.resolved || {
        echo &quot;❌ SPM 버전 반영 실패&quot;
        exit 1
      }
    - echo &quot;✅ SPM 갱신 &amp;amp; 검증 완료&quot;
    

    ##################################
    # 8. TestFlight 배포
    ##################################
    - echo &quot;  TestFlight 배포 시작...&quot;
    - export FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=120
    - cd MyApp
    - fastlane deploy_lane
    - echo &quot;✅ TestFlight 배포 완료&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빌드번호를 가져오는 문제를 해결하기 위해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;agvtool 대신 grep + sort로 최댓값을 가져오도록 변경했고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SPM 버전 문제를 해결하기 위해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;XCRemoteSwiftPackageReference 버전도 함께 수정했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6️⃣ 마무리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CI/CD를 처음 도입하다 보니 역할 분배가 명확하지 않았기 때문에&amp;nbsp;이런 문제가 생긴 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수정 후 태그 발행해서 업로드 테스트 해보니 정상적으로 작동했고,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불필요한 반복작업을 줄이는데 많이 도움이 된것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Before&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;SPM 수정 -&amp;gt; 커밋 &amp;amp; 푸시 &amp;amp; 태그 발행 -&amp;gt; A앱 태그 적용 및 빌드 &amp;amp; 아카이브 -&amp;gt; B앱 태그 적용 및 빌드 &amp;amp; 아카이브&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;After&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;SPM 수정 -&amp;gt; 커밋 &amp;amp; 푸시 &amp;amp; 태그 발행 -&amp;gt; 점심을 먹거나 카페 갔다오기ㅋㅋ&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CI/CD의 핵심은 사람이 할일을 줄여주는 것이라는걸 다시 한번 느꼈습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;긴 글이지만 읽어주셔서 감사합니다~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 다들 즐코딩하세요. 그럼 이만~&amp;nbsp;&lt;/p&gt;</description>
      <category>Swift</category>
      <category>CI/CD</category>
      <category>Fastlane</category>
      <category>gitlab ci</category>
      <category>ios</category>
      <category>swift</category>
      <category>배포자동화</category>
      <author>bongbong9708</author>
      <guid isPermaLink="true">https://iosangbong.tistory.com/38</guid>
      <comments>https://iosangbong.tistory.com/38#entry38comment</comments>
      <pubDate>Wed, 25 Mar 2026 10:57:27 +0900</pubDate>
    </item>
    <item>
      <title>[iOS] GitLab CI + Fastlane CI/CD 적용기 - 3</title>
      <link>https://iosangbong.tistory.com/37</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;안녕하세요. iOSangBong입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 이어서 &lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;GitLab Runner 설정을 해보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;&lt;br /&gt;&lt;a href=&quot;https://iosangbong.tistory.com/36&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://iosangbong.tistory.com/36&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1773382590973&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[iOS] GitLab CI + Fastlane CI/CD 적용기 - 2&quot; data-og-description=&quot;안녕하세요. iOSangBong입니다.출근하자마자 블로그를 작성하려고 하는데요. 이런 유지보수?를 진행할때마다 얘기를 하면 일정을 할당을 해주는게 아닌회사 임원이 원하는 기능이 먼저 이기 때문&quot; data-og-host=&quot;iosangbong.tistory.com&quot; data-og-source-url=&quot;https://iosangbong.tistory.com/36&quot; data-og-url=&quot;https://iosangbong.tistory.com/36&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/QRvhn/dJMb8T9XZjB/2VA5k6KOoaY8LhqIUAgj30/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/GZ7QY/dJMb8SXwhAk/UBQGN5E1ZDsi0rkyi6veR1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/5kNrZ/dJMb8Rj0rs3/G8QXPCM5rMFoD8DkH1uzJ0/img.png?width=1132&amp;amp;height=1602&amp;amp;face=0_0_1132_1602&quot;&gt;&lt;a href=&quot;https://iosangbong.tistory.com/36&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://iosangbong.tistory.com/36&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/QRvhn/dJMb8T9XZjB/2VA5k6KOoaY8LhqIUAgj30/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/GZ7QY/dJMb8SXwhAk/UBQGN5E1ZDsi0rkyi6veR1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/5kNrZ/dJMb8Rj0rs3/G8QXPCM5rMFoD8DkH1uzJ0/img.png?width=1132&amp;amp;height=1602&amp;amp;face=0_0_1132_1602');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[iOS] GitLab CI + Fastlane CI/CD 적용기 - 2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. iOSangBong입니다.출근하자마자 블로그를 작성하려고 하는데요. 이런 유지보수?를 진행할때마다 얘기를 하면 일정을 할당을 해주는게 아닌회사 임원이 원하는 기능이 먼저 이기 때문&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;iosangbong.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2편에서 이어지는 내용입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;3️⃣&amp;nbsp; GitLab Runner 등록 &amp;amp; 실행&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;기존에 Runner는 설치를 했었으니 바로 등록을 해봅시다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;url 하고 Token은&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;프로젝트 &amp;gt; Settings &amp;gt; CI/CD &amp;gt; Runners 에서 가져오면 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1773382626871&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;gitlab-runner register

Enter the GitLab instance URL:
&amp;rarr; Runner URL 입력

Enter the registration token:
&amp;rarr; Runner Token 입력

Enter a description for the runner:
&amp;rarr; mac-runner

Enter tags for the runner:
&amp;rarr; ios, mac

Enter optional maintenance note for the runner:
&amp;rarr; (그냥 엔터)

Enter an executor:
&amp;rarr; shell&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 입력하면 Runner 등록이 되고 Runner를 실행해 줍시다.&lt;/p&gt;
&lt;pre id=&quot;code_1773383649766&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;gitlab-runner start&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 실행하니까 에러가 발생하면서 GitLab에서는 이렇게 뜨는데&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;406&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m2kFz/dJMcafshUul/luJ6yj5FOZKYNQvko6AJHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m2kFz/dJMcafshUul/luJ6yj5FOZKYNQvko6AJHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m2kFz/dJMcafshUul/luJ6yj5FOZKYNQvko6AJHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm2kFz%2FdJMcafshUul%2FluJ6yj5FOZKYNQvko6AJHK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;406&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;406&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1773383723681&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;gitlab-runner run&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 입력해주면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1456&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SbpHm/dJMcab4uKGI/F1RsvGbWXD1GUPUdRsVap1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SbpHm/dJMcab4uKGI/F1RsvGbWXD1GUPUdRsVap1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SbpHm/dJMcab4uKGI/F1RsvGbWXD1GUPUdRsVap1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSbpHm%2FdJMcab4uKGI%2FF1RsvGbWXD1GUPUdRsVap1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1456&quot; height=&quot;404&quot; data-origin-width=&quot;1456&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;러너가 활성화가 됩니다~~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각보다 러너 실행은 간편한거같네요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맥 재부팅시 runner를 자동 실행 시켜주려면&lt;/p&gt;
&lt;pre id=&quot;code_1773383885993&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;brew services start gitlab-runner&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추후 삭제하고 싶거나 리스트를 확인하고 싶으면 아래를 실행하면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773383574196&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;gitlab-runner unregister --all-runners

gitlab-runner list&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;4️⃣ .gitlab-ci.yml 작성&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;1. 하위 프로젝트 yml 파일 작성&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;자 이게 마지막 .gitlab-ci.yml 작성 해줍시다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;yml 파일 작성 하기 전에 어떻게 구현할지 다시 떠올려보면&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;SPM 태그 push&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;darr;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;SPM CI에서 A앱 CI, B앱 CI를 직접 호출&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;darr;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: center;&quot;&gt;A앱 CI, B앱 CI&lt;/span&gt;&amp;nbsp;실행 (태그 없이!)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;SPM&amp;nbsp;버전&amp;nbsp;업데이트&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;빌드버전&amp;nbsp;변경&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;아카이브&amp;nbsp;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: center;&quot;&gt;&amp;darr;&lt;br /&gt;&lt;/span&gt;TestFlight 업로드!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 구조로 &lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;yml 파일을 작성해 줍시다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;일단 해당 프로젝트에서 파일을 만들어줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1773384077783&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;touch ~/.gitlab-ci.yml
open ~/.gitlab-ci.yml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fastlane 의 경우에는 .xcodeproj 파일이 있는 곳에서 생성을 해줬지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;yml 파일은 프로젝트 루트쪽에 있어야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773625722814&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;A앱 (루트)
  ├── .gitlab-ci.yml   &amp;larr; 여기로 이동!
  ├── A project/
  │   ├── A.xcworkspace
  │   └── fastlane/
  └── README&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;이렇게 하지 않으면 나중에 에러가 발생하니 위치를 잘 잡아주세요~&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음에는 yml 파일을 작성해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773384177834&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;stages:
  - deploy

variables:
  LANG: &quot;en_US.UTF-8&quot;
  LC_ALL: &quot;en_US.UTF-8&quot;

deploy_testflight:
  stage: deploy
  tags:
    - iOS
    - mac
  only:
    - tags
    - triggers
  script:
    - cd &quot;\(A앱)&quot;
    - export FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=120
    - fastlane custom_lane&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;SPM에서 트리거가 발생하면 A 프로젝트에서 fastlane custom_lane을 실행한다고 작성을 해줬습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. GitLab 세팅&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이제 2편에서 Fastfile에 작성했던 key_id, issuer_id, key_filepath를 Variables에 등록해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위치는 GitLab -&amp;gt; Project -&amp;gt; Settings -&amp;gt; CI/CD -&amp;gt; Variables에 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1005&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7vH1m/dJMcac3psy5/tzqPRwkNbs3HWNYdiqkT5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7vH1m/dJMcac3psy5/tzqPRwkNbs3HWNYdiqkT5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7vH1m/dJMcac3psy5/tzqPRwkNbs3HWNYdiqkT5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7vH1m%2FdJMcac3psy5%2FtzqPRwkNbs3HWNYdiqkT5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1005&quot; height=&quot;350&quot; data-origin-width=&quot;1005&quot; data-origin-height=&quot;350&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첨엔 Protected를 켜야되나? 했지만 키는 순간 CI 진행중&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GitLab Variables 에 설정한 값을 못 읽는&amp;nbsp;에러가 발생하게 됩니다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전부 OFF 시켜주세요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 SPM에서 태그 발행시 트리거를 발생시키기 위핸 트리거도 만들어줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GitLab -&amp;gt; Project -&amp;gt; Settings -&amp;gt; CI/CD -&amp;gt; Pipeline triggers에 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2016&quot; data-origin-height=&quot;832&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cw4v9d/dJMcaaEx29p/ijULjvVELUzGW7j0xZnimk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cw4v9d/dJMcaaEx29p/ijULjvVELUzGW7j0xZnimk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cw4v9d/dJMcaaEx29p/ijULjvVELUzGW7j0xZnimk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcw4v9d%2FdJMcaaEx29p%2FijULjvVELUzGW7j0xZnimk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2016&quot; height=&quot;832&quot; data-origin-width=&quot;2016&quot; data-origin-height=&quot;832&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Add Trigger를 하면 SPM yml파일에서 사용할 Token이 발행됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;3. SPM yml 파일 작성&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;일단 동일하게 yml 파일을 만들어 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1773626309440&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;touch ~/.gitlab-ci.yml
open ~/.gitlab-ci.yml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만들어준 다음 Pipeline triggers 안내 글에 적혀있는 대로 작성해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1773626507553&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;stages:
  - trigger

trigger_mullen:
  stage: trigger
  tags:
    - iOS
    - mac
  only:
    - tags
  script:
    - curl -X POST --form token=&quot;\(token)&quot; --form ref=&quot;(브랜치명)&quot; &quot;\(원하는 프로젝트의 GitLab 파이프라인 url)&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 yml 파일을 작성한 다음 깃 커밋 푸시 해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 이제 태그를 발행한 후 확인 해봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;프로젝트 &amp;gt; CI/CD &amp;gt; Pipelines 에 들어가보면&lt;/span&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #353638; text-align: left;&quot;&gt;1. SPM Pipelines&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2226&quot; data-origin-height=&quot;368&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pcUpC/dJMcahwVoQE/I5lKG3YdbEFkHZQaYrRXOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pcUpC/dJMcahwVoQE/I5lKG3YdbEFkHZQaYrRXOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pcUpC/dJMcahwVoQE/I5lKG3YdbEFkHZQaYrRXOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpcUpC%2FdJMcahwVoQE%2FI5lKG3YdbEFkHZQaYrRXOK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2226&quot; height=&quot;368&quot; data-origin-width=&quot;2226&quot; data-origin-height=&quot;368&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. A앱 Pipelines&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2552&quot; data-origin-height=&quot;374&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4rICC/dJMcadOKE5a/dTyt9ZJi3q8b6pnFS9RnP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4rICC/dJMcadOKE5a/dTyt9ZJi3q8b6pnFS9RnP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4rICC/dJMcadOKE5a/dTyt9ZJi3q8b6pnFS9RnP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4rICC%2FdJMcadOKE5a%2FdTyt9ZJi3q8b6pnFS9RnP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2552&quot; height=&quot;374&quot; data-origin-width=&quot;2552&quot; data-origin-height=&quot;374&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 passed 된 항목이 생기고 클릭하면 상세 로그도 볼수 있어서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에러 발생하면 왜 안되는지 확인하고 수정하면 될것 같습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fastlane으로 TestFlight 업로드도 잘 됐네요....&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동일하게 A앱, B앱 둘다 적용해서 쓰면 정말 좋을 것 같네요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 활용해서 에러로그를 분석해서 원인을 찾고 해결하고 한 2일도 안걸린것 같네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글링으로만 했다면 금방 포기했을것 같습니다... 클로드  &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에는 다른걸로 찾아오겠습니다~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 다들 즐코딩하세요. 그럼 이만~&lt;/p&gt;</description>
      <category>Swift</category>
      <category>CI/CD</category>
      <category>Fastlane</category>
      <category>github CI</category>
      <category>ios</category>
      <category>swift</category>
      <category>배포자동화</category>
      <author>bongbong9708</author>
      <guid isPermaLink="true">https://iosangbong.tistory.com/37</guid>
      <comments>https://iosangbong.tistory.com/37#entry37comment</comments>
      <pubDate>Fri, 13 Mar 2026 17:12:29 +0900</pubDate>
    </item>
    <item>
      <title>[iOS] GitLab CI + Fastlane CI/CD 적용기 - 2</title>
      <link>https://iosangbong.tistory.com/36</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요. iOSangBong입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 진행중 시간이 나서 출근하자마자 블로그 겸 구현을 진행하고 있네요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어쨌든 어제에 이어서 진행해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot;&gt;1️⃣&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;기본 환경 설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 일단 Homebrew 설치(기본적으로 iOS개발자라면 있을테니 패스)&lt;/p&gt;
&lt;pre id=&quot;code_1773361116711&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/bin/bash -c &quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. rbenv 및 Ruby 설치&lt;/p&gt;
&lt;pre id=&quot;code_1773361485799&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;brew install rbenv
rbenv install 3.3.0
rbenv global 3.3.0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Fastlane 설치&lt;/p&gt;
&lt;pre id=&quot;code_1773362368132&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;brew install fastlane&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. GitLab Runner 설치&lt;/p&gt;
&lt;pre id=&quot;code_1773362422551&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;brew install gitlab-runner&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;2️⃣ Fastlane 설정&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;자 이제 왠만한 설정은 다했고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;프로젝트로 이동해서 fastlane을 설정해봅시다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;1. .xcodeproj 파일이 있는 곳에서 Fastlane을 초기화 해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1773363372694&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fastlane init&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 이제 폴더가 생성되고 아래와 같이 뜨는데요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xiD2C/dJMcaaLhWrQ/brqhVkQ2cBCkfUw8QAu6S1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xiD2C/dJMcaaLhWrQ/brqhVkQ2cBCkfUw8QAu6S1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xiD2C/dJMcaaLhWrQ/brqhVkQ2cBCkfUw8QAu6S1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxiD2C%2FdJMcaaLhWrQ%2FbrqhVkQ2cBCkfUw8QAu6S1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1140&quot; height=&quot;426&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;426&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째는 앱 스크린샷 캡쳐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째는 TestFlight 배포 자동화&lt;br /&gt;세번째는 App Store 출시 자동화&lt;br /&gt;네번째는 커스텀 세팅하는것 같습니다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 일단 2번째&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;TestFlight 배포 자동화까지만 하니까 2번 선택!&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1138&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ic2Sm/dJMcagxWKiE/qVSZrwObPeZO7pFGto9NL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ic2Sm/dJMcagxWKiE/qVSZrwObPeZO7pFGto9NL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ic2Sm/dJMcagxWKiE/qVSZrwObPeZO7pFGto9NL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIc2Sm%2FdJMcagxWKiE%2FqVSZrwObPeZO7pFGto9NL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1138&quot; height=&quot;338&quot; data-origin-width=&quot;1138&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘 진행되는듯 하다가 프로젝트 파일 용량이 커서 타임아웃이 나서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 Y로 진행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 다음을 누르니까 초기설정은 완료됐습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Appfile, Fastfile 수정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 Appfile 먼저 설정해보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773364337577&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;open fastlane/Appfile&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이거하면 Appfile 열리게 되는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주석 있는거 다 지우고&lt;/p&gt;
&lt;pre id=&quot;code_1773364491844&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;app_identifier(&quot;\(Bundle ID)&quot;)
apple_id(&quot;\(Apple ID)&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 만 해놓고 저장했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그다음 Fastfile 설정해보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773364539730&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;open fastlane/Fastfile&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fastfile 열어서 아래와 같이 세팅해줬습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773364954678&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;default_platform(:ios)

platform :ios do

  desc &quot;빌드버전 올리고 TestFlight 업로드&quot;
  lane :custom_lane do
    # 자동 서명으로 처리
    automatic_code_signing(
      use_automatic_signing: true
    )
    
    # 빌드 번호 자동 증가
    increment_build_number

    # 빌드 &amp;amp; 아카이브
    build_app(
      scheme: &quot;scheme 이름&quot;,
      export_method: &quot;app-store&quot;
    )

    # TestFlight 업로드
    upload_to_testflight(
      skip_waiting_for_build_processing: true
    )
  end

end&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 SPM 라이브러리 태그 번호도 적어줘야되는 줄 알았는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 그건 아니고 일단 저장하고 넘어가겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fastlane Match 설정도 하면 좋을거 같은데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 제 개발맥에 있는 인증서 사용하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러고 테스트를 진행해보죠!&lt;/p&gt;
&lt;pre id=&quot;code_1773365432464&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fastlane custom_lane&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘 하다가 이런 에러가 발생해서&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;896&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBdcGr/dJMcacI7LSm/zRszGlsEshaqk7PBWj2KnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBdcGr/dJMcacI7LSm/zRszGlsEshaqk7PBWj2KnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBdcGr/dJMcacI7LSm/zRszGlsEshaqk7PBWj2KnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBdcGr%2FdJMcacI7LSm%2FzRszGlsEshaqk7PBWj2KnK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1128&quot; height=&quot;896&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;896&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1773365820676&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=120
export FASTLANE_XCODEBUILD_SETTINGS_RETRIES=5
fastlane custom_lane&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하고 다시 돌려보니&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;시작 [10:33:37] 종료 &lt;/span&gt;&lt;span&gt;[10:54:50]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;1602&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4w6TF/dJMcabDq7U5/v6Ezz8ndPFUGqSRy0zB0y0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4w6TF/dJMcabDq7U5/v6Ezz8ndPFUGqSRy0zB0y0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4w6TF/dJMcabDq7U5/v6Ezz8ndPFUGqSRy0zB0y0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4w6TF%2FdJMcabDq7U5%2Fv6Ezz8ndPFUGqSRy0zB0y0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1132&quot; height=&quot;1602&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;1602&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아카이브 성공한 줄 알았는데 아니였네요..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이것저것 찾아보고 몇번 수정을 해봤는데요&lt;br /&gt;원인은 아카이브할 때 &lt;b&gt;Development 인증서&lt;/b&gt;로 서명됐는데, export할 때 Apple 서버에서 &lt;b&gt;App Store용 프로비저닝 프로파일&lt;/b&gt;을 가져오려고 하니까 인증이 안 됐다고 하네요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 App Store Connect API를 발급받아서&lt;br /&gt;키 ID, Issuer ID, P8 다운로드 및 경로를 입력해줬습니다!&lt;/p&gt;
&lt;pre id=&quot;code_1773367324325&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;default_platform(:ios)

platform :ios do
  desc &quot;빌드버전 올리고 TestFlight 업로드&quot;
  lane :custom_lane do
  
    # API 키 설정
    api_key = app_store_connect_api_key(
      key_id: &quot;key_id 입력&quot;,
      issuer_id: &quot;issuer_id 입력&quot;,
      key_filepath: &quot;~/AuthKey_**********.p8&quot;
    )

  
    # 자동 서명으로 처리
    automatic_code_signing(
      use_automatic_signing: true
    )

    # add actions here: https://docs.fastlane.tools/actions
    # 빌드 번호 자동 증가
    increment_build_number(
      xcodeproj: &quot;***.xcodeproj&quot;
    )


    # 빌드 &amp;amp; 아카이브
    build_app(
      workspace: &quot;***.xcworkspace&quot;,
      scheme: &quot;scheme 이름&quot;,
      export_method: &quot;app-store&quot;,
      xcargs: &quot;-allowProvisioningUpdates&quot;
      clean: true,
      export_options: {
        signingStyle: &quot;automatic&quot;
      }
    )

    # TestFlight 업로드
    upload_to_testflight(
      api_key: api_key,
      skip_waiting_for_build_processing: true
    )
	
  end
end&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요렇게 수정하고 다시 돌려봤습니다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제발~~&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시작 &lt;span&gt;[14:13:19&lt;/span&gt;&lt;span&gt;] 종료 &lt;/span&gt;&lt;span&gt;[14:34:39]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fastlane 기준 21분 정도 걸렸네요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1124&quot; data-origin-height=&quot;988&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfphEv/dJMcahp7JdF/nyyyycoSOm6ODE0lzBnGwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfphEv/dJMcahp7JdF/nyyyycoSOm6ODE0lzBnGwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfphEv/dJMcahp7JdF/nyyyycoSOm6ODE0lzBnGwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfphEv%2FdJMcahp7JdF%2FnyyyycoSOm6ODE0lzBnGwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1124&quot; height=&quot;988&quot; data-origin-width=&quot;1124&quot; data-origin-height=&quot;988&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 TestFlight 올라오는것까지 확인 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;꽤 오랜시간이 걸렸네요 ㅎ.ㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 글이 길어져서 3편으로 바로 돌아오겠습니다~!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 다들 즐코딩하세요. 그럼 이만~&lt;/p&gt;</description>
      <category>Swift</category>
      <category>CI/CD</category>
      <category>Fastlane</category>
      <category>github CI</category>
      <category>ios</category>
      <category>swift</category>
      <category>배포자동화</category>
      <author>bongbong9708</author>
      <guid isPermaLink="true">https://iosangbong.tistory.com/36</guid>
      <comments>https://iosangbong.tistory.com/36#entry36comment</comments>
      <pubDate>Fri, 13 Mar 2026 14:38:43 +0900</pubDate>
    </item>
    <item>
      <title>[iOS] GitLab CI + Fastlane CI/CD 적용기 - 1</title>
      <link>https://iosangbong.tistory.com/35</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요. iOSangBong입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;몇년 오랜만에 포스팅을 하는데요..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정보성 글을 작성 하려고 노력을 했었지만 점점 ai도 등장하고 굳이 필요한가? 현타도 많이 왔는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요새 내가 어떤 걸 해왔는지 기록하는거에 대한 중요성이 생겨서 공부 겸 다시 마음 먹고 시작하려고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나중에 시간되면 이 부분도 따로 포스팅을 해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서론이 길었네요..&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;현재 상황&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 회사에서는 AI 관련해서 잦은 업데이트를 하고 있고 기존 하이브리드 컨텐츠를 다운받는 방식이 아닌 파일 자체를 프로젝트에 포함시켜서 너무 자주자주 배포를 진행하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Common SPM 라이브러리에 파일 업데이트 태그 발행 -&amp;gt; 2개 App에 각각 업데이트(태그, 빌드버전 수정) -&amp;gt; 아카이브 -&amp;gt; 확인 요청&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정이 한 30분 정도 걸리는을 일주일에 몇번 하는지를 모르겠네요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각자 프로젝트를 진행하고 있는 상황에서 AI 수정해달라고 하면...&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 CI/CD 도입이 절실하게 필요했습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;CI/CD를 적용한다면?&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pPZ09/dJMcab4tRFr/vKXRzdYnKnkxQ3wsF4zDMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pPZ09/dJMcab4tRFr/vKXRzdYnKnkxQ3wsF4zDMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pPZ09/dJMcab4tRFr/vKXRzdYnKnkxQ3wsF4zDMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpPZ09%2FdJMcab4tRFr%2FvKXRzdYnKnkxQ3wsF4zDMK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;404&quot; height=&quot;606&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1536&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CI/CD란 간단하게 빌드 / 테스트 / 배포를 자동화 하는 과정입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SPM 라이브러리에서 하이브리드 컨텐츠를 수정 후 커밋 / 태그 푸시 하게 되면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A앱, B앱에 SPM 태그 버전 변경, 빌드버전 + 1 를 한 다음&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CI 빌드 및 테스트 진행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제가 없다면 CD TestFligth 배포 까지 진행하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 프로세스에 비해 해야할 것 들이 확 줄어서 좋긴한데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시행착오 과정 + 왠만하면 그대로 가져가려고 하는 회사 특성상 쉽진 않겠지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;진행 해보려고 합니다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팀원 중 누군가가 본다면 따봉을 날려주세요...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Why GitLab + Fastlane ?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 GitLab + Fastlane을 선택했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜냐면 이미 회사에서 GitLab을 사용하고 있고 별도의 비용도 딱히 안들어가기 때문이죠&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 선택지가 깃랩밖에 없었습니다 ㅎ.ㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 과정은 대략 이렇게 준비될 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1️⃣ 기본 환경 설정&lt;br /&gt;2️⃣ Fastlane 설정&lt;br /&gt;3️⃣ GitLab Runner 설정&lt;br /&gt;4️⃣ .gitlab-ci.yml 작성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 프로세스로 진행할 예정이고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빠르게 진행하면서 넘어가보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금은 17:46..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직장인에게 칼퇴는 정말 중요하죠....&lt;br /&gt;&lt;br /&gt;오늘은 일단 정리하고 내일 다시 진행해보겠습니다.&lt;br /&gt;(프로젝트 진행하면서 회사에서 1시간 정도씩 밖에 진행을 못해서 더딜 수 있지만 봐주세요.. ㅎㅎ)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 다들 즐코딩하세요. 그럼 이만~&lt;/p&gt;</description>
      <category>Swift</category>
      <category>CI/CD</category>
      <category>Fastlane</category>
      <category>gitlab ci</category>
      <category>ios</category>
      <category>swift</category>
      <category>배포자동화</category>
      <author>bongbong9708</author>
      <guid isPermaLink="true">https://iosangbong.tistory.com/35</guid>
      <comments>https://iosangbong.tistory.com/35#entry35comment</comments>
      <pubDate>Thu, 12 Mar 2026 17:48:33 +0900</pubDate>
    </item>
    <item>
      <title>[일상] 전세 연장 + 전자 계약 후기 2탄</title>
      <link>https://iosangbong.tistory.com/34</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. iOSangBong입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;지난 1편에 이은 2번째이자 마무리를 지어보려합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이 일들이 몇주 지났지만 한번 잘 기억해보고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;기록해보겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;1. 대출 심사 완료&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;11월 20일에 전자계약서를 작성한 후 바로 우리은행에 가서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;관련 서류들을 제출하게 되었는데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;11월 22일에 바로 은행에서 문자가 오게되었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_IMG_C08B23D04593-1.jpeg&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;1507&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HyCU0/btsLC0GkSD2/dtuiLMRs22Nv4KuohX128K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HyCU0/btsLC0GkSD2/dtuiLMRs22Nv4KuohX128K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HyCU0/btsLC0GkSD2/dtuiLMRs22Nv4KuohX128K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHyCU0%2FbtsLC0GkSD2%2FdtuiLMRs22Nv4KuohX128K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;467&quot; data-filename=&quot;edited_IMG_C08B23D04593-1.jpeg&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;1507&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 바로 문자가 오게 되었구요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;저는 대출이자가 늘어가는게 싫어서 은행원분과 연락을 하게&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;대출금의 10%를 상환하게 되었고&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그 후에 대출 이자율을 확인해본뒤&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;전자약정을 완료하게 되었습니다~!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;2. 전세 갱신 당일&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;저는 전세 갱신 날짜가 12월 8일 일요일이였어요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;첫 계약때는 22년 12월 9일 평일이였지만 만료날까지 24년 12월 8일이여서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;전세계약 갱신 날짜는 12월 8일로 되었답니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 저는 일단 임대인 분께 송금을 하였고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;확인부탁드린다는 문자를 드려서 확인했다는 문자를 받았습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;3. 대출 갱신 당일&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;12월 9일 오전에 출근을 했는데 은행에 전화가 왔어요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;계좌에 잔액이 부족해서 대출 연장 처리가 안되고 있다고 하더라구요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 ??? 했지만&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;전세 대출 연장하기 위해서는 보증료를 출금해야되는데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;잔액이 없어서 연락이 왔었더라구요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 바로 입금 후&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_IMG_1340CC983C4B-1.jpeg&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;345&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/49lZn/btsLA0nHClC/6lx8lpwcHIV73DhDfQzYiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/49lZn/btsLA0nHClC/6lx8lpwcHIV73DhDfQzYiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/49lZn/btsLA0nHClC/6lx8lpwcHIV73DhDfQzYiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F49lZn%2FbtsLA0nHClC%2F6lx8lpwcHIV73DhDfQzYiK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;107&quot; data-filename=&quot;edited_IMG_1340CC983C4B-1.jpeg&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;345&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 문자가 바로 와서 안심했어요~~&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;4.  HUG 방문&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;저는 성격이 급해서 대출연장이 된 바로 다음날&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;전세보증보험 연장을 하려고 했어요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://naver.me/GpCzTdc6&quot;&gt;https://naver.me/GpCzTdc6&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1735722531341&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;네이버 지도&quot; data-og-description=&quot;주택도시보증공사 서울북부지사&quot; data-og-host=&quot;map.naver.com&quot; data-og-source-url=&quot;https://naver.me/GpCzTdc6&quot; data-og-url=&quot;https://map.naver.com/p/entry/place/13381462?placePath=/home&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/5EArB/hyXSsLJtgd/ZcGmd2ekkfGqsMVjOMx8NK/img.jpg?width=256&amp;amp;height=256&amp;amp;face=0_0_256_256,https://scrap.kakaocdn.net/dn/nUIX1/hyXWsQQs1j/pbIsSuZQI5FaQfSKqw7Ri0/img.jpg?width=256&amp;amp;height=256&amp;amp;face=0_0_256_256&quot;&gt;&lt;a href=&quot;https://naver.me/GpCzTdc6&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://naver.me/GpCzTdc6&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/5EArB/hyXSsLJtgd/ZcGmd2ekkfGqsMVjOMx8NK/img.jpg?width=256&amp;amp;height=256&amp;amp;face=0_0_256_256,https://scrap.kakaocdn.net/dn/nUIX1/hyXWsQQs1j/pbIsSuZQI5FaQfSKqw7Ri0/img.jpg?width=256&amp;amp;height=256&amp;amp;face=0_0_256_256');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;네이버 지도&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;주택도시보증공사 서울북부지사&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;map.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;저는 회사 근처에 주택도시보증공사 지사가 있어서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;바로 방문을 하려고 필요한 서류를 준비하고 있었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://iosangbong.tistory.com/33&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://iosangbong.tistory.com/33&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1735722571710&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[일상] 전세 연장 + 전자 계약 후기 1탄&quot; data-og-description=&quot;안녕하세요. iOSangBong입니다.평소에는 개발 관련된 글을 썼는데&amp;nbsp;오늘은 전세 관련된 글을 써보려고 합니다.&amp;nbsp;처음 전세계약할때는 도움이 되는 블로그들이 많았는데전세 연장 + 전자 계약에 대&quot; data-og-host=&quot;iosangbong.tistory.com&quot; data-og-source-url=&quot;https://iosangbong.tistory.com/33&quot; data-og-url=&quot;https://iosangbong.tistory.com/33&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bYLHe3/hyXSsEZfwr/FpRd3LjDEEdwRUqYaAiZV0/img.png?width=800&amp;amp;height=602&amp;amp;face=0_0_800_602,https://scrap.kakaocdn.net/dn/lr2AA/hyXSESXdZY/Hf2LcPqDqvpcH4zb9kxVb1/img.png?width=800&amp;amp;height=602&amp;amp;face=0_0_800_602,https://scrap.kakaocdn.net/dn/bxEn0j/hyXStcMFyd/YaWO53pIJFUykknswXhYT1/img.png?width=1290&amp;amp;height=2796&amp;amp;face=0_0_1290_2796&quot;&gt;&lt;a href=&quot;https://iosangbong.tistory.com/33&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://iosangbong.tistory.com/33&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bYLHe3/hyXSsEZfwr/FpRd3LjDEEdwRUqYaAiZV0/img.png?width=800&amp;amp;height=602&amp;amp;face=0_0_800_602,https://scrap.kakaocdn.net/dn/lr2AA/hyXSESXdZY/Hf2LcPqDqvpcH4zb9kxVb1/img.png?width=800&amp;amp;height=602&amp;amp;face=0_0_800_602,https://scrap.kakaocdn.net/dn/bxEn0j/hyXStcMFyd/YaWO53pIJFUykknswXhYT1/img.png?width=1290&amp;amp;height=2796&amp;amp;face=0_0_1290_2796');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[일상] 전세 연장 + 전자 계약 후기 1탄&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. iOSangBong입니다.평소에는 개발 관련된 글을 썼는데&amp;nbsp;오늘은 전세 관련된 글을 써보려고 합니다.&amp;nbsp;처음 전세계약할때는 도움이 되는 블로그들이 많았는데전세 연장 + 전자 계약에 대&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;iosangbong.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;제 이전 포스팅을 보시면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;900&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9mu6V/btsLDdemy8L/wbhmG8r4fncgNLU3vM3IMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9mu6V/btsLDdemy8L/wbhmG8r4fncgNLU3vM3IMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9mu6V/btsLDdemy8L/wbhmG8r4fncgNLU3vM3IMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9mu6V%2FbtsLDdemy8L%2FwbhmG8r4fncgNLU3vM3IMk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;506&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;900&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 필요한 것들이 나오는데요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;저 제출안내 사이트에 혹시 몰라서 들어가보게 되었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.khug.or.kr/hug/web/ig/dr/igdr000002.jsp?tabMenu=Y&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.khug.or.kr/hug/web/ig/dr/igdr000002.jsp?tabMenu=Y&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1735722644008&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;전세보증금반환보증  | 주택도시보증공사&quot; data-og-description=&quot;보증료 할인을 위한 제출서류&quot; data-og-host=&quot;www.khug.or.kr&quot; data-og-source-url=&quot;https://www.khug.or.kr/hug/web/ig/dr/igdr000002.jsp?tabMenu=Y&quot; data-og-url=&quot;https://www.khug.or.kr/hug/web/ig/dr/igdr000002.jsp?tabMenu=Y&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.khug.or.kr/hug/web/ig/dr/igdr000002.jsp?tabMenu=Y&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.khug.or.kr/hug/web/ig/dr/igdr000002.jsp?tabMenu=Y&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;전세보증금반환보증 | 주택도시보증공사&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;보증료 할인을 위한 제출서류&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.khug.or.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;1) 주민등록등본 및 신분증&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;2) 전세계약서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;3) 전세보증금 지급 확인서류&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;4) 전입세대확인서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;5) 부동산등기부등본&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;6) 건축물 대장&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;7) 금융기관 전세자금대출 및 담보제공 확인서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 하나씩 정리를 해보자면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;주민등록등본, 건축물대장 -&amp;gt; 정부 24&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;부동산등기부등본 -&amp;gt; 인터넷 등기소&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;전세계약서, 보증금 지급서류 -&amp;gt; 프린트&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;금융기관 전세자금대출 및 담보제공 확인서 -&amp;gt; ???&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이건 확인해보니 사이트에 &lt;span style=&quot;color: #ee2323;&quot;&gt;제출서류 다운로드&lt;/span&gt;를 누르면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;1072&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NqgVr/btsLCrRKEXv/5yKA7ujkmKhtfkFfoZ3O10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NqgVr/btsLCrRKEXv/5yKA7ujkmKhtfkFfoZ3O10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NqgVr/btsLCrRKEXv/5yKA7ujkmKhtfkFfoZ3O10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNqgVr%2FbtsLCrRKEXv%2F5yKA7ujkmKhtfkFfoZ3O10%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;560&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;1072&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이런 양식이 있었고 다른것들은 다 스스로 작성할수 있었으니&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;취급점포 날인 ????&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;바로 담당 은행원분께 전화해서 물어봤더니 은행으로 찾아와야한다고 해서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;다음날 점심시간에 바로가서 날인 및 다른 항목들 다 작성 후&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;주택도시보증공사 서울북부지사에 방문해서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;기타 서류 작성 후&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;2-3개월 뒤 심사되면 연락준다고 해서 회사로 돌아오게 되었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;5. 전세보증금반환보증 완료&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그러나 12월 24일 크리스마스에 카톡으로 연락이 오게 됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;2-3개월 심사 기간이 걸린다고 했는데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;거의 2주만에 바로 연락이 왔네요&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_IMG_E91AA5EACFE6-1.jpeg&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;1848&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buzodv/btsLBKqTz7f/gkkwIo7R06ZCEOnUBkOidk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buzodv/btsLBKqTz7f/gkkwIo7R06ZCEOnUBkOidk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buzodv/btsLBKqTz7f/gkkwIo7R06ZCEOnUBkOidk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbuzodv%2FbtsLBKqTz7f%2FgkkwIo7R06ZCEOnUBkOidk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;573&quot; data-filename=&quot;edited_IMG_E91AA5EACFE6-1.jpeg&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;1848&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 바로 보증료를 납부하라는 연락이 와서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;납부계좌에 보증료를 납부하니&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_IMG_A769C9FD0382-1.jpeg&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;1952&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcQlO4/btsLDdk8JoC/IjMi0rfsAWepH13FKOK3uK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcQlO4/btsLDdk8JoC/IjMi0rfsAWepH13FKOK3uK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcQlO4/btsLDdk8JoC/IjMi0rfsAWepH13FKOK3uK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcQlO4%2FbtsLDdk8JoC%2FIjMi0rfsAWepH13FKOK3uK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;605&quot; data-filename=&quot;edited_IMG_A769C9FD0382-1.jpeg&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;1952&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;9~10시쯤 납부를 하게 되니&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;16시쯤 전세보증금반환보증이 완료되었다는 카톡이 와있었어요~&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이제 거의 끝났네요~~~&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;안심전세 앱을 설치해서 &lt;span style=&quot;color: #ee2323;&quot;&gt;보증내역조회&lt;/span&gt;를 들어가니&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;정상적으로 조회가 되었구요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_edited_IMG_61B3C315E1E8-1.jpeg&quot; data-origin-width=&quot;1284&quot; data-origin-height=&quot;2518&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLr916/btsLCp7sNpS/fP23HXFcdZlgvRk9KdNwPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLr916/btsLCp7sNpS/fP23HXFcdZlgvRk9KdNwPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLr916/btsLCp7sNpS/fP23HXFcdZlgvRk9KdNwPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLr916%2FbtsLCp7sNpS%2FfP23HXFcdZlgvRk9KdNwPK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;867&quot; data-filename=&quot;edited_edited_IMG_61B3C315E1E8-1.jpeg&quot; data-origin-width=&quot;1284&quot; data-origin-height=&quot;2518&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;클릭해서 들어가니 증명서를 발급발을 수 있어서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;전세보증서 + 보증료영수증 + 납입증명서를 전부 발급받아서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;담당 중개사분께 전달드렸고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;임대인분께 전액 보증료를 돌려받았고&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;돌려받은 이체확인증을 보내주니 끝났습니다~&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;정말 몇 주동안 혼자 끙끙 알아보고 힘들었는데&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;잘끝나서 다행인것 같습니다~&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이 글을 쓰는 날은 1월 1일으로 2025년 새해가 찾아왔는데요~&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;모두 건강하고 원하는 일 모두 이루시길 바랍니다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그럼 이만~&lt;/p&gt;</description>
      <category>일상/전세</category>
      <category>대출연장</category>
      <category>버팀목연장</category>
      <category>보증보험갱신</category>
      <category>전세</category>
      <category>전세연장</category>
      <category>전세연장후기</category>
      <category>전세재계약</category>
      <category>전자계약</category>
      <category>전자계약후기</category>
      <author>bongbong9708</author>
      <guid isPermaLink="true">https://iosangbong.tistory.com/34</guid>
      <comments>https://iosangbong.tistory.com/34#entry34comment</comments>
      <pubDate>Wed, 1 Jan 2025 18:28:55 +0900</pubDate>
    </item>
    <item>
      <title>[일상] 전세 연장 + 전자 계약 후기 1탄</title>
      <link>https://iosangbong.tistory.com/33</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. iOSangBong입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;평소에는 개발 관련된 글을 썼는데&amp;nbsp;오늘은 전세 관련된 글을 써보려고 합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;처음 전세계약할때는 도움이 되는 블로그들이 많았는데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;전세 연장 + 전자 계약에 대한 글은 없더라구요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;다음 2년 뒤에 제 자신이나 다른분들께도 정보를 공유하고 싶어서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;시간순으로 한번 정리해보겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;글이 길이 때문에 원하시는 분들은 목차로 찾아보시면 될것 같습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;1. 서울 올라온 후 전세까지&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;저는 원래 천안에서 살다가 iOS개발자로 취업하게 되면서 서울로 올라오게 되었는데요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;처음엔 원룸텔에서 1년정도 살았던것 같습니다..&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그땐 정말 서울엔 집값도 비싸서 급하게 올라왔는데요&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIROig/btsKQrLHmOU/5XKRWFNGJ0ZfkgbKTlsPqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIROig/btsKQrLHmOU/5XKRWFNGJ0ZfkgbKTlsPqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIROig/btsKQrLHmOU/5XKRWFNGJ0ZfkgbKTlsPqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIROig%2FbtsKQrLHmOU%2F5XKRWFNGJ0ZfkgbKTlsPqK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;533&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bacxep/btsKQITVRpD/6FYnnhJsQ8wPu8c0eBb9M1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bacxep/btsKQITVRpD/6FYnnhJsQ8wPu8c0eBb9M1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bacxep/btsKQITVRpD/6FYnnhJsQ8wPu8c0eBb9M1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbacxep%2FbtsKQITVRpD%2F6FYnnhJsQ8wPu8c0eBb9M1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;533&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;자세히 보면 창문도 없었던 곳이였는데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;깔끔하고 300/30 이라는 가격에 보자마자 바로 계약해버렸습니다..&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;저 계약이 21년 12월이였고 코로나가 한창이였는데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;자가격리를 2주하게 되었고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;창문이 없어서 거의 감옥생활을 했던 기억이 있네요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 다음집은 꼭 창이 넓고 뷰가 좋은곳이로 가자해서&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;지금 살고 있는 집을 찾게 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1181&quot; data-origin-height=&quot;890&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7wrRI/btsKQ7TA92A/07sK1yXtlAcNBEWs1Jh3a0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7wrRI/btsKQ7TA92A/07sK1yXtlAcNBEWs1Jh3a0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7wrRI/btsKQ7TA92A/07sK1yXtlAcNBEWs1Jh3a0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7wrRI%2FbtsKQ7TA92A%2F07sK1yXtlAcNBEWs1Jh3a0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1181&quot; height=&quot;890&quot; data-origin-width=&quot;1181&quot; data-origin-height=&quot;890&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceAwLP/btsKQrkC9ON/DPAfhR7CPeCoASrD4fGp20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceAwLP/btsKQrkC9ON/DPAfhR7CPeCoASrD4fGp20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceAwLP/btsKQrkC9ON/DPAfhR7CPeCoASrD4fGp20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceAwLP%2FbtsKQrkC9ON%2FDPAfhR7CPeCoASrD4fGp20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;533&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;창이 넓고 좋은 집에 살았던 저는 이 집을 보자마자 전세대출에 대해 바로 알아보고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;당일날 바로 가계약을 하게됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;한창 전세사기 이런얘기가 나왔는데 뭐가 홀렸는지&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;꼭 살고 싶더라구요ㅋㅋ&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그 길로 바로 전세를 계약하게 되었고 그 이후로 벌써 2년이 지났네요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;2. 전세 종료 4개월 전&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;전세 종료 시즌이 점점 다가오고 있어서 알아봤는데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;1) 묵시적 갱신&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;2) 계약 갱신청구권&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;3) 신규 계약&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 3가지 방법이 있었다 별도의 연락이 없었어서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;1번인줄 알았으나...&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;임대인에게 연락이 왔습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;임대차 계약 관련 전담 중개사님을 연락처를 알려주셨고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;며칠뒤 연락이 오게 됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;임대인님께서 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;5%&lt;/b&gt;&lt;/span&gt;를 올리고 싶다고...&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이 근처 부동산을 찾아봤더니&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;1.5룸은 거의 3억... 2룸도 거의 3억&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이정도 금액은 무리이기도 했고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이만한 매물이 이가격은 근처에 없는것 같아서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;바로 재계약하겠다고 했고 11월 초에 연락을 주겠다고 하셨습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;3. 전세 종료 1개월 전&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;요새 일이 너무 바빠서 신경을 못쓰고 있었는데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;갑자기 문자가 옵니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;2796&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cROomj/btsKQAhshDp/KzdYKdrjZX8AMQGz5ge2U0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cROomj/btsKQAhshDp/KzdYKdrjZX8AMQGz5ge2U0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cROomj/btsKQAhshDp/KzdYKdrjZX8AMQGz5ge2U0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcROomj%2FbtsKQAhshDp%2FKzdYKdrjZX8AMQGz5ge2U0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;867&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;2796&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 중개사 분께 연락을 드렸더니 바로 계약을 진행하자고 하셨습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;전자계약&lt;/span&gt;&lt;/b&gt;으로 진행을 하자고 하시더라구요?&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;일단 무슨 시스템인지 모르니 알아보고 다시 연락드린다고 했습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그렇게 전세 연장 + 대출 연장 + 보증보험 갱신 + 전자 계약을 알아보게 되었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;4. 전세 연장시 주의사항&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;일단 전세 연장시 주의사항으로는 크게 3가지가 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;첫번째 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;등기부등본 확인함으로써 임대차 기간 중 근저당권 설정된게 있는지 확인&lt;/b&gt;&lt;/span&gt; 해야됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이때 근저당권이 설정된게 있으면&amp;nbsp; 후순위로 밀려서 보호 받지 못할 수도 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;두번째로는&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; 새로운 계약서 특약 사항에 연장된 기간, 보증금 증액분 명시하고, 기존 계약서가 유효 하다는 특약사항&lt;/span&gt;&lt;/b&gt;이 있어야합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;세번째로는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;새로운 계약서는 확정일자를 받고, 기존 계약서는 함께 보관&lt;/b&gt;&lt;/span&gt; 해야합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;크게 3가지 주의사항이 있고 증액금액이 5%인지 확인했습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;5. 전세 대출 연장하기&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;위에 전세 연장 주의사항을 찾아본다음&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;전세 대출 연장에 대해 알아보기 위해&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;2년전 대출을 받았던 우리은행 은행원 분께 연락을 해봤습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 새로운분으로 바뀌셨더라구요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래도 제 할일은 해야되니 어떤 서류가 필요한지 여쭤봤습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;1) 주민등록등본&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;2) 가족관계증명서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;3) 확정일자가 찍힌 신규 계약서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 보내달라고 하셨고&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;추가적으로 전세대출이 연장되면 대출 보증서도 연장된다고 했습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;(이건 HF 유선으로 확인한 내용)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;6. 보증보험 연장하기&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;저는 보증서는 HF를 사용했고 보증보험은 HUG를 이용했습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그냥 가입하기 쉬운 회사에 근처에 있는 HUG에 가서 가입을 했는데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;다들 이렇게는 안하시는듯하더라구요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;쨌든 여기도 전화해보니 ARS로 연결되고 추가적으로 문자로 필요 서류 전달 받았습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;2796&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WGuiS/btsKQxSTOiy/9mZeM0pZBGeHsiFKPFMYJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WGuiS/btsKQxSTOiy/9mZeM0pZBGeHsiFKPFMYJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WGuiS/btsKQxSTOiy/9mZeM0pZBGeHsiFKPFMYJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWGuiS%2FbtsKQxSTOiy%2F9mZeM0pZBGeHsiFKPFMYJK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;867&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;2796&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;1) 신분증&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;2) 확정일자부 전세계약서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;3) 보증금지급 확인서류&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;4) 등기부등본&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;5) 주민등록등본&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;6) 전입세대열람내역&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;7) 건축물대장&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;8) 타전세계약확인서 또는 확정일자 부여현황&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 문자를 받았고 추가적으로 보증보험 연장을 해야되는데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;보증금 지급은 잔금일에 하는데 어떻게 미리 저 서류를 제출 하지? 라는 의구심이 들어서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;전화 상담을 했는데 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;보증보험 갱신은 -1개월 부터 갱신일 +1개월까지&lt;/b&gt;&lt;/span&gt; 갱신이 가능하다고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;전달 받았습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이부분 참고하시면 좋을듯하네요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;7. 전자계약 알아보기&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 마지막으로 부동산 전자계약에 대해 알아봤습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;국토부에서 만든 전자계약 시스템으로 계약 당사자 본인만이 계약을 진행할 수 있고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;계약서 위,변조가 불가능 하다고 하네요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;또한 계약서 작성과 동시에 실거래 신고 및 확정일자 자동 부여됨으로 행정절차가 많이 줄어들게 되고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;대출 우대 금리를 지원한다고 하네요&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;986&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kE0En/btsKPdnMjVW/8vQFBAMvHMxD4KP2NzJtJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kE0En/btsKPdnMjVW/8vQFBAMvHMxD4KP2NzJtJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kE0En/btsKPdnMjVW/8vQFBAMvHMxD4KP2NzJtJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkE0En%2FbtsKPdnMjVW%2F8vQFBAMvHMxD4KP2NzJtJk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;721&quot; height=&quot;986&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;986&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이런 점들이 있으니 국토교통부 사이트에 들어가셔서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;한번 확인해보시는게 좋을것 같습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://irts.molit.go.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://irts.molit.go.kr/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1732097924688&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;국토교통부 부동산거래 전자계약시스템&quot; data-og-description=&quot;부동산 전자계약 작성 및 안내, 전자계약 현황 조회, 공동인증서 관리, 전자계약 중개사무소 안내, 이용안내&quot; data-og-host=&quot;irts.molit.go.kr&quot; data-og-source-url=&quot;https://irts.molit.go.kr/&quot; data-og-url=&quot;https://irts.molit.go.kr&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/94LWd/hyXDhV3Kfx/gFmnM8TPh4eTRKoJ1gG180/img.gif?width=353&amp;amp;height=38&amp;amp;face=0_0_353_38,https://scrap.kakaocdn.net/dn/YrbnB/hyXzPmCFZs/7UfGTK4WrUFP5obET8K8kK/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/MtSpn/hyXzIVkN49/crQRdnmZPMSmXcKQkej4e1/img.jpg?width=366&amp;amp;height=243&amp;amp;face=0_0_366_243&quot;&gt;&lt;a href=&quot;https://irts.molit.go.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://irts.molit.go.kr/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/94LWd/hyXDhV3Kfx/gFmnM8TPh4eTRKoJ1gG180/img.gif?width=353&amp;amp;height=38&amp;amp;face=0_0_353_38,https://scrap.kakaocdn.net/dn/YrbnB/hyXzPmCFZs/7UfGTK4WrUFP5obET8K8kK/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/MtSpn/hyXzIVkN49/crQRdnmZPMSmXcKQkej4e1/img.jpg?width=366&amp;amp;height=243&amp;amp;face=0_0_366_243');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;국토교통부 부동산거래 전자계약시스템&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;부동산 전자계약 작성 및 안내, 전자계약 현황 조회, 공동인증서 관리, 전자계약 중개사무소 안내, 이용안내&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;irts.molit.go.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;8. 전세 재계약 진행&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 알아본 다음 중개사님께 전자계약으로 진행하자고 전달드렸고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;오늘 계약을 진행하게 되었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;960&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcXJDs/btsKRbBKAyg/v9TOaPhRebdQoOgKnmX9M0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcXJDs/btsKRbBKAyg/v9TOaPhRebdQoOgKnmX9M0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcXJDs/btsKRbBKAyg/v9TOaPhRebdQoOgKnmX9M0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcXJDs%2FbtsKRbBKAyg%2Fv9TOaPhRebdQoOgKnmX9M0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;298&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;960&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그 전에 임대인분께서는 이미 계약을 완료 하셨더라구요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;저는 공인중개사님께 설명을 듣고 계약을 진행했습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;부동산 등기부등본, 건축물 대장등 확인해야될 서류들 확인한 다음&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;계약서 내용에 대해서 설명해주셨고&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;부동산 전자계약 어플 설치 후 전자계약을 진행했습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://apps.apple.com/kr/app/%EB%B6%80%EB%8F%99%EC%82%B0-%EC%A0%84%EC%9E%90%EA%B3%84%EC%95%BD/id1281387986&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://apps.apple.com/kr/app/%EB%B6%80%EB%8F%99%EC%82%B0-%EC%A0%84%EC%9E%90%EA%B3%84%EC%95%BD/id1281387986&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1732098513791&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;&amp;lrm;부동산 전자계약&quot; data-og-description=&quot;&amp;lrm;-부동산거래 전자계약 모바일 서비스(공인중개사,계약자)- 본 서비스는 부동산거래 전자계약시스템(http://irts.molit.go.kr)의 모바일 서비스입니다. 국토교통부 부동산거래 전자계약은 2016년 4월 &quot; data-og-host=&quot;apps.apple.com&quot; data-og-source-url=&quot;https://apps.apple.com/kr/app/%EB%B6%80%EB%8F%99%EC%82%B0-%EC%A0%84%EC%9E%90%EA%B3%84%EC%95%BD/id1281387986&quot; data-og-url=&quot;https://apps.apple.com/kr/app/%EB%B6%80%EB%8F%99%EC%82%B0-%EC%A0%84%EC%9E%90%EA%B3%84%EC%95%BD/id1281387986&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bfQ10Z/hyXC8Y7v4H/28m5BSTKFIHosk2DFJYE91/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cd7fCH/hyXDhhsuPH/tk7nf33E4k8RRRo3KSm0R1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://apps.apple.com/kr/app/%EB%B6%80%EB%8F%99%EC%82%B0-%EC%A0%84%EC%9E%90%EA%B3%84%EC%95%BD/id1281387986&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://apps.apple.com/kr/app/%EB%B6%80%EB%8F%99%EC%82%B0-%EC%A0%84%EC%9E%90%EA%B3%84%EC%95%BD/id1281387986&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bfQ10Z/hyXC8Y7v4H/28m5BSTKFIHosk2DFJYE91/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cd7fCH/hyXDhhsuPH/tk7nf33E4k8RRRo3KSm0R1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lrm;부동산 전자계약&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lrm;-부동산거래 전자계약 모바일 서비스(공인중개사,계약자)- 본 서비스는 부동산거래 전자계약시스템(http://irts.molit.go.kr)의 모바일 서비스입니다. 국토교통부 부동산거래 전자계약은 2016년 4월&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;apps.apple.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이 어플을 받았고 PASS 인증을 하니&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;2796&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rcu6v/btsKRQRnZPX/hnpiIVbIUkX6DlIKZSYH8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rcu6v/btsKRQRnZPX/hnpiIVbIUkX6DlIKZSYH8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rcu6v/btsKRQRnZPX/hnpiIVbIUkX6DlIKZSYH8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frcu6v%2FbtsKRQRnZPX%2FhnpiIVbIUkX6DlIKZSYH8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;867&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;2796&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;여기에 계약서가 있었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;저는 계약이 끝난 상태라 진행중인 계약이 없다고 뜨고 있습니다!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;들어가서 서명하고 하니&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;2796&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wtyqp/btsKRhV3io8/gIL8aFgnjdaef1T11JZOx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wtyqp/btsKRhV3io8/gIL8aFgnjdaef1T11JZOx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wtyqp/btsKRhV3io8/gIL8aFgnjdaef1T11JZOx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwtyqp%2FbtsKRhV3io8%2FgIL8aFgnjdaef1T11JZOx0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;867&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;2796&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이런 식으로 뜨게되고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;확정일자도 1시간 도 안되서 바로 신고완료도 됐습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;1320&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IeRam/btsKPivA4fA/d9lZrPYpubGS14VZESyXrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IeRam/btsKPivA4fA/d9lZrPYpubGS14VZESyXrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IeRam/btsKPivA4fA/d9lZrPYpubGS14VZESyXrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIeRam%2FbtsKPivA4fA%2Fd9lZrPYpubGS14VZESyXrK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;409&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;1320&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;바로 확정일자가 뜨게 되서 은행가서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;주민등록등본, 가족관계증명서, 계약서 제출하니까 은행원 분이&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;은행 어플로 알림주고 거기서 서명하면 된다고 하셔서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;일단 이렇게 집으로 오게 되었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;혼자서 이것저것 찾아보면서 해서 걱정이 쫌 됐는데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;다행히 잘 진행되고 있는것 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;다음 은행 심사나 잔금일때 후기 2탄 가져오겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그럼 이만~&lt;/p&gt;</description>
      <category>일상/전세</category>
      <category>대출연장</category>
      <category>버팀목연장</category>
      <category>보증보험갱신</category>
      <category>전세</category>
      <category>전세연장</category>
      <category>전세연장후기</category>
      <category>전세재계약</category>
      <category>전자계약</category>
      <category>전자계약후기</category>
      <author>bongbong9708</author>
      <guid isPermaLink="true">https://iosangbong.tistory.com/33</guid>
      <comments>https://iosangbong.tistory.com/33#entry33comment</comments>
      <pubDate>Wed, 20 Nov 2024 19:38:55 +0900</pubDate>
    </item>
    <item>
      <title>[iOS][Swift] LocalAuthentication Face ID &amp;amp; Touch ID 생체인식 간단하게 알아보기</title>
      <link>https://iosangbong.tistory.com/32</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. iOSangBong입니다.&lt;br /&gt;&lt;br /&gt;프로젝트를 진행하다보니 로그인 프로세스에&lt;br /&gt;생체인식(Face ID / Touch ID)을 적용해야됐었는데요!&lt;br /&gt;이때 겪었던 경험을 공유하고자 합니다.&lt;br /&gt;&lt;br /&gt;애플에서 제공하는 LocalAuthentication을 사용해보겠습니다.&lt;br /&gt;&lt;a href=&quot;https://developer.apple.com/documentation/localauthentication/lacontext&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://developer.apple.com/documentation/localauthentication/lacontext&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;LAContext | Apple Developer Documentation&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;A mechanism for evaluating authentication policies and access controls.&quot; data-og-host=&quot;developer.apple.com&quot; data-og-source-url=&quot;https://docs.developer.apple.com/documentation/localauthentication/lacontext&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bLYTKV/hyWGW1zt49/qSxGMevg4SJjMCG1EmBVNk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot; data-og-url=&quot;https://docs.developer.apple.com/documentation/localauthentication/lacontext&quot;&gt;&lt;a href=&quot;https://docs.developer.apple.com/documentation/localauthentication/lacontext&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.developer.apple.com/documentation/localauthentication/lacontext&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bLYTKV/hyWGW1zt49/qSxGMevg4SJjMCG1EmBVNk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;LAContext | Apple Developer Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A mechanism for evaluating authentication policies and access controls.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.apple.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;일단 LocalAuthentication을 import 해줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;664&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I8lOs/btsIULq8UI6/1pxoYYq6nYCUKeBTFpb5ck/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I8lOs/btsIULq8UI6/1pxoYYq6nYCUKeBTFpb5ck/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I8lOs/btsIULq8UI6/1pxoYYq6nYCUKeBTFpb5ck/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI8lOs%2FbtsIULq8UI6%2F1pxoYYq6nYCUKeBTFpb5ck%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;664&quot; height=&quot;120&quot; data-origin-width=&quot;664&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;그 다음 생채인식을 사용하는 함수를 만들어보도록 하겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1785&quot; data-origin-height=&quot;1400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ObZ1y/btsIUyS5bQT/Hjs9RfB5vUL6UAjlTXKi51/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ObZ1y/btsIUyS5bQT/Hjs9RfB5vUL6UAjlTXKi51/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ObZ1y/btsIUyS5bQT/Hjs9RfB5vUL6UAjlTXKi51/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FObZ1y%2FbtsIUyS5bQT%2FHjs9RfB5vUL6UAjlTXKi51%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1785&quot; height=&quot;1400&quot; data-origin-width=&quot;1785&quot; data-origin-height=&quot;1400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;생체인식을 위해&amp;nbsp;&amp;nbsp;LAContent()를 선언해준다음&lt;br /&gt;canEvaluatepolicy로 생체인식 사용유무를 체크해줍니다.&lt;br /&gt;&lt;br /&gt;여기서 저는&lt;br /&gt;deviceOwnerAuthenticationWithBiometrics를 사용했는데&lt;br /&gt;&lt;br /&gt;암호입력을 사용하시려면&lt;br /&gt;deviceOwnerAuthentication를 사용하셔야됩니다.&lt;br /&gt;&lt;br /&gt;withBiometrics를 사용해도 암호입력이 나오긴하지만&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;661&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6wplB/btsIThLAuPT/85khC6EzWL0OnHGRY7Y3j1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6wplB/btsIThLAuPT/85khC6EzWL0OnHGRY7Y3j1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6wplB/btsIThLAuPT/85khC6EzWL0OnHGRY7Y3j1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6wplB%2FbtsIThLAuPT%2F85khC6EzWL0OnHGRY7Y3j1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;811&quot; height=&quot;661&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;661&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;암호입력을 클릭시 do-try-catch문에서 error로 떨어지며&lt;br /&gt;아무런 액션이 일어나지 않습니다.&lt;br /&gt;&lt;br /&gt;그 다음&lt;br /&gt;저는 async await를 사용해서 evaluatePolicy를 이용해서&lt;br /&gt;성공시 Bool 값을 반대로 바꿔줬습니다.&lt;br /&gt;&lt;br /&gt;이때는 DispatchQueue.main.async로 메인쓰레드에서&lt;br /&gt;실행하게 만들어줍니다.&lt;br /&gt;&lt;br /&gt;안그러면 컴파일에러가 나더라구요,,&lt;br /&gt;&lt;br /&gt;또한 localizedReason에&lt;br /&gt;&amp;ldquo;생체인식 안태 텍스트입니다.&amp;rdquo;를 해놓았는데요&lt;br /&gt;TouchID &amp;amp; OpticID(비전프로)에서는&lt;br /&gt;해당 텍스트가 잘 나오더라구요&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;&lt;b&gt;현재 대부분 사용하는 기기가 FaceID기반이라고는&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;&lt;b&gt;하지만 신경써야될 부분입니다. 한번 확인하시는게 좋을듯 하네요&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이런식으로 간단하게 생체인식 하는 방법을 알아봤는데요...&lt;br /&gt;&lt;br /&gt;기획서는 역시 좀더 심화적인 내용을 원하더라구요&lt;br /&gt;그래서 좀더 찾아봤는데&lt;br /&gt;&lt;br /&gt;일단 요구하는 화면은 아래와 같습니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;2796&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v4YIH/btsITnLJqxJ/nTx3p8v1knDYfg2EgPNoJK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v4YIH/btsITnLJqxJ/nTx3p8v1knDYfg2EgPNoJK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v4YIH/btsITnLJqxJ/nTx3p8v1knDYfg2EgPNoJK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv4YIH%2FbtsITnLJqxJ%2FnTx3p8v1knDYfg2EgPNoJK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;283&quot; height=&quot;613&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;2796&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이런식으로 암호입력을 없애는 걸 요구했습니다.&lt;br /&gt;&lt;br /&gt;암호입력을 사용하고 싶지 않을 경우&lt;br /&gt;LAContext를 선언해준 다음&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;localizedFallbackTitle&lt;/i&gt;&lt;/span&gt;을&lt;br /&gt;&amp;ldquo;&amp;rdquo; 빈값으로 두면&lt;br /&gt;됩니다&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;729&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPwGn5/btsIUwOuk7s/UhaNQQpLLyxcdW784WIPYk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPwGn5/btsIUwOuk7s/UhaNQQpLLyxcdW784WIPYk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPwGn5/btsIUwOuk7s/UhaNQQpLLyxcdW784WIPYk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPwGn5%2FbtsIUwOuk7s%2FUhaNQQpLLyxcdW784WIPYk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;886&quot; height=&quot;729&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;729&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;혹은 암호입력 버튼 없애지 않고 싶다면&lt;br /&gt;다른 텍스트 값을 넣어주면 됩니다.&lt;br /&gt;&lt;br /&gt;또한 취소 텍스트 대신 다른 텍스트를 넣고싶다면&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;localizedCancelTitle&lt;/i&gt;&lt;/span&gt;을 다른 값으로 넣어주면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;807&quot; data-origin-height=&quot;601&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wbd4n/btsIUyZRDdZ/hoH98LsGH5sMcdHaOKOIi0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wbd4n/btsIUyZRDdZ/hoH98LsGH5sMcdHaOKOIi0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wbd4n/btsIUyZRDdZ/hoH98LsGH5sMcdHaOKOIi0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwbd4n%2FbtsIUyZRDdZ%2FhoH98LsGH5sMcdHaOKOIi0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;807&quot; height=&quot;601&quot; data-origin-width=&quot;807&quot; data-origin-height=&quot;601&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이 프로젝트를 진행하면서&lt;br /&gt;FaceID, TouchID, OpticID(비전프로) 까지 테스트를 해보았습니다.&lt;br /&gt;OpticID는 FaceID의 인식되는 아이콘이 눈모양이더라구요&lt;br /&gt;조금 신기했습니다ㅋㅋ&lt;br /&gt;&lt;br /&gt;이렇게 생체인증 LocalAuthentication에 대해 알아보았는데요~&lt;br /&gt;이걸 프로젝트에 잘 활용해보셨으면 좋겠습니다~!&lt;br /&gt;&lt;br /&gt;참고를 위해 코드를 올려 놓겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre class=&quot;Swift&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;Swift&quot;&gt;&lt;code&gt;import SwiftUI
import LocalAuthentication

struct ContentView: View {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@State var isToggle: Bool = false
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var body: some View {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VStack {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Image(systemName: &quot;globe&quot;)
&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;.imageScale(.large)
&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;.foregroundColor(.accentColor)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Text(self.isToggle ? &quot;Hello, 상봉&quot; : &quot;Hello, world!&quot;)
&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;.onTapGesture(perform: {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.checkBioAuth()
&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;func checkBioAuth() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let context = LAContext()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;context.localizedFallbackTitle = &quot;&quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;context.localizedCancelTitle = &quot;iOSangBong&quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var error: NSError?
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &amp;amp;error) else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return
&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;Task {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;do {
&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;try await context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: &quot;생체인식 안내 텍스트입니다.&quot;)
&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;DispatchQueue.main.async {
&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;self.isToggle.toggle()
&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;catch let error {
&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;print(error)
&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;print(error.localizedDescription) 
&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;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이전 포스팅을 하고 거의 1년만인데요..&lt;br /&gt;모든게 하기싫고 게임만했던ㅋㅋ 무기력 했던것 같네요&lt;br /&gt;이제 마음을 다잡고 다시 포스팅을 하려고 합니다 ㅎㅎ&lt;br /&gt;자주 찾아와주세요~!&lt;br /&gt;&lt;br /&gt;그럼 다들 즐코딩하세요. 그럼 이만~!&lt;/p&gt;</description>
      <category>Swift</category>
      <category>faceID</category>
      <category>ios</category>
      <category>lacontext</category>
      <category>LocalAuthentication</category>
      <category>OpticID</category>
      <category>swift</category>
      <category>touchID</category>
      <category>생체인식</category>
      <author>bongbong9708</author>
      <guid isPermaLink="true">https://iosangbong.tistory.com/32</guid>
      <comments>https://iosangbong.tistory.com/32#entry32comment</comments>
      <pubDate>Sat, 3 Aug 2024 16:26:32 +0900</pubDate>
    </item>
    <item>
      <title>[iOS][SwiftUI] @FocusState에 String 타입 사용해보기</title>
      <link>https://iosangbong.tistory.com/31</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. iOSangBong입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;오늘은  프로젝트를 진행하는 도중에 focusState에 대한 생각이 들어서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;공부겸 포스팅을 해보려고 합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;일단 iOS15부터 사용이 가능한 focusState가 있는데&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;455&quot; data-origin-height=&quot;213&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cU48Cc/btszD3nd1B6/n4Z6gF9owOskW5LBjQvbf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cU48Cc/btszD3nd1B6/n4Z6gF9owOskW5LBjQvbf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cU48Cc/btszD3nd1B6/n4Z6gF9owOskW5LBjQvbf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcU48Cc%2FbtszD3nd1B6%2Fn4Z6gF9owOskW5LBjQvbf0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;455&quot; height=&quot;213&quot; data-origin-width=&quot;455&quot; data-origin-height=&quot;213&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;대부분의 예제들을 보면 열거형으로 만들어준다음&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;옵셔널로 선언해줘서 사용하는 모습을 볼 수 있습니다..&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 처음 접했을때는 그냥 저렇게 사용하는거구나?&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;라고만 생각을 했는데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이번에 프로젝트를 진행하다보니...&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;ForEach로 무한히 증식하는 텍스트필드를 맞이하게 되었습니다.....&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;하하하....&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;매우 안좋은 형태라고 생각하지만&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이미 결정된 상태라 의견을 제시할 수도 없었네요.... ㅜ&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 focusState는 못쓰겠구나 생각을 했는데..&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;왜? 열거형으로만 사용해야되지? 라는 생각이 들자마자&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;바로 테스트를 해봤습니다..&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;455&quot; data-origin-height=&quot;159&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nqtVD/btszCvdJPnh/UgDtT1YS9jfZK87DOVdDJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nqtVD/btszCvdJPnh/UgDtT1YS9jfZK87DOVdDJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nqtVD/btszCvdJPnh/UgDtT1YS9jfZK87DOVdDJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnqtVD%2FbtszCvdJPnh%2FUgDtT1YS9jfZK87DOVdDJ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;455&quot; height=&quot;159&quot; data-origin-width=&quot;455&quot; data-origin-height=&quot;159&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;focusState를 옵셔널String 타입으로 선언해준다음&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;텍스트필드를 4개 만들어줬습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;367&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bryZOz/btszAZsQ5eL/24j9xteRn2jja8cgRlE2Vk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bryZOz/btszAZsQ5eL/24j9xteRn2jja8cgRlE2Vk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bryZOz/btszAZsQ5eL/24j9xteRn2jja8cgRlE2Vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbryZOz%2FbtszAZsQ5eL%2F24j9xteRn2jja8cgRlE2Vk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;466&quot; height=&quot;367&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;367&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 임의로 포커싱을 해줄 버튼 4개도 만들었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;459&quot; data-origin-height=&quot;529&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQz6Sk/btszySuusee/Ji56iz88Y4sRsksXonm6d1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQz6Sk/btszySuusee/Ji56iz88Y4sRsksXonm6d1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQz6Sk/btszySuusee/Ji56iz88Y4sRsksXonm6d1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQz6Sk%2FbtszySuusee%2FJi56iz88Y4sRsksXonm6d1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;459&quot; height=&quot;529&quot; data-origin-width=&quot;459&quot; data-origin-height=&quot;529&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그런 다음 preview를 보게 되면?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ezgif.com-video-to-gif (18).gif&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;668&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n7dqV/btszyITa51H/QkRnrtOVkEKWj79DR2chmk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n7dqV/btszyITa51H/QkRnrtOVkEKWj79DR2chmk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n7dqV/btszyITa51H/QkRnrtOVkEKWj79DR2chmk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/n7dqV/btszyITa51H/QkRnrtOVkEKWj79DR2chmk/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;328&quot; height=&quot;668&quot; data-filename=&quot;ezgif.com-video-to-gif (18).gif&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;668&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;원하는 대로 지정해주는 텍스트필드에 포커스가 이동하는 모습을 볼 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;생각보다 간단하게 끝내서&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;고민했던 지난 날의 제 모습을 생각하면 어이가 없을 정도네요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이 기능을 프로젝트에 적용해서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;무한히 늘어나는 텍스트필드에도 대응을 할 수 있었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;참고를 위해 풀코드를 올려놓겠습니다~!&lt;/p&gt;
&lt;pre id=&quot;code_1698837199954&quot; class=&quot;lasso&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;import SwiftUI

struct FocusStringView: View {
    
    @FocusState private var focusedField: String?
    
    @State private var firstText: String = &quot;&quot;
    @State private var secondText: String = &quot;&quot;
    @State private var thirdText: String = &quot;&quot;
    @State private var fourthText: String = &quot;&quot;
    
    var body: some View {
        VStack {
            Spacer()
            
            HStack {
                Button(action: {
                    self.focusedField = &quot;first&quot;
                }, label: {
                    Text(&quot;first&quot;)
                        .padding()
                })
                
                Button(action: {
                    self.focusedField = &quot;second&quot;
                }, label: {
                    Text(&quot;second&quot;)
                        .padding()
                })
                
                Button(action: {
                    self.focusedField = &quot;third&quot;
                }, label: {
                    Text(&quot;third&quot;)
                        .padding()
                })
                
                Button(action: {
                    self.focusedField = &quot;fourth&quot;
                }, label: {
                    Text(&quot;fourth&quot;)
                        .padding()
                })
            }
            
            TextField(&quot;첫번째&quot;, text: $firstText)
                .focused($focusedField, equals: &quot;first&quot;)
                .padding()
                .background(Color.red)
            
            TextField(&quot;두번째&quot;, text: $secondText)
                .focused($focusedField, equals: &quot;second&quot;)
                .padding()
                .background(Color.orange)
            
            TextField(&quot;세번째&quot;, text: $thirdText)
                .focused($focusedField, equals: &quot;third&quot;)
                .padding()
                .background(Color.yellow)
            
            TextField(&quot;네번째&quot;, text: $fourthText)
                .padding()
                .focused($focusedField, equals: &quot;fourth&quot;)
                .background(Color.green)
            
            Spacer()
        }
        .padding()
        .background(Color.white)
        .onTapGesture {
            self.focusedField = nil
        }
    }
}

#Preview {
    FocusStringView()
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;다들 즐코딩 하세요. 그럼 이만~!&lt;/p&gt;</description>
      <category>SwiftUI/1. 기본</category>
      <category>FocusState</category>
      <category>ios</category>
      <category>SwiftUI</category>
      <author>bongbong9708</author>
      <guid isPermaLink="true">https://iosangbong.tistory.com/31</guid>
      <comments>https://iosangbong.tistory.com/31#entry31comment</comments>
      <pubDate>Wed, 1 Nov 2023 20:13:53 +0900</pubDate>
    </item>
    <item>
      <title>[iOS][SwiftUI] WidgetKit 알아보기 - 3. 위젯 이름 및 설명</title>
      <link>https://iosangbong.tistory.com/30</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. iOSangBong입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;오늘은 위젯의 이름과 설명을 변경하는 방법에 대해 알아본 다음&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;여러가지 위젯의 이름과 설명을 만들어주도록 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;1. 위젯 타이틀과 설명&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;홈화면 편집에 들어간다음&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;내가 원하는 위젯을 보게 되면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;2796&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MCyAX/btsyTEDb5wR/OosknJeLYz7o6tWW04AbKk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MCyAX/btsyTEDb5wR/OosknJeLYz7o6tWW04AbKk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MCyAX/btsyTEDb5wR/OosknJeLYz7o6tWW04AbKk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMCyAX%2FbtsyTEDb5wR%2FOosknJeLYz7o6tWW04AbKk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;650&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;2796&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이런식으로 My Widget이라고 타이틀이 되어 있고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;설명에는 This is an example widget이라고 되어 있네요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;어디서 많이 보시지 않았나요?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxbKR0/btsyR7eOpBh/cDuTiVyS29OlupmC9QNsUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxbKR0/btsyR7eOpBh/cDuTiVyS29OlupmC9QNsUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxbKR0/btsyR7eOpBh/cDuTiVyS29OlupmC9QNsUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxbKR0%2FbtsyR7eOpBh%2FcDuTiVyS29OlupmC9QNsUK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;611&quot; height=&quot;377&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;377&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;바로 WidgetConfiguration 부분에 딱 찾을 수가 있네요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/70P0J/btsyVj5909F/Qi144LobDdqFqU7kw21TYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/70P0J/btsyVj5909F/Qi144LobDdqFqU7kw21TYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/70P0J/btsyVj5909F/Qi144LobDdqFqU7kw21TYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F70P0J%2FbtsyVj5909F%2FQi144LobDdqFqU7kw21TYK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;611&quot; height=&quot;377&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;377&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;configurationDisplayName하고 description을 변경해주면?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;2796&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GDQ79/btsy0jYCfNz/vWzeO4tOKQDNpiIjjOIbZ1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GDQ79/btsy0jYCfNz/vWzeO4tOKQDNpiIjjOIbZ1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GDQ79/btsy0jYCfNz/vWzeO4tOKQDNpiIjjOIbZ1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGDQ79%2Fbtsy0jYCfNz%2FvWzeO4tOKQDNpiIjjOIbZ1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;650&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;2796&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;제대로 타이틀과 설명 부분이 변경 되신걸 볼 수 있습니다~!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;2. 여러가지 위젯 타이틀과 설명&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그러면 이제 여러가지 위젯 타이틀과 설명이 나오도록 한번 해보죠!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;프로젝트를 하다보니 여러개의 타이틀과 설명을 만들어줘야되더라구요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 방법을 알아보니&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;286&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vj98b/btsy05lEOmv/lFuTJ3XbFREFLc0BBGFxb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vj98b/btsy05lEOmv/lFuTJ3XbFREFLc0BBGFxb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vj98b/btsy05lEOmv/lFuTJ3XbFREFLc0BBGFxb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvj98b%2Fbtsy05lEOmv%2FlFuTJ3XbFREFLc0BBGFxb0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;598&quot; height=&quot;286&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;286&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;일단 이런식으로 기존에 사용하던 provider를 사용하여&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;두번째 WidgetConfiguration을 만들어 주었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그 다음에 WidgetBundle에 추가해 주었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;392&quot; data-origin-height=&quot;134&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7bhLN/btsyRTOF9Uz/0RhmlWKZXi9wdF6qrltNhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7bhLN/btsyRTOF9Uz/0RhmlWKZXi9wdF6qrltNhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7bhLN/btsyRTOF9Uz/0RhmlWKZXi9wdF6qrltNhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7bhLN%2FbtsyRTOF9Uz%2F0RhmlWKZXi9wdF6qrltNhK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;392&quot; height=&quot;134&quot; data-origin-width=&quot;392&quot; data-origin-height=&quot;134&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그 결과로는?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;1300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r7QXh/btsyUd6sxbZ/josSRr9Ti2fKrYZU5WQ261/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r7QXh/btsyUd6sxbZ/josSRr9Ti2fKrYZU5WQ261/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r7QXh/btsyUd6sxbZ/josSRr9Ti2fKrYZU5WQ261/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/r7QXh/btsyUd6sxbZ/josSRr9Ti2fKrYZU5WQ261/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;1300&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;1300&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 다양한 위젯 타이틀과 설명이 잘 추가된걸 보실 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;프로젝트의 요구사항에 잘 맞게 추가하시면 될듯 합니다~!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;프로젝트에 잘 활용해보세요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;다들 즐코딩하세요. 그럼 이만~&lt;/p&gt;</description>
      <category>SwiftUI/4. Widget</category>
      <category>ios</category>
      <category>SwiftUI</category>
      <category>widgetkit</category>
      <author>bongbong9708</author>
      <guid isPermaLink="true">https://iosangbong.tistory.com/30</guid>
      <comments>https://iosangbong.tistory.com/30#entry30comment</comments>
      <pubDate>Sun, 22 Oct 2023 17:19:55 +0900</pubDate>
    </item>
    <item>
      <title>[iOS][SwiftUI] View의 터치가능 영역을 제어하기</title>
      <link>https://iosangbong.tistory.com/29</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. iOSangBong입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;오늘은 View의 터치 영역을 제어하는 방법을 알아볼텐데요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;프로젝트를 진행하면서 UX를 고려하기 위해서는&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이미지의 사이즈보다 크게 터치 영역을 잡아줘야 하는데요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;배경색이 흰색이면 상관없지만&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;다른색일경우에는 배경색을 clear로 지정해줘야 하는데...&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;터치가 안될때가 있습니다...&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;간단하게 샘플코드를 짜보자면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zEhEs/btsyVi65E2a/kRbwkAgkNzuttRIlCjyK0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zEhEs/btsyVi65E2a/kRbwkAgkNzuttRIlCjyK0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zEhEs/btsyVi65E2a/kRbwkAgkNzuttRIlCjyK0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzEhEs%2FbtsyVi65E2a%2FkRbwkAgkNzuttRIlCjyK0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;257&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Rectangle하고 Text가 있는데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Rectangle은 .clear 색상으로 두었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 ZStack에 onTapGesture를 두었는데...&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;실행해보면?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ezgif.com-video-to-gif (15).gif&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;796&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAey66/btsyTl4M3vs/xeQeeZ1ypQuAgBIrh4dbD0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAey66/btsyTl4M3vs/xeQeeZ1ypQuAgBIrh4dbD0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAey66/btsyTl4M3vs/xeQeeZ1ypQuAgBIrh4dbD0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bAey66/btsyTl4M3vs/xeQeeZ1ypQuAgBIrh4dbD0/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;502&quot; height=&quot;796&quot; data-filename=&quot;ezgif.com-video-to-gif (15).gif&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;796&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Rectangle의 크기를 200x200으로 여유 있게 두었는데도&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;터치가 안되는걸 보실 수 있습니다..&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그럴때는 간단하게 contentShape를 추가해주면 되는데요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIc8VX/btsyVkRl0cJ/63Y0fNFVLHtv5kogqVKBP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIc8VX/btsyVkRl0cJ/63Y0fNFVLHtv5kogqVKBP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIc8VX/btsyVkRl0cJ/63Y0fNFVLHtv5kogqVKBP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIc8VX%2FbtsyVkRl0cJ%2F63Y0fNFVLHtv5kogqVKBP0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;570&quot; height=&quot;280&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;280&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;기존 코드에 contentShape에 Rectangle을 추가를 해주게 되면?&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ezgif.com-video-to-gif (16).gif&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;796&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kOkfE/btsyQSvjZvQ/dT93IVTrVI1D2w11KdbDCK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kOkfE/btsyQSvjZvQ/dT93IVTrVI1D2w11KdbDCK/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kOkfE/btsyQSvjZvQ/dT93IVTrVI1D2w11KdbDCK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/kOkfE/btsyQSvjZvQ/dT93IVTrVI1D2w11KdbDCK/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;502&quot; height=&quot;796&quot; data-filename=&quot;ezgif.com-video-to-gif (16).gif&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;796&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Text를 터치하지 않아도 제대로 터치되는걸 보실 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이 부분을 프로젝트에 유용하게 쓰실 수 있을거에요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;실제로 잊을만하면 사용되는것 같네요..ㅋㅋ&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;도움이 되었으면 좋겠네요.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;다들 즐코딩하세요. 그럼 이만~&lt;/p&gt;</description>
      <category>SwiftUI/2. 잡기술</category>
      <category>contentShape</category>
      <category>ios</category>
      <category>SwiftUI</category>
      <author>bongbong9708</author>
      <guid isPermaLink="true">https://iosangbong.tistory.com/29</guid>
      <comments>https://iosangbong.tistory.com/29#entry29comment</comments>
      <pubDate>Sun, 22 Oct 2023 02:45:21 +0900</pubDate>
    </item>
  </channel>
</rss>