<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>해나아부지 개발일지</title>
    <link>https://bedevelopers.tistory.com/</link>
    <description>1일 1커밋  or 1일 1포스트 하기 챌린지</description>
    <language>ko</language>
    <pubDate>Fri, 15 May 2026 01:20:44 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>__APPA</managingEditor>
    <image>
      <title>해나아부지 개발일지</title>
      <url>https://tistory1.daumcdn.net/tistory/3824633/attach/85a5440c1a6847a59d2ed9642c34fda2</url>
      <link>https://bedevelopers.tistory.com</link>
    </image>
    <item>
      <title>[패스트캠퍼스] 재직자교육 InnerCircle AI 마스터 코스 OT 후기</title>
      <link>https://bedevelopers.tistory.com/271</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1368&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cq9zQ0/btsLstbknZ1/G63oDM83drykczHZHuvoS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cq9zQ0/btsLstbknZ1/G63oDM83drykczHZHuvoS1/img.png&quot; data-alt=&quot;INNER CIRCLE AI 마스터 코스 합격!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cq9zQ0/btsLstbknZ1/G63oDM83drykczHZHuvoS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcq9zQ0%2FbtsLstbknZ1%2FG63oDM83drykczHZHuvoS1%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;1368&quot; height=&quot;700&quot; data-origin-width=&quot;1368&quot; data-origin-height=&quot;700&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;INNER CIRCLE AI 마스터 코스 합격!&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;프로젝트 중심 역량 강화의 첫걸음 평소 인공지능, 특히 생성형 AI 분야에 관심이 많았던 저는 최근 패스트캠퍼스에서 진행된 재직자 대상 InnerCircle : AI Master Course 1기에 참여하게 되었습니다. 정부 지원으로 진행되는 이 과정은 K-Digital 트레이닝의 한 과정으로 재직자라면 전액무료로 진행됩니다.(출석, 프로젝트 등 조건이 존재함) 프로젝트 중심의 역량 강화에 초점을 맞추고 있다는 점에서 큰 기대를 안고 참석했습니다. 이번 OT는 과정 전반에 대한 소개는 물론, LLM(Large Language Model)의 발전 과정과 주요 모델들을 심도 있게 다루어 매우 유익한 시간이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OT는 먼저 과정의 전반적인 소개로 시작되었습니다. 교육 목표, 커리큘럼 구성, 프로젝트 진행 방식 등 앞으로 진행될 과정에 대한 상세한 안내가 이루어졌습니다. 특히 프로젝트 중심의 학습이라는 점이 강조되었는데, 이론적인 지식 습득뿐만 아니라 실제 프로젝트를 통해 실무 역량을 키울 수 있다는 점이 매력적으로 다가왔습니다. 또한 출결 관리 및 학습 지원 시스템에 대한 안내도 꼼꼼하게 진행되어 앞으로의 학습 과정에 대한 명확한 그림을 그릴 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이어서 LLM의 발달 과정에 대한 흥미로운 강의가 진행되었습니다. 초기 모델부터 현재의 거대 모델에 이르기까지, LLM의 역사를 한눈에 조망할 수 있었습니다. 각 모델의 특징과 장단점, 그리고 기술적인 발전 과정을 명확하게 설명해 주어 LLM에 대한 이해를 한층 높일 수 있었습니다. 특히 GPT-3, BERT 등 주요 모델들에 대한 심도 있는 분석은 매우 인상적이었습니다. 단순히 이론적인 설명에 그치지 않고, 각 모델이 가진 의미와 한계점을 명확히 짚어주어 더욱 깊이 있는 학습이 가능했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OT의 하이라이트는 Colab 환경에서 진행된 RAG(Retrieval Augmented Generation) 실습이었습니다. RAG는 외부 지식 소스를 활용하여 생성 모델의 답변 정확도를 높이는 기술로, 최근 생성형 AI 분야에서 매우 중요한 기술로 여겨지고 있습니다. 강사님의 친절한 안내에 따라 직접 코드를 실행해 보고 결과를 확인하는 과정을 통해 RAG의 작동 원리를 쉽게 이해할 수 있었습니다. 특히 OpenAI / Upstage API를 활용하여 실제 웹페이지에 있는 데이터를 활용한 실습을 통해 이론으로만 접했던 내용을 실제 현장에서 어떻게 적용할 수 있는지 가볍게 경험할 수 있었던 점이 좋았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 OT를 통해 앞으로 진행될 AI Master Course에 대한 기대감이 더욱 커졌습니다. 프로젝트 중심의 교육 방식과 실무 중심의 커리큘럼, 그리고 LLM에 대한 프로젝트 중심 학습은 제가 AI 분야의 전문가로 성장하는 데 큰 도움이 될 것이라고 확신합니다. 정부 지원으로 이러한 양질의 교육을 받을 수 있게 된 것에 감사하며, 앞으로의 과정에 적극적으로 참여하여 제 역량을 최대한으로 끌어올릴 계획입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 분야에 대한 경험과 열정이 있는 사람들 위주로 선발하기 때문에(경쟁률이 높다고 합니다!) 여러 분야의 열정적인 분들과 협업 및 네트워킹의 기회 또한 될 것으로 생각됩니다. 생성형 AI 분야에 관심 있는 재직자라면 이 과정을 한 번 신청해봐도 좋을 것 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패스트캠퍼스 이너서클 : AI 마스터 코스 OT 후기 끝!&lt;/p&gt;</description>
      <category>Review</category>
      <category>Ai</category>
      <category>inner circle</category>
      <category>재직자교육</category>
      <category>패스트캠퍼스</category>
      <author>__APPA</author>
      <guid isPermaLink="true">https://bedevelopers.tistory.com/271</guid>
      <comments>https://bedevelopers.tistory.com/271#entry271comment</comments>
      <pubDate>Mon, 23 Dec 2024 11:39:59 +0900</pubDate>
    </item>
    <item>
      <title>#1 We need to streamline our operations</title>
      <link>https://bedevelopers.tistory.com/269</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&quot;We need to streamline our operations to improve efficiency and reduce costs.&quot;&lt;br /&gt;&lt;br /&gt;**Dialog&lt;br /&gt;&lt;br /&gt;Mark:&amp;nbsp;Hey&amp;nbsp;Sarah,&amp;nbsp;have&amp;nbsp;you&amp;nbsp;seen&amp;nbsp;the&amp;nbsp;latest&amp;nbsp;financial&amp;nbsp;report?&lt;br /&gt;&lt;br /&gt;Sarah:&amp;nbsp;Yes,&amp;nbsp;I&amp;nbsp;have.&amp;nbsp;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;It&amp;nbsp;seems&amp;nbsp;like&amp;nbsp;our&amp;nbsp;expenses&amp;nbsp;are&amp;nbsp;higher&amp;nbsp;than&amp;nbsp;expected.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mark:&amp;nbsp;Exactly.&amp;nbsp;That's&amp;nbsp;why&amp;nbsp;&lt;span style=&quot;background-color: #8cb3be;&quot;&gt;I&amp;nbsp;think&amp;nbsp;we&amp;nbsp;need&amp;nbsp;to&amp;nbsp;streamline&amp;nbsp;our&amp;nbsp;operations.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sarah:&amp;nbsp;I&amp;nbsp;agree.&amp;nbsp;We&amp;nbsp;could&amp;nbsp;look&amp;nbsp;into&amp;nbsp;automating&amp;nbsp;some&amp;nbsp;processes&amp;nbsp;to&amp;nbsp;cut&amp;nbsp;down&amp;nbsp;on&amp;nbsp;manual&amp;nbsp;work.&lt;br /&gt;&lt;br /&gt;Mark:&amp;nbsp;That's&amp;nbsp;a&amp;nbsp;good&amp;nbsp;idea.&amp;nbsp;We&amp;nbsp;also&amp;nbsp;need&amp;nbsp;to&amp;nbsp;assess&amp;nbsp;our&amp;nbsp;current&amp;nbsp;resources&amp;nbsp;and&amp;nbsp;see&amp;nbsp;if&amp;nbsp;we&amp;nbsp;can&amp;nbsp;reallocate&amp;nbsp;them&amp;nbsp;more&amp;nbsp;effectively.&lt;br /&gt;&lt;br /&gt;Sarah:&amp;nbsp;Absolutely.&amp;nbsp;Maybe&amp;nbsp;we&amp;nbsp;should&amp;nbsp;schedule&amp;nbsp;a&amp;nbsp;meeting&amp;nbsp;with&amp;nbsp;the&amp;nbsp;department&amp;nbsp;heads&amp;nbsp;to&amp;nbsp;discuss&amp;nbsp;potential&amp;nbsp;strategies.&lt;br /&gt;&lt;br /&gt;Mark:&amp;nbsp;Yes,&amp;nbsp;let's&amp;nbsp;do&amp;nbsp;that.&amp;nbsp;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;I'll&amp;nbsp;draft&amp;nbsp;an&amp;nbsp;agenda&amp;nbsp;and&amp;nbsp;circulate&amp;nbsp;it&amp;nbsp;to&amp;nbsp;everyone.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sarah:&amp;nbsp;Sounds&amp;nbsp;like&amp;nbsp;a&amp;nbsp;plan.&amp;nbsp;We&amp;nbsp;need&amp;nbsp;to&amp;nbsp;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;take&amp;nbsp;proactive&amp;nbsp;steps&lt;/span&gt;&amp;nbsp;to&amp;nbsp;improve&amp;nbsp;efficiency&amp;nbsp;and&amp;nbsp;reduce&amp;nbsp;costs.&lt;br /&gt;&lt;br /&gt;Mark:&amp;nbsp;Agreed.&amp;nbsp;Let's&amp;nbsp;aim&amp;nbsp;to&amp;nbsp;implement&amp;nbsp;these&amp;nbsp;changes&amp;nbsp;within&amp;nbsp;the&amp;nbsp;next&amp;nbsp;quarter&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&amp;nbsp;to&amp;nbsp;see&amp;nbsp;tangible&amp;nbsp;results.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sarah:&amp;nbsp;Definitely.&amp;nbsp;I'll&amp;nbsp;start&amp;nbsp;gathering&amp;nbsp;relevant&amp;nbsp;data&amp;nbsp;to&amp;nbsp;support&amp;nbsp;our&amp;nbsp;proposals&amp;nbsp;for&amp;nbsp;the&amp;nbsp;meeting.&lt;br /&gt;&lt;br /&gt;Mark:&amp;nbsp;Great.&amp;nbsp;Thanks&amp;nbsp;for&amp;nbsp;your&amp;nbsp;input,&amp;nbsp;Sarah.&amp;nbsp;Together,&amp;nbsp;I'm&amp;nbsp;confident&amp;nbsp;we&amp;nbsp;can&amp;nbsp;make&amp;nbsp;a&amp;nbsp;positive&amp;nbsp;impact&amp;nbsp;on&amp;nbsp;our&amp;nbsp;company's&amp;nbsp;performance.&lt;/p&gt;</description>
      <category>Be/Langugage</category>
      <category>1일1문장</category>
      <category>영어회화</category>
      <author>__APPA</author>
      <guid isPermaLink="true">https://bedevelopers.tistory.com/269</guid>
      <comments>https://bedevelopers.tistory.com/269#entry269comment</comments>
      <pubDate>Mon, 8 Apr 2024 16:18:18 +0900</pubDate>
    </item>
    <item>
      <title>#0 Can I have/get ~</title>
      <link>https://bedevelopers.tistory.com/268</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;Here are 10 examples including &quot;Can I have/get ~&quot;:&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;Can&amp;nbsp;I&amp;nbsp;have&amp;nbsp;a&amp;nbsp;glass&amp;nbsp;of&amp;nbsp;water,&amp;nbsp;please?&lt;br /&gt;2.&amp;nbsp;Can&amp;nbsp;I&amp;nbsp;get&amp;nbsp;the&amp;nbsp;bill,&amp;nbsp;please?&lt;br /&gt;3.&amp;nbsp;Can&amp;nbsp;I&amp;nbsp;have&amp;nbsp;your&amp;nbsp;attention&amp;nbsp;for&amp;nbsp;a&amp;nbsp;moment?&lt;br /&gt;4.&amp;nbsp;Can&amp;nbsp;I&amp;nbsp;get&amp;nbsp;a&amp;nbsp;refill&amp;nbsp;on&amp;nbsp;my&amp;nbsp;coffee,&amp;nbsp;please?&lt;br /&gt;5.&amp;nbsp;Can&amp;nbsp;I&amp;nbsp;have&amp;nbsp;some&amp;nbsp;more&amp;nbsp;information&amp;nbsp;about&amp;nbsp;the&amp;nbsp;product?&lt;br /&gt;6.&amp;nbsp;Can&amp;nbsp;I&amp;nbsp;get&amp;nbsp;your&amp;nbsp;opinion&amp;nbsp;on&amp;nbsp;this&amp;nbsp;matter?&lt;br /&gt;7.&amp;nbsp;Can&amp;nbsp;I&amp;nbsp;have&amp;nbsp;a&amp;nbsp;piece&amp;nbsp;of&amp;nbsp;cake,&amp;nbsp;please?&lt;br /&gt;8.&amp;nbsp;Can&amp;nbsp;I&amp;nbsp;get&amp;nbsp;a&amp;nbsp;ticket&amp;nbsp;for&amp;nbsp;tonight's&amp;nbsp;show?&lt;br /&gt;9.&amp;nbsp;Can&amp;nbsp;I&amp;nbsp;have&amp;nbsp;a&amp;nbsp;moment&amp;nbsp;to&amp;nbsp;think&amp;nbsp;about&amp;nbsp;it?&lt;br /&gt;10. Can I get your assistance with this task?&lt;/p&gt;</description>
      <category>Be/Langugage</category>
      <category>1일1문장</category>
      <category>하루영어회화</category>
      <author>__APPA</author>
      <guid isPermaLink="true">https://bedevelopers.tistory.com/268</guid>
      <comments>https://bedevelopers.tistory.com/268#entry268comment</comments>
      <pubDate>Fri, 5 Apr 2024 10:43:32 +0900</pubDate>
    </item>
    <item>
      <title>Docker 자주쓰는 명령어 모음</title>
      <link>https://bedevelopers.tistory.com/267</link>
      <description>&lt;pre id=&quot;code_1679980218013&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 버전 체크
