<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>602호_클라우드기반 자바풀스택_중앙정보처리학원_국비교육</title>
    <link>https://jjibba.tistory.com/</link>
    <description>국비교육과정을 매일 정리한 글입니다.
25/02/25~25/08/19</description>
    <language>ko</language>
    <pubDate>Tue, 14 Jul 2026 22:32:50 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>springpark</managingEditor>
    <image>
      <title>602호_클라우드기반 자바풀스택_중앙정보처리학원_국비교육</title>
      <url>https://tistory1.daumcdn.net/tistory/2867933/attach/acdb87dc41d54f5bb2953ce8ec35b589</url>
      <link>https://jjibba.tistory.com</link>
    </image>
    <item>
      <title>후보선정</title>
      <link>https://jjibba.tistory.com/312</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bestmobileappawards.com/app-submission/holic?utm_source=badge&amp;amp;utm_medium=badge&amp;amp;utm_campaign=nominee_badge%20&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://bestmobileappawards.com/app-submission/holic?utm_source=badge&amp;amp;utm_medium=badge&amp;amp;utm_campaign=nominee_badge&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot; https://bestmobileappawards.com/pub/badges/badge-award-nominee-2026.png &quot; border=&quot;0&quot; /&gt;&lt;/p&gt;</description>
      <author>springpark</author>
      <guid isPermaLink="true">https://jjibba.tistory.com/312</guid>
      <comments>https://jjibba.tistory.com/312#entry312comment</comments>
      <pubDate>Mon, 4 May 2026 00:42:52 +0900</pubDate>
    </item>
    <item>
      <title>제가 만든 앱입니다</title>
      <link>https://jjibba.tistory.com/311</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.herokuapp.dvdholic_01a66e19fbd3.twa&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://play.google.com/store/apps/details?id=com.herokuapp.dvdholic_01a66e19fbd3.twa&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777753518347&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;holic - Google Play 앱&quot; data-og-description=&quot;영화 &amp;amp; DVD 정보 제공과 연결된 국내여행지 정보 제공&quot; data-og-host=&quot;play.google.com&quot; data-og-source-url=&quot;https://play.google.com/store/apps/details?id=com.herokuapp.dvdholic_01a66e19fbd3.twa&quot; data-og-url=&quot;https://play.google.com/store/apps/details?id=com.herokuapp.dvdholic_01a66e19fbd3.twa&amp;amp;hl=ko&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dsuDOM/dJMb8XkiW9o/OvMmdpUFapEYb3VyqWaR3k/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/EPLf1/dJMb8ZvE1ir/MjSLQwZYf636rOrUe3qTs1/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.herokuapp.dvdholic_01a66e19fbd3.twa&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://play.google.com/store/apps/details?id=com.herokuapp.dvdholic_01a66e19fbd3.twa&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dsuDOM/dJMb8XkiW9o/OvMmdpUFapEYb3VyqWaR3k/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/EPLf1/dJMb8ZvE1ir/MjSLQwZYf636rOrUe3qTs1/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300');&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;holic - Google Play 앱&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;영화 &amp;amp; DVD 정보 제공과 연결된 국내여행지 정보 제공&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;play.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;a href=&quot;https://apps.apple.com/app/dvdholic/id6759291889&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://apps.apple.com/app/dvdholic/id6759291889&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777753532777&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;DVDholic App - App Store&quot; data-og-description=&quot;Download DVDholic by junho park on the App Store. See screenshots, ratings and reviews, user tips, and more apps like DVDholic.&quot; data-og-host=&quot;apps.apple.com&quot; data-og-source-url=&quot;https://apps.apple.com/app/dvdholic/id6759291889&quot; data-og-url=&quot;https://apps.apple.com/us/app/dvdholic/id6759291889&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bnl8k7/dJMb86O5jPp/KKYjRH1G9mMTQvIKQ4yjQK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/c0QNB2/dJMb85WWVGg/DJ3k57ZGKRl27KO3vtG6eK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://apps.apple.com/app/dvdholic/id6759291889&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://apps.apple.com/app/dvdholic/id6759291889&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bnl8k7/dJMb86O5jPp/KKYjRH1G9mMTQvIKQ4yjQK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/c0QNB2/dJMb85WWVGg/DJ3k57ZGKRl27KO3vtG6eK/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;DVDholic App - App Store&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Download DVDholic by junho park on the App Store. See screenshots, ratings and reviews, user tips, and more apps like DVDholic.&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>springpark</author>
      <guid isPermaLink="true">https://jjibba.tistory.com/311</guid>
      <comments>https://jjibba.tistory.com/311#entry311comment</comments>
      <pubDate>Sun, 3 May 2026 05:25:46 +0900</pubDate>
    </item>
    <item>
      <title>kafka-command</title>
      <link>https://jjibba.tistory.com/310</link>
      <description>&lt;pre id=&quot;code_1762578438280&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 도커 컴포우즈로 카프카 컨테이너 실행
```
docker compose -f docker-compose-single-kafka.yaml up -d         
```

## 실행 중인 카프카 컨테이너 중지
```
docker compose -f docker-compose-single-kafka.yaml stop  
```

## 실행 중인 카프카 컨테이너 삭제
```
docker compose -f docker-compose-single-kafka.yaml down  
```

## 카프카 컨테이너 내부 접속 (로컬 PC에 카프카가 설치되어있지 않다면 꼭 해주기!)
로컬 PC에 카프카가 설치되어있지 않다면 kafka-topics 등 카프카 명령어를 사용할 수 없습니다.
카프카 컨테이너에 내부 접속하여 아래 나오는 명령어들을 실행합니다.
단, 로컬 PC에 카프카 바이너리를 설치하면, 설치된 경로에서 명령어를 실행할 수 있습니다.
```
docker exec -it &amp;lt;kafka-container-id&amp;gt; /bin/bash
```


## 토픽 리스트 보기
어플리케이션 실행 후 토픽이 자동 생성된 것을 확인합니다.
```
kafka-topics --list --bootstrap-server localhost:9092
```

## 알림센터 토픽 생성 (생략 가능)
어플리케이션 실행 후 토픽이 자동으로 생성되었다면 생략 가능합니다.

### comment 토픽 생성
```
kafka-topics --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic comment
```
### like 토픽 생성
```
kafka-topics --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic like
```

### follow 토픽 생성
```
kafka-topics --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic follow
```


## 알림센터 이벤트 발행

### 댓글 이벤트
```
echo '{&quot;type&quot;:&quot;ADD&quot;,&quot;postId&quot;:1,&quot;userId&quot;:2,&quot;commentId&quot;:1}' | kafka-console-producer --broker-list localhost:9092 --topic comment
```

### 좋아요 이벤트
```
echo '{&quot;type&quot;:&quot;ADD&quot;,&quot;postId&quot;:1,&quot;userId&quot;:2,&quot;createdAt&quot;:&quot;2024-01-28T18:35:24.01Z&quot;}' | kafka-console-producer --broker-list localhost:9092 --topic like
```

### 팔로우 이벤트
```
echo '{&quot;type&quot;:&quot;ADD&quot;,&quot;userId&quot;:1,&quot;targetUserId&quot;:2,&quot;createdAt&quot;:&quot;2024-01-28T18:35:24.01Z&quot;}' | kafka-console-producer --broker-list localhost:9092 --topic follow
```


## 참고) 테스트 해보기

### 테스트 토픽 생성
컨테이너 내부에서 카프카 주제를 생성합니다.

```
kafka-topics --create --topic test --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
```

### 테스트 토픽에 이벤트 발행
테스트 토픽에 이벤트를 발생시킵니다.
```
kafka-console-producer --topic test --bootstrap-server localhost:9092
```

### 테스트 토픽에서 이벤트 수신
다른 터미널에서 카프카 컨테이너에 접속하여 이벤트를 수신합니다.

