<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Developing</title>
    <link>https://developing.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sun, 12 Jul 2026 05:05:56 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>DEV_BLOG</managingEditor>
    <image>
      <title>Developing</title>
      <url>https://tistory1.daumcdn.net/tistory/4655380/attach/ccd6ed2afdbb4435861271d784432f35</url>
      <link>https://developing.tistory.com</link>
    </image>
    <item>
      <title>Oracle Cloud Free tier를 향한 부정적인 시선에 관해(묻지마 서버 삭제,계정 Ban)</title>
      <link>https://developing.tistory.com/106</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;과거에 취업준비중인 대외활동 동료들을 위해 Oracle 쪽에 Free tier로 VM instance를 하나 생성했었는데, 도메인 갱신 기간이 임박했어서 오랜만에 Oracle Cloud과 관련된 소식들을 찾아보게 되었다.&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;본인이 Oracle Cloud Free tier를 사용했던 장점들로는 다음과 같다.&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. 평생 무료 Free tier&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. AWS에 비해 인스턴스 성능이 x배 좋다.(한때 이걸로 광고하던데 지금은 그런 설명은 빠져있는듯하다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 서버 2대/용량 200GB까지 무료&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 별도로 유료 서비스를 활용하는 것이 아니면 과금이 측정될 우려가 다른 서비스에 비해 덜하다. (현재는 그렇지 않아 보임)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;AWS, Azure는 Free tier가 1년이 걸려있고, GCP는 3개월 정도 Free tier에 크레딧을&amp;nbsp;주는 것으로 알고 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 NCP 같은 경우 개인용으로 사용하기에는 비용적으로 부담이 될 듯 보인다. (3개월 credit 10만원)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종합적으로는 Oracle Cloud Free tier를 활용하면 개발자들이 사이드 프로젝트를 무료로 가볍게 돌리기 좋을 것이라고 생각하였는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Oracle Cloud Free tier를 활용하다 갑자기 서버가 없어지거나 계정자체가 사라져 버리는 사례가 꽤나 있었다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-12-25 오후 6.31.49.png&quot; data-origin-width=&quot;1518&quot; data-origin-height=&quot;910&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBGKG6/btsCIHVKnLd/7kHzpvE2MrUkKmJWLdh25k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBGKG6/btsCIHVKnLd/7kHzpvE2MrUkKmJWLdh25k/img.png&quot; data-alt=&quot;Instance / Boot Volume 삭제사례&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBGKG6/btsCIHVKnLd/7kHzpvE2MrUkKmJWLdh25k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBGKG6%2FbtsCIHVKnLd%2F7kHzpvE2MrUkKmJWLdh25k%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;1518&quot; height=&quot;910&quot; data-filename=&quot;스크린샷 2023-12-25 오후 6.31.49.png&quot; data-origin-width=&quot;1518&quot; data-origin-height=&quot;910&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Instance / Boot Volume 삭제사례&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-12-25 오후 6.40.29.png&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;1230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oRcuD/btsCywBK4nd/8cR1zsAmIWKj0JqTMctHa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oRcuD/btsCywBK4nd/8cR1zsAmIWKj0JqTMctHa1/img.png&quot; data-alt=&quot;다수의 문의 거절 사례&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oRcuD/btsCywBK4nd/8cR1zsAmIWKj0JqTMctHa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoRcuD%2FbtsCywBK4nd%2F8cR1zsAmIWKj0JqTMctHa1%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;567&quot; height=&quot;667&quot; data-filename=&quot;스크린샷 2023-12-25 오후 6.40.29.png&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;1230&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;다수의 문의 거절 사례&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더군다나 Boot Volume에 대해서 이제 과금을 부여하는 듯하다. 해외 유튜버분의 영상(&lt;a href=&quot;https://www.youtube.com/watch?v=il8C9nIGgZk&amp;amp;ab_channel=IdeaSpot&quot;&gt;https://www.youtube.com/watch?v=il8C9nIGgZk&amp;amp;ab_channel=IdeaSpot&lt;/a&gt;)을 통해 알게 된 사실인데, 실제로 VM을 1대 돌리고 있는 계정에 가서 확인해 보았다.&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;스크린샷 2023-12-25 오후 6.45.12.png&quot; data-origin-width=&quot;2810&quot; data-origin-height=&quot;1546&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dahxSn/btsCyoqj99F/bKFbR9MppZCVEV4gaLwFKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dahxSn/btsCyoqj99F/bKFbR9MppZCVEV4gaLwFKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dahxSn/btsCyoqj99F/bKFbR9MppZCVEV4gaLwFKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdahxSn%2FbtsCyoqj99F%2FbKFbR9MppZCVEV4gaLwFKK%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;2810&quot; height=&quot;1546&quot; data-filename=&quot;스크린샷 2023-12-25 오후 6.45.12.png&quot; data-origin-width=&quot;2810&quot; data-origin-height=&quot;1546&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;VM을 추가로 생성하려고 보니 상단에 '무료 계층 계정을 사용하고 있다'라고 명시되어 있음에도 부트 볼륨에 대한 과금이 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'유료 업그레이드만 누르지 않으면 Oracle에서 과금당할 일이 없다'라는 것 때문에 Oracle Cloud Free tier를 사용했었는데, 이제는 메리트가 많이 사라져 버린 듯하다.&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;Oracle Cloud가 서버 세팅할 때 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;다른 클라우드랑&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;차이가 약간 있어서 관련 포스팅을 준비 중이었지만, 이제는 Oracle Cloud Free tier의 잠재적 위험성과 관련된 포스팅을 하고 있는 것이 아이러니한 상황이다.(게시자의 Oracle Free Tier Instance도 어느 날 갑자기 사라질 수도..^^;;;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피해자들은 모두 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;'아무 이유도 알 수 없이 갑자기 서버/계정이 삭제되었다'라는&lt;/b&gt;&lt;/span&gt; 입장이다. 추측하는 분들의 입장으로는 90일간 유료 Free Trial의 기간이 끝난 후 Free Tier로 적용될 때 발생하는 버그이거나 트래픽이 거의 발생하지 않는 경우라고 하는데, 그 경우에 해당되지 않고 '묻지 마 삭제/Ban' 된 경우가 꽤 많아 보인다.&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;&lt;a href=&quot;https://www.youtube.com/watch?v=iikyFD-GIvw&amp;amp;ab_channel=MinelsGO&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=iikyFD-GIvw&amp;amp;ab_channel=MinelsGO&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=il8C9nIGgZk&amp;amp;ab_channel=IdeaSpot&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=il8C9nIGgZk&amp;amp;ab_channel=IdeaSpot&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Diary/diary</category>
      <category>Oracle Cloud</category>
      <category>Oracle Cloud Free Tier</category>
      <author>DEV_BLOG</author>
      <guid isPermaLink="true">https://developing.tistory.com/106</guid>
      <comments>https://developing.tistory.com/106#entry106comment</comments>
      <pubDate>Mon, 25 Dec 2023 18:55:13 +0900</pubDate>
    </item>
    <item>
      <title>AWS CLI S3 작업 업무 효율높이기(PS 스크립트화,pandas 활용)</title>
      <link>https://developing.tistory.com/105</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[상황]&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS CLI를 활용하여 수만 ~ 수십만 건의 데이터를 S3 Bucket-&amp;gt;S3 Bucket, Local-&amp;gt;S3 Bucket 등으로 여러 차례 마이그레이션하면서 다음과 같은 불편함을 느꼈다.&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. AWS CLI Command를 실행하였을 때 작업 예상 대기시간을 알기 어렵다.(소요시간 제공 기능이 따로 없음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 숫자네이밍으로 구성된 폴더 단위로 업로드하는데 업로드 현황 파악을 하기가 매우 힘들었다. 잘 업로드되었는지 AWS 콘솔에서 여러 폴더를 검색해야 했고 굉장한 피로감이 느껴졌다.(--debug 옵션을 주어서 로그를 남기는 경우 로그파일이 너무 커져서 notepad로 열리지도 않았다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 폴더 네이밍을 고려하여 범위지정 업로드를 위해 include, exclude 옵션으로 wildcard 활용을 강구하였다. 예시 폴더들을 만들어 여러 테스트를 해보았을 때는 와일드카드가 의도대로 전부 동작했지만, 실제로 업로드 업무를 위해 include로 여러 옵션을 주었을 때 한 개의 옵션만 지정되는 경우가 발생하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 많은 폴더가 모여있는 path에서 AWS S3 커맨드를 실행하였을 때 굉장히 오랜 시간이 걸린 후에 작업이 시작되는 현상이 있었다. 따라서 사전에 실행되는 과정을 볼 수 있는 --dry-run 옵션을 주었을 때에도 시간이 소요되어서 피로감이 느껴졌다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[개선 방향 아이디어]&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 폴더별로 Command를 실행하였을 때는 대기시간이 delay 되지 않고 업로드 되었다. 따라서 예를 들어 업로드단위의 폴더가 10000개가 있다면 10000개의 폴더에 대해 각각 command를 실행하는 스크립트가 있으면 편리할 것으로 간주하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 1번이 가능하면 업로드 현황을 공유하기에도 수월하다고 판단하였고, 소요시간에 따른 업로드 현황을 보면서 작업 완료 시간의 최대치를 유추할 수 있을 것이라 기대하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. ChatGPT를 괴롭혀서 작업에 필요한 예시코드를 작성하는 데에 공수가 덜 들게 작업하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[게시물 선수조건]&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Bucket Policy설정, IAM 설정에 대한 내용은 전부 알고 있다고 간주&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- AWS CLI 사용법 알고 있다고 간주&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Pycharm, Windows Terminal(powershell), NotePad+, Excel 같은 도구를 잘 활용할 수 있다고 간주&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- NAS Server-&amp;gt; S3 BUCKET에&amp;nbsp; 업로드하는 경우를 가정(드라이버 지정 및 경로접근 알고 있다고 간주)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[업무 프로세스]&lt;/b&gt;&lt;/h4&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. Python Pandas 활용하기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;NAS Server Directory 목록 가져오기&lt;/li&gt;
&lt;li&gt;Directory 목록 엑셀로 만들기&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1699119207309&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import os
import pandas as pd