docker -v or docker --version

# 이미지 리스트
docker images

# 스테이터스 체크
docker ps

# 빌드
docker build -t [name] .

# 실행
docker run -dp 3000:3000 [name or id]

# 태깅 SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker tag [source:latest] [target:1.0]

# 도커 허브 업로드 
docker push jimyeongsong/image:1.0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ docker hub 업로드 시 이미지 이름에 계정명을 넣어줘야 push가 되기 때문에 이미지 태깅을 할 때 이미지명에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; '계정명/이미지이름:태그' 식으로 target image 를 변경해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqeSuC/btr6qNuaGOQ/2dIr7XOudokkew2PuOAfE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqeSuC/btr6qNuaGOQ/2dIr7XOudokkew2PuOAfE0/img.png&quot; data-alt=&quot;docker push command&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqeSuC/btr6qNuaGOQ/2dIr7XOudokkew2PuOAfE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqeSuC%2Fbtr6qNuaGOQ%2F2dIr7XOudokkew2PuOAfE0%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;502&quot; height=&quot;152&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;152&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker push command&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;* advanced&lt;/h4&gt;
&lt;pre id=&quot;code_1679980512810&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 멀티플랫폼 빌드환경 셋 m1 mac to ubuntu(linux) 64비트 예시
docker buildx create --platform linux/amd64,linux/arm64&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1680242474573&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 많은 이미지와 컨테이너를 만들다보면 지웠는데도 불구하고 용량이 꽉차는 경험을 하게 된다.
# 미사용 컨테이너와 이미지를 지워주자
docker system prune -a -f&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;15&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/90Q2A/btr65r5tpCe/8u8gIhoJZKyq9jscghmSn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/90Q2A/btr65r5tpCe/8u8gIhoJZKyq9jscghmSn0/img.png&quot; data-alt=&quot;미사용 도커파일 삭제&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/90Q2A/btr65r5tpCe/8u8gIhoJZKyq9jscghmSn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F90Q2A%2Fbtr65r5tpCe%2F8u8gIhoJZKyq9jscghmSn0%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;362&quot; height=&quot;15&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;15&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;미사용 도커파일 삭제&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;223&quot; data-origin-height=&quot;18&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNAWzG/btr7d8XuHHO/xEYDGHeXTHYdiO9eq6hAk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNAWzG/btr7d8XuHHO/xEYDGHeXTHYdiO9eq6hAk0/img.png&quot; data-alt=&quot;14기가나 차지하고 있었....&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNAWzG/btr7d8XuHHO/xEYDGHeXTHYdiO9eq6hAk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNAWzG%2Fbtr7d8XuHHO%2FxEYDGHeXTHYdiO9eq6hAk0%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;223&quot; height=&quot;18&quot; data-origin-width=&quot;223&quot; data-origin-height=&quot;18&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;14기가나 차지하고 있었....&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Cloud/Docker</category>
      <category>Command</category>
      <category>docker</category>
      <category>도커 명령어</category>
      <category>자주쓰는</category>
      <author>__APPA</author>
      <guid isPermaLink="true">https://bedevelopers.tistory.com/267</guid>
      <comments>https://bedevelopers.tistory.com/267#entry267comment</comments>
      <pubDate>Tue, 28 Mar 2023 14:15:54 +0900</pubDate>
    </item>
    <item>
      <title>Docker로 NextJS 앱 배포하기</title>
      <link>https://bedevelopers.tistory.com/266</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;docker build 시 Image size가 GB 단위로 올라가고, m1 맥북에서 build 시 ubuntu에서 호환이 안되기 때문에 추가 옵션을 줘야하는 등 약간의 이슈가 있어서 git 코드 공유로 ubuntu server 자체에서 build하는 식으로 해서 사용중이다.&lt;/p&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. Docker 설치 (local &amp;amp; server)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- local : 공식 홈페이지에서 본인의 운영체제에 맞는 &lt;a href=&quot;https://docs.docker.com/desktop/install/mac-install/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Docker 설치&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- server(ec2 ubuntu 22.04): 공식 홈페이지 &lt;a href=&quot;https://docs.docker.com/engine/install/ubuntu/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;install docker on ubuntu&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;1. Dockerfile 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- code editor에서 app 최상단 폴더에 Dockerfile 생성 혹은 터미널 touch Dockerfile&lt;/p&gt;