```
kafka-console-consumer --topic test --bootstrap-server localhost:9092 --from-beginning
```&lt;/code&gt;&lt;/pre&gt;</description>
      <category>kafka</category>
      <author>springpark</author>
      <guid isPermaLink="true">https://jjibba.tistory.com/310</guid>
      <comments>https://jjibba.tistory.com/310#entry310comment</comments>
      <pubDate>Sat, 8 Nov 2025 14:07:26 +0900</pubDate>
    </item>
    <item>
      <title>배달앱 기사글</title>
      <link>https://jjibba.tistory.com/309</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Cursor&amp;nbsp;AI로&amp;nbsp;실현한&amp;nbsp;배달앱&amp;nbsp;개발의&amp;nbsp;새로운&amp;nbsp;패러다임&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;br /&gt;&lt;b&gt;프론트엔드와&amp;nbsp;백엔드&amp;nbsp;분리로&amp;nbsp;발견한&amp;nbsp;AI&amp;nbsp;협업의&amp;nbsp;최적해&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;◈ 서론&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;AI가&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;Cursor&amp;nbsp;AI와&amp;nbsp;같은&amp;nbsp;AI&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;AI에게&amp;nbsp;모든&amp;nbsp;것을&amp;nbsp;맡기려다&amp;nbsp;오히려&amp;nbsp;더&amp;nbsp;복잡한&amp;nbsp;문제에&amp;nbsp;직면하고&amp;nbsp;있다. &lt;br /&gt;이&amp;nbsp;글의&amp;nbsp;핵심&amp;nbsp;인사이트는&amp;nbsp;명확하다.&amp;nbsp;AI와의&amp;nbsp;협업에서&amp;nbsp;가장&amp;nbsp;중요한&amp;nbsp;것은&amp;nbsp;역할&amp;nbsp;분담이다.&amp;nbsp;필자가&amp;nbsp;3개월간&amp;nbsp;고군분투하며&amp;nbsp;완성한&amp;nbsp;배달앱&amp;nbsp;'Foodie(먹깨비)'&amp;nbsp;프로젝트를&amp;nbsp;통해,&amp;nbsp;AI&amp;nbsp;도구를&amp;nbsp;활용한&amp;nbsp;효율적인&amp;nbsp;개발&amp;nbsp;프로세스와&amp;nbsp;그&amp;nbsp;과정에서&amp;nbsp;얻은&amp;nbsp;실질적&amp;nbsp;노하우를&amp;nbsp;공유하고자&amp;nbsp;한다. &lt;br /&gt;이&amp;nbsp;경험담이&amp;nbsp;AI&amp;nbsp;시대의&amp;nbsp;개발자들에게&amp;nbsp;실무적&amp;nbsp;가이드라인을&amp;nbsp;제시하고,&amp;nbsp;무엇보다&amp;nbsp;'어떻게&amp;nbsp;AI와&amp;nbsp;협업할&amp;nbsp;것인가'에&amp;nbsp;대한&amp;nbsp;구체적&amp;nbsp;답변을&amp;nbsp;제공하는&amp;nbsp;것이&amp;nbsp;이&amp;nbsp;글의&amp;nbsp;목적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;▣ 본론&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;1.&amp;nbsp;아키텍처&amp;nbsp;분리의&amp;nbsp;결정적&amp;nbsp;순간&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;프로젝트&amp;nbsp;초기,&amp;nbsp;필자는&amp;nbsp;많은&amp;nbsp;개발자들과&amp;nbsp;같은&amp;nbsp;실수를&amp;nbsp;범했다.&amp;nbsp;Cursor&amp;nbsp;AI에게&amp;nbsp;React로&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;&quot;배가&amp;nbsp;산으로&amp;nbsp;가는&quot;&amp;nbsp;상황에&amp;nbsp;직면했다. &lt;br /&gt;전환점은&amp;nbsp;아키텍처를&amp;nbsp;명확히&amp;nbsp;분리한&amp;nbsp;순간이었다.&amp;nbsp;Java&amp;nbsp;11과&amp;nbsp;Spring&amp;nbsp;Boot&amp;nbsp;2.7.9&amp;nbsp;기반의&amp;nbsp;백엔드를&amp;nbsp;PostgreSQL&amp;nbsp;데이터베이스와&amp;nbsp;함께&amp;nbsp;구축하고,&amp;nbsp;12개의&amp;nbsp;RESTful&amp;nbsp;API를&amp;nbsp;Swagger로&amp;nbsp;문서화하여&amp;nbsp;200&amp;nbsp;OK&amp;nbsp;응답을&amp;nbsp;확인했다.&amp;nbsp;이때&amp;nbsp;중요한&amp;nbsp;것은&amp;nbsp;백엔드에서&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;모든&amp;nbsp;일을&amp;nbsp;완료했다는&amp;nbsp;확신이었다. &lt;br /&gt;현재&amp;nbsp;운영&amp;nbsp;중인&amp;nbsp;백엔드&amp;nbsp;API(https://mukkai-backend-api-f9dc2d5aad02.herokuapp.com/)은&amp;nbsp;안정적으로&amp;nbsp;작동하며,&amp;nbsp;이는&amp;nbsp;3개월간의&amp;nbsp;밤샘&amp;nbsp;작업의&amp;nbsp;결실이었다.&amp;nbsp;하지만&amp;nbsp;이&amp;nbsp;고통스러운&amp;nbsp;과정이&amp;nbsp;있었기에&amp;nbsp;이후&amp;nbsp;AI와의&amp;nbsp;협업이&amp;nbsp;순조로울&amp;nbsp;수&amp;nbsp;있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;2.&amp;nbsp;AI&amp;nbsp;도구&amp;nbsp;조합의&amp;nbsp;시너지&amp;nbsp;효과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;백엔드가&amp;nbsp;안정화된&amp;nbsp;후,&amp;nbsp;프론트엔드&amp;nbsp;개발에서&amp;nbsp;AI&amp;nbsp;도구의&amp;nbsp;진가가&amp;nbsp;드러났다.&amp;nbsp;초기에는&amp;nbsp;ChatGPT와&amp;nbsp;Bootstrap,&amp;nbsp;Vanilla&amp;nbsp;JavaScript로&amp;nbsp;시작했지만,&amp;nbsp;결과물은&amp;nbsp;조잡하기&amp;nbsp;그지없었다.&amp;nbsp;Ajax와&amp;nbsp;fetch&amp;nbsp;함수들이&amp;nbsp;뒤섞인&amp;nbsp;코드는&amp;nbsp;기능은&amp;nbsp;작동했지만,&amp;nbsp;시각적&amp;nbsp;완성도가&amp;nbsp;떨어져&amp;nbsp;전문&amp;nbsp;프론트엔드&amp;nbsp;개발자에게&amp;nbsp;맡기고&amp;nbsp;싶을&amp;nbsp;정도였다. &lt;br /&gt;게임&amp;nbsp;체인저는&amp;nbsp;Cursor&amp;nbsp;AI와&amp;nbsp;Claude&amp;nbsp;Desktop의&amp;nbsp;조합이었다.&amp;nbsp;특히&amp;nbsp;Magic&amp;nbsp;MCP(월&amp;nbsp;20달러)를&amp;nbsp;활용한&amp;nbsp;디자인&amp;nbsp;선택&amp;nbsp;과정은&amp;nbsp;인상적이었다.&amp;nbsp;5가지&amp;nbsp;디자인&amp;nbsp;옵션&amp;nbsp;중&amp;nbsp;하나를&amp;nbsp;선택하는&amp;nbsp;방식으로&amp;nbsp;UI/UX의&amp;nbsp;품질을&amp;nbsp;대폭&amp;nbsp;향상시킬&amp;nbsp;수&amp;nbsp;있었다. &lt;br /&gt;현재&amp;nbsp;서비스&amp;nbsp;중인&amp;nbsp;프론트엔드(&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;https://mukkai-delivery-fe-0bdb8680ab0d.herokuapp.com)는&amp;nbsp;모바일&amp;nbsp;우선&amp;nbsp;반응형&amp;nbsp;디자인으로&amp;nbsp;구현되어,&amp;nbsp;스마트폰과&amp;nbsp;PC&amp;nbsp;모두에서&amp;nbsp;최적화된&amp;nbsp;사용자&amp;nbsp;경험을&amp;nbsp;제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1759417322828&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;Foodie - 맛있는 음식을 빠르게&quot; data-og-description=&quot;&quot; data-og-host=&quot;mukkai-delivery-fe-0bdb8680ab0d.herokuapp.com&quot; data-og-source-url=&quot;https://mukkai-delivery-fe-0bdb8680ab0d.herokuapp.com/)는&quot; data-og-url=&quot;https://mukkai-delivery-fe-0bdb8680ab0d.herokuapp.com/%29%EB%8A%94&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://mukkai-delivery-fe-0bdb8680ab0d.herokuapp.com/)는&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mukkai-delivery-fe-0bdb8680ab0d.herokuapp.com/)는&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;Foodie - 맛있는 음식을 빠르게&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mukkai-delivery-fe-0bdb8680ab0d.herokuapp.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;3.&amp;nbsp;AI&amp;nbsp;협업의&amp;nbsp;핵심&amp;nbsp;원칙들&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;경험을&amp;nbsp;통해&amp;nbsp;도출한&amp;nbsp;AI&amp;nbsp;협업의&amp;nbsp;핵심&amp;nbsp;원칙들은&amp;nbsp;다음과&amp;nbsp;같다: &lt;br /&gt;명확한&amp;nbsp;경계&amp;nbsp;설정:&amp;nbsp;Cursor&amp;nbsp;AI가&amp;nbsp;백엔드&amp;nbsp;코드를&amp;nbsp;수정하려&amp;nbsp;할&amp;nbsp;때는&amp;nbsp;오직&amp;nbsp;Heroku&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;AI의&amp;nbsp;작업&amp;nbsp;범위를&amp;nbsp;명확히&amp;nbsp;한정하는&amp;nbsp;효과를&amp;nbsp;가져왔다. &lt;br /&gt;반복&amp;nbsp;학습의&amp;nbsp;활용:&amp;nbsp;AI는&amp;nbsp;아직&amp;nbsp;발전&amp;nbsp;초기&amp;nbsp;단계로,&amp;nbsp;같은&amp;nbsp;실수를&amp;nbsp;몇&amp;nbsp;번&amp;nbsp;반복하는&amp;nbsp;경향이&amp;nbsp;있다.&amp;nbsp;하지만&amp;nbsp;이를&amp;nbsp;부정적으로&amp;nbsp;보지&amp;nbsp;않고,&amp;nbsp;패턴을&amp;nbsp;파악하여&amp;nbsp;더&amp;nbsp;정확한&amp;nbsp;지시를&amp;nbsp;내리는&amp;nbsp;방향으로&amp;nbsp;접근했다. &lt;br /&gt;단순한&amp;nbsp;질문의&amp;nbsp;힘:&amp;nbsp;복잡한&amp;nbsp;AI&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;AI&amp;nbsp;도구의&amp;nbsp;접근성을&amp;nbsp;크게&amp;nbsp;높여주는&amp;nbsp;요소였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;4.&amp;nbsp;실제&amp;nbsp;서비스&amp;nbsp;구현과&amp;nbsp;결과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;완성된&amp;nbsp;배달앱은&amp;nbsp;회원가입,&amp;nbsp;로그인,&amp;nbsp;메뉴&amp;nbsp;선택,&amp;nbsp;주문&amp;nbsp;등&amp;nbsp;핵심&amp;nbsp;기능을&amp;nbsp;모두&amp;nbsp;갖추고&amp;nbsp;있다.&amp;nbsp;특히&amp;nbsp;주목할&amp;nbsp;점은&amp;nbsp;개발&amp;nbsp;과정에서의&amp;nbsp;학습&amp;nbsp;곡선이다.&amp;nbsp;백엔드&amp;nbsp;개발에&amp;nbsp;3개월이&amp;nbsp;소요된&amp;nbsp;반면,&amp;nbsp;프론트엔드는&amp;nbsp;AI의&amp;nbsp;도움으로&amp;nbsp;훨씬&amp;nbsp;짧은&amp;nbsp;시간&amp;nbsp;내에&amp;nbsp;완성할&amp;nbsp;수&amp;nbsp;있었다. &lt;br /&gt;기술적&amp;nbsp;구현&amp;nbsp;측면에서는&amp;nbsp;Java&amp;nbsp;11과&amp;nbsp;Spring&amp;nbsp;Boot&amp;nbsp;2.7.9의&amp;nbsp;안정성,&amp;nbsp;PostgreSQL의&amp;nbsp;데이터&amp;nbsp;무결성,&amp;nbsp;그리고&amp;nbsp;React&amp;nbsp;기반&amp;nbsp;프론트엔드의&amp;nbsp;반응성이&amp;nbsp;조화를&amp;nbsp;이루어&amp;nbsp;완전한&amp;nbsp;서비스를&amp;nbsp;구축할&amp;nbsp;수&amp;nbsp;있었다.&amp;nbsp;특히&amp;nbsp;Swagger를&amp;nbsp;통한&amp;nbsp;API&amp;nbsp;문서화는&amp;nbsp;프론트엔드와&amp;nbsp;백엔드&amp;nbsp;간의&amp;nbsp;명확한&amp;nbsp;인터페이스를&amp;nbsp;제공하여&amp;nbsp;개발&amp;nbsp;효율성을&amp;nbsp;크게&amp;nbsp;높였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;5.&amp;nbsp;AI&amp;nbsp;개발의&amp;nbsp;미래&amp;nbsp;전망&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이&amp;nbsp;프로젝트를&amp;nbsp;통해&amp;nbsp;확인할&amp;nbsp;수&amp;nbsp;있었던&amp;nbsp;것은&amp;nbsp;AI가&amp;nbsp;개발자를&amp;nbsp;대체하는&amp;nbsp;것이&amp;nbsp;아니라,&amp;nbsp;개발자의&amp;nbsp;역량을&amp;nbsp;증폭시키는&amp;nbsp;도구라는&amp;nbsp;점이다.&amp;nbsp;중요한&amp;nbsp;것은&amp;nbsp;AI에게&amp;nbsp;무엇을&amp;nbsp;맡기고,&amp;nbsp;무엇을&amp;nbsp;직접&amp;nbsp;관리할지&amp;nbsp;결정하는&amp;nbsp;개발자의&amp;nbsp;판단력이다. &lt;br /&gt;특히&amp;nbsp;복잡한&amp;nbsp;비즈니스&amp;nbsp;로직이나&amp;nbsp;데이터베이스&amp;nbsp;설계는&amp;nbsp;여전히&amp;nbsp;개발자의&amp;nbsp;깊이&amp;nbsp;있는&amp;nbsp;이해가&amp;nbsp;필요한&amp;nbsp;영역이며,&amp;nbsp;AI는&amp;nbsp;반복적인&amp;nbsp;코드&amp;nbsp;작성이나&amp;nbsp;UI&amp;nbsp;구현에서&amp;nbsp;그&amp;nbsp;진가를&amp;nbsp;발휘한다는&amp;nbsp;것을&amp;nbsp;확인했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;결론&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;3개월간의&amp;nbsp;배달앱&amp;nbsp;개발&amp;nbsp;여정을&amp;nbsp;통해&amp;nbsp;얻은&amp;nbsp;가장&amp;nbsp;중요한&amp;nbsp;교훈은&amp;nbsp;AI와의&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;AI의&amp;nbsp;도움을&amp;nbsp;받아&amp;nbsp;효율적으로&amp;nbsp;개발하는&amp;nbsp;방식이&amp;nbsp;현재로서는&amp;nbsp;가장&amp;nbsp;실용적인&amp;nbsp;접근법임을&amp;nbsp;확인했다. &lt;br /&gt;또한&amp;nbsp;AI&amp;nbsp;도구의&amp;nbsp;조합(Cursor&amp;nbsp;AI&amp;nbsp;+&amp;nbsp;Claude&amp;nbsp;Desktop&amp;nbsp;+&amp;nbsp;Magic&amp;nbsp;MCP)을&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;AI의&amp;nbsp;도움은&amp;nbsp;개발자의&amp;nbsp;약점을&amp;nbsp;보완하는&amp;nbsp;강력한&amp;nbsp;도구가&amp;nbsp;될&amp;nbsp;수&amp;nbsp;있음을&amp;nbsp;보여주었다. &lt;br /&gt;독자들에게&amp;nbsp;전하고&amp;nbsp;싶은&amp;nbsp;핵심&amp;nbsp;메시지는&amp;nbsp;이것이다:&amp;nbsp;AI&amp;nbsp;시대의&amp;nbsp;개발자는&amp;nbsp;모든&amp;nbsp;것을&amp;nbsp;AI에게&amp;nbsp;맡기려&amp;nbsp;하지&amp;nbsp;말고,&amp;nbsp;AI와&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;AI가&amp;nbsp;담당하는&amp;nbsp;역할&amp;nbsp;분담이&amp;nbsp;현재로서는&amp;nbsp;가장&amp;nbsp;효과적인&amp;nbsp;개발&amp;nbsp;방법론이다. &lt;br /&gt;이러한&amp;nbsp;접근법을&amp;nbsp;통해&amp;nbsp;개인&amp;nbsp;개발자도&amp;nbsp;과거에는&amp;nbsp;팀&amp;nbsp;단위에서나&amp;nbsp;가능했던&amp;nbsp;완성도&amp;nbsp;높은&amp;nbsp;서비스를&amp;nbsp;구축할&amp;nbsp;수&amp;nbsp;있으며,&amp;nbsp;이는&amp;nbsp;소프트웨어&amp;nbsp;개발&amp;nbsp;생태계에&amp;nbsp;새로운&amp;nbsp;가능성을&amp;nbsp;제시한다고&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있다.&amp;nbsp;AI는&amp;nbsp;우리의&amp;nbsp;경쟁자가&amp;nbsp;아니라&amp;nbsp;가장&amp;nbsp;강력한&amp;nbsp;협업&amp;nbsp;파트너임을,&amp;nbsp;이&amp;nbsp;프로젝트를&amp;nbsp;통해&amp;nbsp;다시&amp;nbsp;한&amp;nbsp;번&amp;nbsp;확인할&amp;nbsp;수&amp;nbsp;있었다. &lt;br /&gt;&lt;br /&gt;본&amp;nbsp;원고의&amp;nbsp;프로젝트는&amp;nbsp;현재&amp;nbsp;운영&amp;nbsp;중이며,&amp;nbsp;실제&amp;nbsp;회원가입과&amp;nbsp;주문&amp;nbsp;테스트가&amp;nbsp;가능합니다.&amp;nbsp;관심&amp;nbsp;있는&amp;nbsp;독자분들은&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;https://mukkai-delivery-fe-0bdb8680ab0d.herokuapp.com/에서&amp;nbsp;직접&amp;nbsp;경험해보실&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;figure id=&quot;og_1759417093619&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;Foodie - 맛있는 음식을 빠르게&quot; data-og-description=&quot;&quot; data-og-host=&quot;mukkai-delivery-fe-0bdb8680ab0d.herokuapp.com&quot; data-og-source-url=&quot;https://mukkai-delivery-fe-0bdb8680ab0d.herokuapp.com/에서&quot; data-og-url=&quot;https://mukkai-delivery-fe-0bdb8680ab0d.herokuapp.com/%EC%97%90%EC%84%9C&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://mukkai-delivery-fe-0bdb8680ab0d.herokuapp.com/에서&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mukkai-delivery-fe-0bdb8680ab0d.herokuapp.com/에서&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;Foodie - 맛있는 음식을 빠르게&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mukkai-delivery-fe-0bdb8680ab0d.herokuapp.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>배달앱</category>
      <author>springpark</author>
      <guid isPermaLink="true">https://jjibba.tistory.com/309</guid>
      <comments>https://jjibba.tistory.com/309#entry309comment</comments>
      <pubDate>Thu, 2 Oct 2025 23:51:07 +0900</pubDate>
    </item>
    <item>
      <title>타입스크립트의 타입</title>
      <link>https://jjibba.tistory.com/308</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vnngk/btsPLHP7Gk4/LE85IToN4JII1IUXSf56x0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vnngk/btsPLHP7Gk4/LE85IToN4JII1IUXSf56x0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vnngk/btsPLHP7Gk4/LE85IToN4JII1IUXSf56x0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvnngk%2FbtsPLHP7Gk4%2FLE85IToN4JII1IUXSf56x0%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;512&quot; height=&quot;512&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #000000;&quot; contenteditable=&quot;false&quot; href=&quot;https://www.typescriptlang.org/docs/handbook/intro.html&quot; data-token-index=&quot;0&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #73726e;&quot;&gt;typescriptlang&lt;/span&gt;&lt;span&gt;Handbook - The TypeScript Handbook&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;​&lt;/p&gt;
&lt;figure id=&quot;og_1754588426039&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;Handbook - The TypeScript Handbook&quot; data-og-description=&quot;Your first step to learn TypeScript&quot; data-og-host=&quot;www.typescriptlang.org&quot; data-og-source-url=&quot;https://www.typescriptlang.org/docs/handbook/intro.html&quot; data-og-url=&quot;https://www.typescriptlang.org/docs/handbook/intro.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.typescriptlang.org/docs/handbook/intro.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.typescriptlang.org/docs/handbook/intro.html&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;Handbook - The TypeScript Handbook&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Your first step to learn TypeScript&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.typescriptlang.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #000000;&quot; contenteditable=&quot;false&quot; href=&quot;https://www.typescriptlang.org/docs/handbook/intro.html&quot; data-token-index=&quot;0&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #73726e;&quot;&gt;typescriptlang&lt;/span&gt;&lt;span&gt;Handbook - The TypeScript Handbook&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;​&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.typescriptlang.org/ko/docs/handbook/2/basic-types.html&quot;&gt;https://www.typescriptlang.org/ko/docs/handbook/2/basic-types.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1754588560285&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;Documentation - The Basics&quot; data-og-description=&quot;TypeScript를 배우는 첫 걸음: 기본 타입.&quot; data-og-host=&quot;www.typescriptlang.org&quot; data-og-source-url=&quot;https://www.typescriptlang.org/ko/docs/handbook/2/basic-types.html&quot; data-og-url=&quot;https://www.typescriptlang.org/ko/docs/handbook/2/basic-types.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.typescriptlang.org/ko/docs/handbook/2/basic-types.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.typescriptlang.org/ko/docs/handbook/2/basic-types.html&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;Documentation - The Basics&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;TypeScript를 배우는 첫 걸음: 기본 타입.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.typescriptlang.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;검색 : 타입스크립트의 타입 계층 구조 - 이미지 검색&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1754588636870&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;★ 기본 타입&lt;/code&gt;&lt;/pre&gt;
&lt;p 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;1. 원시 타입(Primitive Type)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; a. 통시에 한 개의 값만(숫자만 숫자, 문자열 이면 문자열만,..) 저장할 수 있는 타입틀&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; b. number, sring, boolean&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 1-1.number 타입&lt;/p&gt;
&lt;pre id=&quot;code_1754589040262&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let num1:number = 123;     // 타입 주석 사용
let num2:number = -123;
let num3:number = 0.123;
let num4:number = -0.123;
let num5:number = Infinity;
let num6:number = -Infinity;
let num7:number = NaN;

num1.toFixed(2);  //소수이하 2자리
num1.toFixed(); //소수 없이, 정수만
num1 = &quot;hi&quot;;  //에러 발생
num2.toLowerCase(); //에러 발생&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● 타입 주석 또는 타입어노테이션 : 변수 이름 뒤에 콜론(:)과 함께 변수의 타입을 정의하는&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;1-2.string 타입&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 문자열 타입, &quot;&quot;,&quot;,백틱,템플릿 리터럴로 만든 모든 문자열을 포함&lt;/p&gt;
&lt;pre id=&quot;code_1754589160679&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//string
let str1 : string =&quot;hello&quot;;
let str2 : string ='hello';
let str3 : string =`hello`;
let str4 : string =`hello ${num1}`;&lt;/code&gt;&lt;/pre&gt;
&lt;p 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;1-3. boolean 타입&lt;/p&gt;
&lt;pre id=&quot;code_1754589195448&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//boolean
let bool1 :boolean = true;
let bool2 :boolean = false;&lt;/code&gt;&lt;/pre&gt;
&lt;p 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;1-4. null 타입&lt;/p&gt;
&lt;pre id=&quot;code_1754589232410&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//null
let nullable : null = null;

//let numA : number = null;  //타입스크립트는 null 타입이 따로 있어 오류
              // 이를 해결하기 위해 tsconfig.json에  &quot;strictNullChecks&quot;: false 추가
              // strictNullChecks 는 strict의 하위 옵션으로  strict 가 true로
              // 설정되어 있으면 이것도 true가 되며 false 로 설정되어 있으면 
              // 자동 false가 됨
              // 현재는 strict 모두를 true로 해 놓았기에 strictNullChecks 도  true 임&lt;/code&gt;&lt;/pre&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;● strictNullChecks 는 strict의 하위 옵션으로 strict 가 true로 설정되어 있으면 이것도 true가 되며 false 로 설정되어 있으면 자동&amp;nbsp; &amp;nbsp; &amp;nbsp;false가 됨, 현재는 strict 모두를 true로 해 놓았기에 strictNullChecks 도 true 임&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● strict 를 활성화 해 놓으면 strict~~ 모든 플래그를 동시에 활성화하게&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;1-5. undefined 타입&lt;/p&gt;
&lt;pre id=&quot;code_1754589318396&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//undifined
let undefinded_test : undefined = undefined;&lt;/code&gt;&lt;/pre&gt;
&lt;p 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;2. 리터럴 타입&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; ● 하나의 값만 포함하도록 값 자체로 만들어진 타입&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; ● 값 그 자체로 정의&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; ● 해당 값 이외에는 담을 수 없&lt;/p&gt;
&lt;pre id=&quot;code_1754589419555&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//리터럴 타입 : 값 그 자체로 정의
let numA :10 = 10;
//numA = 20;  // 10외는 넣을 수 없음

let strA :&quot;hello&quot; = &quot;hello&quot;;

let boolA : true = true;&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;pre id=&quot;code_1754589481814&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;※ 배열과 튜플&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;1. 배열(Array)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 변수 : 배열 요소 타입[] = [값,...];&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● Array&amp;lt;배열_요소_타입&amp;gt; : 제레닉&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 다양한 타입을 갖는 배열 요소 =&amp;gt; 변수:(타입1|타입2|..) = [타입1값,타입2값,....)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ○ 유니온 타입 : 바(|), 여러 요소 중 하나를 만족하는 타입을 의미&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 다차원 배열&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ○ 변수:타입[][] = [[요소1,요소2,.. ],[ 요소1,요소2,....]];&lt;/p&gt;
&lt;pre id=&quot;code_1754589799644&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//배열
let numArr: number[]=[1,2,3];
let strArr: string[]=[&quot;사과&quot;,&quot;딸기&quot;,&quot;복숭아&quot;];

let boolArr:Array&amp;lt;boolean&amp;gt; =[true,false,true]; //제레닉

//배열에 들어가는 요소들의 타입이 다양할 경우  - 유니온(Union) 타입
let multiArr:(number | string)[] = [1, &quot;hello&quot;];

//다차원 배열의 타입을 정의하는 방법
let doubleArr:number[][] =[
  [1,2,3],
  [4,5]
];

//--------------------
let numArr : number[] = [1,2,3,4];
console.log(numArr[2]);