# NAS SERVER PATH
folder_path = '{NAS_SERVER_DRIVER_NAME}:\{filePath}'

folder_list = [folder for folder in os.listdir(folder_path) if os.path.isdir(os.path.join(folder_path,folder))]

df = pd.DataFrame({'폴더 이름' : folder_list})

# NAS Server의 파일명을 저장할 Local의 엑셀파일
excel_file_path = 'C:\\upload_file_list.xlsx'
df.to_excel(excel_file_path, index=False)

print(f'폴더 이름이 저장된 엑셀 파일 : {excel_file_path}')&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;2. AWS CLI Command 양식 저장하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1699119269971&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# --recursive: 하위의 디렉토리도 포함
# --dryrun: 어떻게 업로드가 진행되는지 관찰가능(실제로 업로드 되지는 않음) 

# 실제 업로드 이전에 테스트해보기
aws s3 cp {$NAS_SERVER_DRIVER_NAME}:\{$filePath} s3://{$bucketName}/{$bucketPath} -- recursive --dryrun

# 업로드 하기 (dryrun option 제거)
aws s3 cp {$NAS_SERVER_DRIVER_NAME}:\{$filePath} s3://{$bucketName}/{$bucketPath} -- recursive&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;3. NodePad + Excel 활용하여 AWS CLI Command 목록 만들기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;엑셀에서 Command list 만들기&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;s3 cli 사용예시.png&quot; data-origin-width=&quot;971&quot; data-origin-height=&quot;389&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BkwAq/btszHSOSlXt/B076KrXCaKSI9inJC9W2fK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BkwAq/btszHSOSlXt/B076KrXCaKSI9inJC9W2fK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BkwAq/btszHSOSlXt/B076KrXCaKSI9inJC9W2fK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBkwAq%2FbtszHSOSlXt%2FB076KrXCaKSI9inJC9W2fK%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;971&quot; height=&quot;389&quot; data-filename=&quot;s3 cli 사용예시.png&quot; data-origin-width=&quot;971&quot; data-origin-height=&quot;389&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;NotePad 활용하여 Script에 쓰일 수 있도록 문자열 치환하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;notepad.png&quot; data-origin-width=&quot;1201&quot; data-origin-height=&quot;243&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lED1z/btszMaUrxZY/KeqISqxtKboFMOcJiwfSVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lED1z/btszMaUrxZY/KeqISqxtKboFMOcJiwfSVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lED1z/btszMaUrxZY/KeqISqxtKboFMOcJiwfSVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlED1z%2FbtszMaUrxZY%2FKeqISqxtKboFMOcJiwfSVk%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;1201&quot; height=&quot;243&quot; data-filename=&quot;notepad.png&quot; data-origin-width=&quot;1201&quot; data-origin-height=&quot;243&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1699119415643&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 찾을내용 ( aws ) &amp;gt; 바꿀 내용( &quot;aws )

# 찾을내용 ( --recursive ) &amp;gt; 바꿀 내용( --recursive&quot;, )&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;s3 cli 사용예시2.png&quot; data-origin-width=&quot;637&quot; data-origin-height=&quot;241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRo09E/btszOPoP8uS/RnJhJKviA3KX8GVtU3PkF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRo09E/btszOPoP8uS/RnJhJKviA3KX8GVtU3PkF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRo09E/btszOPoP8uS/RnJhJKviA3KX8GVtU3PkF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRo09E%2FbtszOPoP8uS%2FRnJhJKviA3KX8GVtU3PkF1%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;637&quot; height=&quot;241&quot; data-filename=&quot;s3 cli 사용예시2.png&quot; data-origin-width=&quot;637&quot; data-origin-height=&quot;241&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;4. PowerShell Script로 AWS CLI&amp;nbsp; Command 실행하기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;엑셀의 Command 목록 복사 -&amp;gt; .PS1 으로 확장자 저장 -&amp;gt; 오른쪽마우스 -&amp;gt; PowerShell에서 실행하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1699119596237&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$commands = @(
&quot;aws s3 cp Z:\data\1010\ s3://my_bucket/data/10/ --recursive&quot;,
&quot;aws s3 cp Z:\data\100010\ s3://my_bucket/data/1000/ --recursive&quot;,
&quot;aws s3 cp Z:\data\10000110\ s3://my_bucket/data/100001/ --recursive&quot;,
&quot;aws s3 cp Z:\data\10000610\ s3://my_bucket/data/100006/ --recursive&quot;,
&quot;aws s3 cp Z:\data\10000710\ s3://my_bucket/data/100007/ --recursive&quot;,
&quot;aws s3 cp Z:\data\10000910\ s3://my_bucket/data/100009/ --recursive&quot;,
&quot;aws s3 cp Z:\data\10001010\ s3://my_bucket/data/100010/ --recursive&quot;,
&quot;aws s3 cp Z:\data\10001110\ s3://my_bucket/data/100011/ --recursive&quot;,
&quot;aws s3 cp Z:\data\10001210\ s3://my_bucket/data/100012/ --recursive&quot;,
&quot;aws s3 cp Z:\data\10001310\ s3://my_bucket/data/100013/ --recursive&quot;,
&quot;aws s3 cp Z:\data\10001910\ s3://my_bucket/data/100019/ --recursive&quot;,
&quot;aws s3 cp Z:\data\10002010\ s3://my_bucket/data/100020/ --recursive&quot;,
&quot;aws s3 cp Z:\data\10002110\ s3://my_bucket/data/100021/ --recursive&quot;
)

foreach ($command in $commands) {
    Write-Host &quot;Executing: $command&quot;
    Invoke-Expression $command

    # 명령어 실행 후 종료 코드 확인
    if ($LASTEXITCODE -ne 0) {
        Write-Host &quot;Command exited with Error.&quot; 
    }
}

# PowerShell 창을 열어두기 위해 사용자 입력을 대기합니다.
Read-Host &quot;Press Enter to exit&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;$commands : 실행할 AWS CLI 명령어 배열&lt;/li&gt;
&lt;li&gt;Write-Host : 현재 실행 중인 명령어 표시&lt;/li&gt;
&lt;li&gt;Invoke-Expression : 명령어 실행하고 결과를 반환&lt;/li&gt;
&lt;li&gt;$LASTEXITCODE : Exit Code 의미, 0: 성공, 0이 아닌 경우 메시지 출력&lt;/li&gt;
&lt;li&gt;Read-Host : PowerShell이 닫히지 않고 실행과정을 볼 수 있도록 하기 위함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[기대결과]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Command 실행이 오래 걸리는 경우 + dry-run option Command 실행이 오래 걸리는 경우의 소요시간을 줄이고 빠르게 업로드를 진행할 수 있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 특정 주기마다 엑셀에 색깔별로 다르게 표기하면 업로드 현황내역을 알기가 쉽고 남은 내역도 공유해 주기 쉬움.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 최대 소요일을 예상할 수 있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 와일드카드를 고려하지 않고 작업량을 조절하기가 매우 수월해짐.&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>Tips(Reference)/aws</category>
      <category>aws</category>
      <category>AWS CLI</category>
      <category>aws s3 cp</category>
      <author>DEV_BLOG</author>
      <guid isPermaLink="true">https://developing.tistory.com/105</guid>
      <comments>https://developing.tistory.com/105#entry105comment</comments>
      <pubDate>Sun, 5 Nov 2023 02:52:28 +0900</pubDate>
    </item>
    <item>
      <title>AWS S3 Bucket 삭제되지 않는 현상 해결방법</title>
      <link>https://developing.tistory.com/104</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[현상]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미사용 AWS S3 Bucket을 삭제 하려함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; AWS CLI와 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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[상세 증상]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &amp;nbsp;AWS 콘솔에서 버킷 비우기 상태로 진입하면 삭제가 진행되는데 어느지점에 이르면 진행상황이 표기되지않음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp; AWS CLI와 AWS 콘솔상에서는 데이터가 존재하지 않는 것으로 나오는데, Cloudwatch와 Bucket 지표를 확인하면 데이터가 남아있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 아래 레퍼런스를 주로 참고하였음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://towardsthecloud.com/aws-cli-empty-s3-bucket&quot;&gt;https://towardsthecloud.com/aws-cli-empty-s3-bucket&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ldquo;the bucket you tried to delete is not empty. you must delete all versions in the bucket.&amp;rdquo;&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;b&gt;[해결한 방안]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&amp;gt; 수명 주기 규칙생성 후 버킷 비우기 작업이 정상적으로 수행되는 것을 확인.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;bucket 제거.png&quot; data-origin-width=&quot;1546&quot; data-origin-height=&quot;687&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bB0ENk/btszH5f60kP/FuFK3kORD99YG9mb9Tt7v1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bB0ENk/btszH5f60kP/FuFK3kORD99YG9mb9Tt7v1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bB0ENk/btszH5f60kP/FuFK3kORD99YG9mb9Tt7v1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbB0ENk%2FbtszH5f60kP%2FFuFK3kORD99YG9mb9Tt7v1%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;1546&quot; height=&quot;687&quot; data-filename=&quot;bucket 제거.png&quot; data-origin-width=&quot;1546&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;수명 주기 규칙.png&quot; data-origin-width=&quot;849&quot; data-origin-height=&quot;726&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dHNZPs/btszMbFN7F2/8jFKCoCwghqx9vYOPoKb20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dHNZPs/btszMbFN7F2/8jFKCoCwghqx9vYOPoKb20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dHNZPs/btszMbFN7F2/8jFKCoCwghqx9vYOPoKb20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdHNZPs%2FbtszMbFN7F2%2F8jFKCoCwghqx9vYOPoKb20%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;849&quot; height=&quot;726&quot; data-filename=&quot;수명 주기 규칙.png&quot; data-origin-width=&quot;849&quot; data-origin-height=&quot;726&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Trouble Shooting</category>
      <category>aws s3</category>
      <category>AWS S3 버킷 삭제</category>
      <author>DEV_BLOG</author>
      <guid isPermaLink="true">https://developing.tistory.com/104</guid>
      <comments>https://developing.tistory.com/104#entry104comment</comments>
      <pubDate>Sun, 5 Nov 2023 02:00:28 +0900</pubDate>
    </item>
    <item>
      <title>AWS 다른 계정으로 S3 Data Migration 하는 방법</title>
      <link>https://developing.tistory.com/103</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;S3 데이터를 AWS 다른계정으로 이관해야 할 일이 생겨서 관련 포스팅을 진행하고자 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A -&amp;gt; B 계정으로 S3 이관을 진행한다고 가정할 때, 이루어지는 과정은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1.&amp;nbsp; A계정 S3 Bucket Policy 변경&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1-1) 기존에 Bucket Policy가 이미 설정되있는 경우&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Bucket Policy에 cloudfront같은 설정이 포함되어있을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 작성된 내용에서 &quot;Statement&quot;의 마지막 부분에 다음의 내용을 추가해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서의 {B계정에 IAM 권한 설정한 사용자이름}에 관한 부분은 2~3번 내용을 먼저 참고한 뒤에 작성하면 된다!&lt;/p&gt;