&lt;pre id=&quot;code_1679562626657&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;FROM node:18-alpine

RUN mkdir -p /usr/app
WORKDIR /usr/app

# Install dependencies based on the preferred package manager
COPY ./ ./

RUN yarn install 
RUN yarn build

EXPOSE 3000

CMD [&quot;yarn&quot;, &quot;start&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. docker build -t [name] ./&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;여기서 t는 생성되는 docker image 에 태그를 붙이는 옵션이다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2206&quot; data-origin-height=&quot;546&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qn7D5/btr5Bnby7lH/N0K1ddQJaYAcJaGb7YcEOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qn7D5/btr5Bnby7lH/N0K1ddQJaYAcJaGb7YcEOk/img.png&quot; data-alt=&quot; docker build 완료 이미지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qn7D5/btr5Bnby7lH/N0K1ddQJaYAcJaGb7YcEOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqn7D5%2Fbtr5Bnby7lH%2FN0K1ddQJaYAcJaGb7YcEOk%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;2206&quot; height=&quot;546&quot; data-origin-width=&quot;2206&quot; data-origin-height=&quot;546&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt; docker build 완료 이미지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. docker images 로 도커 이미지들을 확인할 수 있다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;92&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKHBle/btr5BMPI3zs/P2e2cNFbkhUkL6HchJHfeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKHBle/btr5BMPI3zs/P2e2cNFbkhUkL6HchJHfeK/img.png&quot; data-alt=&quot;docker image list&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKHBle/btr5BMPI3zs/P2e2cNFbkhUkL6HchJHfeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKHBle%2Fbtr5BMPI3zs%2FP2e2cNFbkhUkL6HchJHfeK%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;864&quot; height=&quot;92&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;92&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker image list&lt;/figcaption&gt;
&lt;/figure&gt;
&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; - d : detach 백그라운드에서 컨테이너가 실행되도록 하는 옵션&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - p : port 포트 포워딩 [호스트 포트]:[내부 포트] 외부포트를 내부포트로 연결시켜주는 역할을 하는 옵션&lt;/p&gt;
&lt;pre id=&quot;code_1679562817524&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -dp 3000:3000 [image name]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 컨테이너 상태 확인 - 현재 동작중인 컨테이너 리스트를 보여준다&lt;/p&gt;
&lt;pre id=&quot;code_1679563331678&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker ps

# CONTAINER ID   IMAGE      COMMAND                  CREATED         STATUS        PORTS                                       NAMES
# fe91138dce66   coral   &quot;docker-entrypoint.s&amp;hellip;&quot;   3 seconds ago   Up 1 second   0.0.0.0:3000-&amp;gt;3000/tcp, :::3000-&amp;gt;3000/tcp   vigorous_pascal&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;docker hub를 사용하여 local과 ec2 ubuntu 서버간 이미지 공유는 다음 포스트에서!&lt;/p&gt;</description>
      <category>Cloud/Docker</category>
      <category>build</category>
      <category>deploy</category>
      <category>docker</category>
      <category>EC2</category>
      <category>NextJS</category>
      <category>ubuntu</category>
      <category>도커</category>
      <category>배포</category>
      <category>빌드</category>
      <author>__APPA</author>
      <guid isPermaLink="true">https://bedevelopers.tistory.com/266</guid>
      <comments>https://bedevelopers.tistory.com/266#entry266comment</comments>
      <pubDate>Thu, 23 Mar 2023 18:27:50 +0900</pubDate>
    </item>
    <item>
      <title>display: flex 가 렌더링에 미치는 영향에 대해</title>
      <link>https://bedevelopers.tistory.com/265</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;display:&amp;nbsp;flex는&amp;nbsp;레이아웃을&amp;nbsp;구성하기&amp;nbsp;위한&amp;nbsp;유용한&amp;nbsp;CSS&amp;nbsp;속성&amp;nbsp;중&amp;nbsp;하나입니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그러나&amp;nbsp;많은&amp;nbsp;flex&amp;nbsp;속성을&amp;nbsp;사용하는&amp;nbsp;것은&amp;nbsp;렌더링&amp;nbsp;속도에&amp;nbsp;영향을&amp;nbsp;미칠&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;display:&amp;nbsp;flex를&amp;nbsp;사용하면&amp;nbsp;브라우저는&amp;nbsp;레이아웃을&amp;nbsp;계산하기&amp;nbsp;위해&amp;nbsp;추가&amp;nbsp;작업을&amp;nbsp;수행해야&amp;nbsp;합니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이&amp;nbsp;작업은&amp;nbsp;브라우저의&amp;nbsp;처리&amp;nbsp;속도와&amp;nbsp;요소의&amp;nbsp;수&amp;nbsp;및&amp;nbsp;복잡도에&amp;nbsp;따라&amp;nbsp;렌더링&amp;nbsp;속도에&amp;nbsp;영향을&amp;nbsp;미칩니다.&lt;br /&gt;&lt;br /&gt;따라서, display: flex는 꼭 필요할 때만 사용하는 것이 좋다는 말씀.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;렌더링 속도를 향상시키기 위해 flex 속성 대신에 grid 레이아웃 등 다른 CSS 속성을 사용&lt;/span&gt;하는 것이 좋다.&lt;/p&gt;</description>
      <category>Developers/HTML&amp;amp;CSS</category>
      <author>__APPA</author>
      <guid isPermaLink="true">https://bedevelopers.tistory.com/265</guid>
      <comments>https://bedevelopers.tistory.com/265#entry265comment</comments>
      <pubDate>Thu, 16 Mar 2023 15:37:03 +0900</pubDate>
    </item>
    <item>
      <title>리소스 우선순위를 제어하는 link 태그의 설정값</title>
      <link>https://bedevelopers.tistory.com/264</link>
      <description>&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span&gt;rel &lt;/span&gt;속성&lt;span&gt;: &lt;/span&gt;리소스의&lt;span&gt; &lt;/span&gt;관계를&lt;span&gt; &lt;/span&gt;지정하는&lt;span&gt; &lt;/span&gt;속성입니다&lt;span&gt;. &lt;/span&gt;우선순위를&lt;span&gt; &lt;/span&gt;제어하기&lt;span&gt; &lt;/span&gt;위해서는&lt;span&gt; rel &lt;/span&gt;속성&lt;span&gt; &lt;/span&gt;값으로&lt;span&gt; preload&lt;/span&gt;를&lt;span&gt; &lt;/span&gt;사용해야&lt;span&gt; &lt;/span&gt;합니다&lt;span&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;as &lt;span&gt;속성&lt;/span&gt;: &lt;span&gt;가져올&lt;/span&gt; &lt;span&gt;리소스의&lt;/span&gt; &lt;span&gt;유형을&lt;/span&gt; &lt;span&gt;지정하는&lt;/span&gt; &lt;span&gt;속성입니다&lt;/span&gt;. &lt;span&gt;가능한&lt;/span&gt; &lt;span&gt;값으로는&lt;/span&gt; image, style, script, font, document, audio, video, fetch &lt;span&gt;등이&lt;/span&gt; &lt;span&gt;있습니다&lt;/span&gt;. &lt;span&gt;이&lt;/span&gt; &lt;span&gt;중&lt;/span&gt; fetch&lt;span&gt;를&lt;/span&gt; &lt;span&gt;사용하면&lt;/span&gt; &lt;span&gt;특정&lt;/span&gt; URL&lt;span&gt;을&lt;/span&gt; &lt;span&gt;가져와서&lt;/span&gt; &lt;span&gt;캐시에&lt;/span&gt; &lt;span&gt;저장할&lt;/span&gt; &lt;span&gt;수&lt;/span&gt; &lt;span&gt;있습니다&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;type &lt;span&gt;속성&lt;/span&gt;: &lt;span&gt;가져올&lt;/span&gt; &lt;span&gt;리소스의&lt;/span&gt; MIME &lt;span&gt;유형을&lt;/span&gt; &lt;span&gt;지정하는&lt;/span&gt; &lt;span&gt;속성입니다&lt;/span&gt;. &lt;span&gt;예를&lt;/span&gt; &lt;span&gt;들어&lt;/span&gt;, type=&quot;text/css&quot;&lt;span&gt;는&lt;/span&gt; CSS &lt;span&gt;파일을&lt;/span&gt; &lt;span&gt;가져올&lt;/span&gt; &lt;span&gt;때&lt;/span&gt; &lt;span&gt;사용합니다&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;media &lt;/span&gt;속성&lt;span&gt;: &lt;/span&gt;리소스를&lt;span&gt; &lt;/span&gt;가져오는&lt;span&gt; &lt;/span&gt;미디어&lt;span&gt; &lt;/span&gt;유형을&lt;span&gt; &lt;/span&gt;지정하는&lt;span&gt; &lt;/span&gt;속성입니다&lt;span&gt;. &lt;/span&gt;예를&lt;span&gt; &lt;/span&gt;들어&lt;span&gt;, media=&quot;print&quot;&lt;/span&gt;를&lt;span&gt; &lt;/span&gt;사용하면&lt;span&gt; &lt;/span&gt;인쇄할&lt;span&gt; &lt;/span&gt;때&lt;span&gt; &lt;/span&gt;사용하는&lt;span&gt; &lt;/span&gt;스타일&lt;span&gt; &lt;/span&gt;시트를&lt;span&gt; &lt;/span&gt;가져올&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;asynchronous &lt;/span&gt;속성&lt;span&gt;: &lt;/span&gt;리소스를&lt;span&gt; &lt;/span&gt;비동기적으로&lt;span&gt; &lt;/span&gt;가져올&lt;span&gt; &lt;/span&gt;것인지를&lt;span&gt; &lt;/span&gt;지정하는&lt;span&gt; &lt;/span&gt;속성입니다&lt;span&gt;. asynchronous=&quot;true&quot;&lt;/span&gt;로&lt;span&gt; &lt;/span&gt;설정하면&lt;span&gt; &lt;/span&gt;다른&lt;span&gt; &lt;/span&gt;작업을&lt;span&gt; &lt;/span&gt;처리하면서&lt;span&gt; &lt;/span&gt;리소스를&lt;span&gt; &lt;/span&gt;가져올&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;defer &lt;/span&gt;속성&lt;span&gt;: &lt;/span&gt;리소스를&lt;span&gt; &lt;/span&gt;지연해서&lt;span&gt; &lt;/span&gt;가져올&lt;span&gt; &lt;/span&gt;것인지를&lt;span&gt; &lt;/span&gt;지정하는&lt;span&gt; &lt;/span&gt;속성입니다&lt;span&gt;. defer=&quot;true&quot;&lt;/span&gt;로&lt;span&gt; &lt;/span&gt;설정하면&lt;span&gt; &lt;/span&gt;문서&lt;span&gt; &lt;/span&gt;파싱이&lt;span&gt; &lt;/span&gt;완료되면&lt;span&gt; &lt;/span&gt;리소스를&lt;span&gt; &lt;/span&gt;가져옵니다&lt;span&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;crossorigin &lt;span&gt;속성&lt;/span&gt;: &lt;span&gt;리소스를&lt;/span&gt; &lt;span&gt;다른&lt;/span&gt; &lt;span&gt;도메인에서&lt;/span&gt; &lt;span&gt;가져올&lt;/span&gt; &lt;span&gt;때&lt;/span&gt; CORS(Cross-Origin Resource Sharing)&lt;span&gt;를&lt;/span&gt; &lt;span&gt;지정하는&lt;/span&gt; &lt;span&gt;속성입니다&lt;/span&gt;. crossorigin=&quot;anonymous&quot;&lt;span&gt;로&lt;/span&gt; &lt;span&gt;설정하면&lt;/span&gt; CORS &lt;span&gt;요청을&lt;/span&gt; &lt;span&gt;보내지&lt;/span&gt; &lt;span&gt;않습니다&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;integrity &lt;span&gt;속성&lt;/span&gt;: &lt;span&gt;가져온&lt;/span&gt; &lt;span&gt;리소스의&lt;/span&gt; &lt;span&gt;무결성을&lt;/span&gt; &lt;span&gt;검증하는&lt;/span&gt; &lt;span&gt;속성입니다&lt;/span&gt;. integrity &lt;span&gt;속성&lt;/span&gt; &lt;span&gt;값으로는&lt;/span&gt; SHA-256 &lt;span&gt;또는&lt;/span&gt; SHA-384 &lt;span&gt;등의&lt;/span&gt; &lt;span&gt;암호화&lt;/span&gt; &lt;span&gt;해시&lt;/span&gt; &lt;span&gt;함수를&lt;/span&gt; &lt;span&gt;사용합니다&lt;/span&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1678756034528&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;style.css&quot; media=&quot;print&quot; title=&quot;Print Styles&quot;&amp;gt;
&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;style.css&quot; media=&quot;screen and (min-width: 768px)&quot;&amp;gt;
&amp;lt;link rel=&quot;preload&quot; href=&quot;script.js&quot; as=&quot;script&quot; importance=&quot;high&quot;&amp;gt;
&amp;lt;link rel=&quot;preload&quot; href=&quot;font.woff2&quot; as=&quot;font&quot; type=&quot;font/woff2&quot; crossorigin=&quot;anonymous&quot; importance=&quot;low&quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫 번째 예제는 media 속성을 사용하여 프린트 스타일에 대한 우선순위를 설정합니다.&lt;/li&gt;
&lt;li&gt;두 번째 예제는 media 속성과 미디어 쿼리를 사용하여 스크린 크기에 따라 우선순위를 설정합니다.&lt;/li&gt;
&lt;li&gt;세 번째 예제는 rel 속성을 preload로 설정하여 페이지 로딩시 우선적으로 리소스를 불러옵니다. as 속성을 사용하여 리소스 유형을 설정하며, importance 속성을 사용하여 우선순위를 설정합니다.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;네&lt;/span&gt; &lt;span&gt;번째&lt;/span&gt; &lt;span&gt;예제는&lt;/span&gt; rel &lt;span&gt;속성을&lt;/span&gt; preload&lt;span&gt;로&lt;/span&gt; &lt;span&gt;설정하여&lt;/span&gt; &lt;span&gt;페이지&lt;/span&gt; &lt;span&gt;로딩시&lt;/span&gt; &lt;span&gt;리소스를&lt;/span&gt; &lt;span&gt;미리&lt;/span&gt; &lt;span&gt;불러옵니다&lt;/span&gt;. as &lt;span&gt;속성을&lt;/span&gt; &lt;span&gt;사용하여&lt;/span&gt; &lt;span&gt;리소스&lt;/span&gt; &lt;span&gt;유형을&lt;/span&gt; &lt;span&gt;설정하며&lt;/span&gt;, type &lt;span&gt;속성을&lt;/span&gt; &lt;span&gt;사용하여&lt;/span&gt; &lt;span&gt;폰트&lt;/span&gt; &lt;span&gt;파일의&lt;/span&gt; MIME &lt;span&gt;유형을&lt;/span&gt; &lt;span&gt;명시하고&lt;/span&gt;, crossorigin &lt;span&gt;속성을&lt;/span&gt; &lt;span&gt;사용하여&lt;/span&gt; CORS (Cross-Origin Resource Sharing) &lt;span&gt;정책을&lt;/span&gt; &lt;span&gt;준수합니다&lt;/span&gt;. importance &lt;span&gt;속성을&lt;/span&gt; &lt;span&gt;사용하여&lt;/span&gt; &lt;span&gt;우선순위를&lt;/span&gt; &lt;span&gt;설정합니다&lt;/span&gt;.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Developers/Coding Question</category>
      <category>Link</category>
      <category>설정</category>
      <category>우선순위</category>
      <category>태그</category>
      <author>__APPA</author>
      <guid isPermaLink="true">https://bedevelopers.tistory.com/264</guid>
      <comments>https://bedevelopers.tistory.com/264#entry264comment</comments>
      <pubDate>Tue, 14 Mar 2023 10:07:49 +0900</pubDate>
    </item>
    <item>
      <title>TCP/IP three-way handshake란?</title>
      <link>https://bedevelopers.tistory.com/263</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;TCP/IP 세 개의 요소로 구성되어 있으며, 전송 계층에서 사용되는 TCP (Transmission Control Protocol) 프로토콜에서 연결을 설정하는 방법(&lt;span style=&quot;background-color: #444654; color: #d1d5db; text-align: start;&quot;&gt;establishing a connection in the TCP (Transmission Control Protocol)&lt;/span&gt;입니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다음과 같은 단계로 작동한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. 클라이언트에서 서버로 SYN(Synchronize Sequence Number) 패킷을 보낸다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - SYN : 두 기기(클라이언트 &amp;amp; 서버)의 초기 연결 수립을 위한 패킷&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - 패킷: 네트워크에서 전송을 위한 데이터 단위(unit of data that is transmitted over a network)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. 서버는 SYN 패킷을 받고, 클라이언트에게 ACK (Acknowlegement)와 SYN 패킷을 보낸다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;- ACK : SYN을 보낸 디바이스에게 데이터를 받았다고 전달하는 패킷, 송신 장치(클라이언트)는 ACK&amp;nbsp;패킷을&amp;nbsp;사용하여&amp;nbsp;성공적으로&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 전달된 패킷과 전송 중에 손실되거나 손상된 경우 재전송해야 하는 패킷을 추적한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3. 클라이언트는 ACK 패킷을 다시 서버에게 보내고, 연결이 설정된다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;연결이 설정되면 데이터 전송이 가능해지고 데이터를 보내기 전에 클라이언트와 서버는 데이터 전송에 사용할 시퀀스 번호와 확인 응답 번호를 교환한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 세가지 요소로 구성된 데이터 통신은 신뢰성과 안정성을 보장한다.&lt;/p&gt;</description>
      <category>Developers/Coding Question</category>
      <category>handshake</category>
      <category>TCP/IP</category>
      <category>three-way</category>
      <author>__APPA</author>
      <guid isPermaLink="true">https://bedevelopers.tistory.com/263</guid>
      <comments>https://bedevelopers.tistory.com/263#entry263comment</comments>
      <pubDate>Fri, 10 Mar 2023 17:04:41 +0900</pubDate>
    </item>
    <item>
      <title>HTTP 통신에서 캐싱 활용</title>
      <link>https://bedevelopers.tistory.com/262</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP 캐싱을 활용하기 위해 다음과 같은 값들을 설정할 수 있습니다:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;캐시 제어 헤더 (Cache-Control header): 이 헤더를 사용하여 캐시 동작을 제어할 수 있습니다. 예를 들어, max-age 값을 설정하여 캐시가 유효한 시간을 정할 수 있습니다. 또한, no-cache, no-store, must-revalidate 등의 값을 설정하여 캐시를 사용하지 않거나 갱신해야 하는지 여부를 제어할 수 있습니다.&lt;/li&gt;
&lt;li&gt;ETag: 이 값은 캐시된 리소스가 원본과 같은지 확인하는 데 사용됩니다. 원본이 변경되면 ETag 값도 변경되므로, 캐시된 리소스가 더 이상 유효하지 않은 경우 서버로부터 새로운 리소스를 가져와야 합니다.&lt;/li&gt;
&lt;li&gt;Last-Modified: 이 값은 리소스가 마지막으로 수정된 시간을 나타냅니다. 캐시된 리소스가 원본보다 오래된 경우, 서버로부터 새로운 리소스를 가져와야 합니다.&lt;/li&gt;
&lt;li&gt;Expires: 이 값은 캐시된 리소스가 만료되는 시간을 나타냅니다. Expires 헤더는 캐시된 리소스의 만료 시간을 정확하게 나타내지 않으므로, 보통 Cache-Control 헤더의 max-age 값을 함께 사용합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 값들을 적절하게 설정하여 캐싱을 활용하면, 웹 페이지의 로딩 속도를 개선할 수 있습니다. 캐시된 리소스를 다시 다운로드하지 않고도 웹 페이지를 빠르게 로딩할 수 있기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JavaScript에서 HTTP 통신을 할 때도 캐싱을 활용할 수 있습니다. 브라우저는 HTTP 캐시를 자동으로 관리하며, 캐시된 리소스를 다시 다운로드하지 않고 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 JavaScript에서 HTTP 캐싱을 활용하는 간단한 예제입니다:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1678267025773&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 캐시된 리소스 사용
fetch('/example.json', {cache: 'default'})
  .then(response =&amp;gt; response.json())
  .then(data =&amp;gt; console.log(data));

// 캐시된 리소스 갱신
fetch('/example.json', {cache: 'reload'})
  .then(response =&amp;gt; response.json())
  .then(data =&amp;gt; console.log(data));&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;위 예제에서, fetch 함수의 두 번째 인자로 cache 옵션을 설정하여 캐싱 동작을 제어할 수 있습니다. cache 옵션은 다음과 같은 값을 가질 수 있습니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;default: 캐시된 리소스를 사용하고, 캐시가 없는 경우 서버로부터 다운로드합니다. 이 옵션이 기본값입니다.&lt;/li&gt;
&lt;li&gt;no-store: 캐시를 사용하지 않고, 서버로부터 항상 다운로드합니다.&lt;/li&gt;
&lt;li&gt;reload: 캐시를 무시하고, 서버로부터 다운로드합니다.&lt;/li&gt;
&lt;li&gt;no-cache: 캐시를 사용하지만, 캐시된 리소스가 유효한지 서버에 확인하고 갱신합니다.&lt;/li&gt;
&lt;li&gt;force-cache: 캐시된 리소스를 사용하고, 캐시가 없는 경우 서버로부터 다운로드하지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 예제에서는 cache 옵션으로 default 값을 설정하여 캐시된 리소스를 사용합니다. 또한, cache 옵션으로 reload 값을 설정하여 캐시된 리소스를 무시하고 서버로부터 갱신된 리소스를 다운로드합니다. 이렇게 캐싱을 활용하여 HTTP 통신을 최적화할 수 있습니다.&lt;/p&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://developer.mozilla.org/ko/docs/Web/HTTP/Caching&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;mdn http 통신&lt;/a&gt;&lt;/p&gt;</description>
      <category>Developers/Coding Question</category>
      <category>cache</category>
      <category>HTTP</category>
      <author>__APPA</author>
      <guid isPermaLink="true">https://bedevelopers.tistory.com/262</guid>
      <comments>https://bedevelopers.tistory.com/262#entry262comment</comments>
      <pubDate>Wed, 8 Mar 2023 18:18:11 +0900</pubDate>
    </item>
    <item>
      <title>네트워크 환경에서 데이터가 오가는 과정을 이해하는 것과 프론트엔드 업무 연관성</title>
      <link>https://bedevelopers.tistory.com/261</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;프론트엔드 업무에서는 사용자 인터페이스(UI)와 관련된 웹 페이지를 개발합니다. UI는 주로 웹 브라우저에서 실행되며, 웹 브라우저는 인터넷을 통해 서버에서 데이터를 가져와 UI에 표시합니다. 따라서 네트워크 환경에서 데이터가 오가는 과정을 이해하는 것은 프론트엔드 업무에서 매우 중요합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 가져오기: 프론트엔드 개발자는 데이터를 가져와서 UI에 표시해야 합니다. 이 데이터는 서버에서 가져와야 할 수도 있으며, 이를 위해서는 데이터 전송 프로토콜, HTTP 요청 및 응답, CORS 등에 대한 이해가 필요합니다.&lt;/li&gt;
&lt;li&gt;데이터 전송 방법: 데이터를 가져오는 방법은 매우 중요합니다. 일부 데이터는 실시간으로 업데이트되어야 하며, 이를 위해서는 WebSocket과 같은 실시간 통신 프로토콜을 사용해야 할 수도 있습니다. 또한 대용량 데이터의 경우, AJAX를 사용하여 데이터를 비동기적으로 가져올 수 있습니다.&lt;/li&gt;
&lt;li&gt;성능 최적화: 프론트엔드 업무에서는 성능 최적화가 매우 중요합니다. 데이터 전송 과정에서 대역폭, 지연 시간, 캐싱, 렌더링 등 다양한 요소가 성능에 영향을 미칩니다. 이러한 요소를 고려하여 UI의 로딩 시간을 최소화하고 빠른 사용자 경험을 제공하는 것이 필요합니다.&lt;/li&gt;
&lt;li&gt;보안: 프론트엔드 업무에서는 사용자 데이터와 관련된 보안 문제도 고려해야 합니다. 데이터 전송 중에는 인증, 암호화, CORS 및 CSRF 공격 등 보안 문제가 발생할 수 있습니다. 따라서 프론트엔드 개발자는 이러한 보안 문제를 방지하기 위한 대처 방법을 알아야 합니다.&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>Developers/Coding Question</category>
      <category>네트워크</category>
      <category>데이터전송</category>
      <category>연관성</category>
      <category>프론트엔드</category>
      <author>__APPA</author>
      <guid isPermaLink="true">https://bedevelopers.tistory.com/261</guid>
      <comments>https://bedevelopers.tistory.com/261#entry261comment</comments>
      <pubDate>Tue, 7 Mar 2023 11:14:00 +0900</pubDate>
    </item>
  </channel>
</rss>