let num_str:(number | string)[ ] = [1, &quot;사과&quot;];
num_str.push(3);
num_str.push(5);
num_str.push(&quot;딸기&quot;);
num_str.push(&quot;복숭아&quot;);
console.log(num_str);&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;- tsx src/파일명. ts&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;- tsc src/파일명.ts -&amp;gt; node src/파일명.js&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;2. 튜플(Tuple) 타입&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 타입스크립트에서 만 제공&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 길이와 타입이 고정된 배열&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 다만 js로 변경되면 튜플도 일반 배열로 변환되어 처리됨&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 따라서 배열 메서드인 push나 pop을 이용해서 고정된 길이를 무시하고 요소를 추가하거나 삭제할 수 있음에 주의 필요&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 튜플을 사용하면 실수로 배열의 위치를 변경해서 저장하는 에러를 막을 수 있음&lt;/p&gt;
&lt;pre id=&quot;code_1754599793792&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//튜플 타입 - 타입스크립트에서만 제공
//튜플 - 길이와 타입이 고정된 배열
let tup1:[number,number] =[1,2];
let tup2:[number,string] =[1,'hello'];

tup1 = [3, 4];
// tup1=[3,4,5]; //에러, 튜플
// tup1 = [&quot;가나&quot;,&quot;다라&quot;]; //에러

// tup2 = [3, 4]; //에러
// tup2 = [&quot;가&quot;, 3]; //에러
tup2 = [5, &quot;대한&quot;];

let tup3:[number,string,boolean] = [1, &quot;사과&quot;, true];
tup1.push(4);  //가능,  주의) 자바스크립트로 변환할 때 그냥 배열로 처리하기 때문에 가능
tup1.pop();
tup1.pop();
tup1.pop();

//튜플 상황-인덱스에 넣어야 할 타입이 정해져 있을 때
const user:[string,number][]=[
  [&quot;홍길동&quot;,1],
  [&quot;이가&quot;,2],
  [&quot;홍동&quot;,3],
  [&quot;박박&quot;,4],
  // [6, &quot;최최&quot;] //오류
];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1754599826174&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;※ 객체&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;1. object로 정의하기&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; a. object 타입은 단순 값이 객체임을 표현하는 것 외에는 아무런 정보도 제공하지 않는 타임&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; b. 이 타입은 객체의 프로퍼티(Property)에 대한 정보를 전혀 가지고 있지 않음&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; c. 따라서 프로퍼티(Property)에 접근하려고 하면 오류 발생&lt;/p&gt;
&lt;pre id=&quot;code_1754599953778&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let user:object={
  id:1,
  name:&quot;홍길동&quot;,
};

user.id;  //에러 발생, 단지 object는 객체임을 표현할 뿐
        // 객체의 프로퍼티에 대한 정보가 없음음&lt;/code&gt;&lt;/pre&gt;
&lt;p 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;2. 객체 리터럴 타입&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; a. 중괄호({})를 열고 객체가 갖는 프로퍼티(Property)를 직접 나열해 만드는 타입&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; b. 변수의 타입을 객체의 리터럴 타입으로 정의하면 타입 내에 정의되어 있는 프로퍼티(Property)에 이상 없이 접근할 수 있음&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; c. 프로퍼티에 마우스 올려 놓으면 타입이 보임&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; d. 객체의 타입을 정의할 때 프로퍼티를 기준으로 객체의 구조를 정의하듯이 타입을 정의(구조적 타입 시스템)&lt;/p&gt;
&lt;pre id=&quot;code_1754600124901&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let user: {   //객체 리터럴 타입, 구조적 타입 객체
  id:number; 
  name:string;
}={
  id:1,
  name:&quot;홍길동&quot;,

};
console.log(user.id);
console.log(user.name);

user ={
  id : 2,
  name: &quot;김자바&quot;,
}

console.log(user.id);
console.log(user.name);&lt;/code&gt;&lt;/pre&gt;
&lt;p 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;3. 선택적 프로퍼티(Optional Property)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 프로퍼티가 있어도 되고 없어도 되는 선택적 상황에서 사용&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 프로퍼티 이름 뒤에 ?를 붙여서 나타냄&lt;/p&gt;
&lt;pre id=&quot;code_1754600207464&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let user: {   //객체 리터럴 타입, 구조적 타입 객체체
  id?:number; //? 있어도 되고 없어도 되는 프로퍼티, 옵셔널 프로퍼티
            // id를 지정할 것이면 숫자값이어야 함함
  name:string;
}
={
  id:1,
  name:&quot;홍길동&quot;,

};
user.id;

user={
  name:&quot;홍홍홍&quot;,
};&lt;/code&gt;&lt;/pre&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;4. 읽기 전용 프로퍼티(Readonly Property)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 프로퍼티 이름 앞에 'readonly' 키워드를 붙여 줌&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 의도치 않은 프로퍼티의 값 수정을 방지하기 위해 사용&lt;/p&gt;
&lt;pre id=&quot;code_1754600297159&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let config:{
  readonly apiKey : string;
} ={
  apiKey : &quot;My Test Api Key&quot;,
};

// config.apiKey =&quot;aaaa &quot;; //에러, 읽기 전용이므로&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1754600342264&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;▶ 타입 별칭 및 인덱스 시그니처&lt;/code&gt;&lt;/pre&gt;
&lt;p 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;1. 타입 별칭&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 타입 별칭을 이용하면 변수를 선언하듯 타입을 별도로 정의할 수 있음&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 형시) type 타입명 = { 타입선언};&lt;/p&gt;
&lt;pre id=&quot;code_1754600402097&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;type User={  //객체 타입 정의, type 타입명 ={ };
  id: number;   //프로퍼티:number
  name:string;
  nickname:string;
  birth:string;
  bio:string;
  location:string;
};

let user:User={ // 타입 별칭 사용  let 객체명:타입별칭={ }
  id: 1,
  name:&quot;이바다&quot;,
  nickname:&quot;바다신&quot;,
  birth: &quot;1999-01-02&quot;,
  bio:&quot;Hello&quot;,
  location:&quot;서울 강남&quot;
};

let user2:User={
  id: 2,
  name:&quot;이하늘&quot;,
  nickname:&quot;sky&quot;,
  birth: &quot;1999-03-01&quot;,
  bio:&quot;ㅋㅋㅋㅋㅋ&quot;,
  location:&quot;역삼&quot;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● 동일한 스코프 내에서는 중복된 이름으로 타입 별칭 선언하면 에러 변수 선언과 유사&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● 그러나 함수 내에 정의된 별칭과 함수 외부에 정의된 타입 별칭 처럼 스코프가 다르면 동일해도 됨&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;2. 인덱스 시그니처&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 객체 타입을 유연하게 정의할 수 있도록 돕는 특수한 문법&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 형식) [key:type] : value_type;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; ex) [key:string]:number ; &amp;rArr; key는 string 타입이고 value는 number 타입인 모든 프로퍼티를 포함&lt;/p&gt;
&lt;pre id=&quot;code_1754600516160&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;type ContryCodes={
  [key : string] : string;
};

let countryCodes:ContryCodes={
  Korea : &quot;ko&quot;,
  UnitedState:&quot;us&quot;,
  Japan : &quot;jp&quot;,
};

//아래와 같이 
// 인덱스 시그니처 타입은 규칙을 위반하지만 않으면 에러 안 생김
let countryNmberCodes :CountryNumberCodes ={};

let countryNmberCodes :CountryNumberCodes ={
  Korea:410,
  UnitedState: 840,
  Japan : 392,
};&lt;/code&gt;&lt;/pre&gt;
&lt;p 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;pre id=&quot;code_1754600543355&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;type CountryNumberCodes={
  [key:string]:number;
  Korea:number;
};

let countryNmberCodes :CountryNumberCodes ={
  Korea:410,
};


// 그러나 위의 Korea:type과 value타입은 반드시 같아야 함
type CountryNumberCodes={
  [key:string]:number;
  //Korea:string; //에러, value 타입이 number이므로 여기도
  // number 타입이거나 호환되는 타입이어야 함
  Korea:number;
};

let countryNmberCodes :CountryNumberCodes ={
  //Korea:&quot;ko&quot; , //에러, number 타입이어야 함
  Korea:1;
};&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;pre id=&quot;code_1754600599726&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;☎  열거형 타입&lt;/code&gt;&lt;/pre&gt;
&lt;p 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; &amp;nbsp; &amp;nbsp; ● 자바스크립트에는 존재하지 않고 오직 타입스크립트에서만 사용할 수 있는 특별한 타입&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● enum은 컴파일될 때 다른 타입들 처럼 사라지지 않고 자바스크립트 객체로 변환됨&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● enum 타입에 값을 직접할당 하지 않으면 0부터 시작하고 1씩 증가함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1754600683612&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 숫자형 열거 타입
enum Role {
  ADMIN,  // 0 할당
  USER,  //1 할당
  GEUEST, //2 할당
};

//
// enum Role {
//   ADMIN=0,
//   USER=1,
//   GEUEST=2,
// };

//
// enum Role {
//   ADMIN=10, // 10 
//   USER,    // 11
//   GEUEST,   // 12
// };


//문자열 열거형
enum Language{
  korean = &quot;ko&quot;,
  english = &quot;en&quot;,
};

let user1 = {
  name:&quot;홍길동&quot;,
  role:Role.ADMIN,

};

let user2 = {
  name:&quot;김하늘&quot;,
  role:Role.USER,
  language : Language.korean,
};

let user3 = {
  name:&quot;이바다&quot;,
  role:Role.GEUEST,
  language : Language.english,
};&lt;/code&gt;&lt;/pre&gt;
&lt;p 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;● 위 코드를 js 파일로 변환 ( tsc src/test.ts )&lt;/p&gt;
&lt;pre id=&quot;code_1754600727084&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var Role;
(function (Role) {
    Role[Role[&quot;ADMIN&quot;] = 0] = &quot;ADMIN&quot;;
    Role[Role[&quot;USER&quot;] = 1] = &quot;USER&quot;;
    Role[Role[&quot;GUEST&quot;] = 2] = &quot;GUEST&quot;;
})(Role || (Role = {}));
var Language;
(function (Language) {
    Language[&quot;korean&quot;] = &quot;ko&quot;;
    Language[&quot;english&quot;] = &quot;en&quot;;
})(Language || (Language = {}));
;
var user1 = {
    name: &quot;홍길동&quot;,
    role: Role.ADMIN,
};
var user2 = {
    name: &quot;김하늘&quot;,
    role: Role.USER,
    language: Language.korean,
};
var user3 = {
    name: &quot;이바다&quot;,
    role: Role.GUEST,
    language: Language.english,
};&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;pre id=&quot;code_1754600776260&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;★ Any와 Unknown 타입&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;1. Any 타입&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 타입스크립트에서만 제공되는 특별한 타입으로 타입 검사를 받지 않는 특수한 치트키 타입&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● any 타입은 어떠한 타입 검사도 받지 않기 때문에 아무 타입의 값이나 범용적으로 담아 사용할 수 있고, 다양한 타입의 메서&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;드도 마음대로 호출해서 사용해도 문제가 되지 않음&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● any 타입의 값은 어떤 타입으로 정의된 변수던 문제 없이 다 할당할 수 있음&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● any는 되도록 사용하지 않은 것이 좋음, 상당히 위험한 타입임, 타입 검사는 하지 않지만 runtime에 오류를 발생시킴&lt;/p&gt;
&lt;pre id=&quot;code_1754600898381&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//any
// 특정 변수의 타입을 확실히 모를 때 사용
let anyVar:any=10;
anyVar = &quot;hello&quot;;

anyVar = true;
anyVar ={};
anyVar=() =&amp;gt; { };

anyVar.toUpperCase();
anyVar.toFixed();

let num :number = 10;
num = anyVar;&lt;/code&gt;&lt;/pre&gt;
&lt;p 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;2. Unknown 타입&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● any 타입과 비슷하지만 보다 안전한 타입&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● unknown 타입의 변수는 어떤 타입의 값이든 다 저장할 수 있음&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 그러나 unknown 타입의 값은 어떤 타입의 변수에도 저장할 수 없음&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● unknown 타입의 값은 어떤 연산에도 참여할 수 없으며, 어떤 메서드로 사용할 수 없음&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 모든 값을 할당 받을 수 있지만, 어떤 타입의 변수에도 할당할 수 없고, 모든 연산에 참가할 수 없게 됨&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 즉 모든 값을 저장만 할 수 있음&lt;/p&gt;
&lt;pre id=&quot;code_1754601060044&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//unknown
let unknownVar:unknown;
unknownVar = &quot;&quot;;
unknownVar = 11;
unknownVar = () =&amp;gt; {};

// num = unknownVar;
// unknownVar.toUpperCase();

if(typeof unknownVar === &quot;number&quot;){
  //타입 정제 = 타입 좁히기 시는 사용 가능
  num=unknownVar;
}&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;pre id=&quot;code_1754601121308&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;▶ Void 타입과 Never 타입&lt;/code&gt;&lt;/pre&gt;
&lt;p 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;1. void 타입&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; a. 아무런 값도 없음을 의미하는 타입&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; b. 아무런 값도 반환하지 않는 함수의 반환값 타입을 정의할 때 사용&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; c. void타입의 변수에는 undefiend 이외의 다른 타입의 값은 담을 수 없음, void 타입이 undefiend 타입을 포함하는 타입이기&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 때문&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1754601253677&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//void

function func1():string{
  return &quot;hello&quot;;
}

function func2():void{
  console.log(&quot;hello&quot;);
};

let a:void;
// a=1;
// a=&quot;hello&quot;;
// a={};
a=undefined;
//a=null;  //tsconfig.json에 엄격한 null 검사 옵션을 false로 설정하면 가능
        // &quot;strictNullChecks&quot;:false&lt;/code&gt;&lt;/pre&gt;
&lt;p 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;2. never 타입&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; a. 불가능을 의미하는 타입&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; b. 함수가 어떠한 값도 반환할 수 없는 상황일 때 해당 함수의 반환값 타입을 정의할 때 사용&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; c. 무한 루프 이외에 의도적으로 오류를 발생시키는 함수도 never 타입으로 반환값 타입을 정의할 수 있음&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; d. 변수의 타입을 never로 정의하면 any를 포함해 그 어떠한 타입의 값도 이 변수에 담을 수 없게 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1754601416643&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//never 
//존재하지 않는 불가능한 타입
// 함수에 반환값 자체가 모순이라고 생각할 수 있는 상황에도 never타입 사용
function func3():never{
  while(true){ }
}

function func4():never{
  throw new Error();
}

let anyVar:any;
let a1 : never;
// a1=1;
// a1={};
// a1=&quot;&quot;;
// a1=undefined;
// a1=null;  //tsconfig.json에 엄격한 null 검사 옵션을 false로 설정해도
//         //null을 담을 수 없음
// // &quot;strictNullChecks&quot;:false
// a1=anyVar;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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>Front-End Programming/JavaScript</category>
      <author>springpark</author>
      <guid isPermaLink="true">https://jjibba.tistory.com/308</guid>
      <comments>https://jjibba.tistory.com/308#entry308comment</comments>
      <pubDate>Fri, 8 Aug 2025 03:03:33 +0900</pubDate>
    </item>
    <item>
      <title>타입스크립트란(TypeScript)</title>
      <link>https://jjibba.tistory.com/307</link>
      <description>&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;&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;1. 필요 개발 환경&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; a. Node.js : 자바스크립트 구동기, 어디서든 자바스크립트를 실행할 수 있게 해 줌&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; b. vs code&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;2. 타입스크린트는 자바스크립트의 확장판&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 자바스크립트를 더 안전하게 사용할 수 있도록 &quot;타입 관련 기능들을 추가한&quot; 언어&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;3. 타입 시스템 :&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 프로그램 언어를 사용할 때 타입과 관련해서 지켜야 할 규칙 체계(= 문법 체계)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;■ 정적 타입(static type) 시스템&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 코드 실행 이전 모든 변수의 타입을 고정적으로 결정함&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 모든 변수의 타입이 컴파일타임에 결정&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 코드 수준에서 개발자가 타입을 명시해줘야 해서 타이핑 양이 매우 증가&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● C, JAVA, 타입스크립트&lt;/p&gt;
&lt;pre id=&quot;code_1754553253854&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String name = &quot;홍길동&quot;;
int age = 20;
String grade = &quot;A&quot;;

---
int age = grade + 20; //바로 컴파일 오류 발생 
	// 정적시스템은 실행전 오류 검사까지 함&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1754553274482&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//-- 타입 시스템 : 동적 타입 시스템 + 정적타입시스템
// 변수의 타입을 실행전에 결정,  
//  타입 오류를 실행전에 검사
let age: number = 20;
age.toUpperCase();  -&amp;gt;오류 발생 

let age = 20;
age.toUpperCase();   -&amp;gt;오류 발생
		모든 변수에 타입을 일일이 지정할 필요 없음
		(점진적 타입 시스템(Gradual Type System) )&lt;/code&gt;&lt;/pre&gt;