&lt;pre id=&quot;code_1691586070998&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
            &quot;Sid&quot;: &quot;DelegateS3Access&quot;,
            &quot;Effect&quot;: &quot;Allow&quot;,
            &quot;Principal&quot;: {
                &quot;AWS&quot;: &quot;arn:aws:iam::{B계정의 계정ID 띄어쓰기 없이 12자}:user/{B계정에 IAM 권한 설정한 사용자이름}&quot;
            },
            &quot;Action&quot;: [
                &quot;s3:ListBucket&quot;,
                &quot;s3:GetObject&quot;
            ],
            &quot;Resource&quot;: [
                &quot;arn:aws:s3:::{A계정의 Bucket이름}/*&quot;,
                &quot;arn:aws:s3:::{A계정의 Bucket이름}&quot;
            ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1-2) 기존에 Bucket Policy가 설정되지 않은 경우&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1691586325467&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;Version&quot;: &quot;2012-10-17&quot;,
  &quot;Statement&quot;: [
    {
      &quot;Sid&quot;: &quot;DelegateS3Access&quot;,
      &quot;Effect&quot;: &quot;Allow&quot;,
      &quot;Principal&quot;: {
        &quot;AWS&quot;: &quot;arn:aws:iam::{B계정의 계정ID 띄어쓰기 없이 12자}:user/{B계정에 IAM 권한 설정한 사용자이름}&quot;
      },
      &quot;Action&quot;: [
        &quot;s3:ListBucket&quot;,
        &quot;s3:GetObject&quot;
      ],
      &quot;Resource&quot;: [
        &quot;arn:aws:s3:::{A계정의 Bucket이름}/*&quot;,
        &quot;arn:aws:s3:::{A계정의 Bucket이름}&quot;
      ]
    }
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1-3) 공식문서 예제 참고용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1691586587130&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;Version&quot;: &quot;2012-10-17&quot;,
  &quot;Id&quot;: &quot;Policy1611277539797&quot;,
  &quot;Statement&quot;: \[
    {
      &quot;Sid&quot;: &quot;Stmt1611277535086&quot;,
      &quot;Effect&quot;: &quot;Allow&quot;,
      &quot;Principal&quot;: {
        &quot;AWS&quot;: &quot;arn:aws:iam::222222222222:user/Jane&quot;
      },
      &quot;Action&quot;: &quot;s3:PutObject&quot;,
      &quot;Resource&quot;: &quot;arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/\*&quot;,
      &quot;Condition&quot;: {
        &quot;StringEquals&quot;: {
          &quot;s3:x-amz-acl&quot;: &quot;bucket-owner-full-control&quot;
        }
      }
    },
    {
      &quot;Sid&quot;: &quot;Stmt1611277877767&quot;,
      &quot;Effect&quot;: &quot;Allow&quot;,
      &quot;Principal&quot;: {
        &quot;AWS&quot;: &quot;arn:aws:iam::222222222222:user/Jane&quot;
      },
      &quot;Action&quot;: &quot;s3:ListBucket&quot;,
      &quot;Resource&quot;: &quot;arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2.&amp;nbsp; B계정의 IAM 권한 설정&lt;/b&gt;&lt;/h4&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;스크린샷 2023-08-09 오후 10.17.59.png&quot; data-origin-width=&quot;2668&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcSgTv/btsqJTHPtyJ/3IqaJ8uas6NkPwSLejHd8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcSgTv/btsqJTHPtyJ/3IqaJ8uas6NkPwSLejHd8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcSgTv/btsqJTHPtyJ/3IqaJ8uas6NkPwSLejHd8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcSgTv%2FbtsqJTHPtyJ%2F3IqaJ8uas6NkPwSLejHd8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2668&quot; height=&quot;370&quot; data-filename=&quot;스크린샷 2023-08-09 오후 10.17.59.png&quot; data-origin-width=&quot;2668&quot; data-origin-height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IAM &amp;gt; 정책 &amp;gt; 정책 생성 &amp;gt; JSON 항목으로 이동하여 다음의 내용을 입력한다.&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;&lt;b&gt;2-1. 검색하여 작성한 예시&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1691586936877&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
    &quot;Version&quot;: &quot;2012-10-17&quot;,
    &quot;Statement&quot;: [
        {
            &quot;Sid&quot;: &quot;VisualEditor0&quot;,
            &quot;Effect&quot;: &quot;Allow&quot;,
            &quot;Action&quot;: [
                &quot;s3:GetObject&quot;,
                &quot;s3:ListBucket&quot;
            ],
            &quot;Resource&quot;: [
                &quot;arn:aws:s3:::{A계정의 Bucket이름}&quot;,
                &quot;arn:aws:s3:::{A계정의 Bucket이름}/*&quot;
            ]
        },
        {
            &quot;Sid&quot;: &quot;VisualEditor1&quot;,
            &quot;Effect&quot;: &quot;Allow&quot;,
            &quot;Action&quot;: [
                &quot;s3:PutObject&quot;,
                &quot;s3:ListBucket&quot;,
                &quot;s3:PutObjectAcl&quot;
            ],
            &quot;Resource&quot;: [
                &quot;arn:aws:s3:::{B계정의 복사시킬 Bucket이름}&quot;,
                &quot;arn:aws:s3:::{B계정의 복사시킬 Bucket이름}/*&quot;
            ]
        }
    ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2-2.AWS 공식문서 예시&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1691587010127&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;Version&quot;: &quot;2012-10-17&quot;,
  &quot;Statement&quot;: \[
    {
      &quot;Effect&quot;: &quot;Allow&quot;,
      &quot;Action&quot;: \[
        &quot;s3:ListBucket&quot;,
        &quot;s3:GetObject&quot;
      \],
      &quot;Resource&quot;: \[
        &quot;arn:aws:s3:::source-DOC-EXAMPLE-BUCKET&quot;,
        &quot;arn:aws:s3:::source-DOC-EXAMPLE-BUCKET/\*&quot;
      \]
    },
    {
      &quot;Effect&quot;: &quot;Allow&quot;,
      &quot;Action&quot;: \[
        &quot;s3:ListBucket&quot;,
        &quot;s3:PutObject&quot;,
        &quot;s3:PutObjectAcl&quot;
      \],
      &quot;Resource&quot;: \[
        &quot;arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET&quot;,
        &quot;arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/\*&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. B계정의 사용자 설정 및 권한 설정&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-08-09 오후 10.20.46.png&quot; data-origin-width=&quot;2100&quot; data-origin-height=&quot;790&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsm9Ts/btsqKxYP8kQ/7hBqVhN8UzxlQB4P1xfBX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsm9Ts/btsqKxYP8kQ/7hBqVhN8UzxlQB4P1xfBX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsm9Ts/btsqKxYP8kQ/7hBqVhN8UzxlQB4P1xfBX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbsm9Ts%2FbtsqKxYP8kQ%2F7hBqVhN8UzxlQB4P1xfBX0%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;2100&quot; height=&quot;790&quot; data-filename=&quot;스크린샷 2023-08-09 오후 10.20.46.png&quot; data-origin-width=&quot;2100&quot; data-origin-height=&quot;790&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직접 정책 연결 선택 뒤 2번에서 생성한 권한을 연결해준다. 4번에서 곧 얘기할 AWS-CLI가 잘 접속됬는지 확인하고 싶다면 &quot;AmazonS3FullAccess&quot; 권한도 넣어주자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4.&amp;nbsp; 3번에서 생성해준 B계정의 사용자로 AWS-CLI 접속&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1691587510240&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;aws configure

AWS ACCESS KEY ID : {파일로 내려받은 ACCESS KEY ID입력하기}
AWS Secret Access Key : {파일로 내려받은 SECRET ACCESS KEY 입력하기}
Default region name : ap-northeast-2&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;만약 amazons3FullAccess 권한이 부여된 상태라면 다음 명령어를 통해 B계정의 사용자로 잘 aws-cli 접속하였는지 확인하자.&lt;/p&gt;
&lt;pre id=&quot;code_1691587731272&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;aws s3 ls&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;B계정의 Bucket 이름이 출력되면 성공적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;5. Migration 명령 수행&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1691587898959&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;aws s3 sync s3://{A계정 복사하려는 Bucket이름}/{기타 자신이 원하는 경로} s3://{B계정 복사시킬 Bucket이름}/{기타 자신이 원하는 경로}&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;h4 data-ke-size=&quot;size20&quot;&gt;Reference&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://interconnection.tistory.com/119&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://interconnection.tistory.com/119&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@unihit/계정간-S3-데이터-이전-방법&quot;&gt;https://velog.io/@unihit/계정간-S3-데이터-이전-방법&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://repost.aws/ko/knowledge-center/copy-s3-objects-account&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://repost.aws/ko/knowledge-center/copy-s3-objects-account&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Tips(Reference)/aws</category>
      <category>aws s3</category>
      <category>AWS S3 migration</category>
      <category>AWS S3 계정이동</category>
      <author>DEV_BLOG</author>
      <guid isPermaLink="true">https://developing.tistory.com/103</guid>
      <comments>https://developing.tistory.com/103#entry103comment</comments>
      <pubDate>Wed, 9 Aug 2023 22:33:34 +0900</pubDate>
    </item>
    <item>
      <title>Redis-Cli Local환경에서 JSON.GET/PUT 사용가능하게 하는 법(Err unknown command 'JSON.GET' with args beginning 해결방법)</title>
      <link>https://developing.tistory.com/102</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Elastic Cache Redis Cluster 환경에서는 redis-cli에서 JSON.GET/PUT 명령어를 사용할 수 있지만 local 환경에서는 별도의 조치를 취해야한다. RedisJSON Github을 참조해보면 Rust Install -&amp;gt; cargo build 하는 방법과 Docker를 활용하는 방법이 기재되어있다.&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;Docker를 활용하는 방법이 가장 쉽고 빠른길이기에 관련 포스팅을 하고자한다.&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_1689080311140&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#Mac환경일때 Case : redis Port가 충돌하지 않게 redis-server를 우선 종료해주자.
#brew services stop redis

#Docker Image Pull
docker pull redis/redis-stack:latest

#Docker Run Container
docker run -p 6379:6379 --name redis-stack redis/redis-stack:latest&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-07-11 오전 10.16.18.png&quot; data-origin-width=&quot;2164&quot; data-origin-height=&quot;504&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GZ2zj/btsnhehEkeN/uCeaYRluhXh0HQTfUMlLvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GZ2zj/btsnhehEkeN/uCeaYRluhXh0HQTfUMlLvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GZ2zj/btsnhehEkeN/uCeaYRluhXh0HQTfUMlLvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGZ2zj%2FbtsnhehEkeN%2FuCeaYRluhXh0HQTfUMlLvk%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;2164&quot; height=&quot;504&quot; data-filename=&quot;스크린샷 2023-07-11 오전 10.16.18.png&quot; data-origin-width=&quot;2164&quot; data-origin-height=&quot;504&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JSON.GET Command를 실행하였을때 Docker Container를 실행해주면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ERR unknown command 'JSON.GET', with args beginning with:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; &lt;b&gt;ERR wrong number of arguments for 'JSON.GET' command&lt;/b&gt; 문구로 바뀐 것을 확인할 수 있다. 이제 Redis JSON 명령어를 자유자재로 사용할 수 있게되었다.&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;스크린샷 2023-07-11 오전 10.18.17.png&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgHPot/btsnbOLmkjX/5qHbrmyGBc4REnORXFT5lK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgHPot/btsnbOLmkjX/5qHbrmyGBc4REnORXFT5lK/img.png&quot; data-alt=&quot;local redis-cli 환경에서도 정상적으로 redisJSON Command가 사용가능해졌다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgHPot/btsnbOLmkjX/5qHbrmyGBc4REnORXFT5lK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgHPot%2FbtsnbOLmkjX%2F5qHbrmyGBc4REnORXFT5lK%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;1184&quot; height=&quot;232&quot; data-filename=&quot;스크린샷 2023-07-11 오전 10.18.17.png&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;232&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;local redis-cli 환경에서도 정상적으로 redisJSON Command가 사용가능해졌다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;RedisJson 문법은 aws 공식문서에도 나와있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/AmazonElastiCache/latest/red-ug/json-list-commands.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.aws.amazon.com/ko_kr/AmazonElastiCache/latest/red-ug/json-list-commands.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689080769849&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;지원되는 Redis JSON 명령 - Amazon ElastiCache for Redis&quot; data-og-description=&quot;이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.&quot; data-og-host=&quot;docs.aws.amazon.com&quot; data-og-source-url=&quot;https://docs.aws.amazon.com/ko_kr/AmazonElastiCache/latest/red-ug/json-list-commands.html&quot; data-og-url=&quot;https://docs.aws.amazon.com/ko_kr/AmazonElastiCache/latest/red-ug/json-list-commands.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/AmazonElastiCache/latest/red-ug/json-list-commands.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.aws.amazon.com/ko_kr/AmazonElastiCache/latest/red-ug/json-list-commands.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;지원되는 Redis JSON 명령 - Amazon ElastiCache for Redis&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.aws.amazon.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;h4 data-ke-size=&quot;size20&quot;&gt;Reference&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/RedisJSON/RedisJSON&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/RedisJSON/RedisJSON&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689080772266&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - RedisJSON/RedisJSON: RedisJSON - a JSON data type for Redis&quot; data-og-description=&quot;RedisJSON - a JSON data type for Redis. Contribute to RedisJSON/RedisJSON development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/RedisJSON/RedisJSON&quot; data-og-url=&quot;https://github.com/RedisJSON/RedisJSON&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Os6Ci/hyTgWqgLYE/HEGypyZYx03RJ7JEEE5Vd0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/RedisJSON/RedisJSON&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/RedisJSON/RedisJSON&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Os6Ci/hyTgWqgLYE/HEGypyZYx03RJ7JEEE5Vd0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - RedisJSON/RedisJSON: RedisJSON - a JSON data type for Redis&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;RedisJSON - a JSON data type for Redis. Contribute to RedisJSON/RedisJSON development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Trouble Shooting</category>
      <category>ERR unknown command 'JSON.GET'</category>
      <category>ERR unknown command 'JSON.SET'</category>
      <category>redis-cli</category>
      <category>RedisJSON</category>
      <author>DEV_BLOG</author>
      <guid isPermaLink="true">https://developing.tistory.com/102</guid>
      <comments>https://developing.tistory.com/102#entry102comment</comments>
      <pubDate>Tue, 11 Jul 2023 22:09:18 +0900</pubDate>
    </item>
    <item>
      <title>DynamoDB와 DynamoDB Accelerator(DAX) 정리</title>
      <link>https://developing.tistory.com/101</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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;용어-RDB와-비교&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #c0d1e7;&quot;&gt;DynamoDB VS RDB 용어 및 개념 비교&lt;/span&gt;&lt;/h4&gt;
&lt;div style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-layout=&quot;default&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;280&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 135px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;RDB&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #1b711d;&quot;&gt;&lt;b&gt;DynamoDB&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;Tables&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;Tables&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;Rows&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;Items&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;Columns&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;Attributes&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 35px; text-align: center;&quot;&gt;&lt;b&gt;Primary Keys(Optional)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 35px; text-align: center;&quot;&gt;&lt;b&gt;Primary Keys(Mandatory / Minimum One and Maximum Two Attribtues)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;Indexes&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;Local Secondary Indexes&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 15px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 15px; text-align: center;&quot;&gt;&lt;b&gt;Views&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 15px; text-align: center;&quot;&gt;&lt;b&gt;Global Secondary Indexes&lt;/b&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Strict Schema&lt;/span&gt;&lt;/b&gt; VS &lt;b&gt;&lt;span style=&quot;color: #1b711d;&quot;&gt;Flexible Schema&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Predefined set of columns&lt;/span&gt;&lt;/b&gt; VS &lt;span style=&quot;color: #1b711d;&quot;&gt;&lt;b&gt;Unstructured data&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Each record has same number of columns&lt;/span&gt;&lt;/b&gt; VS &lt;span style=&quot;color: #1b711d;&quot;&gt;&lt;b&gt;Different records can have different number of columns&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Enforces strict ACID properties/Loss of flexibility&lt;/b&gt;&lt;/span&gt; VS &lt;b&gt;&lt;span style=&quot;color: #1b711d;&quot;&gt;Trades some ACID properties/Flexible data model&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Vertical Scaling/You scale by adding more power(faster hardware,CPU,RAM)&lt;/b&gt;&lt;/span&gt; VS &lt;span style=&quot;color: #1b711d;&quot;&gt;&lt;b&gt;Horizontal Scaling/You scale by adding more machines,partitions or low-cost hardware&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #ffc9af;&quot;&gt;읽기 정합성(Read Consistency)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Strong Consistency(강력한 일관된 읽기) : 정확한 최신 데이터 제공&lt;/li&gt;
&lt;li&gt;Eventual Consistency(최종적 일관된 읽기) : 최신 반영이 안되있을지도 모르는 데이터, Strong Consistency에 비해 50% 저렴하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;데이터-핸들링&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;456&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;데이터 핸들링&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Item-based Actions : 하나의 Item에 대해 write,delete,update 가능&lt;/li&gt;
&lt;li&gt;Query : Read-only action, 한번의 요청으로 여러 Item 처리 가능&lt;/li&gt;
&lt;li&gt;Scan : 모든 Item을 보는 기능, 고비용으로 사용을 최대한 지양해야함.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Primary Key, Sort Key로 Access Pattern을 만족할 수 없을때 Secondary Index를 사용한다.&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;용량-유닛(Capacity-Unit)&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;705&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;용량 유닛(Capacity Unit)&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Capacity Unit : 1초당 읽거나 쓸 수 있는 데이터의 단위&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#bf2600&quot;&gt;RCU / WCU&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;784&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;784&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;RCU&lt;/b&gt; : Read Capacity Units&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;811&quot; data-ke-size=&quot;size16&quot;&gt;1RCU : 초당 1번의 Strongly Consistent Read 혹은 초당 2번의 Eventually Consistent Read&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;890&quot; data-ke-size=&quot;size16&quot;&gt;=&amp;gt;1RCU로 초당 4KB까지 읽을 수 있다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;917&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;919&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;WCU&lt;/b&gt; : Write Capacity Units&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;947&quot; data-ke-size=&quot;size16&quot;&gt;1WCU : 최대 1KB 데이터 쓰기 용량&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;972&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RCU/WCU 예시&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;990&quot; data-ke-size=&quot;size16&quot;&gt;초당 10KB data를 읽는 RCU(Strong Consistency) : 10KB/4KB = 2.5 &amp;rArr; rounded up &amp;rArr; 3 RCUs&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1071&quot; data-ke-size=&quot;size16&quot;&gt;초당 10KB data를 읽는 RCU(Eventually Consistency) : 3 RCUs X 0.5 = 1.5 RCUs&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1143&quot; data-ke-size=&quot;size16&quot;&gt;초당 10KB data를 쓰기 위한 WCU : 10KB/1KB = 10 WCUs&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1189&quot; data-ke-size=&quot;size16&quot;&gt;초당 1.5KB data를 쓰기 위한 WCU : 1.5KB/1KB &amp;rArr; 1.5 &amp;rArr; rounded up &amp;rArr; 2WCUs&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1254&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1254&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DynamoDB에서는 1 Paritition 당 1000 WCUs 혹은 3000 RCUs를 처리 - WCU, RCU 조정값에 따라 몇개의 파티션이 생성될지 알 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1356&quot; data-ke-size=&quot;size16&quot;&gt;[예시]&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1362&quot; data-ke-size=&quot;size16&quot;&gt;Provisioned Capacity : 500 RCUs and 500 WCUs&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1408&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rArr; Number of Partitions &amp;rArr; 500 RCUs/ 3000 + 500 WCUs/1000 = 0.67 &amp;rArr; rounded up &amp;rArr; 1 partition&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1499&quot; data-ke-size=&quot;size16&quot;&gt;New Capacity : 1000 RCUs and 1000 WCUs&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1539&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rArr; Number of Partitions &amp;rArr; 1000 RCUs/3000 + 1000 WCUs / 1000 = 1.33 &amp;rArr; rounded up &amp;rArr; 2 partitions&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1634&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;Local-Secondary-Indexes&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1638&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;Local Secondary Indexes&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Local Secondary Index는 테이블 생성시 생성해주어야한다.&lt;/li&gt;
&lt;li&gt;테이블당 5개까지 생성가능하다.&lt;/li&gt;
&lt;li&gt;선택 기준&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1739&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 같은 파티션키 사용이 요구될때 Sort Key를 수정하고싶을때&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1777&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 추가적인 비용을 줄이고 싶을때&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1797&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rArr; &lt;b&gt;Strongly consistent index read&lt;/b&gt;가 필요할때(Strongly Consistent,Eventually Consistent Read 둘다 지원함)&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: 119px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Dept(&lt;span style=&quot;background-color: #f6e199;&quot;&gt;Partition Key&lt;/span&gt;)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Emp Id(&lt;span style=&quot;background-color: #f6e199;&quot;&gt;Sort Key&lt;/span&gt;)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Name&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Age&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Location&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;DOJ(&lt;span style=&quot;background-color: #99cefa;&quot;&gt;Secondary Sort Key&lt;/span&gt;)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Training&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Steve&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;26&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;SFO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;08-03-2018&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;IT&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Chris&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;24&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;NYC&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;18-02-2018&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Sales&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Tina&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;25&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;NYC&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;15-02-2018&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Training&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Bill&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;27&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;NJ&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;01-02-2018&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;IT&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;5&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Alan&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;26&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;SFO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;12-01-2018&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Sales&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;6&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Megan&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;24&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;NYC&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;01-01-2018&lt;/b&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;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot;&gt;만약 위 테이블에서 DoJ에 Local Secondary Index를 적용한다면 IT부서에 일하고 있는 인력들의 리스트를 DoJ가 정렬된 형태로 만들 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;Global-Secondary-Indexes&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;2400&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;Global Secondary Indexes&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파티션으로부터 독립적으로 보관되어 언제든지 생성가능하다.&lt;/li&gt;
&lt;li&gt;테이블당 20개까지 생성가능하다. (19년도에는 5개까지 됬던듯.)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Strongly Consistent read는 지원하지 않는다&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;duplicate item 가질 수 있음&lt;/li&gt;
&lt;li&gt;선택 기준&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;2578&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 같거나 다른 파티션키 사용을 필요로 할때&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;2604&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 세밀한 throughput 통제가 필요할때 혹은 다른 partition key로 query해야 할 때&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;2664&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rArr; &lt;b&gt;consistent index read가 필요할 때&lt;/b&gt;&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: 137px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 35px;&quot;&gt;&lt;b&gt;Dept(&lt;span style=&quot;background-color: #f6e199;&quot;&gt;Partition Key&lt;/span&gt;)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 35px;&quot;&gt;&lt;b&gt;Emp Id(&lt;span style=&quot;background-color: #f6e199;&quot;&gt;Sort Key&lt;/span&gt;)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 35px;&quot;&gt;&lt;b&gt;Name&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 35px;&quot;&gt;&lt;b&gt;Age&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 35px;&quot;&gt;&lt;b&gt;Location(&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;Seondary Partition Key&lt;/span&gt;)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 35px;&quot;&gt;&lt;b&gt;DoJ(&lt;span style=&quot;background-color: #99cefa;&quot;&gt;Seconary Sort Key&lt;/span&gt;)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Training&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Steve&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;26&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;SFO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;08-03-2018&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;IT&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Chris&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;24&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;NYC&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;18-02-2018&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Sales&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Tina&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;25&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;NYC&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;15-02-2018&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Training&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Bill&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;27&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;NJ&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;01-02-2018&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;IT&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;5&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Alan&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;26&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;SFO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;12-01-2018&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Sales&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;6&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;Megan&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;24&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;NYC&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;b&gt;01-01-2018&lt;/b&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;만약 Location에 Global Secondary Index가 걸려있다면 &amp;lsquo;NYC&amp;rsquo;에서 일하는 인력들을 출력할 수 있을 것이다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3209&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;DynamoDB-Accelerlator-(DAX)&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3215&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;DynamoDB Accelerlator (DAX)&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;In-Memory Caching Service&lt;/li&gt;
&lt;li&gt;Microsecond Latency&lt;/li&gt;
&lt;li&gt;Eventual Consistency Read만 가능&lt;/li&gt;
&lt;li&gt;Application과 DynamoDB 사이에서 proxy 역할&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3370&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(Write 시)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3381&quot; data-ke-size=&quot;size16&quot;&gt;DynamoDB에도 데이터를 쓴 후 DAX에도 데이터를 return해줌.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3423&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3425&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(Read 시)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3435&quot; data-ke-size=&quot;size16&quot;&gt;[Cache Hit] : DAX가 데이터 가지고있을때 DynamoDB로 가지않고 바로 리턴&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3487&quot; data-ke-size=&quot;size16&quot;&gt;[Cache Miss] : DynamoDB로부터 데이터 리턴, update된 index Master Node에 반영&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;dynamodb.png&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;405&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwy3Ft/btsm1TjxKax/tTqaeNRel21D2f5OcPkcYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwy3Ft/btsm1TjxKax/tTqaeNRel21D2f5OcPkcYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwy3Ft/btsm1TjxKax/tTqaeNRel21D2f5OcPkcYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcwy3Ft%2Fbtsm1TjxKax%2FtTqaeNRel21D2f5OcPkcYk%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;748&quot; height=&quot;405&quot; data-filename=&quot;dynamodb.png&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;405&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;DynamoDB 적용 의사결정&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;규모가 매우 큰 데이터의 경우 RDB는 Cluster/Division 나누는 작업이 필요하지만 DynamoDB는 그에반해 latency가 적다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Key 설계시 Single Table로 관리하면서 JOIN이 많이 발생하는 결과물을 빠르고 쉽게 가져쓸 수 있는 경우,페타바이트 규모의 데이터/트래픽이 많이 발생하는 경우 적용하기 좋다. 따라서 DB의 Size가 커진다면 DynamoDB가 유리하지만 국내에서 그정도 규모의 트래픽을 받는 회사는 매우적다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한편 DAX 캐싱의 경우 도쿄 region만 제공되기에, ap-northeast-2 region의 EC2에서 도쿄 region의 DAX를 바라보는 구조는 네트워크 비용 + latency가 발생할 것으로 예상됨.&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;Udemy 강의자분께서 DynamoDB 사용해본 경험을 공유해주셨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하루에 50GB 처리 및 2백만 READ/WRITE 연산이 발생하는 SASS Service의 Trouble Shooting 사례는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr;mysql 하나만 쓰다가 Database Lock 빈번하게 문제발생 &amp;rArr; &lt;u&gt;RDS DB로&amp;nbsp;하드웨어 업그레이드&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr;고객증가로 다시 Lock 문제 발생 =&amp;gt; &lt;u&gt;데이터베이스 multi AZ 리플리케이션 적용 및 Read Replica 적용&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr;고객증가하니 또 문제 생김 &amp;rArr; &lt;u&gt;NOSQL dynamodb 전환&lt;/u&gt;하였더니 3년정도 운영하면서 사소한 문제도 잘 안생겨서 다른 서비스에서도 우선적으로 사용중이심.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Reference&lt;/h4&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;a href=&quot;https://www.udemy.com/course/dynamodb/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.udemy.com/course/dynamodb/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dynobase.dev/dynamodb-read-consistency/&quot;&gt;https://dynobase.dev/dynamodb-read-consistency/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@soongjamm/Eventual-Consistency-란&quot;&gt;https://velog.io/@soongjamm/Eventual-Consistency-란&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://blog.kico.co.kr/2022/03/17/aws-dynamodb/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://blog.kico.co.kr/2022/03/17/aws-dynamodb/&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.youtube.com/watch?v=I7zcRxHbo98&amp;amp;ab_channel=AmazonWebServicesKorea&quot;&gt;https://www.youtube.com/watch?v=I7zcRxHbo98&amp;amp;ab_channel=AmazonWebServicesKorea&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Tips(Reference)/etc</category>
      <category>dax</category>
      <category>DynamoDB</category>
      <category>read consistency</category>
      <author>DEV_BLOG</author>
      <guid isPermaLink="true">https://developing.tistory.com/101</guid>
      <comments>https://developing.tistory.com/101#entry101comment</comments>
      <pubDate>Sun, 9 Jul 2023 14:57:26 +0900</pubDate>
    </item>
    <item>
      <title>Putty Server Connection Timed Out (Inactive) 자주되는 현상 해결방법</title>
      <link>https://developing.tistory.com/100</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;[상황] : Bastion Server를 띄운 Putty에서 자꾸 (Inactive) 상태가 되면서 다시 서버를 켜야하는 번거로움이 발생하는 경우를 해결하는 방법&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 보안정책 설정을 건드리지 않고 Putty에서 옵션을 지정해 해결할 수 있는 방법이 있어 포스팅해본다.&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;keepalive.png&quot; data-origin-width=&quot;449&quot; data-origin-height=&quot;443&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ve65I/btsmJhFoGI7/DL5xuGNha4sJm11btlsnq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ve65I/btsmJhFoGI7/DL5xuGNha4sJm11btlsnq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ve65I/btsmJhFoGI7/DL5xuGNha4sJm11btlsnq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fve65I%2FbtsmJhFoGI7%2FDL5xuGNha4sJm11btlsnq0%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;449&quot; height=&quot;443&quot; data-filename=&quot;keepalive.png&quot; data-origin-width=&quot;449&quot; data-origin-height=&quot;443&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;&lt;b&gt;Connection &amp;gt; Seceonds between keepalives (0 to turn off) 의 옵션을 0에서 120으로 변경(초단위)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;232&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Session &amp;gt; Save 하여 keepalives 설정 저장&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;268&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;268&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;270&quot; data-ke-size=&quot;size16&quot;&gt;원리는 SSH Session이 죽지 않도록 지정한 시간 간격으로 Null Packet을 지속적으로 보내주어서 Connection이 끊기지 않도록 한다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;270&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;270&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;270&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;270&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;270&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;270&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Reference&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;270&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;270&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://orahow.com/keep-putty-ssh-connection-alive/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://orahow.com/keep-putty-ssh-connection-alive/&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;361&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;363&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Trouble Shooting</category>
      <category>putty</category>
      <category>putty Connection Timed out</category>
      <category>putty Inactive</category>
      <author>DEV_BLOG</author>
      <guid isPermaLink="true">https://developing.tistory.com/100</guid>
      <comments>https://developing.tistory.com/100#entry100comment</comments>
      <pubDate>Thu, 6 Jul 2023 22:02:57 +0900</pubDate>
    </item>
    <item>
      <title>Windows,WSL2,Linux 환경에서 Redis-CLI 사용 Setting(Local,Server)</title>
      <link>https://developing.tistory.com/99</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Windows Local 환경 Redis-CLI Installation&lt;/b&gt;&lt;/span&gt;&lt;/h4&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;redis 공식문서.PNG.png&quot; data-origin-width=&quot;1316&quot; data-origin-height=&quot;445&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnstUF/btsmA1JCg80/inRH4BFKa8klDtGGJgZxjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnstUF/btsmA1JCg80/inRH4BFKa8klDtGGJgZxjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnstUF/btsmA1JCg80/inRH4BFKa8klDtGGJgZxjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnstUF%2FbtsmA1JCg80%2FinRH4BFKa8klDtGGJgZxjK%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;1316&quot; height=&quot;445&quot; data-filename=&quot;redis 공식문서.PNG.png&quot; data-origin-width=&quot;1316&quot; data-origin-height=&quot;445&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Redis 공식문서에서 공식적으로 windows 환경을 제공하고 있지는 않다. Windows 환경의 경우 WSL2 환경에서 설치할 것을 권고하고있다. 하지만 &lt;span data-token-index=&quot;0&quot;&gt;Microsoft Archive Github Release에서 window환경에서 쉽게 사용할 수 있도록 방법을 제공해준다. 2가지의 방법 모두 기술하려고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;1) Redis for Windows Release 다운로드 방식&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;microsoft archive github.png&quot; data-origin-width=&quot;1860&quot; data-origin-height=&quot;806&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7U6G9/btsmz3ugAMC/Hx7wqLFYZnrriuZ4HDcEd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7U6G9/btsmz3ugAMC/Hx7wqLFYZnrriuZ4HDcEd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7U6G9/btsmz3ugAMC/Hx7wqLFYZnrriuZ4HDcEd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7U6G9%2Fbtsmz3ugAMC%2FHx7wqLFYZnrriuZ4HDcEd1%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;1860&quot; height=&quot;806&quot; data-filename=&quot;microsoft archive github.png&quot; data-origin-width=&quot;1860&quot; data-origin-height=&quot;806&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/microsoftarchive/redis/releases&quot;&gt;https://github.com/microsoftarchive/redis/releases&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1688557024653&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Releases &amp;middot; microsoftarchive/redis&quot; data-og-description=&quot;Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes - microsoftarchive/redis&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/microsoftarchive/redis/releases&quot; data-og-url=&quot;https://github.com/microsoftarchive/redis/releases&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/lLNeG/hyTd7LhNHK/Wubduke2mszuJ3B2urNyfk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/microsoftarchive/redis/releases&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/microsoftarchive/redis/releases&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/lLNeG/hyTd7LhNHK/Wubduke2mszuJ3B2urNyfk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Releases &amp;middot; microsoftarchive/redis&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes - microsoftarchive/redis&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 페이지에서 MSI 파일을 다운로드 한다. Path Variable 옵션을 활성화하여 설치해주자!&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;redis-cli ping.PNG.png&quot; data-origin-width=&quot;296&quot; data-origin-height=&quot;178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tx58g/btsmA2V4Ood/hpViGSOJGtAW9r3lqQpiuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tx58g/btsmA2V4Ood/hpViGSOJGtAW9r3lqQpiuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tx58g/btsmA2V4Ood/hpViGSOJGtAW9r3lqQpiuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftx58g%2FbtsmA2V4Ood%2FhpViGSOJGtAW9r3lqQpiuK%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;296&quot; height=&quot;178&quot; data-filename=&quot;redis-cli ping.PNG.png&quot; data-origin-width=&quot;296&quot; data-origin-height=&quot;178&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;redis-cli 명령어를 사용해 잘 설치되었는지 확인해주자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;2) WSL2 환경이 구축된경우 공식 문서방법을 따르는 방법&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1688557159952&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install lsb-release curl gpg



curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg

echo &quot;deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main&quot; | sudo tee /etc/apt/sources.list.d/redis.list

sudo apt-get update
sudo apt-get install redis


sudo service redis-server start&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;wsl2 redis.PNG.png&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;147&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d9u0GJ/btsmA2uZQVv/DX8uCBk9dlY4KpM9BakPr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d9u0GJ/btsmA2uZQVv/DX8uCBk9dlY4KpM9BakPr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d9u0GJ/btsmA2uZQVv/DX8uCBk9dlY4KpM9BakPr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd9u0GJ%2FbtsmA2uZQVv%2FDX8uCBk9dlY4KpM9BakPr0%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;510&quot; height=&quot;147&quot; data-filename=&quot;wsl2 redis.PNG.png&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;147&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마찬가지로 redis-cli 명령어 잘 되는지 확인하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;Server에서 Redis-CLI Installation&lt;/b&gt;&lt;/span&gt;&lt;/h4&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_1688557298853&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo yum install -y gcc


wget http://download.redis.io/redis-stable.tar.gz &amp;amp;&amp;amp; tar xvzf redis-stable.tar.gz &amp;amp;&amp;amp; cd redis-stable &amp;amp;&amp;amp; make


sudo cp src/redis-cli /usr/bin

src/redis-server

#새롭게 terminal창 열고 전역에서 사용가능한지 확인 -&amp;gt; 127.0.0.1 &amp;gt; exit으로 빠져나가기
redis-cli

#AWS elastic cache Redis Cluster 엔드포인트로 접근
redis-cli -h {redis-cluster-endpoint} -p 6379&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;개발서버 등이 아닌 운영서버라면 wget으로 설치하는데에 제한사항이 있을 수 있다. 이런경우에는 로컬에 압축파일을 받고 sftp 방법으로 전송한 뒤에 파일 압축을 해제하는 방식으로 해결하였다.&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;공식문서에는 /usr/local/bin에 설치하라는데 별도의 path설정하는 번거로움이 생기지 않도록 redis-cli를 /usr/bin에 위치시켰다. 자기 의사로 선택하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Reference&lt;/h4&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;a href=&quot;https://github.com/microsoftarchive/redis/releases&quot;&gt;https://github.com/microsoftarchive/redis/releases&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://redis.io/docs/getting-started/installation/install-redis-on-windows/&quot;&gt;https://redis.io/docs/getting-started/installation/install-redis-on-windows/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://redis.io/docs/getting-started/installation/install-redis-from-source/&quot;&gt;https://redis.io/docs/getting-started/installation/install-redis-from-source/&lt;/a&gt;&lt;/p&gt;</description>
      <category>Tips(Reference)/etc</category>
      <category>elastic cache</category>
      <category>Redis</category>
      <category>redis cli</category>
      <category>redis-cli</category>
      <category>Window redis-cli</category>
      <author>DEV_BLOG</author>
      <guid isPermaLink="true">https://developing.tistory.com/99</guid>
      <comments>https://developing.tistory.com/99#entry99comment</comments>
      <pubDate>Wed, 5 Jul 2023 20:48:07 +0900</pubDate>
    </item>
    <item>
      <title>Ngrinder Stress Testing Tool Setting(download + Docker 활용 방식)</title>
      <link>https://developing.tistory.com/98</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;네이버 오픈소스 부하테스트 툴인 Ngrinder 환경 세팅을 위해서 controller/agent를 다운로드 하는 방식, Docker를 활용하는 방식이 있다. (windows 10기준으로 작성하고자 한다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;1. Controller, Agent를 다운받는 방식&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;[선행조건]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;- Java 11 / 1.8버전 , Path 설정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#ff5630&quot;&gt;1-1&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot;&gt;) &lt;/span&gt;&lt;b&gt;ngrinder-controller-3.5.8.war 다운로드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ngrinder github.png&quot; data-origin-width=&quot;1296&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9vGwa/btslAma62I0/9cHuJsfG6FYdtLqkNJWteK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9vGwa/btslAma62I0/9cHuJsfG6FYdtLqkNJWteK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9vGwa/btslAma62I0/9cHuJsfG6FYdtLqkNJWteK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9vGwa%2FbtslAma62I0%2F9cHuJsfG6FYdtLqkNJWteK%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;1296&quot; height=&quot;720&quot; data-filename=&quot;ngrinder github.png&quot; data-origin-width=&quot;1296&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/naver/ngrinder/releases/tag/ngrinder-3.5.8-20221230&quot;&gt;https://github.com/naver/ngrinder/releases/tag/ngrinder-3.5.8-20221230&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1687859119528&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Release ngrinder-3.5.8 &amp;middot; naver/ngrinder&quot; data-og-description=&quot;Changes Shows error message when running without tmpdir property&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/naver/ngrinder/releases/tag/ngrinder-3.5.8-20221230&quot; data-og-url=&quot;https://github.com/naver/ngrinder/releases/tag/ngrinder-3.5.8-20221230&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c1NVcl/hyS8qK1TRS/PFFWEkI0TPI3pcwSspd0Fk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/naver/ngrinder/releases/tag/ngrinder-3.5.8-20221230&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/naver/ngrinder/releases/tag/ngrinder-3.5.8-20221230&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c1NVcl/hyS8qK1TRS/PFFWEkI0TPI3pcwSspd0Fk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Release ngrinder-3.5.8 &amp;middot; naver/ngrinder&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Changes Shows error message when running without tmpdir property&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.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;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#ff5630&quot;&gt;1-2&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot;&gt;) &lt;/span&gt;&lt;b&gt;Ngrinder Controller(Web) 가동&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1687859137804&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;java -jar ngrinder-controller-3-5-8.war --port={입력할 포트}
# EX : java -jar ngrinder-controller-3-5-8.war --port=8300&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;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#ff5630&quot;&gt;1-3&lt;/span&gt;&lt;/b&gt;) &lt;b&gt;localhost:{입력한 포트} 접속 후 ID/PWD 'admin' 동일하게 입력 및 Download Agent&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-layout=&quot;center&quot; data-node-type=&quot;mediaSingle&quot;&gt;
&lt;div&gt;
&lt;div data-context-id=&quot;43319299&quot; data-type=&quot;file&quot; data-node-type=&quot;media&quot; data-width=&quot;926&quot; data-height=&quot;276&quot; data-id=&quot;bf00adf4-423c-4d2b-8b2f-96b920092bb5&quot; data-collection=&quot;contentId-43319299&quot; data-file-name=&quot;download agent.PNG&quot; data-file-size=&quot;105542&quot; data-file-mime-type=&quot;image/png&quot; data-alt=&quot;&quot;&gt;
&lt;div id=&quot;newFileExperienceWrapper&quot; data-testid=&quot;media-card-view&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ngrinder controller.png&quot; data-origin-width=&quot;1234&quot; data-origin-height=&quot;368&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IBnBL/btslvxR0FKf/JcwSJljggEFHwnZSXd5VGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IBnBL/btslvxR0FKf/JcwSJljggEFHwnZSXd5VGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IBnBL/btslvxR0FKf/JcwSJljggEFHwnZSXd5VGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIBnBL%2FbtslvxR0FKf%2FJcwSJljggEFHwnZSXd5VGk%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;1234&quot; height=&quot;368&quot; data-filename=&quot;ngrinder controller.png&quot; data-origin-width=&quot;1234&quot; data-origin-height=&quot;368&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#ff5630&quot;&gt;1-4&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot;&gt;) &lt;/span&gt;&lt;b&gt;agent 배치파일 실행&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1687859197478&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 압축 해제 후 run_agent.bat 실행
run_agent.bat&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;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#ff5630&quot;&gt;1-5&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot;&gt;) &lt;/span&gt;&lt;b&gt;과정 흐름 참고&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ngrinder cmd.PNG&quot; data-origin-width=&quot;1276&quot; data-origin-height=&quot;178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/19ecQ/btslw60IVCE/Iuo0I8Rfzxbp5oipTuGMbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/19ecQ/btslw60IVCE/Iuo0I8Rfzxbp5oipTuGMbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/19ecQ/btslw60IVCE/Iuo0I8Rfzxbp5oipTuGMbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F19ecQ%2Fbtslw60IVCE%2FIuo0I8Rfzxbp5oipTuGMbk%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;1276&quot; height=&quot;178&quot; data-filename=&quot;ngrinder cmd.PNG&quot; data-origin-width=&quot;1276&quot; data-origin-height=&quot;178&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;ngrinder 과정 흐름 참고 2.png&quot; data-origin-width=&quot;1296&quot; data-origin-height=&quot;155&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqOhIw/btslCkp9itK/TR6wldIGi0w3HjE4aBzdsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqOhIw/btslCkp9itK/TR6wldIGi0w3HjE4aBzdsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqOhIw/btslCkp9itK/TR6wldIGi0w3HjE4aBzdsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqOhIw%2FbtslCkp9itK%2FTR6wldIGi0w3HjE4aBzdsK%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;1296&quot; height=&quot;155&quot; data-filename=&quot;ngrinder 과정 흐름 참고 2.png&quot; data-origin-width=&quot;1296&quot; data-origin-height=&quot;155&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#ff5630&quot;&gt;1-6&lt;/span&gt;&lt;/b&gt;) &lt;b&gt;Script &amp;rarr; Create a Script &amp;rarr; script 작성 후 Validate 하여 정상동작하는지 확인&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;한편, ngrinder를 사용할 때 특정 jdk 버전을 맞추어야하다보니 Path를 변경하는 번거로움이 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 IntelliJ에서 개발을 하다가 Ngrinder를 사용해야할 때 path를 변경해야하는데, 바뀐 path가 잘 적용되지 않는 경우가 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(다른 분도 이런 상황을 겪어서 wsl2+docker 환경을 만들어 드렸다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때의 대처방법은 2가지 정도가 있는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #409d00;&quot;&gt;1&lt;/span&gt;.&lt;/span&gt;&lt;/b&gt; Java path를 11버전으로 두고 IntelliJ 프로젝트별로 직접 jdk 버전을 설정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;2&lt;/span&gt;.&lt;/span&gt;&lt;/b&gt; Docker 환경으로 ngrinder를 사용해 path 변경을 신경쓰지 않도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금부터는 2번의 방법에 대해 설명하고자 한다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;2. Docker를 활용하는 방식&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;[선행조건]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;- Docker Desktop, Windows Terminal + Ubuntu LTS WSL2 환경&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#ff5630&quot;&gt;2-1&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot;&gt;) &lt;/span&gt;&lt;b&gt;Docker Hub에서 ngrinder/controller, ngrinder/agent 이미지 Pull 하기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1687859897824&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker pull ngrinder/agent:3.5.5
docker pull ngrinder/controller:3.5.5

#Docker Hub에서 Pull 해온 image 확인
docker images&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;div id=&quot;AkSideNavigation&quot; data-testid=&quot;grid-left-sidebar&quot; data-ds--page-layout--slot=&quot;left-sidebar&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-testid=&quot;app-navigation-space-container&quot;&gt;
&lt;div&gt;
&lt;div data-enter-from=&quot;right&quot; data-exit-to=&quot;left&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot; data-ds--menu--heading-item=&quot;true&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#ff5630&quot;&gt;2-2&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot;&gt;) &lt;/span&gt;&lt;b&gt;Docker Image 기반의 Container 실행하기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1687859918385&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -d -v ~/ngrinder-controller:/opt/ngrinder-controller -p {지정할_PORT_번호}:80 -p 16001:16001 -p 12000-12009:12000-12009 ngrinder/controller:3.5.5
#(ex) docker run -d -v ~/ngrinder-controller:/opt/ngrinder-controller -p 8300:80 -p 16001:16001 -p 12000-12009:12000-12009 ngrinder/controller:3.5.5


docker run -v ~/ngrinder-agent:/opt/ngrinder-agent -d ngrinder/agent:3.5.5  {Controller 띄운 자신의 IP}:{Controller 띄운 port}
#(ex) docker run -v ~/ngrinder-agent:/opt/ngrinder-agent -d ngrinder/agent:3.5.5  123.45.678.1:8300&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#ff5630&quot;&gt;2-3&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot;&gt;) &lt;/span&gt;&lt;b&gt;Docker Container 상태 Docker desktop 통해 확인 혹은 Command로 확인&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ngrinder docker.png&quot; data-origin-width=&quot;1167&quot; data-origin-height=&quot;409&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WzYni/btslDFHlQlD/RyBsV79TRAyOZUsynSMPk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WzYni/btslDFHlQlD/RyBsV79TRAyOZUsynSMPk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WzYni/btslDFHlQlD/RyBsV79TRAyOZUsynSMPk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWzYni%2FbtslDFHlQlD%2FRyBsV79TRAyOZUsynSMPk0%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;1167&quot; height=&quot;409&quot; data-filename=&quot;ngrinder docker.png&quot; data-origin-width=&quot;1167&quot; data-origin-height=&quot;409&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1687861428091&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#a OPTION이 붙지 않으면 현재 동작중인 컨테이너만 표기된다.(a 옵션으로 종료된 컨테이너도 표시함)
docker ps -a&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Q.&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot;&gt; &lt;/span&gt;&lt;b&gt;왜 Docker 방식의 경우 3.5.8 최신버전으로 안하고 3.5.5로 하였는지?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;A.&lt;/b&gt;&lt;/span&gt; 도커로 3.5.8 버전을 사용한 경우 script 생성시 validation Check 기능이 동작하지 않는 현상발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bosungtea9416.tistory.com/entry/nGrinder-validation-fail-%ED%98%84%EC%83%81-%ED%95%B4%EA%B2%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://bosungtea9416.tistory.com/entry/nGrinder-validation-fail-%ED%98%84%EC%83%81-%ED%95%B4%EA%B2%B0&lt;/a&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;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Q.&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot;&gt; &lt;/span&gt;&lt;b&gt;굳이 docker를 사용하여서 ngrinder를 사용해야 할지?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;A.&lt;/b&gt;&lt;/span&gt; Controller,Agent를 다운받는 방식의 경우 Java 1.8 / 11 버전을 쓸 것이 강제됨. IntelliJ에서 사용중인 JDK17버전 path에서 JDK11로 변경 후 반영할때 굉장히 곤란한 상황들을 겪음. 레지스트리에서 이전 path를 물고있는듯 하여 JAVA_HOME 등을 아예 삭제하여 재생성하고 jdk 이전버전 삭제 등등의 작업까지해야 path가 제대로 적용이 되는 현상이 생겨서 많은 피로도를 느낌. path 변경에 문제가 안생긴다면 굳이 docker 안써도 된다고 판단됨. 다만 jdk 변경하는 번거로움이 없다는장점 + Agent를 증가시키게 될 경우에도 docker를 찾게 될 것으로 예상하였음.&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;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Q.&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot;&gt; &lt;/span&gt;&lt;b&gt;왜 일반적인 cmd로 안하고 windows terminal에 wsl2 ubuntu 환경으로 하였는지 ?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;A.&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot;&gt; cmder 환경에서 잘 구동되는 것 확인하였는데 다른날 처음 발생한 에러에 대해 찾아보니 ngrinder-agent Docker 컨테이너가 실행되는 호스트 환경이 Linux임을 권장하고, ngrinder-agent는 Linux 기반 환경을 가정하고 설계되었다는 답변을 받음. 안정적으로 구동하려면 wsl2 ubuntu 환경을 써야할 것으로 보임&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot;&gt;그 외에는.. M1 맥북으로도 Docker 환경에서 사용하는 방법을 강구해보았는데, 잘 안되서 Github discussions를 확인해보니 비슷한 환경에서 어려움을 겪는 분들이 꽤 있어보였다. mac환경에서는 path변경 후 source ~/.zshrc&amp;nbsp; 이정도만 해도 path 적용 잘되서 agent&amp;amp;controller 다운받아서 실행하는 방식으로 사용하기 간편한듯.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #99cefa; color: #172b4d; text-align: start;&quot;&gt;Reference&lt;/span&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot;&gt;&lt;a href=&quot;https://github.com/naver/ngrinder/tree/develop/docker&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/naver/ngrinder/tree/develop/docker&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;figure id=&quot;og_1687860220591&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - naver/ngrinder: enterprise level performance testing solution&quot; data-og-description=&quot;enterprise level performance testing solution. Contribute to naver/ngrinder development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/naver/ngrinder/tree/develop/docker&quot; data-og-url=&quot;https://github.com/naver/ngrinder&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cJWV03/hyS8sPCXJ9/GsjDed6m4eKa4KkDqSTxg0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/naver/ngrinder/tree/develop/docker&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/naver/ngrinder/tree/develop/docker&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cJWV03/hyS8sPCXJ9/GsjDed6m4eKa4KkDqSTxg0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - naver/ngrinder: enterprise level performance testing solution&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;enterprise level performance testing solution. Contribute to naver/ngrinder development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot;&gt;&lt;a href=&quot;https://velog.io/@injoon2019/%EB%B6%80%ED%95%98%ED%85%8C%EC%8A%A4%ED%8A%B8-z8jb3vvv&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@injoon2019/%EB%B6%80%ED%95%98%ED%85%8C%EC%8A%A4%ED%8A%B8-z8jb3vvv&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot;&gt;&lt;a href=&quot;https://blog.naver.com/wideeyed/222173944239&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://blog.naver.com/wideeyed/222173944239&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot;&gt;&lt;a href=&quot;https://velog.io/@hellonayeon/nGrinder-install-and-how-to-use-memo&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@hellonayeon/nGrinder-install-and-how-to-use-memo&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Tips(Reference)/etc</category>
      <category>Docker</category>
      <category>nGrinder</category>
      <category>Ngrinder Docker</category>
      <category>stress test</category>
      <author>DEV_BLOG</author>
      <guid isPermaLink="true">https://developing.tistory.com/98</guid>
      <comments>https://developing.tistory.com/98#entry98comment</comments>
      <pubDate>Tue, 27 Jun 2023 19:06:05 +0900</pubDate>
    </item>
    <item>
      <title>AWS RDS를 활용한 부하분산 아키텍쳐 고민</title>
      <link>https://developing.tistory.com/97</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Relational Database -&amp;nbsp; AWS RDS를 활용한 부하분산 아키텍쳐를 고안하다가 다른 방향으로 전환하였는데 기존에 정리해둔 내용을 노션에 묵혀두기 아까워서 약간의 내용을 가져와서 오랜만에 포스팅을 할까한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Goal&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의 Database Application에서 Read와 Write의 비율은 100:1 ~ 10000:1 가량이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;트래픽이 급증하면 1대의 데이터베이스에 읽기(Read) / 쓰기(Write,Update,Delete)처리 요청시 많은 부하가 발생.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Primary DB에 write, Secondary DB에 Read 하도록 트래픽 분산처리를 적용하기 위한 고민.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;비슷한 Terminology&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;- Primary DB &amp;lt;----&amp;gt; StandBy&lt;/span&gt;&lt;span style=&quot;color: #409d00;&quot;&gt; DB&lt;/span&gt;&lt;/b&gt;(Read도 불가능한 복제본 DB를 지칭하는 느낌이 강하다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;Primary DB &amp;lt;----&amp;gt; Secondary DB&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&amp;gt; &lt;span style=&quot;color: #0593d3;&quot;&gt;&lt;b&gt;Master DB &amp;lt;----&amp;gt; Slave DB&lt;/b&gt;&lt;/span&gt;(인종차별 문제로 해당 용어 사용은 지양하는 추세이다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;Master DB &amp;lt;----&amp;gt; Replica DB&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(Staging DB는 살짝 다른범주라고 생각해서 같이 두지는 않겠다.)&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;&lt;b&gt;Multi A-Z&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Synchronous Replication&lt;/b&gt;&lt;/span&gt; : Primary Storage와 ReplicaDB에 동시에 data를 write함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;Disaster Recovery&lt;/b&gt;&lt;/span&gt; 목적이 크다. 실제 서비스 시 필요한 옵션&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&amp;gt; application downtime(시스템을 이용할 수 없는 시간)이 발생하지 않는 real-time(instantaneous)방식으로 장애 대비 기능(fail-over)를 제공함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 예비 복제본 프로비저닝, Master DB 장애 발생시 StandBy Instance를 Master로 승격하며 새 StandBy DB Instance 생성하여 장애조치 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Single AZ-&amp;gt;Multi AZ 변경은 설정 몇번이 전부, Downtime 발생 X, DB정지 X, 내부적으로 DB의 스냅샷 생성 후 해당 스냅샷으로부터 다른 AZ에 새 DB가 생성되어 양 DB간의 동기화 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 장애조치 완료 소요시간 : 대략 60~120초&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;product-page-diagram_MAZ_HIW@2xa.245de181144d709479981ab02a5318165b7ed8a9.png&quot; data-origin-width=&quot;2360&quot; data-origin-height=&quot;1098&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tfgIN/btskEo7fZkF/xyznwpOZl07r0Pr3YK2U6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tfgIN/btskEo7fZkF/xyznwpOZl07r0Pr3YK2U6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tfgIN/btskEo7fZkF/xyznwpOZl07r0Pr3YK2U6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtfgIN%2FbtskEo7fZkF%2FxyznwpOZl07r0Pr3YK2U6K%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;2360&quot; height=&quot;1098&quot; data-filename=&quot;product-page-diagram_MAZ_HIW@2xa.245de181144d709479981ab02a5318165b7ed8a9.png&quot; data-origin-width=&quot;2360&quot; data-origin-height=&quot;1098&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;&lt;b&gt;Read Replica&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Asynchronous Replication&lt;/span&gt;&lt;/b&gt; : Primary Storage에 데이터를 write한 이후 ReplicaDB에 복사함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;Traffic 대응&lt;/span&gt;&lt;/b&gt; 목적이 크다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 짧은 시간동안 Replica와 Master간의 데이터 차이 발생가능성 있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Read Replica를 Master로 변경 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Master DB에 write시 자동으로 Read Replica DB에 복제 수행. 즉시 복제 되는 것 아니며 약간의 시간차 발생&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;read-replicas-scaling-disaster-recovery.3b8da7093daeb1e87426225caf49e32efe7ae01a.png&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;605&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t3etq/btskyP6BnFx/0po0IINz5X8C7XahurykXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t3etq/btskyP6BnFx/0po0IINz5X8C7XahurykXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t3etq/btskyP6BnFx/0po0IINz5X8C7XahurykXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft3etq%2FbtskyP6BnFx%2F0po0IINz5X8C7XahurykXK%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;684&quot; height=&quot;605&quot; data-filename=&quot;read-replicas-scaling-disaster-recovery.3b8da7093daeb1e87426225caf49e32efe7ae01a.png&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;605&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;생각할거리&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Read Replica를 적용하였을때 master DB에 write 하는 경우 Replica DB에 반영되기까지 latency는 얼마나 소요되는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- latency가 많이 소요되는 경우 정확성이 높아야하는 최신 데이터가 요구되는경우에 MasterDB에서 read/write이 이루어지도록 해야하는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Read Replica DB 장애발생하는 Case가 존재하면 수동으로 다른 Replica DB를 재활성해야하는지 여부.&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;b&gt;Reference&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Synchronous Replication VS asynchronous Replication&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; &lt;a href=&quot;https://cloudbasic.net/white-papers/synchronous-vs-asynchronous-replication/&quot;&gt;https://cloudbasic.net/white-papers/synchronous-vs-asynchronous-replication/&lt;/a&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;AWS RDS 공식문서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; &lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/USER_ReadRepl.html&quot;&gt;https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/USER_ReadRepl.html&lt;/a&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;AWS RDS Multi-AZ,Replica 관련&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://support.bespinglobal.com/ko/support/solutions/articles/73000544793--aws-rds-이중화-구성-multi-az-&quot;&gt;https://support.bespinglobal.com/ko/support/solutions/articles/73000544793--aws-rds-이중화-구성-multi-az-&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; &lt;a href=&quot;https://cwal.tistory.com/76&quot;&gt;https://cwal.tistory.com/76&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; &lt;a href=&quot;https://boomkim.github.io/2018/07/13/rds-multiaz-readreplica-summary/&quot;&gt;https://boomkim.github.io/2018/07/13/rds-multiaz-readreplica-summary/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://overcome-the-limits.tistory.com/294&quot;&gt;&amp;nbsp;&lt;/a&gt;&lt;a href=&quot;https://overcome-the-limits.tistory.com/294&quot;&gt;https://overcome-the-limits.tistory.com/294&lt;/a&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;Primary, Secondary DB Architecture&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; &lt;a href=&quot;https://blog.naver.com/PostView.naver?blogId=techtrip&amp;amp;logNo=221965081270&quot;&gt;https://blog.naver.com/PostView.naver?blogId=techtrip&amp;amp;logNo=221965081270&lt;/a&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;</description>
      <category>Architecture</category>
      <category>aws rds</category>
      <category>부하분산</category>
      <category>트래픽</category>
      <author>DEV_BLOG</author>
      <guid isPermaLink="true">https://developing.tistory.com/97</guid>
      <comments>https://developing.tistory.com/97#entry97comment</comments>
      <pubDate>Mon, 19 Jun 2023 21:00:34 +0900</pubDate>
    </item>
  </channel>
</rss>