&lt;p 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; &amp;nbsp; &amp;nbsp;컴파일 타임에 타입을 검사하면서 필요에 따라 타입 선언 생략을 허용하는 방식, 타입을 지정한 변수와 표현식은 정적으로 타입&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;을 검사하지만 타입 선언이 생략되면 동적으로 검사를 수행&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &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; &amp;nbsp; &amp;nbsp;100% 보장해 주지 않음&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;모든 변수와 표현식의 타입을 컴파일타임에 검사하지 않아도 되기 때문에 타입이 올바르게 정해지지 않으면 런타임에서 에러가&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;발생할 수도 있음&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;■ 동적 타입(dynamic type) 시스템&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; ● 코드를 실행하고 나서 그때 그때마다 유동적으로 변수의 타입으르 결정&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; ● 변수 타입이 런타임에서 결정&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; ● 개발자가 직접 타임을 정의해 줄 필요가 없음&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; ● 프로그램을 실행할 때 타입 에러가 발견되기 때문에 개발 과정에서 에러 없이 마음껏 코드를 작성할 수 있지만 언제 프로그램&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;에 오류가 생길지 모름&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; ● 파이썬,자바스크립트&lt;/p&gt;
&lt;pre id=&quot;code_1754553948961&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let name = &quot;홍길동&quot;;
name = 1234567;

name.toUpperCase();  // Type Error 발생, 그러나 실행은&lt;/code&gt;&lt;/pre&gt;
&lt;p 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; &amp;nbsp; &amp;nbsp; ● 정적 타입 시스템 : 코드를 실행하기 전에 정적으로 변수의 타입을 결정, 단점으로는 모든 변수에 일일이 타입을 지정해주어&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;야 하며, 유연하지 못함&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 점진적 타입 시스템 : 실행 전 검사를 통한 타입 안전성 확보, 자동으로 변수의 타입을 추론함&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 동적 타입 시스템 : 코드를 실행하면서 유동적으로 변수의 타입을 결정, 단점으로는 코드의 타입 오류를 미리 검사할 수 없어&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;예기치 않은 오류가 발생할 수 있음&lt;/p&gt;
&lt;p 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &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;512&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dVi6uW/btsPIrORONc/xhgR1kVeWt8o9yxbmfv9Jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dVi6uW/btsPIrORONc/xhgR1kVeWt8o9yxbmfv9Jk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dVi6uW/btsPIrORONc/xhgR1kVeWt8o9yxbmfv9Jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdVi6uW%2FbtsPIrORONc%2FxhgR1kVeWt8o9yxbmfv9Jk%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;512&quot; height=&quot;512&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #000000;&quot; contenteditable=&quot;false&quot; href=&quot;https://www.typescriptlang.org/ko/docs/handbook/typescript-from-scratch.html&quot; data-token-index=&quot;0&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #73726e;&quot;&gt;typescriptlang&lt;/span&gt;&lt;span&gt;Documentation - TypeScript for the New Programmer&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;​&lt;/p&gt;
&lt;figure id=&quot;og_1754554258550&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;Documentation - TypeScript for the New Programmer&quot; data-og-description=&quot;Learn TypeScript from scratch&quot; data-og-host=&quot;www.typescriptlang.org&quot; data-og-source-url=&quot;https://www.typescriptlang.org/ko/docs/handbook/typescript-from-scratch.html&quot; data-og-url=&quot;https://www.typescriptlang.org/ko/docs/handbook/typescript-from-scratch.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.typescriptlang.org/ko/docs/handbook/typescript-from-scratch.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.typescriptlang.org/ko/docs/handbook/typescript-from-scratch.html&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;Documentation - TypeScript for the New Programmer&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Learn TypeScript from scratch&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.typescriptlang.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.typescriptlang.org/ko/docs/handbook/typescript-from-scratch.html&quot;&gt;https://www.typescriptlang.org/ko/docs/handbook/typescript-from-scratch.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1754554270071&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;Documentation - TypeScript for the New Programmer&quot; data-og-description=&quot;Learn TypeScript from scratch&quot; data-og-host=&quot;www.typescriptlang.org&quot; data-og-source-url=&quot;https://www.typescriptlang.org/ko/docs/handbook/typescript-from-scratch.html&quot; data-og-url=&quot;https://www.typescriptlang.org/ko/docs/handbook/typescript-from-scratch.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.typescriptlang.org/ko/docs/handbook/typescript-from-scratch.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.typescriptlang.org/ko/docs/handbook/typescript-from-scratch.html&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;Documentation - TypeScript for the New Programmer&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Learn TypeScript from scratch&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.typescriptlang.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;■ 타입스크립트 실행&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;1. Node.js 패키지 초기화&lt;/p&gt;
&lt;pre id=&quot;code_1754554316557&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm init&lt;/code&gt;&lt;/pre&gt;
&lt;p 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;2. @types/node 설치&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;Node.js가 제공하는 기본 기능(내장 함수, 클래스 등)등에 대한 타입 정보&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;만약 설치하지 않으면 컴파일 과정에서 타입 검사가 실패하여 오류가 발생할 수 있으며, 기본적임 명령인&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;console.log 같은 명령을 알아 듣지 못하게 됨&lt;/p&gt;
&lt;pre id=&quot;code_1754554430307&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install @types/node
또는
npm i @types/node

//package.json  -&amp;gt; dependencies : @types/node - 버전
/* &quot;dependencies&quot;: {
    &quot;@types/node&quot;: &quot;^24.2.0&quot;
  }
 */&lt;/code&gt;&lt;/pre&gt;
&lt;p 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;3. 타입스크립트 컴파일러 설치&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 타입스크립트 컴파일러(TSC)는 npm의 TypeScript 패키지에 동봉되어 있음&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 타입스크립트는 컴파일러에 의해 자바스크립트로 변환한 다음 실행하기에 자바스크립트를 실행하기 위해&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; (타입스크립트를 컴파일하기 위해)서 타입스크립트 패키지를 설치&lt;/p&gt;
&lt;pre id=&quot;code_1754554671144&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//windows 
//만약 에러가 발생하면 관리자 권한으로 설치
// -g  : 전역으로 설치, 이렇게 해야 터미널에서 패키지 이름을 호출 하여 사용할 수 있
npm install -g typescript

//mac os
sudo npm install -g typescript&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1754554699466&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//타입스크립트 컴파일러 설치 확인- 현재 타입스크립트의 버전 
tsc -v

//Version 5.9.2 - 현재 타입스크립트의 버전&lt;/code&gt;&lt;/pre&gt;
&lt;p 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;4. 타입스크립트 파일 만들기&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 패키지 루트 아래에 src 폴더를 생성한 다음&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; index.ts파일을 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (80).png&quot; data-origin-width=&quot;254&quot; data-origin-height=&quot;213&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5reHZ/btsPICXmkQP/085eycJ8XggDyMcEQXtuX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5reHZ/btsPICXmkQP/085eycJ8XggDyMcEQXtuX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5reHZ/btsPICXmkQP/085eycJ8XggDyMcEQXtuX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5reHZ%2FbtsPICXmkQP%2F085eycJ8XggDyMcEQXtuX1%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;254&quot; height=&quot;213&quot; data-filename=&quot;image (80).png&quot; data-origin-width=&quot;254&quot; data-origin-height=&quot;213&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;// 타입 스크립트의 확장자는 'ts'&lt;/p&gt;
&lt;pre id=&quot;code_1754554812813&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(&quot;Hello TypeScript&quot;);
const num: number = 10;&lt;/code&gt;&lt;/pre&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-filename=&quot;image (81).png&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;201&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dixLuv/btsPJ2Oj11o/euT3aCXJDGlSqnyoaR26d0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dixLuv/btsPJ2Oj11o/euT3aCXJDGlSqnyoaR26d0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dixLuv/btsPJ2Oj11o/euT3aCXJDGlSqnyoaR26d0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdixLuv%2FbtsPJ2Oj11o%2FeuT3aCXJDGlSqnyoaR26d0%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;808&quot; height=&quot;201&quot; data-filename=&quot;image (81).png&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;201&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● 컴파일하고 실행&lt;/p&gt;
&lt;pre id=&quot;code_1754554871998&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tsc src/index.ts

//컴파일이 완료되면 index.js 파일이 생성됨&lt;/code&gt;&lt;/pre&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-filename=&quot;image (82).png&quot; data-origin-width=&quot;902&quot; data-origin-height=&quot;440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGG6Hz/btsPLYjAURF/HRJQfbLZZ5CJtMjE2rgkQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGG6Hz/btsPLYjAURF/HRJQfbLZZ5CJtMjE2rgkQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGG6Hz/btsPLYjAURF/HRJQfbLZZ5CJtMjE2rgkQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGG6Hz%2FbtsPLYjAURF%2FHRJQfbLZZ5CJtMjE2rgkQk%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;902&quot; height=&quot;440&quot; data-filename=&quot;image (82).png&quot; data-origin-width=&quot;902&quot; data-origin-height=&quot;440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (83).png&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TIE2B/btsPLLEB5bb/bfFhvmR0ZBHfn0kE4rTPP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TIE2B/btsPLLEB5bb/bfFhvmR0ZBHfn0kE4rTPP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TIE2B/btsPLLEB5bb/bfFhvmR0ZBHfn0kE4rTPP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTIE2B%2FbtsPLLEB5bb%2FbfFhvmR0ZBHfn0kE4rTPP0%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;1196&quot; height=&quot;420&quot; data-filename=&quot;image (83).png&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;420&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: left;&quot; data-ke-size=&quot;size16&quot;&gt;● 컴파일된 자바스크립트 코드 node를 이용해 실행&lt;/p&gt;
&lt;pre id=&quot;code_1754554956293&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;node src/index.js

// Hello Typescript&lt;/code&gt;&lt;/pre&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-filename=&quot;image (84).png&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9VEMy/btsPJ4yF6Vt/1DF01uMh9MnmOCtDHb3bYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9VEMy/btsPJ4yF6Vt/1DF01uMh9MnmOCtDHb3bYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9VEMy/btsPJ4yF6Vt/1DF01uMh9MnmOCtDHb3bYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9VEMy%2FbtsPJ4yF6Vt%2F1DF01uMh9MnmOCtDHb3bYk%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;658&quot; height=&quot;126&quot; data-filename=&quot;image (84).png&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;126&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: 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; &amp;nbsp; &amp;nbsp; ● 타입스크립트 코드를 실행하기 위해 tsc 를 이용해 타입스크립트 코드를 자바스크립트로 변환한 다음 변환된 자바스크립트&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;코드를 Node.js 로 실행 시킴&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● index.js 파일 삭제&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;▣ TSX(TypeScript Execute)로 실행하기&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 타입스크립트 컴파일러와 node.js가 함께 있는 것&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 한번에 타입스크립트 파일을 실행할 수 있음&lt;/p&gt;
&lt;pre id=&quot;code_1754555136470&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install -g tsx

또는 npm i -g tsx

//설치 확인
tsx -v&lt;/code&gt;&lt;/pre&gt;
&lt;p 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; &amp;nbsp; &amp;nbsp; ◎ 자바스크립트 파일을 생성하지 않고 한번에 타입스크립트 파일 실행&lt;/p&gt;
&lt;pre id=&quot;code_1754555210143&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tsx -v

tsx src/index.ts&lt;/code&gt;&lt;/pre&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-filename=&quot;image (85).png&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;398&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pBNQm/btsPJ21TEam/2MxxS2LxltbNRhcxkkQsck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pBNQm/btsPJ21TEam/2MxxS2LxltbNRhcxkkQsck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pBNQm/btsPJ21TEam/2MxxS2LxltbNRhcxkkQsck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpBNQm%2FbtsPJ21TEam%2F2MxxS2LxltbNRhcxkkQsck%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;628&quot; height=&quot;398&quot; data-filename=&quot;image (85).png&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;398&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: 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; &amp;nbsp; &amp;nbsp; ● tsx는 단 한번의 명령어로 타입스크립트 코드를 실행 시킴&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &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; &amp;nbsp; 타입스크립트의 컴파일은 우리가 작성한 코드에 타입 오류가 없는지 검사하고 오류가 없다면 자바스크립트 코드로 변화&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 이러한 컴파일 과정에서 아주 세부적인 사항들(얼마나 엄격하게 타입 오류를 검사할지, 자바스크립트 코드의 버전은 어떻게 할&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 지....)을 컴파일러 옵션이라고 함&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &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;5-1. 컴파일러 옵션 자동 생성&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;패키지 루트 폴더 아래에 tsconfig.json이라는 파일에 설정할 수 있으며 Node.js 패키지 단위로 설정&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;&amp;nbsp; ● 컴파일러 옵션 자동 생성 도구 생성&lt;/p&gt;
&lt;pre id=&quot;code_1754556177964&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tsc --init&lt;/code&gt;&lt;/pre&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-filename=&quot;image (86).png&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k5Y7Y/btsPLEeFoMF/6tVbOfaZOeFV7gw99fQorK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k5Y7Y/btsPLEeFoMF/6tVbOfaZOeFV7gw99fQorK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k5Y7Y/btsPLEeFoMF/6tVbOfaZOeFV7gw99fQorK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk5Y7Y%2FbtsPLEeFoMF%2F6tVbOfaZOeFV7gw99fQorK%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;836&quot; height=&quot;590&quot; data-filename=&quot;image (86).png&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;590&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: left;&quot; data-ke-size=&quot;size16&quot;&gt;5-2. 컴파일러 옵션 설정&lt;/p&gt;
&lt;pre id=&quot;code_1754556235539&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//tsconfig.json 파일의 내용을 완전히 제거 한 후 아래와 같이 코딩

{
// 컴파일할 타입스크립트 파일의 범위와 위치
  &quot;include&quot;: [&quot;src&quot;]  /* src 폴더를 포함해서 컴파일하기 */
}

//터미널에  tsc 만 입력하면 src 폴더 아래의 모든 .ts 파일이 컴파일

&amp;gt;tsc&lt;/code&gt;&lt;/pre&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-filename=&quot;image (87).png&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgdyB1/btsPIY6NzUo/PWwUVHJ5gG4dF6yk0BFwG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgdyB1/btsPIY6NzUo/PWwUVHJ5gG4dF6yk0BFwG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgdyB1/btsPIY6NzUo/PWwUVHJ5gG4dF6yk0BFwG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgdyB1%2FbtsPIY6NzUo%2FPWwUVHJ5gG4dF6yk0BFwG1%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;741&quot; height=&quot;380&quot; data-filename=&quot;image (87).png&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (88).png&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F7Me9/btsPI6RfWaj/Uy1Uw2rGbK0iZ96pJPwJz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F7Me9/btsPI6RfWaj/Uy1Uw2rGbK0iZ96pJPwJz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F7Me9/btsPI6RfWaj/Uy1Uw2rGbK0iZ96pJPwJz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF7Me9%2FbtsPI6RfWaj%2FUy1Uw2rGbK0iZ96pJPwJz0%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;830&quot; height=&quot;314&quot; data-filename=&quot;image (88).png&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (89).png&quot; data-origin-width=&quot;1114&quot; data-origin-height=&quot;399&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2kkJd/btsPJBXMG3r/mRvKGcvTqsXAZHLDCz89RK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2kkJd/btsPJBXMG3r/mRvKGcvTqsXAZHLDCz89RK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2kkJd/btsPJBXMG3r/mRvKGcvTqsXAZHLDCz89RK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2kkJd%2FbtsPJBXMG3r%2FmRvKGcvTqsXAZHLDCz89RK%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;1114&quot; height=&quot;399&quot; data-filename=&quot;image (89).png&quot; data-origin-width=&quot;1114&quot; data-origin-height=&quot;399&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: left;&quot; data-ke-size=&quot;size16&quot;&gt;● *.js 파일을 삭제하기 - 다음 실습 위해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1754556377558&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;compilerOptions&quot;: {
    &quot;skipLibCheck&quot;: true, //타입 정의 파일의 타입 검사 생략, 20 버전 이상은 설정 바
    &quot;target&quot;: &quot;ESNext&quot;, // 자바스크립트 코드 버전
										    //이전 버전을 원하면 &quot;ES5&quot;
			                 // 구형브라우저나 서버 사용시 
			                 // 예전 버전 사용이 필요할 수 있음
    &quot;module&quot; :&quot;ESNext&quot;,//모듈 시스템 설정
										 //ES 모듈 시스템, CommonJS 모듈 시스템
    &quot;outDir&quot;: &quot;dist&quot;, //자바스크립트(js)파일이 놓일 위치
									    //dist 디렉토리에 js파일이 놓임
    &quot;moduleDetection&quot;: &quot;force&quot;, // 모든 타입스크립트 파일이 로컬로 취급
    &quot;strict&quot;: true,  //엄격한 타입 검사 실행, true/false 
   /* 타입스크립트에서는 특별히 매개변수의 타입은 
      프로그래머가 직접 지정하도록 권장      
      타입스크립트는 함수 매개변수의 타입을 자동 추론할 수 없기 때문에 
      타입을 프로그래머가 직접 지정하지 않을 경우 
      엄격한 타입 검사 모드에서는 오류가 발생
   */
  }, 
 
   // 컴파일할 타입스크립트 파일의 범위와 위치
  &quot;include&quot;: [&quot;src&quot;] 
}&lt;/code&gt;&lt;/pre&gt;
&lt;p 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;hearts; CommonJS 모듈 시스템 참고 자료&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;a style=&quot;color: #000000;&quot; contenteditable=&quot;false&quot; href=&quot;https://nodejs.org/api/modules.html&quot; data-token-index=&quot;0&quot;&gt;&lt;span&gt;&lt;span&gt;Modules: CommonJS modules | Node.js v24.4.1 Documentation&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;​&lt;/p&gt;
&lt;figure id=&quot;og_1754556536439&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;Modules: CommonJS modules | Node.js v24.5.0 Documentation&quot; data-og-description=&quot;Modules: CommonJS modules# CommonJS modules are the original way to package JavaScript code for Node.js. Node.js also supports the ECMAScript modules standard used by browsers and other JavaScript runtimes. In Node.js, each file is treated as a separate mo&quot; data-og-host=&quot;nodejs.org&quot; data-og-source-url=&quot;https://nodejs.org/api/modules.html&quot; data-og-url=&quot;https://nodejs.org/api/modules.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://nodejs.org/api/modules.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nodejs.org/api/modules.html&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;Modules: CommonJS modules | Node.js v24.5.0 Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Modules: CommonJS modules# CommonJS modules are the original way to package JavaScript code for Node.js. Node.js also supports the ECMAScript modules standard used by browsers and other JavaScript runtimes. In Node.js, each file is treated as a separate mo&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nodejs.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;▶ ES 모듈 시스템 참고 자료&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ● ECMAScript 모듈 시스템의 약자로, 줄여서 ESM이라고 함&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #000000;&quot; contenteditable=&quot;false&quot; href=&quot;https://nodejs.org/api/esm.html&quot; data-token-index=&quot;0&quot;&gt;&lt;span&gt;&lt;span&gt;Modules: ECMAScript modules | Node.js v24.4.1 Documentation&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;​&lt;/p&gt;
&lt;figure id=&quot;og_1754556682067&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;Modules: ECMAScript modules | Node.js v24.5.0 Documentation&quot; data-og-description=&quot;Modules: ECMAScript modules# Introduction# ECMAScript modules are the official standard format to package JavaScript code for reuse. Modules are defined using a variety of import and export statements. The following example of an ES module exports a functi&quot; data-og-host=&quot;nodejs.org&quot; data-og-source-url=&quot;https://nodejs.org/api/esm.html&quot; data-og-url=&quot;https://nodejs.org/api/esm.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://nodejs.org/api/esm.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nodejs.org/api/esm.html&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;Modules: ECMAScript modules | Node.js v24.5.0 Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Modules: ECMAScript modules# Introduction# ECMAScript modules are the official standard format to package JavaScript code for reuse. Modules are defined using a variety of import and export statements. The following example of an ES module exports a functi&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nodejs.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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; &amp;nbsp; &amp;nbsp;Ctrl + Shift + P =&amp;gt; restart =&amp;gt; TypeScript:TS 서버 다시 시작&lt;/p&gt;
&lt;p 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;▶ package.json&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;type&quot; : &quot;module&quot;, //설정&lt;/p&gt;
&lt;pre id=&quot;code_1754556866426&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;name&quot;: &quot;test_2&quot;,
   &quot;version&quot;: &quot;1.0.0&quot;,
  &quot;main&quot;: &quot;index.js&quot;,
  
  &quot;type&quot;:&quot;module&quot;,  //ES 모듈 시스템 사용하기 위
  
  &quot;scripts&quot;: {
    &quot;test&quot;: &quot;echo \&quot;Error: no test specified\&quot; &amp;amp;&amp;amp; exit 1&quot;
  },
  &quot;author&quot;: &quot;&quot;,
  &quot;license&quot;: &quot;ISC&quot;,
  &quot;description&quot;: &quot;&quot;,
  &quot;dependencies&quot;: {
    &quot;@types/node&quot;: &quot;^24.2.0&quot;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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>Front-End Programming/JavaScript</category>
      <author>springpark</author>
      <guid isPermaLink="true">https://jjibba.tistory.com/307</guid>
      <comments>https://jjibba.tistory.com/307#entry307comment</comments>
      <pubDate>Thu, 7 Aug 2025 17:56:29 +0900</pubDate>
    </item>
    <item>
      <title>CloudFront</title>
      <link>https://jjibba.tistory.com/306</link>
      <description>&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;● 우리가 만든 웹 사이트에 익명의 사용자가 접속할 수 있도록 구성할 때 CloudFront를 사용&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● AWS에서는 정적 웹 사이드를 배포할 때는 EC2와 ELB 대신 S3와 CloudFront를 사용할 수 있음&lt;/p&gt;
&lt;p 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;■ S3의 정적 웹 사이트 호스팅 기능&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● S3는 파일을 저장하고 내려받을 수 있는 기능을 제공&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 이 기능을 활용하면 웹 사이트를 구성하는 HTML, CSS, 자바스크립트 파일을 S3에 저장하고, 웹브라우저가 이를 내려받아&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;lsquo;정적 웹 사이트 호스팅&amp;rsquo;이라고 함&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &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: left;&quot; data-ke-size=&quot;size16&quot;&gt;■ CloudFront&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● AWS에서는 위와 같은 문제를 해결하기 위해 전 세계 곳곳에 파일의 복사본을 저장하는 임시 저장소를 구축함&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 이러한 서비스를 CDN(Content Delivery Network)이라고 함&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● AWS 에서는 CloudFront라는 CDN 서비스를 제공&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● CloudFront는 HTTPS를 사용하여 데이터를 전송할 때 암호화를 제공하며, 사용자가 HTTPS를 쉽게 설정하고 관리할 수 있&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;는 도구를 제공하며, ACM( AWS Certificate Manager, 인증서를 관리해 주는 서비스)과 연동하여 SSL/TLS 인증서를 무료&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;로 발급하고 갱신할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;개념&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;CDN&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;CloudFront는 CDN(Content Delivery Network)의 일종&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;엣지 로케이션&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;전 세계에 퍼져있는 CloudFront 서버 위치(서울에도 있음)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;캐싱&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;자주 쓰는 콘텐츠를 가까운 서버에 저장해 빠르게 전달&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;오리진&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;원래 콘텐츠가 저장된 서버 (예:S3, EC2, 외부 서버 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;TTL&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;얼마나 오래 캐시된 콘텐츠를 보관할 지 정하는 시간&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;table style=&quot;border-collapse: collapse; width: 100%; height: 122px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 43.2558%; height: 21px;&quot;&gt;개념&lt;/td&gt;
&lt;td style=&quot;width: 56.7442%; height: 21px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 43.2558%; height: 21px;&quot;&gt;ACM&lt;/td&gt;
&lt;td style=&quot;width: 56.7442%; height: 21px;&quot;&gt;AWS에서 SSL 인증서를 관리하는 서비스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 43.2558%; height: 21px;&quot;&gt;SSL 인증서&lt;/td&gt;
&lt;td style=&quot;width: 56.7442%; height: 21px;&quot;&gt;사이트를 안전하게 해주는 디지털 증명서&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 43.2558%; height: 21px;&quot;&gt;HTTPS&lt;/td&gt;
&lt;td style=&quot;width: 56.7442%; height: 21px;&quot;&gt;암호화된 안전한 웹사이트 주소&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 43.2558%; height: 21px;&quot;&gt;도메인 검증&lt;/td&gt;
&lt;td style=&quot;width: 56.7442%; height: 21px;&quot;&gt;인증서 발급 전에 해당 도메인을 네가 진짜 갖고 있는지 확인하는 절차&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 43.2558%; height: 17px;&quot;&gt;자동 검증&lt;/td&gt;
&lt;td style=&quot;width: 56.7442%; height: 17px;&quot;&gt;ACM은 AWS에서 발급한 인증서를 자동으로 갱신해줌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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: left;&quot; data-ke-size=&quot;size16&quot;&gt;■ CloudFront 구성&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;♨ CloudFront 콘솔&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (68).png&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;159&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8IDEy/btsPI1PM1I6/bZTSRvF77WeeyFqx6xXuX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8IDEy/btsPI1PM1I6/bZTSRvF77WeeyFqx6xXuX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8IDEy/btsPI1PM1I6/bZTSRvF77WeeyFqx6xXuX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8IDEy%2FbtsPI1PM1I6%2FbZTSRvF77WeeyFqx6xXuX1%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;654&quot; height=&quot;159&quot; data-filename=&quot;image (68).png&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;159&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;♨ CloudFront 배포 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (69).png&quot; data-origin-width=&quot;1639&quot; data-origin-height=&quot;305&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLLAUQ/btsPKRFnCDz/56AOTQpBraFQsayu2Fq5g1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLLAUQ/btsPKRFnCDz/56AOTQpBraFQsayu2Fq5g1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLLAUQ/btsPKRFnCDz/56AOTQpBraFQsayu2Fq5g1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLLAUQ%2FbtsPKRFnCDz%2F56AOTQpBraFQsayu2Fq5g1%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;1639&quot; height=&quot;305&quot; data-filename=&quot;image (69).png&quot; data-origin-width=&quot;1639&quot; data-origin-height=&quot;305&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: 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;● Get started : 배포 이름, 목적, 구조 선택을 입력&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● Distribution name : 필수 입력, CloudFront 배포에 붙이는 이름(태그)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● Description : 선택 사항, 이 배포가 무엇인지 설명하는 간단한 메모&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● Single website app : 하나의 웹사이트나 앱만 배포할 경우 Multi-tenant architecture : 여러 고객/도메인을 하나의 배포에 묶고&amp;nbsp; &amp;nbsp; &amp;nbsp;싶을 때 (SaaS 등 복잡한 구조)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● Custom domain - optional : 내 도메인(www.bara.shop) 을 CloundFront 에 붙이지 설정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (70).png&quot; data-origin-width=&quot;1509&quot; data-origin-height=&quot;728&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cE2VS3/btsPKmr6pBZ/hiHIZIReTgM6RQu0pX53RK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cE2VS3/btsPKmr6pBZ/hiHIZIReTgM6RQu0pX53RK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cE2VS3/btsPKmr6pBZ/hiHIZIReTgM6RQu0pX53RK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcE2VS3%2FbtsPKmr6pBZ%2FhiHIZIReTgM6RQu0pX53RK%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;1509&quot; height=&quot;728&quot; data-filename=&quot;image (70).png&quot; data-origin-width=&quot;1509&quot; data-origin-height=&quot;728&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● Specify origin : 원본 설정 단계&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○ 어디에서 웹사이트 파일을 가져올지 원본(origin)을 설정&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○ 우리는 Amazon S3 을 사용&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ■ Amazon S3 : HTML, CSS, 이미지 같은 정적 파일 저장소&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● S3 origin : S3 버킷의 정식 도메인 이름을 입력&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● Browse S3 : 현재 계정의 S3 버킷 목록이 보여 짐, 클릭 해서 선택&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (71).png&quot; data-origin-width=&quot;1475&quot; data-origin-height=&quot;539&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XbKkn/btsPKGjLtPK/zX1ElO3vt0Rr4yXWCxWMkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XbKkn/btsPKGjLtPK/zX1ElO3vt0Rr4yXWCxWMkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XbKkn/btsPKGjLtPK/zX1ElO3vt0Rr4yXWCxWMkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXbKkn%2FbtsPKGjLtPK%2FzX1ElO3vt0Rr4yXWCxWMkK%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;1475&quot; height=&quot;539&quot; data-filename=&quot;image (71).png&quot; data-origin-width=&quot;1475&quot; data-origin-height=&quot;539&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: left;&quot; data-ke-size=&quot;size16&quot;&gt;● [웹 사이트 앤드포인트 사용 ] 버튼 클릭 : S3 버킷을 정적 웹사이트로 만들었을 때 그 웹사이트에 접속할 수 있/는 주소(URL)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (72).png&quot; data-origin-width=&quot;1038&quot; data-origin-height=&quot;318&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ou8Tw/btsPK3Mw3xJ/kqnWpfJuMSjObKzi7wxht0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ou8Tw/btsPK3Mw3xJ/kqnWpfJuMSjObKzi7wxht0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ou8Tw/btsPK3Mw3xJ/kqnWpfJuMSjObKzi7wxht0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOu8Tw%2FbtsPK3Mw3xJ%2FkqnWpfJuMSjObKzi7wxht0%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;1038&quot; height=&quot;318&quot; data-filename=&quot;image (72).png&quot; data-origin-width=&quot;1038&quot; data-origin-height=&quot;318&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: left;&quot; data-ke-size=&quot;size16&quot;&gt;● Origin path : 선택 사항, S3 버킷 안에서 특정 폴더만 CloudFront에 연결하고 싶을 때 사용&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (73).png&quot; data-origin-width=&quot;1258&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kK9D9/btsPKipTi3m/tSpQBMPO1CVltLP8zBRkS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kK9D9/btsPKipTi3m/tSpQBMPO1CVltLP8zBRkS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kK9D9/btsPKipTi3m/tSpQBMPO1CVltLP8zBRkS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkK9D9%2FbtsPKipTi3m%2FtSpQBMPO1CVltLP8zBRkS1%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;1258&quot; height=&quot;252&quot; data-filename=&quot;image (73).png&quot; data-origin-width=&quot;1258&quot; data-origin-height=&quot;252&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● Settings&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○ Allow private S3 bucket access tgo CloudFront : CloudFront가 비공개 S3 버킷에도 접근 가능하도록 허용할지 설정, 체&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;크하기&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;체크하면 CloundFront가 자동으로 필요한 권한을 설정해 줌&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○ Use recommended origin settings : AWS가 안정적이고 일반적인 설정으로 자동 구성해줌&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (74).png&quot; data-origin-width=&quot;1267&quot; data-origin-height=&quot;376&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOcXr2/btsPIKHLrVW/Pi6p4F1lgDsL8eKQigCqhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOcXr2/btsPIKHLrVW/Pi6p4F1lgDsL8eKQigCqhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOcXr2/btsPIKHLrVW/Pi6p4F1lgDsL8eKQigCqhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOcXr2%2FbtsPIKHLrVW%2FPi6p4F1lgDsL8eKQigCqhK%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;1267&quot; height=&quot;376&quot; data-filename=&quot;image (74).png&quot; data-origin-width=&quot;1267&quot; data-origin-height=&quot;376&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● Enable security : 보안 설정 단계&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● WAF (Web Application Firewall) : 웹 애플리케이션 방화벽, 웹사이트를 해킹이나 악의적인 요청으로부터 막아주는 보안 기능&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (75).png&quot; data-origin-width=&quot;1256&quot; data-origin-height=&quot;267&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3ziuz/btsPLFRVrbU/hvj0ekqiWWdK2l50R1mL0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3ziuz/btsPLFRVrbU/hvj0ekqiWWdK2l50R1mL0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3ziuz/btsPLFRVrbU/hvj0ekqiWWdK2l50R1mL0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3ziuz%2FbtsPLFRVrbU%2Fhvj0ekqiWWdK2l50R1mL0K%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;1256&quot; height=&quot;267&quot; data-filename=&quot;image (75).png&quot; data-origin-width=&quot;1256&quot; data-origin-height=&quot;267&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: left;&quot; data-ke-size=&quot;size16&quot;&gt;● Enable security : 보안 설정 단계&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● WAF (Web Application Firewall) : 웹 애플리케이션 방화벽, 웹사이트를 해킹이나 악의적인 요청으로부터 막아주는 보안 기능&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (76).png&quot; data-origin-width=&quot;1256&quot; data-origin-height=&quot;267&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHBFht/btsPKoDtUVp/N9YLbnoknZGaGiPIXRPuS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHBFht/btsPKoDtUVp/N9YLbnoknZGaGiPIXRPuS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHBFht/btsPKoDtUVp/N9YLbnoknZGaGiPIXRPuS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHBFht%2FbtsPKoDtUVp%2FN9YLbnoknZGaGiPIXRPuS0%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;1256&quot; height=&quot;267&quot; data-filename=&quot;image (76).png&quot; data-origin-width=&quot;1256&quot; data-origin-height=&quot;267&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● 연습에서는 [보안 보호 비활성화] 선택&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● 실무에서는 [보안 보호 활성화] 선택&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;참고)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (77).png&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;523&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/67VUg/btsPJ1Ps874/vQHI03PGiKvND4D0wtx5tK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/67VUg/btsPJ1Ps874/vQHI03PGiKvND4D0wtx5tK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/67VUg/btsPJ1Ps874/vQHI03PGiKvND4D0wtx5tK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F67VUg%2FbtsPJ1Ps874%2FvQHI03PGiKvND4D0wtx5tK%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;1240&quot; height=&quot;523&quot; data-filename=&quot;image (77).png&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;523&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: left;&quot; data-ke-size=&quot;size16&quot;&gt;♨ Get TLS certificate (도메인과 HTTPS 연결 관련 설정)과 Review and create은 여기서는 생략&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; 중요한 단계, 실무에서는 꼭 설정&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-filename=&quot;image (78).png&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beTU92/btsPKU9Wck2/OUYGiXa7X82C8lbupbQJTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beTU92/btsPKU9Wck2/OUYGiXa7X82C8lbupbQJTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beTU92/btsPKU9Wck2/OUYGiXa7X82C8lbupbQJTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeTU92%2FbtsPKU9Wck2%2FOUYGiXa7X82C8lbupbQJTK%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;711&quot; height=&quot;241&quot; data-filename=&quot;image (78).png&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;241&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● [배포 도메인 이름 ] 복사 해서 웹사이트 주소에 붙여 넣기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (79).png&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3SvIP/btsPKUozgof/fyEwFz895EVTEyc4HJ8aw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3SvIP/btsPKUozgof/fyEwFz895EVTEyc4HJ8aw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3SvIP/btsPKUozgof/fyEwFz895EVTEyc4HJ8aw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3SvIP%2FbtsPKUozgof%2FfyEwFz895EVTEyc4HJ8aw1%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;294&quot; data-filename=&quot;image (79).png&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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: 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; &amp;nbsp; &amp;nbsp;CloudFront는 바로 삭제할 수 없음&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;먼저 비활성화(Disable)해야 삭제 가능 (보통 몇 분 정도 소요됨)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;비활성화 후 삭제 가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>협업 툴/AWS(Amazon Web Services)</category>
      <author>springpark</author>
      <guid isPermaLink="true">https://jjibba.tistory.com/306</guid>
      <comments>https://jjibba.tistory.com/306#entry306comment</comments>
      <pubDate>Thu, 7 Aug 2025 15:01:15 +0900</pubDate>
    </item>
    <item>
      <title>S3로 정적 웹 사이트 호스팅하기</title>
      <link>https://jjibba.tistory.com/305</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● Amazon S3(Simple Storage Services)&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;■ S3로 웹 사이트 배포&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● 배포할 파일 만들기 : index.html&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;♨ S3 버킷 만들기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (41).png&quot; data-origin-width=&quot;1345&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ch7uDU/btsPJ0WS4MW/psf0iEA5YNafqZkw0s1aJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ch7uDU/btsPJ0WS4MW/psf0iEA5YNafqZkw0s1aJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ch7uDU/btsPJ0WS4MW/psf0iEA5YNafqZkw0s1aJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fch7uDU%2FbtsPJ0WS4MW%2Fpsf0iEA5YNafqZkw0s1aJK%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;1345&quot; height=&quot;395&quot; data-filename=&quot;image (41).png&quot; data-origin-width=&quot;1345&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (42).png&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;459&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zk8kn/btsPK5pBy2w/id9sK7gKCz4QwpN5HCjunk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zk8kn/btsPK5pBy2w/id9sK7gKCz4QwpN5HCjunk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zk8kn/btsPK5pBy2w/id9sK7gKCz4QwpN5HCjunk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzk8kn%2FbtsPK5pBy2w%2Fid9sK7gKCz4QwpN5HCjunk%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;1254&quot; height=&quot;459&quot; data-filename=&quot;image (42).png&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;459&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (43).png&quot; data-origin-width=&quot;1263&quot; data-origin-height=&quot;367&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biW2iA/btsPIY6a4zH/QJYExJxii5zOgEIczM3qG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biW2iA/btsPIY6a4zH/QJYExJxii5zOgEIczM3qG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biW2iA/btsPIY6a4zH/QJYExJxii5zOgEIczM3qG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiW2iA%2FbtsPIY6a4zH%2FQJYExJxii5zOgEIczM3qG0%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;1263&quot; height=&quot;367&quot; data-filename=&quot;image (43).png&quot; data-origin-width=&quot;1263&quot; data-origin-height=&quot;367&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (44).png&quot; data-origin-width=&quot;1308&quot; data-origin-height=&quot;175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYBhkw/btsPJe9bmHl/5hZfpAmez0R0ukaTmGkf71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYBhkw/btsPJe9bmHl/5hZfpAmez0R0ukaTmGkf71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYBhkw/btsPJe9bmHl/5hZfpAmez0R0ukaTmGkf71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYBhkw%2FbtsPJe9bmHl%2F5hZfpAmez0R0ukaTmGkf71%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;1308&quot; height=&quot;175&quot; data-filename=&quot;image (44).png&quot; data-origin-width=&quot;1308&quot; data-origin-height=&quot;175&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: left;&quot; data-ke-size=&quot;size16&quot;&gt;♨ S3 버킷에 웹 사이트 파일 업로드 하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (45).png&quot; data-origin-width=&quot;509&quot; data-origin-height=&quot;197&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cP4LzL/btsPJ1VOqTd/ux73iKUsFcClzTjnFqVxc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cP4LzL/btsPJ1VOqTd/ux73iKUsFcClzTjnFqVxc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cP4LzL/btsPJ1VOqTd/ux73iKUsFcClzTjnFqVxc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcP4LzL%2FbtsPJ1VOqTd%2Fux73iKUsFcClzTjnFqVxc1%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;509&quot; height=&quot;197&quot; data-filename=&quot;image (45).png&quot; data-origin-width=&quot;509&quot; data-origin-height=&quot;197&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (46).png&quot; data-origin-width=&quot;1251&quot; data-origin-height=&quot;307&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJmdQE/btsPK4Yy7Ts/azk34aGSVgIZOYuVtK8yXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJmdQE/btsPK4Yy7Ts/azk34aGSVgIZOYuVtK8yXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJmdQE/btsPK4Yy7Ts/azk34aGSVgIZOYuVtK8yXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJmdQE%2FbtsPK4Yy7Ts%2Fazk34aGSVgIZOYuVtK8yXK%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;1251&quot; height=&quot;307&quot; data-filename=&quot;image (46).png&quot; data-origin-width=&quot;1251&quot; data-origin-height=&quot;307&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (47).png&quot; data-origin-width=&quot;1257&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXm0er/btsPKSql1mL/NkUJHzTpkcaBYCTU8aPgPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXm0er/btsPKSql1mL/NkUJHzTpkcaBYCTU8aPgPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXm0er/btsPKSql1mL/NkUJHzTpkcaBYCTU8aPgPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXm0er%2FbtsPKSql1mL%2FNkUJHzTpkcaBYCTU8aPgPk%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;1257&quot; height=&quot;314&quot; data-filename=&quot;image (47).png&quot; data-origin-width=&quot;1257&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (48).png&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;562&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dSJPhm/btsPI4rNaUd/FxjkYCtyzwuKRQ0U9TZDMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dSJPhm/btsPI4rNaUd/FxjkYCtyzwuKRQ0U9TZDMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dSJPhm/btsPI4rNaUd/FxjkYCtyzwuKRQ0U9TZDMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdSJPhm%2FbtsPI4rNaUd%2FFxjkYCtyzwuKRQ0U9TZDMK%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;1301&quot; height=&quot;562&quot; data-filename=&quot;image (48).png&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;562&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (49).png&quot; data-origin-width=&quot;1259&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dZF2aE/btsPJ5DIWzk/ePYXqU0bEHhkh63pMxmNKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dZF2aE/btsPJ5DIWzk/ePYXqU0bEHhkh63pMxmNKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dZF2aE/btsPJ5DIWzk/ePYXqU0bEHhkh63pMxmNKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdZF2aE%2FbtsPJ5DIWzk%2FePYXqU0bEHhkh63pMxmNKK%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;1259&quot; height=&quot;390&quot; data-filename=&quot;image (49).png&quot; data-origin-width=&quot;1259&quot; data-origin-height=&quot;390&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (50).png&quot; data-origin-width=&quot;1286&quot; data-origin-height=&quot;255&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0LU9U/btsPJfNPnT8/OMPkbpKHcdMs0umPmPq2Q0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0LU9U/btsPJfNPnT8/OMPkbpKHcdMs0umPmPq2Q0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0LU9U/btsPJfNPnT8/OMPkbpKHcdMs0umPmPq2Q0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0LU9U%2FbtsPJfNPnT8%2FOMPkbpKHcdMs0umPmPq2Q0%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;1286&quot; height=&quot;255&quot; data-filename=&quot;image (50).png&quot; data-origin-width=&quot;1286&quot; data-origin-height=&quot;255&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: left;&quot; data-ke-size=&quot;size16&quot;&gt;♨ 버킷 권한 설정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (51).png&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;303&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3wi9p/btsPIePqPbT/vfQlsJ3T4c6WznMxw9GpjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3wi9p/btsPIePqPbT/vfQlsJ3T4c6WznMxw9GpjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3wi9p/btsPIePqPbT/vfQlsJ3T4c6WznMxw9GpjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd3wi9p%2FbtsPIePqPbT%2FvfQlsJ3T4c6WznMxw9GpjK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;602&quot; height=&quot;303&quot; data-filename=&quot;image (51).png&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;303&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (52).png&quot; data-origin-width=&quot;1504&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RtRaY/btsPK3FkWAY/jWeeoTPi009h7Y96JkOSPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RtRaY/btsPK3FkWAY/jWeeoTPi009h7Y96JkOSPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RtRaY/btsPK3FkWAY/jWeeoTPi009h7Y96JkOSPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRtRaY%2FbtsPK3FkWAY%2FjWeeoTPi009h7Y96JkOSPK%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;1504&quot; height=&quot;280&quot; data-filename=&quot;image (52).png&quot; data-origin-width=&quot;1504&quot; data-origin-height=&quot;280&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (53).png&quot; data-origin-width=&quot;1349&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJqpmk/btsPK3ZD4My/zduB07AOZh5cxix1VzoQ71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJqpmk/btsPK3ZD4My/zduB07AOZh5cxix1VzoQ71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJqpmk/btsPK3ZD4My/zduB07AOZh5cxix1VzoQ71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJqpmk%2FbtsPK3ZD4My%2FzduB07AOZh5cxix1VzoQ71%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;1349&quot; height=&quot;560&quot; data-filename=&quot;image (53).png&quot; data-origin-width=&quot;1349&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (54).png&quot; data-origin-width=&quot;451&quot; data-origin-height=&quot;528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WbV37/btsPKFSfuQf/DGFfqoEFwSZjgBt1RO67kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WbV37/btsPKFSfuQf/DGFfqoEFwSZjgBt1RO67kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WbV37/btsPKFSfuQf/DGFfqoEFwSZjgBt1RO67kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWbV37%2FbtsPKFSfuQf%2FDGFfqoEFwSZjgBt1RO67kk%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;451&quot; height=&quot;528&quot; data-filename=&quot;image (54).png&quot; data-origin-width=&quot;451&quot; data-origin-height=&quot;528&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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; &amp;nbsp; &amp;nbsp; ○ GetObject - 특정 사용자, 역할, 그룹에게 S3 객체(파일)를 읽을 수 있는 권한 부여&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○ AWS IAM(Identity and Access Management) 사용자나 특정 서비스에만 접근 허용하고 싶을 때 사용&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○ 이 권한을 부여하면 이 정책이 적용된 사용자/역할은 지정된 S3 객체를 URL 또는 AWS CLI/API로 다운로드하거나 웹에서&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;볼 수 있게&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (55).png&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;496&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVxVkT/btsPIHqgnZP/RU5VHQM1mqcD5K5YKfRfgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVxVkT/btsPIHqgnZP/RU5VHQM1mqcD5K5YKfRfgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVxVkT/btsPIHqgnZP/RU5VHQM1mqcD5K5YKfRfgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVxVkT%2FbtsPIHqgnZP%2FRU5VHQM1mqcD5K5YKfRfgk%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;328&quot; height=&quot;496&quot; data-filename=&quot;image (55).png&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;496&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: left;&quot; data-ke-size=&quot;size16&quot;&gt;● 리소스 유형과 ARN (Amazon Resource Name) 지정&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○ {BucketName}에 접근을 허용할 버킷 이름 입력&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○ {ObjectName}에 파일 접근할 수 있는 설정&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ■ {BucketName} &amp;rArr; 본인의 버킷 명 입력&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ■ {ObjectName} &amp;rArr; 모든 파일 접근할 수 있는 권한을 위해 *&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (56).png&quot; data-origin-width=&quot;739&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dsSZo3/btsPHKANIV5/hdURjLkqFFdKqHgW6bPP10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dsSZo3/btsPHKANIV5/hdURjLkqFFdKqHgW6bPP10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dsSZo3/btsPHKANIV5/hdURjLkqFFdKqHgW6bPP10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdsSZo3%2FbtsPHKANIV5%2FhdURjLkqFFdKqHgW6bPP10%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;739&quot; height=&quot;450&quot; data-filename=&quot;image (56).png&quot; data-origin-width=&quot;739&quot; data-origin-height=&quot;450&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;&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: left;&quot; data-ke-size=&quot;size16&quot;&gt;● Principal 부분 수정하기&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○ Principal 은 권한을 부여할 대상을 설정하는 속성&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○ 여기서는 &lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;1&quot;&gt;실습이므로&lt;/span&gt;&lt;/b&gt;&lt;/u&gt; 우리가 만든 서비스에서 모든 사용자가 이미지를 볼 수 있게 할 것이지만&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○ &lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot;&gt;실무에서는 꼭 정확하게 권한을 부여할 대상을 설정할 것&lt;/span&gt; &lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;/u&gt;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;Principal&quot;: &quot;*&quot;, &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (57).png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;417&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Aa0p0/btsPKUaCyfi/tg4O3Bc9KIewzkLVkLZGe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Aa0p0/btsPKUaCyfi/tg4O3Bc9KIewzkLVkLZGe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Aa0p0/btsPKUaCyfi/tg4O3Bc9KIewzkLVkLZGe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAa0p0%2FbtsPKUaCyfi%2Ftg4O3Bc9KIewzkLVkLZGe0%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;525&quot; height=&quot;417&quot; data-filename=&quot;image (57).png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;417&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (58).png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;647&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwD97u/btsPI2AJAea/sj2B19vz5wHz0O2TwdKrW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwD97u/btsPI2AJAea/sj2B19vz5wHz0O2TwdKrW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwD97u/btsPI2AJAea/sj2B19vz5wHz0O2TwdKrW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwD97u%2FbtsPI2AJAea%2Fsj2B19vz5wHz0O2TwdKrW1%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;700&quot; height=&quot;647&quot; data-filename=&quot;image (58).png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;647&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (59).png&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;682&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lj8Ex/btsPIrgtmCl/QShI7yiZAfyrJbdgKErDy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lj8Ex/btsPIrgtmCl/QShI7yiZAfyrJbdgKErDy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lj8Ex/btsPIrgtmCl/QShI7yiZAfyrJbdgKErDy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flj8Ex%2FbtsPIrgtmCl%2FQShI7yiZAfyrJbdgKErDy1%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;781&quot; height=&quot;682&quot; data-filename=&quot;image (59).png&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;682&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;&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: left;&quot; data-ke-size=&quot;size16&quot;&gt;♨ S3에 정적 웹 사이트 호스팅 설정&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● 버킷 상세 화면에서 [속성]탭을 선택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (60).png&quot; data-origin-width=&quot;1286&quot; data-origin-height=&quot;255&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WebKL/btsPJf1ksRx/HNFQclXncu1G3Ph8OkMSm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WebKL/btsPJf1ksRx/HNFQclXncu1G3Ph8OkMSm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WebKL/btsPJf1ksRx/HNFQclXncu1G3Ph8OkMSm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWebKL%2FbtsPJf1ksRx%2FHNFQclXncu1G3Ph8OkMSm1%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;1286&quot; height=&quot;255&quot; data-filename=&quot;image (60).png&quot; data-origin-width=&quot;1286&quot; data-origin-height=&quot;255&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (61).png&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;185&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bK6oWi/btsPKrmg5Pw/5K7QW22sWkNbRapAEXPRD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bK6oWi/btsPKrmg5Pw/5K7QW22sWkNbRapAEXPRD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bK6oWi/btsPKrmg5Pw/5K7QW22sWkNbRapAEXPRD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbK6oWi%2FbtsPKrmg5Pw%2F5K7QW22sWkNbRapAEXPRD0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;690&quot; height=&quot;185&quot; data-filename=&quot;image (61).png&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;185&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● 위 화면의 가장 아래쪽으로 이동&lt;/p&gt;
&lt;p 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;image (62).png&quot; data-origin-width=&quot;1262&quot; data-origin-height=&quot;192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Fg8uS/btsPJEl5koP/7rk6PmQPDOKAn4hBXEfC90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Fg8uS/btsPJEl5koP/7rk6PmQPDOKAn4hBXEfC90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Fg8uS/btsPJEl5koP/7rk6PmQPDOKAn4hBXEfC90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFg8uS%2FbtsPJEl5koP%2F7rk6PmQPDOKAn4hBXEfC90%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;1262&quot; height=&quot;192&quot; data-filename=&quot;image (62).png&quot; data-origin-width=&quot;1262&quot; data-origin-height=&quot;192&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;참고) AWS Amplify Hosting : 정적 웹사이트나 프론트엔드 앱을 &amp;ldquo;코드만 올리면 자동으로 배포&amp;rdquo;해주는 서비스&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (63).png&quot; data-origin-width=&quot;807&quot; data-origin-height=&quot;506&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOqPQE/btsPKFLwmtC/bxouIR4a1o2G1NlaS23IK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOqPQE/btsPKFLwmtC/bxouIR4a1o2G1NlaS23IK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOqPQE/btsPKFLwmtC/bxouIR4a1o2G1NlaS23IK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOqPQE%2FbtsPKFLwmtC%2FbxouIR4a1o2G1NlaS23IK0%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;807&quot; height=&quot;506&quot; data-filename=&quot;image (63).png&quot; data-origin-width=&quot;807&quot; data-origin-height=&quot;506&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (64).png&quot; data-origin-width=&quot;1273&quot; data-origin-height=&quot;149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cR8fbA/btsPLgqWjRz/ZKjbpfZp4mgt67OsKdazd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cR8fbA/btsPLgqWjRz/ZKjbpfZp4mgt67OsKdazd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cR8fbA/btsPLgqWjRz/ZKjbpfZp4mgt67OsKdazd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcR8fbA%2FbtsPLgqWjRz%2FZKjbpfZp4mgt67OsKdazd0%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;1273&quot; height=&quot;149&quot; data-filename=&quot;image (64).png&quot; data-origin-width=&quot;1273&quot; data-origin-height=&quot;149&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;&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: left;&quot; data-ke-size=&quot;size16&quot;&gt;♨ 웹 사이트 접속&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (65).png&quot; data-origin-width=&quot;1220&quot; data-origin-height=&quot;149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dJv0k6/btsPJwIzMcy/87pQNObkNM2n4Q98VVQEfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dJv0k6/btsPJwIzMcy/87pQNObkNM2n4Q98VVQEfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dJv0k6/btsPJwIzMcy/87pQNObkNM2n4Q98VVQEfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdJv0k6%2FbtsPJwIzMcy%2F87pQNObkNM2n4Q98VVQEfk%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;1220&quot; height=&quot;149&quot; data-filename=&quot;image (65).png&quot; data-origin-width=&quot;1220&quot; data-origin-height=&quot;149&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● 맨 아래 쪽 [정적 웹 사이트 호스팅] &amp;rarr; [버킷 웹 사이트 엔드포인트]주소 클릭해서 웹 사이트로 이&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (66).png&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;296&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Lt8Ar/btsPHLGvrQ9/FjUI6dgt4ruvUXBX0sgab1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Lt8Ar/btsPHLGvrQ9/FjUI6dgt4ruvUXBX0sgab1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Lt8Ar/btsPHLGvrQ9/FjUI6dgt4ruvUXBX0sgab1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLt8Ar%2FbtsPHLGvrQ9%2FFjUI6dgt4ruvUXBX0sgab1%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;1272&quot; height=&quot;296&quot; data-filename=&quot;image (66).png&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;296&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (67).png&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;269&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFIOeR/btsPKpIIVU7/k7ux5cWrcJnHHNgLqhA9a1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFIOeR/btsPKpIIVU7/k7ux5cWrcJnHHNgLqhA9a1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFIOeR/btsPKpIIVU7/k7ux5cWrcJnHHNgLqhA9a1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFIOeR%2FbtsPKpIIVU7%2Fk7ux5cWrcJnHHNgLqhA9a1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;602&quot; height=&quot;269&quot; data-filename=&quot;image (67).png&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;269&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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>협업 툴/AWS(Amazon Web Services)</category>
      <author>springpark</author>
      <guid isPermaLink="true">https://jjibba.tistory.com/305</guid>
      <comments>https://jjibba.tistory.com/305#entry305comment</comments>
      <pubDate>Wed, 30 Jul 2025 02:03:50 +0900</pubDate>
    </item>
    <item>
      <title>ELB(Elastic Load Balancing)</title>
      <link>https://jjibba.tistory.com/304</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;&amp;nbsp; ● 즉, 트래픽(네트워크 요청)을 여러 서버에 자동으로 분산 시켜주는 서비스&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; ● 사용자 수가 증가하여 많아지면 하나의 서버로는 감당이 불가하고, 서버에 따라 속도가 다르거나 죽는 경우가 생길 수 있음. 이&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;럴때 ELB가 자동으로 살아있는 서버로 분산 시켜 줌&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;▤ Load Balance :&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 트래픽을 여러 서버에 걸쳐 분산하는 장치로 특정 서버에 트래픽이 집중되는 것을 방지하고, 장애가 발생하더라도 정상적인&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;서버로 트래팩을 전달할 수 있도록 함&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● ELB에서는 특정 포트에서 HTTPS 요청을 처리하도록 설정할 수 있으므로 보안이 필요한 웹 사이트나 API 서버에서도 많이&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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: 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;▣ ELB의 종류&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;종류&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;설명&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;주요 사용처&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;ALB(Application Load Balancer)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;HTTP/HTTPS 등 애플리케이션 계층 트랙픽 분산&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;웹서버, REST API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;NLB(Network Load Balancer)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;TCP/UDP 기반의 네트워크 트래픽 분산&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;게임 서버, IoT, 고속 통신&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;CLB(Classic Load Balancer)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;옛날 방식, EC2-Classic 전용&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;지양(거의 사용 안함)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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 style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;▣ ELB의 핵심 기능&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;기능&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;상태 검사&lt;br /&gt;(Health Check)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;서버가 죽었는지 확인하고, 죽은 서버로는 트래픽 보내지 않음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;오토 스케일링 연동&lt;br /&gt;(Auto Scaling)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;EC2 수 늘어나면 자동 반영 (ELB가 새 인스턴스로도 분배)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;HTTPS 지원 (SSL/TTS)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;HTTPS 통신도 지원 (SSL 인증서 연결 가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;IP 기반 라우팅&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;지역, 클라이언트 IP 등 조건으로 라우팅 가능(ALB 기준)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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: left;&quot; data-ke-size=&quot;size16&quot;&gt;● Health Check : 서버가 살아 있는지 죽었는지 자동으로 확인하는 기능&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● Auto Scaling : 서버(EC2 인스턴스)를 자동으로 늘리고 줄여주는 기능&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 접속자 많을 때 서버 부족하면 느려짐 &amp;rarr; 자동으로 EC2 늘림 &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 접속자 적을 때 서버 낭비되면 &amp;rarr; 자동으로 EC2 줄임&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;◁ 참고) Health Check와 Auto Scaling 비교&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;항목&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;상태 검사&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;오토스케일링&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;역할&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;죽은 서버 감지&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;살아있는 서버 수를 자동 조절&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;사용 위치&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;ELB, Route 53 상태 검사&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;Auto Scaling Group&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;결과&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;죽은 서버는 트래픽에서 제외&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;필요한 만큼 EC2 인스턴스 수 조절&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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: 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;◈ HTTP와 HTTPS&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;★ HTTP(Hypertext Transfer Protocol)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 포트 번호 : 80&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 서버와 클라이언트 간에 주고 받는 데이터를 암호화하지 않고 통신하는 방식으로, 암호화가 되어 있지 않아 중간에 누군가 데&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;이터를 가로 챌 수 있음&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 브라우저 표시 : &lt;span&gt; &lt;/span&gt; &amp;ldquo;보안 안 됨&amp;rdquo; 또는 그냥 표시됨&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;▶ HTTPS(HyperText Transfer Protocol &lt;span data-token-index=&quot;1&quot;&gt;Secure)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 포트 번호 : 443&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 서버와 주고 받을 데이터를 암호화 함&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 클라이언트와 서버 간에 주고 받는 데이터를 암호화해서 통신하는 방식&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● SSL/TLS 인증서 필요&lt;/p&gt;
&lt;p 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;♪ ELB 구성 요소&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 리스너&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ● ELB로 들어오는 요청을 어떻게 처리할지 결정하는 규칙을 관리&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ● 리스너는 특정 포트와 프로토콜을 사용하여 클라이언트의 요청을 기다리고, 해당 요청을 ELB에서 설정된 규칙에 따라 적&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;절한 대상 그룹으로 전달&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ● 리스너를 잘 못 설정할 경우 올바른 대상 그룹으로 전달하지 못할 수 있으므로 리스너 설정에 유의&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 대상 그룹&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ● ELB 가 수신한 트래픽을 전달할 서버들의 집합&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ● 고장 난 서버에게 의미 없이 요청을 전달하지 않기 위해 ELB는 대상 그룹에 포함된 EC2인스턴스에게 일정한 주기로 요청&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;을 보냄&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ● 요청을 보냈을 때 200번대 HTTP 상태 코드가 반환된다면 서버가 정상적으로 작동한다고 판단&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ● 200번 대 이외의 상태 코드가 반환된다면 서버에 이상이 있다고 판단하고 해당 EC2 인스턴스로 요청을 전달하지 않음&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ● 이렇게 상태를 확인하는 요청을 일정한 주기로 보내는 것을 상태 검사(helath check) 라고 함&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ● 대상 그룹을 만들 때 상태 검사를 할 경로와 포트를 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;clubs; 대상 그룹 만들기&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;&amp;nbsp; &amp;nbsp; ● 인스턴스 만들기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (59).png&quot; data-origin-width=&quot;913&quot; data-origin-height=&quot;478&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2J2Qd/btsPDN3SejZ/KPDx6LWDtjnxsOLRjwWg2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2J2Qd/btsPDN3SejZ/KPDx6LWDtjnxsOLRjwWg2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2J2Qd/btsPDN3SejZ/KPDx6LWDtjnxsOLRjwWg2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2J2Qd%2FbtsPDN3SejZ%2FKPDx6LWDtjnxsOLRjwWg2k%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;913&quot; height=&quot;478&quot; data-filename=&quot;image (59).png&quot; data-origin-width=&quot;913&quot; data-origin-height=&quot;478&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (60).png&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjyqgE/btsPBMrOdyz/EaQwiDmaJwVzuLBfEBi5P0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjyqgE/btsPBMrOdyz/EaQwiDmaJwVzuLBfEBi5P0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjyqgE/btsPBMrOdyz/EaQwiDmaJwVzuLBfEBi5P0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjyqgE%2FbtsPBMrOdyz%2FEaQwiDmaJwVzuLBfEBi5P0%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;624&quot; height=&quot;505&quot; data-filename=&quot;image (60).png&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;505&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (61).png&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kCcDj/btsPEuixDKt/6fwNcWainkQPOKCEZJ6xk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kCcDj/btsPEuixDKt/6fwNcWainkQPOKCEZJ6xk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kCcDj/btsPEuixDKt/6fwNcWainkQPOKCEZJ6xk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkCcDj%2FbtsPEuixDKt%2F6fwNcWainkQPOKCEZJ6xk1%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;631&quot; height=&quot;439&quot; data-filename=&quot;image (61).png&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;439&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (62).png&quot; data-origin-width=&quot;599&quot; data-origin-height=&quot;128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mXGNe/btsPB3z9y1K/BgWEsD2rixUM0KN2GzGSH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mXGNe/btsPB3z9y1K/BgWEsD2rixUM0KN2GzGSH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mXGNe/btsPB3z9y1K/BgWEsD2rixUM0KN2GzGSH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmXGNe%2FbtsPB3z9y1K%2FBgWEsD2rixUM0KN2GzGSH0%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;599&quot; height=&quot;128&quot; data-filename=&quot;image (62).png&quot; data-origin-width=&quot;599&quot; data-origin-height=&quot;128&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (63).png&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;610&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cr2msv/btsPDK7adlZ/cjZZ1K7nSf6Ec1TRDNAzx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cr2msv/btsPDK7adlZ/cjZZ1K7nSf6Ec1TRDNAzx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cr2msv/btsPDK7adlZ/cjZZ1K7nSf6Ec1TRDNAzx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcr2msv%2FbtsPDK7adlZ%2FcjZZ1K7nSf6Ec1TRDNAzx1%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;947&quot; height=&quot;610&quot; data-filename=&quot;image (63).png&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;610&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (64).png&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;687&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLRxbz/btsPDE0glOh/7KwK3IiIYemKB3pXw6fvVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLRxbz/btsPDE0glOh/7KwK3IiIYemKB3pXw6fvVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLRxbz/btsPDE0glOh/7KwK3IiIYemKB3pXw6fvVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLRxbz%2FbtsPDE0glOh%2F7KwK3IiIYemKB3pXw6fvVK%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;946&quot; height=&quot;687&quot; data-filename=&quot;image (64).png&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;687&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (65).png&quot; data-origin-width=&quot;687&quot; data-origin-height=&quot;537&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIPjEp/btsPCojFS4V/A5jIyawHDh1qW0gkqaPIc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIPjEp/btsPCojFS4V/A5jIyawHDh1qW0gkqaPIc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIPjEp/btsPCojFS4V/A5jIyawHDh1qW0gkqaPIc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIPjEp%2FbtsPCojFS4V%2FA5jIyawHDh1qW0gkqaPIc1%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;687&quot; height=&quot;537&quot; data-filename=&quot;image (65).png&quot; data-origin-width=&quot;687&quot; data-origin-height=&quot;537&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: 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 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; &amp;nbsp; &amp;nbsp; ○ ELB가 사용자로부터 받은 트래픽을 대상 그룹에게 전달하는 방식을 설정&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○ 대상 그룹에 등록할 EC2 인스턴스는 IPv4의 주소를 가지고 있으며, 백엔드 서버는 80번 포트에서 실행되고, HTTP로 통신&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;하도록 구성되어 있으므로&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○ 아래와 같이 설정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (66).png&quot; data-origin-width=&quot;571&quot; data-origin-height=&quot;288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7tv5T/btsPBKOkdq7/kAi4skgiBrcDchjvsUJ700/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7tv5T/btsPBKOkdq7/kAi4skgiBrcDchjvsUJ700/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7tv5T/btsPBKOkdq7/kAi4skgiBrcDchjvsUJ700/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7tv5T%2FbtsPBKOkdq7%2FkAi4skgiBrcDchjvsUJ700%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;571&quot; height=&quot;288&quot; data-filename=&quot;image (66).png&quot; data-origin-width=&quot;571&quot; data-origin-height=&quot;288&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (67).png&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;165&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3W7xZ/btsPBhsgE7N/Z8kD1UkSIfZE2xS6dFAHK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3W7xZ/btsPBhsgE7N/Z8kD1UkSIfZE2xS6dFAHK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3W7xZ/btsPBhsgE7N/Z8kD1UkSIfZE2xS6dFAHK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3W7xZ%2FbtsPBhsgE7N%2FZ8kD1UkSIfZE2xS6dFAHK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;526&quot; height=&quot;165&quot; data-filename=&quot;image (67).png&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;165&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;&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 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; &amp;nbsp; &amp;nbsp; ○ 대상에 일정한 주기로 전송할 상태 검사를 설정&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○ HTTP,&amp;nbsp; /health&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (68).png&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHKwbP/btsPDrGK1kT/mMM1dzjNbccOv2QJgt0vN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHKwbP/btsPDrGK1kT/mMM1dzjNbccOv2QJgt0vN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHKwbP/btsPDrGK1kT/mMM1dzjNbccOv2QJgt0vN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHKwbP%2FbtsPDrGK1kT%2FmMM1dzjNbccOv2QJgt0vN0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;693&quot; height=&quot;505&quot; data-filename=&quot;image (68).png&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;505&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;&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;● 위 처럼 설정하면 로드 밸런서가 대상 그룹의 EC2 인스턴스에 HTTP 프로토콜을 사용하여 GET/health 요청을 일정한 주기로&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;보냄&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● 상태 검사를 하기 위해서는 설정한 경로에 맞는 상태 검사용 API를 구성해야 함&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: 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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (69).png&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/df0oqD/btsPBn6S85Z/wS2OIaKJsBdHFlf2KTLP10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/df0oqD/btsPBn6S85Z/wS2OIaKJsBdHFlf2KTLP10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/df0oqD/btsPBn6S85Z/wS2OIaKJsBdHFlf2KTLP10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdf0oqD%2FbtsPBn6S85Z%2FwS2OIaKJsBdHFlf2KTLP10%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;912&quot; height=&quot;440&quot; data-filename=&quot;image (69).png&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (70).png&quot; data-origin-width=&quot;708&quot; data-origin-height=&quot;382&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/If255/btsPDaZyhTj/mSBsoQSK1CptDeVFMJEg50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/If255/btsPDaZyhTj/mSBsoQSK1CptDeVFMJEg50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/If255/btsPDaZyhTj/mSBsoQSK1CptDeVFMJEg50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIf255%2FbtsPDaZyhTj%2FmSBsoQSK1CptDeVFMJEg50%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;708&quot; height=&quot;382&quot; data-filename=&quot;image (70).png&quot; data-origin-width=&quot;708&quot; data-origin-height=&quot;382&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (71).png&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LziiH/btsPCLy0Oxd/gjBTVs9CKMHkMJ4dbjdDu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LziiH/btsPCLy0Oxd/gjBTVs9CKMHkMJ4dbjdDu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LziiH/btsPCLy0Oxd/gjBTVs9CKMHkMJ4dbjdDu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLziiH%2FbtsPCLy0Oxd%2FgjBTVs9CKMHkMJ4dbjdDu0%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;740&quot; height=&quot;187&quot; data-filename=&quot;image (71).png&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;187&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;&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 style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;▣ ELB에서 로드 밸런서 생성&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 로드 밸런서는 사용한 만큼 요금 부과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (72).png&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;406&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z27KK/btsPBmAdKLJ/n2UkT5ffRTvIAFhPoq68v1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z27KK/btsPBmAdKLJ/n2UkT5ffRTvIAFhPoq68v1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z27KK/btsPBmAdKLJ/n2UkT5ffRTvIAFhPoq68v1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ27KK%2FbtsPBmAdKLJ%2Fn2UkT5ffRTvIAFhPoq68v1%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;257&quot; height=&quot;406&quot; data-filename=&quot;image (72).png&quot; data-origin-width=&quot;257&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;p 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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (73).png&quot; data-origin-width=&quot;119&quot; data-origin-height=&quot;59&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mxLML/btsPC97olNB/HWurfq0rTL39q3kmRMb9e1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mxLML/btsPC97olNB/HWurfq0rTL39q3kmRMb9e1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mxLML/btsPC97olNB/HWurfq0rTL39q3kmRMb9e1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmxLML%2FbtsPC97olNB%2FHWurfq0rTL39q3kmRMb9e1%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;119&quot; height=&quot;59&quot; data-filename=&quot;image (73).png&quot; data-origin-width=&quot;119&quot; data-origin-height=&quot;59&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;&amp;nbsp;&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-filename=&quot;image (74).png&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;284&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t2ZFT/btsPDVUY827/9mpH7wkUIBw0mi18ta0KgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t2ZFT/btsPDVUY827/9mpH7wkUIBw0mi18ta0KgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t2ZFT/btsPDVUY827/9mpH7wkUIBw0mi18ta0KgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft2ZFT%2FbtsPDVUY827%2F9mpH7wkUIBw0mi18ta0KgK%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;762&quot; height=&quot;284&quot; data-filename=&quot;image (74).png&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;284&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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-filename=&quot;image (75).png&quot; data-origin-width=&quot;848&quot; data-origin-height=&quot;730&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPeGf0/btsPCoYjb8X/gJwsmrY65L8EtBebXh0aC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPeGf0/btsPCoYjb8X/gJwsmrY65L8EtBebXh0aC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPeGf0/btsPCoYjb8X/gJwsmrY65L8EtBebXh0aC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPeGf0%2FbtsPCoYjb8X%2FgJwsmrY65L8EtBebXh0aC0%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;848&quot; height=&quot;730&quot; data-filename=&quot;image (75).png&quot; data-origin-width=&quot;848&quot; data-origin-height=&quot;730&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;&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; &amp;nbsp; ○ 로드 밸런서 이름만 입력하고 나머지는 기본으로 설정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (76).png&quot; data-origin-width=&quot;902&quot; data-origin-height=&quot;423&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oOxTP/btsPBGSE9wa/8lCAQJGeYgMXaPKimBkyM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oOxTP/btsPBGSE9wa/8lCAQJGeYgMXaPKimBkyM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oOxTP/btsPBGSE9wa/8lCAQJGeYgMXaPKimBkyM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoOxTP%2FbtsPBGSE9wa%2F8lCAQJGeYgMXaPKimBkyM1%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;902&quot; height=&quot;423&quot; data-filename=&quot;image (76).png&quot; data-origin-width=&quot;902&quot; data-origin-height=&quot;423&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;&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; &amp;nbsp; ○ 로드 밸런서가 트래픽을 보낼 가용 영역을 선택&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 가용 영역(Availability Zone) : 같은 리전에서 서로 다른 위치에 있는 데이터 센터를 의미하며, 한 데이터 센터에서 문제가 생&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;겨도 다른 가용 영역에서 계속 작동하므로 서비스를 중단 없이 운영할 수 있음&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 실습에서만 모든 가용 영역으로 트래픽을 보내도록 설정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (77).png&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjUcEh/btsPDNQkAUR/uTdAUsRKkXJYvFwvj7fFi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjUcEh/btsPDNQkAUR/uTdAUsRKkXJYvFwvj7fFi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjUcEh/btsPDNQkAUR/uTdAUsRKkXJYvFwvj7fFi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjUcEh%2FbtsPDNQkAUR%2FuTdAUsRKkXJYvFwvj7fFi0%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;915&quot; height=&quot;578&quot; data-filename=&quot;image (77).png&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;578&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;&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (78).png&quot; data-origin-width=&quot;869&quot; data-origin-height=&quot;176&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QCsWY/btsPCIWzOue/gzgvvLqceTIBNVLNEk2mxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QCsWY/btsPCIWzOue/gzgvvLqceTIBNVLNEk2mxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QCsWY/btsPCIWzOue/gzgvvLqceTIBNVLNEk2mxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQCsWY%2FbtsPCIWzOue%2FgzgvvLqceTIBNVLNEk2mxk%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;869&quot; height=&quot;176&quot; data-filename=&quot;image (78).png&quot; data-origin-width=&quot;869&quot; data-origin-height=&quot;176&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: left;&quot; data-ke-size=&quot;size16&quot;&gt;● HTTP , Anywhere-IPv4&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● HTTPS, Anywhere-IPv4&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (79).png&quot; data-origin-width=&quot;923&quot; data-origin-height=&quot;617&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/df907G/btsPDoXEOio/nRolFWV1mVYIl9fcciJpg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/df907G/btsPDoXEOio/nRolFWV1mVYIl9fcciJpg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/df907G/btsPDoXEOio/nRolFWV1mVYIl9fcciJpg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdf907G%2FbtsPDoXEOio%2FnRolFWV1mVYIl9fcciJpg0%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;923&quot; height=&quot;617&quot; data-filename=&quot;image (79).png&quot; data-origin-width=&quot;923&quot; data-origin-height=&quot;617&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (80).png&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7wwmr/btsPEupjkYF/2w43vTHgktSxhaFPH3cxzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7wwmr/btsPEupjkYF/2w43vTHgktSxhaFPH3cxzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7wwmr/btsPEupjkYF/2w43vTHgktSxhaFPH3cxzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7wwmr%2FbtsPEupjkYF%2F2w43vTHgktSxhaFPH3cxzk%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;918&quot; height=&quot;232&quot; data-filename=&quot;image (80).png&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;232&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (81).png&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJtZDf/btsPCkaDYFN/SgX4RSXtSekOX80niRv5F0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJtZDf/btsPCkaDYFN/SgX4RSXtSekOX80niRv5F0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJtZDf/btsPCkaDYFN/SgX4RSXtSekOX80niRv5F0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJtZDf%2FbtsPCkaDYFN%2FSgX4RSXtSekOX80niRv5F0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;745&quot; height=&quot;246&quot; data-filename=&quot;image (81).png&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;246&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;&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (82).png&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;256&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxPYkf/btsPCjQdXM1/mCE43Kf6qcEnmlKXW6quN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxPYkf/btsPCjQdXM1/mCE43Kf6qcEnmlKXW6quN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxPYkf/btsPCjQdXM1/mCE43Kf6qcEnmlKXW6quN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxPYkf%2FbtsPCjQdXM1%2FmCE43Kf6qcEnmlKXW6quN0%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;682&quot; height=&quot;256&quot; data-filename=&quot;image (82).png&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;256&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;&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; &amp;nbsp; ○ 로드 밸런서로 들어온 요청을 어떤 대상 그룹에 전달할 지 설정&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; ○ 사용자가 HTTP를 활용하여 ELB의 80번 포트로 보낸 요청을 앞에서 선택한 대상 그룹으로 전달하겠다는 의미&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (83).png&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnVmmP/btsPDqgOAg1/nG77ThNnjGBwSI0Qq54SA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnVmmP/btsPDqgOAg1/nG77ThNnjGBwSI0Qq54SA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnVmmP/btsPDqgOAg1/nG77ThNnjGBwSI0Qq54SA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnVmmP%2FbtsPDqgOAg1%2FnG77ThNnjGBwSI0Qq54SA1%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;980&quot; height=&quot;302&quot; data-filename=&quot;image (83).png&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;302&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (84).png&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccMtG6/btsPBE1F7k2/hXduRLeP1S1gGLSJ0tWyFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccMtG6/btsPBE1F7k2/hXduRLeP1S1gGLSJ0tWyFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccMtG6/btsPBE1F7k2/hXduRLeP1S1gGLSJ0tWyFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccMtG6%2FbtsPBE1F7k2%2FhXduRLeP1S1gGLSJ0tWyFk%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;986&quot; height=&quot;154&quot; data-filename=&quot;image (84).png&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;154&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (85).png&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;668&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z4Sja/btsPDGwZUmp/LbHVvSJUDOKKVCNCGggzKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z4Sja/btsPDGwZUmp/LbHVvSJUDOKKVCNCGggzKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z4Sja/btsPDGwZUmp/LbHVvSJUDOKKVCNCGggzKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz4Sja%2FbtsPDGwZUmp%2FLbHVvSJUDOKKVCNCGggzKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;976&quot; height=&quot;668&quot; data-filename=&quot;image (85).png&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;668&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;■ HTTPS 적용&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;1. 1단계 : SSL/TLS 인증서 발급 받기&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;2. 2단계 : 로드 밸런서에 HTTPS 용 리스너 추가하기&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;3. 3단계 : HTTP에서 HTTPS로 리디렉션 설정&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;▣ SSL/TLS 인증서 발급 받기&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● HTTPS를 적용하려면 가장 먼저 SSL/TLS 인증서 발급 받기&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;● AWS는 ACM(AWS Certificate Manager)이라는 서비스를 활용해서 인증서를 발급 받을 수 있음&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;♨ ACM 콘솔 들어가기&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; ● 검색 : Certificate Manager 서비스 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (86).png&quot; data-origin-width=&quot;592&quot; data-origin-height=&quot;253&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1UaV4/btsPEwAFBCk/WGkOik0tElHekeIAedvWPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1UaV4/btsPEwAFBCk/WGkOik0tElHekeIAedvWPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1UaV4/btsPEwAFBCk/WGkOik0tElHekeIAedvWPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1UaV4%2FbtsPEwAFBCk%2FWGkOik0tElHekeIAedvWPK%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;592&quot; height=&quot;253&quot; data-filename=&quot;image (86).png&quot; data-origin-width=&quot;592&quot; data-origin-height=&quot;253&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;&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: left;&quot; data-ke-size=&quot;size16&quot;&gt;● 리전 선택 및 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (87).png&quot; data-origin-width=&quot;98&quot; data-origin-height=&quot;41&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpToE5/btsPEtcRJCA/GGkoBcnsikirLaQ5VWBTt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpToE5/btsPEtcRJCA/GGkoBcnsikirLaQ5VWBTt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpToE5/btsPEtcRJCA/GGkoBcnsikirLaQ5VWBTt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdpToE5%2FbtsPEtcRJCA%2FGGkoBcnsikirLaQ5VWBTt1%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;98&quot; height=&quot;41&quot; data-filename=&quot;image (87).png&quot; data-origin-width=&quot;98&quot; data-origin-height=&quot;41&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: 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;&amp;darr; 인증서 요청&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (88).png&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;579&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSFAUu/btsPCTqeOxR/tmJqnyJB2XSnfkN4vg9IdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSFAUu/btsPCTqeOxR/tmJqnyJB2XSnfkN4vg9IdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSFAUu/btsPCTqeOxR/tmJqnyJB2XSnfkN4vg9IdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSFAUu%2FbtsPCTqeOxR%2FtmJqnyJB2XSnfkN4vg9IdK%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;986&quot; height=&quot;579&quot; data-filename=&quot;image (88).png&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;579&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (89).png&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;269&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uFK92/btsPC4yjWC2/YKqU5f6BaeyTbTbS4Puvwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uFK92/btsPC4yjWC2/YKqU5f6BaeyTbTbS4Puvwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uFK92/btsPC4yjWC2/YKqU5f6BaeyTbTbS4Puvwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuFK92%2FbtsPC4yjWC2%2FYKqU5f6BaeyTbTbS4Puvwk%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;773&quot; height=&quot;269&quot; data-filename=&quot;image (89).png&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;269&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● 퍼블릭 인증서 요청 화면에서 [완전히 정규화된 도메인 이름]에 SSL/TLS 인증서를 발급 받을 도메인 이름 작성&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-filename=&quot;image (90).png&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;771&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0xVRX/btsPB7oXw6z/cL0CRemUjdHrUTKOeVYWbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0xVRX/btsPB7oXw6z/cL0CRemUjdHrUTKOeVYWbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0xVRX/btsPB7oXw6z/cL0CRemUjdHrUTKOeVYWbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0xVRX%2FbtsPB7oXw6z%2FcL0CRemUjdHrUTKOeVYWbK%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;814&quot; height=&quot;771&quot; data-filename=&quot;image (90).png&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;771&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● 인증서 검증하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (91).png&quot; data-origin-width=&quot;981&quot; data-origin-height=&quot;151&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMS0qw/btsPDHJnqjg/zoJNsgckdGd2pRAKLwclok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMS0qw/btsPDHJnqjg/zoJNsgckdGd2pRAKLwclok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMS0qw/btsPDHJnqjg/zoJNsgckdGd2pRAKLwclok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMS0qw%2FbtsPDHJnqjg%2FzoJNsgckdGd2pRAKLwclok%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;981&quot; height=&quot;151&quot; data-filename=&quot;image (91).png&quot; data-origin-width=&quot;981&quot; data-origin-height=&quot;151&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● 요청한 인증서의 상태가 [검증 대기 중]이라고 표시되어 있음, 이는 인증서를 요청했다고 해서 바로 발급되지 않기 때문&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;● 해커가 아닌 실제 도메인 소유자가 인증서를 요청했는지 인증하는 절차가 필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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>협업 툴/AWS(Amazon Web Services)</category>
      <author>springpark</author>
      <guid isPermaLink="true">https://jjibba.tistory.com/304</guid>
      <comments>https://jjibba.tistory.com/304#entry304comment</comments>
      <pubDate>Tue, 29 Jul 2025 23:21:44 +0900</pubDate>
    </item>
    <item>
      <title>Route 53</title>
      <link>https://jjibba.tistory.com/303</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;&amp;nbsp; ● 즉, AWS에서 제공하는 DNS + 도메인 관리 서비스&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; ● Route : 인터넷 트래픽 경로를 지정해 줌&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; ● 53 : DNS는 기본적으로 포트 번호 53번을 사용&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; ● 권한 있는 (authoritative) DNS 및 도메인 등록, 트래픽 라우팅 기능을 제공하는 highly available and scalabale DNS 웹 서비&amp;nbsp; &amp;nbsp; &amp;nbsp; &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;♨ DNS(Domain Name System) 서비스&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 도메인 &amp;harr; IP 주소로 변환&lt;/p&gt;
&lt;p 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;▣ Route 53의 주요 기능&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; ● DNS 관리&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○ Alias 레코드로 AWS 리소스(ELB, CloudFront, S3 정적 웹사이트 등) 연결 가능&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;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○ Route 53에서 도메인 직접 등록 가능&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○ 별도로 등록한 도메인도 NS 레코드 변경으로 위임 가능&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;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○ 사용자 위치, 서버 상태에 따라 어디로 보낼지 결정&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○ 단순(Simple), 지연 시간 기반(Latency), 지리적(Geolocation), 가중치(Weighted), 상태 기반(Failover) 등 다양한 정책 지원&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ○ Health Check(서버가 살아있는지 주기적으로 체)연계 가능&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;▣ 웹 서비스에 도메인을 적용하는 이유&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;여러가지 이유가 있지만 그 중에서도 보안 설정인 HTTPS 를 적용해야 하기 때문&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; 일반적으로 IP 주소에는 HTTPS를 적용할 수 없음&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;▣ Route 53 사용하는 때&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;● EC2, S3, CloudFront 등 AWS 서비스와 도메인을 연결할 때&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;● 여러 지역에서 서버 운영할 때&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &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: left;&quot; data-ke-size=&quot;size16&quot;&gt;▣ DNS 레코드&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;● 도메인 이름과 연결된 정보를 저장하는 단위&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;● 사용자가 도메인에 접속하면, DNS는 해당 도메인의 레코드를 조회하여 IP 주소 등 필요한 정보를 반환하고, 이를 통해 사용&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 자가 도메인만 입력해도 실제 서버로 연결할 수 있음&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;there4; 레코드 종류&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ● A 레코드 : 도메인 &amp;rarr; IPv4 주소에 연결할 때 사용&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ● AAAA 레코드 : 도메인 &amp;rarr; IPv6 주소에 연결할 때 사용&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ● CNAME 레코드 : 도메인 &amp;rarr; 다른 도메인(즉, 도메인을 특정 도메인 주소에 연결할 때 사용)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ● Alias 레코드 : AWS 리소스 전용. CNAME 처럼 동작하나 루트 도메인 지원&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ● 이외에도 다양&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ㉿ 실무에서는 Route 53만 고집하지는 않음,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 설령 서비스를 전부 AWS로 구축했다고 하더라도 도메인 서비스는 외부 서비스를 사용하기도 함&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; &amp;nbsp; &amp;nbsp; ■ Route 53에서 도메인 구입&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;㏇ Route 53을 글로벌 서비스 임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; region을 지정하지 않음 ( IAM, CloudFront , Route 53)&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. Route 53 콘솔&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (56).png&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;213&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjSzNh/btsPBGSCNdp/soox9hBRtWX3tFv4mHwjg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjSzNh/btsPBGSCNdp/soox9hBRtWX3tFv4mHwjg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjSzNh/btsPBGSCNdp/soox9hBRtWX3tFv4mHwjg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjSzNh%2FbtsPBGSCNdp%2Fsoox9hBRtWX3tFv4mHwjg0%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;763&quot; height=&quot;213&quot; data-filename=&quot;image (56).png&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;213&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;2. 도메인 등록 화면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (57).png&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;599&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wbCqw/btsPBHqxVcS/e7k7A4J9nuTBySnmjSC631/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wbCqw/btsPBHqxVcS/e7k7A4J9nuTBySnmjSC631/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wbCqw/btsPBHqxVcS/e7k7A4J9nuTBySnmjSC631/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwbCqw%2FbtsPBHqxVcS%2Fe7k7A4J9nuTBySnmjSC631%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;1142&quot; height=&quot;599&quot; data-filename=&quot;image (57).png&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;599&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: left;&quot; data-ke-size=&quot;size16&quot;&gt;◎ DNS 관리&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ● 호스팅 영역 생성 버튼 &amp;rarr; 특정 도메인(example.com 등)의 DNS 설정을 시작하는 버튼&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; &amp;nbsp; &amp;nbsp; ● 상태 검사 생성 &lt;span data-token-index=&quot;1&quot;&gt; &lt;/span&gt;&amp;rarr; 웹사이트 정상 여부를 실시간 확인할 수 있는 기능&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; &amp;nbsp; &amp;nbsp; ● 정책 생성 &amp;rarr; 여러 서버나 리전에 분산할 때 쓰는 정책을 설정할 수 있음&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; &amp;nbsp; &amp;nbsp; ● 도메인 등록 버튼 &amp;rarr; Route 53을 통해 도메인을 구매하거나 이전 가능&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; &amp;nbsp; &amp;nbsp; ● 기존 도메인을 입력하고 Route 53으로 이전하거나 가용 여부 확인 가능&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-filename=&quot;image (58).png&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;715&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4xea3/btsPBlOJ2eN/QLgZoz15LfDbV0Dr0aVrR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4xea3/btsPBlOJ2eN/QLgZoz15LfDbV0Dr0aVrR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4xea3/btsPBlOJ2eN/QLgZoz15LfDbV0Dr0aVrR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4xea3%2FbtsPBlOJ2eN%2FQLgZoz15LfDbV0Dr0aVrR0%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;842&quot; height=&quot;715&quot; data-filename=&quot;image (58).png&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;715&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: left;&quot; data-ke-size=&quot;size16&quot;&gt;무료 계정에서는 도메인 등록이 되지 않음.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;정식 요금제로 전환해야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>협업 툴/AWS(Amazon Web Services)</category>
      <author>springpark</author>
      <guid isPermaLink="true">https://jjibba.tistory.com/303</guid>
      <comments>https://jjibba.tistory.com/303#entry303comment</comments>
      <pubDate>Tue, 29 Jul 2025 00:43:41 +0900</pubDate>
    </item>
  </channel>
</rss>