<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>ungju 님의 블로그</title>
    <link>https://ungju.tistory.com/</link>
    <description>ungju 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Sat, 4 Apr 2026 03:00:15 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>ungju</managingEditor>
    <image>
      <title>ungju 님의 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/7293646/attach/1f2b769a8d6b49dcacc94e6a801e7edb</url>
      <link>https://ungju.tistory.com</link>
    </image>
    <item>
      <title>커밋 내역 유지하면서 레포지토리 통합하기(git subtree)</title>
      <link>https://ungju.tistory.com/21</link>
      <description>&lt;div class=&quot;index_toc&quot;&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;목차&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문제 발생&lt;/li&gt;
&lt;li&gt;해결&lt;/li&gt;
&lt;li&gt;모아보기&lt;/li&gt;
&lt;li&gt;회고&lt;/li&gt;
&lt;/ul&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;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;공부하면서 만든 여러 개의 폴더를 각 git으로 관리하다가 루트폴더를 만들어서 하위폴더로 관리해야하는 상황이 생겼다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 발생&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;01-folder&lt;/code&gt;, &lt;code&gt;02-folder&lt;/code&gt;의 폴더가 각각 레포지토리로 관리되고 있고,&lt;br /&gt;&lt;code&gt;git init&lt;/code&gt;을 하지 않은 상태인 &lt;code&gt;03-folder&lt;/code&gt;는 &lt;code&gt;root/&lt;/code&gt; 의 하위로 추적 및 관리가 되고 있는 상태였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;`root`폴더를 원격으로 올리니 `03-folder`만 업데이트되는 문제가 발생!&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  원하던 폴더 구조와 깃 관리 상태(로컬의 상태와 동일)&lt;/b&gt;&lt;br /&gt;&lt;code&gt;root&lt;/code&gt;의 하위로 모두 업데이트&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;─── root/
    ├── 01-folder 
    ├── 02-folder 
    └── 03-folder&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;/b&gt;&lt;br /&gt;로컬에선 위와 같은 구조였는데 원격저장소에 올리니,&lt;br /&gt;&lt;code&gt;root&lt;/code&gt;하위로 &lt;code&gt;03-folder&lt;/code&gt; 만 올라감 ( ; _ ; )&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;─── root/ 
    └── 03-folder

─── 01-folder /* 개별 레포지토리로 관리되고 있음. */ 
─── 02-folder /* 개별 레포지토리로 관리되고 있음. */ &lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;해결&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1️⃣ 새로운 &lt;code&gt;root-01&lt;/code&gt;폴더 생성&lt;/h3&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;/* root 폴더 생성 */
mkdir root-01

/* root 폴더로 이동 */
cd root-01&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2️⃣ 깃 초기화&lt;/h3&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;git init&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;root-01&lt;/code&gt; 초기화 상태 확인!&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3️⃣ 가져와야 할 &lt;code&gt;01-folder&lt;/code&gt;의 각 원격저장소 경로를 remote 등록&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;remote 주소 등록&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;git remote add &amp;lt;원격 이름&amp;gt; &amp;lt;원격저장소 URL&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;livecodeserver&quot;&gt;&lt;code&gt;git remote add folder01 &amp;lt;01-folder의 원격저장소 URL&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;등록 후 remote 확인&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;git remote -v&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4️⃣ 최신상태 반영하기&lt;/h3&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;git fetch &amp;lt;원격 이름&amp;gt; &amp;lt;브랜치&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;git fetch folder01 main&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5️⃣ git subtree 명령어로 폴더 구조 통합&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;git subtree add --prefix=&amp;lt;폴더명&amp;gt; &amp;lt;원격 이름&amp;gt; &amp;lt;브랜치 이름&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;git subtree add --prefix=01-folder folder01 main&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6️⃣ 통합 후 필요없는 remote 삭제!&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통합이 목적이었고, 해당 폴더는 더 이상 업데이트 될 계획이 없기 때문에 지워버렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;remote 지우기&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;git remote remove &amp;lt;원격 경로 이름&amp;gt; &lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;git remote remove folder01&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;잘 지워졌는지 확인하기!&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;git remote -v&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  모아보기  &lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 루트 폴더 생성 및 초기화&lt;/p&gt;
&lt;pre id=&quot;code_1756034108874&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  mkdir root-01
  cd root-01
  git init&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;2. 원격 등록 &amp;rarr; fetch &amp;rarr; subtree 병합 -&amp;gt; (선택) 원격 삭제&lt;br /&gt;&amp;nbsp;&amp;nbsp;(1)&amp;nbsp;원격&amp;nbsp;등록&lt;/p&gt;
&lt;pre id=&quot;code_1756034126336&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git remote add folder01 &amp;lt;01-folder 원격 URL&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;(2)&amp;nbsp;원격&amp;nbsp;최신&amp;nbsp;상태&amp;nbsp;가져오기&lt;/p&gt;
&lt;pre id=&quot;code_1756034142303&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git fetch folder01 main&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;(3) subtree로 폴더 병합&lt;/p&gt;
&lt;pre id=&quot;code_1756034163918&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git subtree add --prefix=01-folder folder01 main&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;(4) (선택) 원격 삭제&lt;/p&gt;
&lt;pre id=&quot;code_1756034183305&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git remote remove folder01&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;3. `02-folder` 도 똑같이 반복!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;캬캬 이러면 커밋 내역과 git graph 이력까지 모두 유지하면서 폴더 구조를 통합할 수 있다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커밋 내역이 날아갈까봐 안타까웠는데 완저니 성공&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt; &amp;zwj;  회고&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음부터 폴더구조를 잘 계획했으면 이런 일이 일어나지 않았을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평소에는 잘 일어나지 않을 바보같은 상황이었고 , 이런 일이 일어나지 않아야하겠지만!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;덕분에 안전하게 git 내역을 포함해 폴더를 병합하는 방법을 배웠으니 &lt;b&gt;오히려 좋아 &lt;/b&gt;&lt;/p&gt;</description>
      <category>트러블 슈팅</category>
      <category>CLI</category>
      <category>FE</category>
      <category>git</category>
      <category>subtree</category>
      <category>개발</category>
      <category>트러블슈팅</category>
      <category>폴더통합</category>
      <author>ungju</author>
      <guid isPermaLink="true">https://ungju.tistory.com/21</guid>
      <comments>https://ungju.tistory.com/21#entry21comment</comments>
      <pubDate>Sun, 24 Aug 2025 19:59:56 +0900</pubDate>
    </item>
    <item>
      <title>CLI 기초 명령어</title>
      <link>https://ungju.tistory.com/20</link>
      <description>&lt;h1&gt;CLI 란?&lt;/h1&gt;
&lt;p&gt;명령줄 인터페이스(CLI, Command Line Interface)라고 하며, 사용자는 키보드를 통해 텍스트 기반 명령어를 입력하고, 시스템은 결과를 텍스트로 반환한다.&lt;br&gt;쉽게는 파일 편집기에서 파일 생성, 파일 이동, 파일 삭제 등의 작업을 수행하는 것이라고 할 때 시각적으로 파일아이콘을 선택하고 이동, 삭제 시키는 것이 그래픽 유저인터페이스(GUI,Graphic User Interface)를 사용해 상호작용하는 것이고, CLI는 이런 작업들을 명령어로 실행하는 것이라고 볼 수 있다. &lt;/p&gt;
&lt;p&gt;대표적인 CLI 프로그램에는 터미널, 명령 프롬프트(cmd), PowerShell, Bash, zsh 등이 있다. &lt;/p&gt;
&lt;h2&gt;CLI 기본 명령어&lt;/h2&gt;
&lt;h4&gt;1. &lt;code&gt;현재 경로&lt;/code&gt; 확인&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;pwd&lt;/code&gt;: print working directory&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pwd&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2. &lt;code&gt;위치 이동&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;cd&lt;/code&gt;: change directory&lt;/p&gt;
&lt;p&gt;&lt;code&gt;./&lt;/code&gt;: 현재 위치&lt;br&gt;&lt;code&gt;../&lt;/code&gt;: 한 단계 상위 폴더 위치&lt;br&gt;&lt;code&gt;/&lt;/code&gt;: 루트 폴더&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd {디렉토리이름}

cd src/components&lt;/code&gt;&lt;/pre&gt;
&lt;br/&gt;


&lt;h4&gt;3. &lt;code&gt;현재 폴더 안의 목록&lt;/code&gt; 출력&lt;/h4&gt;
&lt;p&gt;(1) &lt;code&gt;ls&lt;/code&gt;: list&lt;/p&gt;
&lt;p&gt;현재 폴더 안의 파일과 폴더 목록을 출력한다. &lt;/p&gt;
&lt;p&gt;(2) &lt;code&gt;ls -a&lt;/code&gt;: list all&lt;/p&gt;
&lt;p&gt;현재 폴더 안의 모든 파일과 폴더 목록을 출력한다.&lt;br&gt;&lt;strong&gt;숨김 처리된 것들을 포함&lt;/strong&gt;해서 모두 보여준다. (e.g. &lt;code&gt;.git&lt;/code&gt; 등의 숨김 폴더)&lt;/p&gt;
&lt;p&gt;(3) &lt;code&gt;ls -l&lt;/code&gt;: list long format&lt;/p&gt;
&lt;p&gt;현재 폴더 안의 파일과 폴더의 자세한 정보를 출력한다. &lt;/p&gt;
&lt;p&gt;(4) &lt;code&gt;ls -al&lt;/code&gt; 또는 &lt;code&gt;ls -la&lt;/code&gt; : list all long format&lt;/p&gt;
&lt;p&gt;현재 폴더 안의 &lt;strong&gt;숨김 처리된 것들을 포함&lt;/strong&gt;한 모든 파일과 폴더의 자세한 정보를 출력한다. &lt;/p&gt;
&lt;br/&gt;

&lt;h4&gt;4. 새 파일 생성&lt;/h4&gt;
&lt;p&gt;(1) &lt;code&gt;touch {파일명}&lt;/code&gt;&lt;br&gt;&lt;strong&gt;새 파일&lt;/strong&gt;을 생성한다.&lt;/p&gt;
&lt;p&gt;(2) &lt;code&gt;touch {파일명} {파일명}&lt;/code&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;여러 개의&lt;/strong&gt; 새 파일을 생성한다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;touch index.html shopping.html&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(3) &lt;code&gt;echo [내용] &amp;gt; {파일명 및 파일경로/파일명}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;새 파일을 생성하며 내용 저장을 저장한다. &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;*하단에 12번 `echo`명령어 부분 참고&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;echo &amp;#39;안녕하세요&amp;#39; &amp;gt; text/greeting.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;text&lt;/code&gt; 폴더에 있는 &lt;code&gt;greeting.txt&lt;/code&gt; 파일에 &amp;#39;안녕하세요&amp;#39;라는 문자열을 넣으며 파일이 생성된다. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;폴더경로에 폴더가 존재하지 않을 경우 오류 출력&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;5. 새 폴더(디렉토리) 생성&lt;/h4&gt;
&lt;p&gt;(1) &lt;code&gt;mkdir {폴더명}&lt;/code&gt; : make directory&lt;/p&gt;
&lt;p&gt;새 폴더를 생성한다. &lt;/p&gt;
&lt;p&gt;(2) &lt;code&gt;mkdir {폴더명} {폴더명}&lt;/code&gt;  &lt;/p&gt;
&lt;p&gt;여러 개의 폴더 생성할 때에는 폴더명을 공백으로 연결하여 작성한다. &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;/* page 폴더와 components 폴더 생성 */
mkdir page components&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(3) &lt;code&gt;mkdir -p {폴더명}/{폴더명}&lt;/code&gt; &lt;/p&gt;
&lt;p&gt;생성할 폴더와 하위 폴더까지 한 번에 생성할 수 있다. &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;/* `parent` 폴더와 하위 폴더인 `child` 폴더 생성 */
mkdir -p parent/child&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;&lt;code&gt;-p&lt;/code&gt;가 없으면 &lt;code&gt;parent&lt;/code&gt;폴더가 없다고 오류가 뜸&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;6. 파일 삭제&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;rm {파일명}&lt;/code&gt;: remove&lt;/p&gt;
&lt;p&gt;&lt;code&gt;rm&lt;/code&gt; 만으로는 폴더를 삭제할 수 없다.&lt;br&gt; 폴더는 아래와 같은 방법으로 삭제할 수 있다. &lt;/p&gt;
&lt;h4&gt;7. 폴더 삭제&lt;/h4&gt;
&lt;p&gt;(1) &lt;code&gt;rmdir {폴더명}&lt;/code&gt; : remove directory&lt;/p&gt;
&lt;p&gt;빈 폴더를 삭제하는 방법이다. &lt;/p&gt;
&lt;p&gt;단, 해당 폴더 하위에 다른 파일/폴더가 있을 경우 삭제를 실패하며 오류가 발생한다. &lt;/p&gt;
&lt;p&gt;(2) &lt;code&gt;rm -r {폴더명}&lt;/code&gt;: remove recursive&lt;/p&gt;
&lt;p&gt;폴더 하위에 내용물이 있을 경우에는 &lt;code&gt;rm -r&lt;/code&gt; 명령어를 실행하여 삭제해야한다.  &lt;/p&gt;
&lt;h4&gt;8. 폴더 및 파일 강제 삭제&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;rm -rf {폴더명/파일명}&lt;/code&gt; : remove recursive -force&lt;br&gt;폴더나 해당 폴더 하위에 있는 모든 것을 삭제한다. &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;이 명령어는 주의나 질문없이 **무조건 강제로 삭제해버리니 주의**해서 사용하길 권장!&lt;/code&gt;&lt;/pre&gt;&lt;h4&gt;9. 파일/폴더 복사&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;cp {파일명} {파일명}&lt;/code&gt; : copy&lt;/p&gt;
&lt;p&gt;(1) &lt;code&gt;cp {복사할 파일명} {복사본 파일명}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;파일의 내용을 새로운 파일로 &lt;strong&gt;복사&lt;/strong&gt;한다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cp greeting.txt korean_greeting.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(2) &lt;code&gt;cp {복사할 파일명} {복사본이 위치할 경로}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt; 다른 폴더로 &lt;strong&gt;파일을 복사&lt;/strong&gt;한다. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;greeting.txt&lt;/code&gt;파일이 &lt;code&gt;group/&lt;/code&gt; 폴더 안으로 복사된다. &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cp greeting.txt group/&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(3) &lt;code&gt;cp {복사할 파일명} {복사할 파일명} {복사본이 생성될 위치}&lt;/code&gt;&lt;br&gt;복사할 파일을 공백으로 나열한 후 마지막에 복사본들이 위치할 경로 및 폴더를 입력하면 &lt;strong&gt;여러 파일을 한꺼번에 복사&lt;/strong&gt;할 수 있다. &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cp folder01.txt folder02.txt group/&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(4) &lt;code&gt;cp -r {복사할 폴더명} {복사본 폴더명}&lt;/code&gt;&lt;br&gt;&lt;strong&gt;폴더를 복사&lt;/strong&gt;할 때는 &lt;code&gt;-r&lt;/code&gt;을 함께 작성해야한다. &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cp -r folder01 folder02&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;10. 파일/폴더 이동&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;mv&lt;/code&gt; : move&lt;/p&gt;
&lt;p&gt;(1) &lt;code&gt;mv {이동시킬 파일} {이동될 위치 경로}&lt;/code&gt;&lt;br&gt;&lt;strong&gt;파일의 위치&lt;/strong&gt;를 이동시킨다. &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mv name.txt dog&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;name.txt&lt;/code&gt; 파일이 &lt;code&gt;dog&lt;/code&gt;폴더로 이동된다. &lt;/p&gt;
&lt;p&gt;(2) &lt;code&gt;mv {이동시킬 폴더} {이동될 위치 경로}&lt;/code&gt;&lt;br&gt;&lt;strong&gt;폴더의 위치&lt;/strong&gt;를 이동시킨다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mv dog house&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;dog&lt;/code&gt;폴더를 &lt;code&gt;house&lt;/code&gt;폴더 하위로 이동시킨다. &lt;/p&gt;
&lt;h4&gt;11. 내용 확인&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;cat&lt;/code&gt; : concatenate&lt;/p&gt;
&lt;p&gt;파일의 내용물을 확인할 수 있다. &lt;/p&gt;
&lt;p&gt;(e.g. &lt;code&gt;greeting.txt&lt;/code&gt;파일안에 &amp;#39;안녕하세요&amp;#39;라는 문자가 있을 경우&lt;br&gt;&lt;code&gt;cat greeting.txt&lt;/code&gt;를 실행하면 &amp;#39;안녕하세요&amp;#39;를 화면에 출력한다.)&lt;/p&gt;
&lt;h4&gt;12. 문자열 출력 및 저장&lt;/h4&gt;
&lt;p&gt;(1) &lt;code&gt;echo [출력할 내용]&lt;/code&gt;&lt;br&gt;텍스트를 출력한다. &lt;/p&gt;
&lt;p&gt;(2) &lt;code&gt;echo [내용] &amp;gt; {파일명 및 파일경로/파일명}&lt;/code&gt;&lt;br&gt;&lt;strong&gt;꺽쇠괄호&lt;code&gt;&amp;gt;&lt;/code&gt; 1 개&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;내용을 파일로 저장한다.&lt;br&gt;파일이 이미 존재할 경우 &lt;strong&gt;덮어쓴다&lt;/strong&gt;. &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;echo &amp;#39;안녕하세요.&amp;#39; &amp;gt; greeting.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;text&lt;/code&gt; 폴더에 있는 &lt;code&gt;greeting.txt&lt;/code&gt; 파일에 &amp;#39;안녕하세요&amp;#39;라는 문자열을 넣으며 파일이 생성된다. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;폴더경로에 폴더가 존재하지 않을 경우 오류 출력&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(3) &lt;code&gt;echo [내용] &amp;gt;&amp;gt; {파일명 및 파일경로/파일명}&lt;/code&gt;&lt;br&gt;&lt;strong&gt;꺽쇠괄호&lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt; 2 개&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;파일에 &lt;strong&gt;내용을 추가&lt;/strong&gt;한다.&lt;br&gt;기존의 내용을 덮어쓰지 않고 덧붙여진다. &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;echo &amp;#39;저희 강아지 연지입니다.&amp;#39; &amp;gt;&amp;gt; greeting.txt&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;/* greeting.txt */
안녕하세요.
저희 강아지 연지입니다.&lt;/code&gt;&lt;/pre&gt;</description>
      <category>개발</category>
      <category>CLI</category>
      <category>cli명령어</category>
      <category>FE</category>
      <category>명령어</category>
      <category>터미널</category>
      <category>프롬프트</category>
      <author>ungju</author>
      <guid isPermaLink="true">https://ungju.tistory.com/20</guid>
      <comments>https://ungju.tistory.com/20#entry20comment</comments>
      <pubDate>Mon, 28 Apr 2025 15:14:36 +0900</pubDate>
    </item>
    <item>
      <title>[Typescript] 객체 타입</title>
      <link>https://ungju.tistory.com/19</link>
      <description>&lt;h1&gt; ️ 객체 타입 (Object Types)&lt;/h1&gt;
&lt;h2&gt;1. 객체 타입 (Object Type)&lt;/h2&gt;
&lt;p&gt;객체 타입은 객체 리터럴 타입으로 지정해준다.&lt;/p&gt;
&lt;p&gt;객체 안에 있는 모든 프로퍼티들의 타입을 지정해주는 방법이다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1️⃣ 타입 위치에 바로 프로퍼티들의 타입을 작성한다.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const yeonji: {
    species: string,
      age: number, 
} = {
    species: &amp;quot;maltese&amp;quot;,
      age: 13, 
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;2️⃣ 프로퍼티의 type을 분리한 후 변수에 타입을 지정해준다.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 객체에 들어갈 프로퍼티들의 타입을 지정해준다. 
type dog = {
    species: string,
      age: number, 
}

// 변수에 객체 리터럴 타입을 지정해준다. 
const yeonji: dog = {
    species: &amp;quot;maltese&amp;quot;,
      age: 13, 
}&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;2. 배열 타입 (Array Type)&lt;/h2&gt;
&lt;p&gt;배열 타입은 두 가지 방법으로 쓸 수 있다.&lt;/p&gt;
&lt;br/&gt;

&lt;p&gt;&lt;strong&gt;1️⃣ 배열 요소들을 나타내는 타입과, 타입 뒤에 &lt;code&gt;[]&lt;/code&gt;을 쓴다.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// string으로 된 배열을 타입으로 지정했다. 
const myDogs: string[] = [&amp;quot;향기&amp;quot;, &amp;quot;연지&amp;quot;];&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;

&lt;p&gt;&lt;strong&gt;2️⃣ 제네릭 배열 타입을 사용한다.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const myDog: Array&amp;lt;string&amp;gt; = [&amp;quot;향기&amp;quot;, &amp;quot;연지&amp;quot;];&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;

&lt;h2&gt;3. 함수 타입 (Function Type)&lt;/h2&gt;
&lt;p&gt;함수 타입은 파라미터와 반환 타입을 지정해 줄 수 있다.&lt;/p&gt;
&lt;br/&gt;

&lt;p&gt;&lt;strong&gt;1️⃣ 매개변수 타입&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;매개변수 &lt;code&gt;x&lt;/code&gt;의 타입, 매개변수 &lt;code&gt;y&lt;/code&gt;의 타입을 각각 지정해준다.&lt;br&gt;(x: number, y: number)&lt;/p&gt;
&lt;p&gt;매개변수의 오른쪽엔 함수가 반환할 값의 타입을 지정할 수 있다.&lt;br&gt;(x: number, y: number)&lt;strong&gt;: number&lt;/strong&gt;`&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 함수 선언식
function add(x: number, y: number): number {
    return x + y;
}


// 함수 표현식
let add2 = function(x: number, y: number): number { return x + y };&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;

&lt;p&gt;&lt;strong&gt;2️⃣ 반환 타입&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;매개변수와 반환 사이에 &amp;#39;화살표 표기(=&amp;gt;)&amp;#39;를 사용하여 반환 타입을 작성할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;// &amp;#39;=&amp;gt; number&amp;#39;는 변수 add에 들어있는 함수의 타입이 number  
let add: (x: number, y: number) =&amp;gt; number =  
// 이 부분의 &amp;#39;:number&amp;#39;은 반환값의 타입  
function(x: number, y: number): number { return x + y; };&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;

&lt;ul&gt;
&lt;li&gt;함수가 값을 반환하지 않는다면 비워두지 않고 void를 쓴다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;function logMessage(message: string): void {
    console.log(message);
}&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
&lt;br/&gt;

&lt;p&gt;[다음] 함수의 매개변수&lt;/p&gt;</description>
      <category>typescript</category>
      <category>FE</category>
      <category>JavaScript</category>
      <category>typeScript</category>
      <category>객체타입</category>
      <category>배열타입</category>
      <category>타입스크립트</category>
      <category>함수타입</category>
      <author>ungju</author>
      <guid isPermaLink="true">https://ungju.tistory.com/19</guid>
      <comments>https://ungju.tistory.com/19#entry19comment</comments>
      <pubDate>Sat, 29 Mar 2025 17:54:38 +0900</pubDate>
    </item>
    <item>
      <title>[Typescript] 원시 타입</title>
      <link>https://ungju.tistory.com/18</link>
      <description>&lt;h2&gt;  원시 타입 (Primitive Types)&lt;/h2&gt;
&lt;p&gt;원시 타입은 값이 변경되지 않는 기본적인 타입이다.&lt;/p&gt;
&lt;p&gt;값이 변경되지 않는 기본적인 타입&lt;br&gt;• number, string, boolean&lt;br&gt;• null, undefined&lt;br&gt;• bigint, symbol (이 글에선 제외)&lt;/p&gt;
&lt;br /&gt;

&lt;h3&gt;1. 문자 타입 (String Type)&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;string&lt;/code&gt;으로 표현한다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const dog: string = &amp;quot;우리집 막내는 연지다.&amp;quot;;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;

&lt;h3&gt;2. 숫자 타입 (Number Type)&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;number&lt;/code&gt;로 표현한다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const dogAge: number = 13;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;

&lt;h3&gt;3. 불리언 타입 (Boolean Type)&lt;/h3&gt;
&lt;p&gt;참/거짓(true/false) 값이며, &lt;code&gt;boolean&lt;/code&gt;으로 표현한다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const isFamily: boolean = true;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;

&lt;h3&gt;4. null 타입, undefined 타입&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;// null
const box1: null = null;

// undefined
const box2: undefined = undefined;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;

&lt;h3&gt;5. 리터럴 타입 (Literal Type)&lt;/h3&gt;
&lt;p&gt;리터럴 타입은 &lt;em&gt;하나의 값&lt;/em&gt;만 가지는 타입이다.&lt;br&gt;리터럴 타입은 미리 정의된 값만 가질 수 있도록 제한하는 타입이다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 타입이 &amp;#39;yeonji&amp;#39;라는 문자이기 때문에 &amp;#39;yeonji&amp;#39;만 할당 가능함. 
const name: &amp;quot;yeonji&amp;quot; = &amp;quot;yeonji&amp;quot;;

// 타입이 true이기 때문에 true 값만 할당 가능함. 
const isCute: true = true;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>typescript</category>
      <category>FE</category>
      <category>js</category>
      <category>TS</category>
      <category>ts 타입</category>
      <category>typeScript</category>
      <category>타입스크립트</category>
      <category>타입스크립트 원시 타입</category>
      <author>ungju</author>
      <guid isPermaLink="true">https://ungju.tistory.com/18</guid>
      <comments>https://ungju.tistory.com/18#entry18comment</comments>
      <pubDate>Mon, 24 Feb 2025 00:41:37 +0900</pubDate>
    </item>
    <item>
      <title>[Typescript] 타입 종류</title>
      <link>https://ungju.tistory.com/16</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;타입스크립트(Typescript)란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타입스크립트는 자바스크립트를 기반으로 정적 타입 문법을 추가한 프로그래밍 언어이다. JavaScript에 규칙을 추가해서 더 안전하게 쓸 수 있게 만들어주는 도구라고 보면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수나 함수의 타입을 미리 정해서 예상치 못한 에러를 줄일 수 있고, 코드를 작성할 때 자동완성이나 에러 체크 같은 기능 덕분에 훨씬 안정적으로 개발할 수 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 타입 애너테이션(Type Annotation)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'annotation'은 '주석을 달다'라는 의미를 가지고 있다.&lt;br /&gt;타입스크립트에서는 변수나 함수의 데이터 타입을 지정할 때 타입 애너테이션(Type Annotation)을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수나 함수의 타입을 선언할 때 콜론(:) 뒤에 타입을 명시한다.&lt;/p&gt;
&lt;pre class=&quot;actionscript&quot;&gt;&lt;code&gt;
const 변수: 타입 = ...;  
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 변수 타입 (Variable Types)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수에는 허용되는 값의 유형을 명확히 정의해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수 타입은 아래와 같이 나뉜다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;  원시 타입 (Primitive Type)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;값이 변경되지 않는 기본적인 타입&lt;br /&gt;&amp;bull; number, string, boolean&lt;br /&gt;&amp;bull; null, undefined&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; ️ 객체 타입 (Object Type)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참조를 통해 관리되는 데이터 타입&lt;br /&gt;&amp;bull; object, Array, Function&lt;br /&gt;&amp;bull; enum, tuple&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;  특수 타입 (Special Type)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특수한 역할을 하는 타입&lt;br /&gt;&amp;bull; any&lt;br /&gt;&amp;bull; unknown&lt;br /&gt;&amp;bull; never&lt;br /&gt;&amp;bull; void&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 글들은 원시 타입, 객체 타입, 특수 타입에 대해 작성해보려고 한다.&lt;/p&gt;</description>
      <category>typescript</category>
      <category>FE</category>
      <category>js</category>
      <category>TS</category>
      <category>typeScript</category>
      <category>타입스크립트</category>
      <author>ungju</author>
      <guid isPermaLink="true">https://ungju.tistory.com/16</guid>
      <comments>https://ungju.tistory.com/16#entry16comment</comments>
      <pubDate>Sun, 23 Feb 2025 22:23:35 +0900</pubDate>
    </item>
    <item>
      <title>[2025 1회]정보처리기사 필기 3주만에 합격 후기</title>
      <link>https://ungju.tistory.com/15</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;정보처리기사 3주만에 합격하기 후기!!&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; 합격 &lt;/span&gt;&lt;/h2&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;br /&gt;&lt;br /&gt;필기 시험은 2025년 2월 9일 일요일에 봤고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;합격발표는 2025년 3월 12일 수요일이지만!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CBT로 시험을 보고 난 후 가채점 및 합격여부에 합격을 받아 나왔다.&lt;/p&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&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;figure id=&quot;og_1739342447250&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;정보처리기사 3주만에 합격하기 (+꿀팁)&quot; data-og-description=&quot;비전공자라서 프론트엔드 개발 공부를 하면서 데이터의 흐름, 브라우저와 소프트웨어 등에 대한이해부족으로 개발공부에 어려움이 있었다.공부를 막 시작할 즘엔 마냥 처음보는거라 당연히 어&quot; data-og-host=&quot;ungju.tistory.com&quot; data-og-source-url=&quot;https://ungju.tistory.com/14&quot; data-og-url=&quot;https://ungju.tistory.com/14&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/72DC9/hyYcUgnfMt/JjizbY5BXQMPXLkX9DBjJk/img.png?width=800&amp;amp;height=305&amp;amp;face=0_0_800_305,https://scrap.kakaocdn.net/dn/bFy73X/hyYagdc9O0/Ch7fZOXE0ckkJ0jT9vAxB1/img.png?width=800&amp;amp;height=305&amp;amp;face=0_0_800_305,https://scrap.kakaocdn.net/dn/pKVJE/hyYf6fAYgm/cAWnuqNoghKSXibEiePock/img.png?width=679&amp;amp;height=507&amp;amp;face=0_0_679_507&quot;&gt;&lt;a href=&quot;https://ungju.tistory.com/14&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ungju.tistory.com/14&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/72DC9/hyYcUgnfMt/JjizbY5BXQMPXLkX9DBjJk/img.png?width=800&amp;amp;height=305&amp;amp;face=0_0_800_305,https://scrap.kakaocdn.net/dn/bFy73X/hyYagdc9O0/Ch7fZOXE0ckkJ0jT9vAxB1/img.png?width=800&amp;amp;height=305&amp;amp;face=0_0_800_305,https://scrap.kakaocdn.net/dn/pKVJE/hyYf6fAYgm/cAWnuqNoghKSXibEiePock/img.png?width=679&amp;amp;height=507&amp;amp;face=0_0_679_507');&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;정보처리기사 3주만에 합격하기 (+꿀팁)&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;ungju.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발</category>
      <category>개발자 자격증</category>
      <category>기사</category>
      <category>자격증</category>
      <category>정보처리기사</category>
      <category>정처기 꿀팁</category>
      <category>정처기 준비</category>
      <category>정처기 필기</category>
      <author>ungju</author>
      <guid isPermaLink="true">https://ungju.tistory.com/15</guid>
      <comments>https://ungju.tistory.com/15#entry15comment</comments>
      <pubDate>Wed, 12 Feb 2025 15:49:04 +0900</pubDate>
    </item>
    <item>
      <title>[2025 1회]정보처리기사 3주만에 합격하기 (+꿀팁)</title>
      <link>https://ungju.tistory.com/14</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;비전공자라서 프론트엔드 개발 공부를 하면서 데이터의 흐름, 브라우저와 소프트웨어 등에 대한&lt;br /&gt;이해부족으로 개발공부에 어려움이 있었다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공부를 막 시작할 즘엔 마냥 처음보는거라 당연히 어렵겠거니 했지만&lt;br /&gt;이후에도 이론들이 제대로 이해가 안되어 휘발되는 상황이 생겼고,&lt;br /&gt;덕분에 컴퓨터공학지식을 공부의 필요성을 느껴서 이론 서적이나 블로그를 찾아보고 조금씩 공부를 하고있었따.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러던 찰나에 아주 ⭐️실행력 초속 3만km⭐️ &lt;b&gt;대천재님&lt;/b&gt;에게 왕꿀팁을 전수 받고 필기시험 등록함!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;정보처리 기사 필기 공부 사이트 모음&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. [영상강의] 길벗시나공 정보처리기사 필기 무료강의&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유튜브 시나공채널에서 무료로 볼 수 있는 필기 강의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLpYNFXUfkvDoKIPr-o9GiD_Jr7tmyTjNu&quot;&gt;[시나공 정보처리기사] 필기 토막강의&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1738761741955&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;[시나공 정보처리기사] 필기 토막강의&quot; data-og-description=&quot; &quot; data-og-host=&quot;www.youtube.com&quot; data-og-source-url=&quot;https://www.youtube.com/playlist?list=PLpYNFXUfkvDoKIPr-o9GiD_Jr7tmyTjNu&quot; data-og-url=&quot;http://www.youtube.com/playlist?list=PLpYNFXUfkvDoKIPr-o9GiD_Jr7tmyTjNu&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c7dNFT/hyX7Rq8nxb/OzSjsXacnxEGHde45fBrKk/img.jpg?width=480&amp;amp;height=270&amp;amp;face=0_0_480_270,https://scrap.kakaocdn.net/dn/dtfxye/hyYceLH35M/wS5xk8o2C32jsEDm8b2EOK/img.jpg?width=480&amp;amp;height=270&amp;amp;face=0_0_480_270&quot;&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLpYNFXUfkvDoKIPr-o9GiD_Jr7tmyTjNu&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.youtube.com/playlist?list=PLpYNFXUfkvDoKIPr-o9GiD_Jr7tmyTjNu&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c7dNFT/hyX7Rq8nxb/OzSjsXacnxEGHde45fBrKk/img.jpg?width=480&amp;amp;height=270&amp;amp;face=0_0_480_270,https://scrap.kakaocdn.net/dn/dtfxye/hyYceLH35M/wS5xk8o2C32jsEDm8b2EOK/img.jpg?width=480&amp;amp;height=270&amp;amp;face=0_0_480_270');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[시나공 정보처리기사] 필기 토막강의&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.youtube.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;/p&gt;
&lt;figure id=&quot;og_1738761936920&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;길벗, 이지톡&quot; data-og-description=&quot;IT, 어학, 자기계발, 재테크, 인문, 여행 등 학습과 실용 분야 출판&quot; data-og-host=&quot;www.gilbut.co.kr&quot; data-og-source-url=&quot;https://www.sinagong.co.kr/vod/001001001/free-lecture&quot; data-og-url=&quot;http://www.gilbut.co.kr&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cVEp4r/hyYcbVKGCV/MvPSQhvF8dpiJ79IopYta1/img.png?width=157&amp;amp;height=100&amp;amp;face=0_0_157_100,https://scrap.kakaocdn.net/dn/bIhCWW/hyX7QTiMas/3LQnERSV55ThaAfEr1kvO0/img.png?width=157&amp;amp;height=100&amp;amp;face=0_0_157_100,https://scrap.kakaocdn.net/dn/VHlaA/hyX7XrkPyJ/0sDr6uhWDiCBLfjIPRGnbk/img.jpg?width=300&amp;amp;height=444&amp;amp;face=232_341_268_380&quot;&gt;&lt;a href=&quot;https://www.sinagong.co.kr/vod/001001001/free-lecture&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.sinagong.co.kr/vod/001001001/free-lecture&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cVEp4r/hyYcbVKGCV/MvPSQhvF8dpiJ79IopYta1/img.png?width=157&amp;amp;height=100&amp;amp;face=0_0_157_100,https://scrap.kakaocdn.net/dn/bIhCWW/hyX7QTiMas/3LQnERSV55ThaAfEr1kvO0/img.png?width=157&amp;amp;height=100&amp;amp;face=0_0_157_100,https://scrap.kakaocdn.net/dn/VHlaA/hyX7XrkPyJ/0sDr6uhWDiCBLfjIPRGnbk/img.jpg?width=300&amp;amp;height=444&amp;amp;face=232_341_268_380');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;길벗, 이지톡&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;IT, 어학, 자기계발, 재테크, 인문, 여행 등 학습과 실용 분야 출판&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.gilbut.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. [영상강의] 흥달쌤 정보처리기사 강의&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정보처기기사 자격증에 대한 강의들이 이해하기 쉬운 짧고 핵심적인 영상강의라서 많이 보고있음!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/@HeungSsaem&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;흥달쌤&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1738762583459&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;profile&quot; data-og-title=&quot;흥달쌤&quot; data-og-description=&quot;흥달쌤과 함께하는 IT 채널입니다. 정보처리기사 자격증 관련된 강의 및 실무 노하우, 프로그래밍 언어(JAVA, C언어, Python) 특강 등이 진행됩니다. 앞으로 진행 예정인 동영상은 IT 관련된 이야기 &quot; data-og-host=&quot;www.youtube.com&quot; data-og-source-url=&quot;https://www.youtube.com/@HeungSsaem&quot; data-og-url=&quot;https://www.youtube.com/channel/UCtGmUJ92gdjC5GwzGYj7Tug&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bChZWV/hyX7359wtB/7PCOML9D8RB0ZhVOd5kivk/img.jpg?width=900&amp;amp;height=900&amp;amp;face=288_91_541_366,https://scrap.kakaocdn.net/dn/VzgHb/hyYb52jIP7/Vd5Y0qRbHHgslmZRu8Vwt1/img.jpg?width=900&amp;amp;height=900&amp;amp;face=288_91_541_366&quot;&gt;&lt;a href=&quot;https://www.youtube.com/@HeungSsaem&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.youtube.com/@HeungSsaem&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bChZWV/hyX7359wtB/7PCOML9D8RB0ZhVOd5kivk/img.jpg?width=900&amp;amp;height=900&amp;amp;face=288_91_541_366,https://scrap.kakaocdn.net/dn/VzgHb/hyYb52jIP7/Vd5Y0qRbHHgslmZRu8Vwt1/img.jpg?width=900&amp;amp;height=900&amp;amp;face=288_91_541_366');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;흥달쌤&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;흥달쌤과 함께하는 IT 채널입니다. 정보처리기사 자격증 관련된 강의 및 실무 노하우, 프로그래밍 언어(JAVA, C언어, Python) 특강 등이 진행됩니다. 앞으로 진행 예정인 동영상은 IT 관련된 이야기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.youtube.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;h3 data-ke-size=&quot;size23&quot;&gt;3. [필기문제집] 최강 자격증 기출문제 전자문제집 CBT&lt;/h3&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://www.comcbt.com/cbt/index2.php?hack_number=29#google_vignette&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;최강 자격증 기출문제 전자문제집 CBT&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1738761987375&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;최강 자격증 기출문제 전자문제집 CBT&quot; data-og-description=&quot;전자문제집, CBT, 컴씨비티, 씨비티, 기사, 산업기사, 기능사, 컴활, 컴퓨터활용능력, 1급, 2급, 워드, 정보처리, 전기, 소방, 기계, 사무자동화, 정보기기, 제과, 제빵, 한국사, 공무원, 수능, 필기, &quot; data-og-host=&quot;www.comcbt.com&quot; data-og-source-url=&quot;https://www.comcbt.com/cbt/index2.php?hack_number=29#google_vignette&quot; data-og-url=&quot;https://www.comcbt.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/5PyM5/hyX7OuoUtZ/MMTiiFVkbRtyJxb1tAkpk1/img.gif?width=290&amp;amp;height=80&amp;amp;face=0_0_290_80&quot;&gt;&lt;a href=&quot;https://www.comcbt.com/cbt/index2.php?hack_number=29#google_vignette&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.comcbt.com/cbt/index2.php?hack_number=29#google_vignette&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/5PyM5/hyX7OuoUtZ/MMTiiFVkbRtyJxb1tAkpk1/img.gif?width=290&amp;amp;height=80&amp;amp;face=0_0_290_80');&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;최강 자격증 기출문제 전자문제집 CBT&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;전자문제집, CBT, 컴씨비티, 씨비티, 기사, 산업기사, 기능사, 컴활, 컴퓨터활용능력, 1급, 2급, 워드, 정보처리, 전기, 소방, 기계, 사무자동화, 정보기기, 제과, 제빵, 한국사, 공무원, 수능, 필기,&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.comcbt.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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;풀고싶은 과목만 선택해서 풀 수 도 있고, 시험모드와 연습모드를 선택할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연습모드에는 각 문제 하단에 해설이 같이 나와서 어렵지 않게 준비할 수 있다!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-02-05 오후 10.31.02.png&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;507&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d55SwB/btsL9auJNEt/AfkWV9E0k70n8ZHtAbSve1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d55SwB/btsL9auJNEt/AfkWV9E0k70n8ZHtAbSve1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d55SwB/btsL9auJNEt/AfkWV9E0k70n8ZHtAbSve1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd55SwB%2FbtsL9auJNEt%2FAfkWV9E0k70n8ZHtAbSve1%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;500&quot; height=&quot;373&quot; data-filename=&quot;스크린샷 2025-02-05 오후 10.31.02.png&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;507&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인적으로 연습모드로 풀 때 문제와 답이 확실하게 이해되고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내용이 시각적으로 바로바로 매치되어서 공부하기 좋았음.&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이론으로만 공부하면 집중이 잘 안되고 속도가 많이 더딘편인데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기출문제를 풀면서 해당 내용에 대해 보충 공부를 하는 방식으로 해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;속도도 붙고 재밌게 공부하는 중이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;너무 멀고 먼 부분이라 느꼈왔던 CS 공부를 하게 동기부여해준 대천재님께 감사  &lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발</category>
      <author>ungju</author>
      <guid isPermaLink="true">https://ungju.tistory.com/14</guid>
      <comments>https://ungju.tistory.com/14#entry14comment</comments>
      <pubDate>Wed, 5 Feb 2025 23:12:35 +0900</pubDate>
    </item>
    <item>
      <title>[Javascript] 자바스크립트 동작원리, 실행 컨텍스트란?</title>
      <link>https://ungju.tistory.com/13</link>
      <description>&lt;h1&gt;실행 컨텍스트란?&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실행 컨텍스트(Execution Context)&lt;/b&gt; 란 자바스크립트에서 코드를 실행하는데 &lt;b&gt;필요한 환경을 제공&lt;/b&gt;하며, 모든 &lt;b&gt;실행 순서를 관리하는 영역&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 컨텍스트는 식별자(변수, 함수, 클래스 등의 이름)를 등록하고 관리하도록 스코프를 생성해주며, 코드 실행 순서를 관리한다.&lt;br /&gt;모든 코드는 실행 컨텍스트를 통해 실행되고 관리된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 소스코드의 타입&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 컨텍스트는 다음 세 가지로 나뉜다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전역 실행 컨텍스트: 자바스크립트 프로그램이 처음 실행되면 생성&lt;/li&gt;
&lt;li&gt;함수 실행 컨텍스트: 함수가 호출될 때마다 생성&lt;/li&gt;
&lt;li&gt;Eval 실행 컨텍스트: eval() 함수로 실행되는 코드에서 생성(잘 안쓰임)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 실행 컨텍스트 생성 및 과정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트의 엔진은 모든 코드를 실행하기 전 평가 과정을 거치도록 2단계로 과정을 처리하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 컨텍스트는 소스코드의 평가와 실행 과정에서 생성된다.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://velog.velcdn.com/images/deng_ju/post/3780f11d-76e2-4fe6-8f1c-1686e654a445/image.png&quot; alt=&quot;실행컨텍스트 평가,실행 과정&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 코드 평가&lt;/b&gt;&lt;br /&gt;평가가 될 때 &lt;b&gt;실행 컨텍스트가 생성&lt;/b&gt;되며 변수, 함수 등의 선언문이 실행되면서 생성된 변수, 함수 식별자 등을 '키(key)'로 &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;&lt;b&gt;2) 코드 실행&lt;/b&gt;&lt;br /&gt;선언문을 제외한 코드들이 순차적으로 실행된다.&lt;br /&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;h2 data-ke-size=&quot;size26&quot;&gt;3. 실행 컨텍스트 스택과 흐름&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실행 컨텍스트 스택&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 컨텍스트는 스택구조를 통해 형태로 관리된다. 코드가 실행될 때 새로운 컨텍스트가 생성되면 &lt;b&gt;스택의 마지막에 넣고(push)&lt;/b&gt;, 실행이 끝나면 마지막에 있는 데이터를 &lt;b&gt;먼저 꺼내게 된다(pop)&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;이는 마지막에 들어간 데이터가 가장 먼저 나오는 &lt;b&gt;LIFO(Last In Fist Out)방식&lt;/b&gt;의 자료구조이다.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://velog.velcdn.com/images/deng_ju/post/2e5b70b3-69ca-4cb1-9079-fd3ac9668298/image.png&quot; alt=&quot;실행 컨텍스트 스택&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;(이미지에 대한 단계를 이해하기 쉽도록 맥락마다 숫자를 매겼다. 순서를 맞춰가며 읽으면 이해하는데 도움이 될 것이다.)&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;// 1️⃣
const 변수A = 1;

function 전역함수(){ 
  // 2️⃣
  const 변수B = 2;

  function 중첩함수(){ 
    // 3️⃣
    const 변수C = 3;  

    console.log(변수1 + 변수2 + 변수3);
  }

  지역함수();  
  // 4️⃣
}

전역함수();
// 5️⃣
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실행 컨텍스트의 흐름&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스택 방식을 토대로 해당 코드를 실행하면 아래와 같은 흐름에 따라 실행 컨텍스트가 동작된다.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://velog.velcdn.com/images/deng_ju/post/8e693d93-cc89-45f2-93d8-75f68e30c520/image.png&quot; alt=&quot;실행 컨텍스트 스택 흐름&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1️⃣ 전역 코드를 평가, 실행&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;전역 코드를 평가하면서 &lt;b&gt;전역 실행 컨텍스트 생성&lt;/b&gt;됨.&lt;/li&gt;
&lt;li&gt;평가&lt;br /&gt;2-1) &lt;code&gt;변수A&lt;/code&gt;, &lt;code&gt;전역함수&lt;/code&gt;를 &lt;b&gt;전역 실행 컨텍스트에 등록&lt;/b&gt;(push)됨.&lt;/li&gt;
&lt;li&gt;실행&lt;br /&gt;3-1) &lt;code&gt;변수A&lt;/code&gt;의 값이 할당되고 &lt;code&gt;전역함수&lt;/code&gt; 호출.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2️⃣ 전역함수 코드 평가, 실행&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;전역코드 실행 중 &lt;code&gt;전역함수&lt;/code&gt;가 호출되면 &lt;b&gt;전역 코드 실행은 일시정지&lt;/b&gt;되고, 코드 제어권이 &lt;b&gt;&lt;code&gt;전역함수&lt;/code&gt;내부로 이동&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;평가&lt;br /&gt;2-1) &lt;code&gt;전역함수&lt;/code&gt;의 &lt;b&gt;실행 컨텍스트를 생성&lt;/b&gt;&lt;br /&gt;2-2) &lt;code&gt;전역함수&lt;/code&gt;의 지역변수인 &lt;code&gt;변수B&lt;/code&gt;와 중첩함수인 &lt;code&gt;중첩함수&lt;/code&gt;가 &lt;b&gt;함수의 실행 컨텍스트에 등록&lt;/b&gt;(push)됨.&lt;/li&gt;
&lt;li&gt;실행&lt;br /&gt;3-1)&lt;code&gt;변수B&lt;/code&gt;의 값이 &lt;b&gt;할당&lt;/b&gt;되고, &lt;code&gt;중첩함수&lt;/code&gt;&amp;nbsp;&lt;b&gt;호출&lt;/b&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3️⃣ 중첩함수 코드 평가, 실행&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;code&gt;중첩함수&lt;/code&gt;가 호출되면 &lt;code&gt;전역함수&lt;/code&gt;실행은 &lt;b&gt;일시정지&lt;/b&gt;되며, 코드 제어권이 &lt;b&gt;&lt;code&gt;중첩함수&lt;/code&gt; 내부로 이동&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;평가&lt;br /&gt;2-1)&lt;code&gt;중첩함수&lt;/code&gt;의 &lt;b&gt;실행 컨텍스트 생성&lt;/b&gt;&lt;br /&gt;2-2) &lt;code&gt;중첩함수&lt;/code&gt;의 지역변수인 &lt;code&gt;변수C&lt;/code&gt;가 &lt;b&gt;실행 컨텍스트 스택에 등록&lt;/b&gt;(push)&lt;/li&gt;
&lt;li&gt;실행&lt;br /&gt;3-1) &lt;code&gt;변수C&lt;/code&gt;의 값이 &lt;b&gt;할당&lt;/b&gt;되고, console.log 메서드 &lt;b&gt;호출&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;code&gt;중첩함수&lt;/code&gt;종료&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4️⃣ 전역함수로 코드 복귀&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;code&gt;중첩함수&lt;/code&gt;의 실행 컨텍스트를 &lt;b&gt;스택에서 제거&lt;/b&gt;(pop)&lt;/li&gt;
&lt;li&gt;코드 제어권이 &lt;b&gt;&lt;code&gt;전역함수&lt;/code&gt;로 이동&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;실행할 코드가 없으므로 &lt;b&gt;&lt;code&gt;전역함수&lt;/code&gt;종료&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5️⃣ 전역 코드 복귀&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;code&gt;전역함수&lt;/code&gt;의 실행 컨텍스트를 &lt;b&gt;스택에서 제거&lt;/b&gt;(pop)&lt;/li&gt;
&lt;li&gt;이후 전역 코드도 실행할 코드가 없기 때문에 &lt;b&gt;&lt;code&gt;전역 실행 컨텍스트&lt;/code&gt;종료&lt;/b&gt;&lt;/li&gt;
&lt;/ol&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;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;어느 시점에서든 최대 하나의 실행 컨텍스트를 실행하며,  실행 중인  실행 컨텍스트는 &lt;b&gt;스택에서 항상 최상위 요소로 존재&lt;/b&gt;한다.(상단 이미지 참고)&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;현재 실행 중인 컨텍스트와 연관된 실행 코드에서 ➡️ 해당 실행 컨텍스트와 연관되지 않은 실행코드로 전달될 때마다 &lt;b&gt;새로운 실행 컨텍스트가 생성&lt;/b&gt;된다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 렉시컬 환경&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;렉시컬 환경(Lexical Environment)은 &lt;b&gt;스코프를 구분하여 식별자를 등록 및 관리&lt;/b&gt;한다.&lt;br /&gt;(1)식별자와 (2)식별자에 바인딩된 값, (3)상위 스코프에 대한 참조를 기록하는 자료구조를 가진 컴포넌트다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;키&lt;/code&gt;와 &lt;code&gt;값&lt;/code&gt;을 갖는 &lt;b&gt;객체 형태 스코프&lt;/b&gt;를 생성하여 (1)식별자와 (2)식별자에 바인딩된 값을 관리한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실행 컨텍스트의 구성 컴포넌트&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://velog.velcdn.com/images/deng_ju/post/ef0e8398-3568-499c-9b55-8eefdff6c4e1/image.png&quot; alt=&quot;실행 컨텍스트의 구성 컴포넌트&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 컨텍스트는 &lt;b&gt;(1)Lexical Environment&lt;/b&gt;와 &lt;b&gt;(2)Variable Environment&lt;/b&gt;로 구성되어있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 두 컴포넌트는 생성 초기에는 같은 렉시컬 환경을 참조하지만, 코드 실행에 따라 값과 참조하는 환경이 달라질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;렉시컬 환경의 구성 컴포넌트&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 컨텍스트의 구성, 렉시컬 환경은 아래와 같이 구성된다.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://velog.velcdn.com/images/deng_ju/post/c9ecdad5-5f9d-4323-8825-f5a1fe19db44/image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 환경 레코드(Environment Record)&lt;/b&gt;&lt;br /&gt;스코프에 포함된 (1)식별자와 (2)그에 바인딩된 값을 프로퍼티로 저장하여 관리하고 있는 저장소다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 외부 렉시컬 환경에 대한 참조(Outer Lexical Environment Reference)&lt;/b&gt;&lt;br /&gt;해당 실행 컨텍스트를 생성한 코드를 포함하는 &lt;b&gt;상위 코드의 렉시컬 환경을 가리킨다.&lt;/b&gt;&lt;br /&gt;외부 코드에 연결하여 스코프 체인을 구현한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt; 미니 요약&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 컨텍스트의 렉시컬 환경: 식별자, 스코프 관리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 컨텍스트 스택: 코드 실행순서 관리&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;br /&gt;-&amp;nbsp;[모던자바스크립트&amp;nbsp;Deep&amp;nbsp;Dive](&lt;a href=&quot;https://www.yes24.com/Product/Goods/92742567)&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.yes24.com/Product/Goods/92742567)&lt;/a&gt;&lt;br /&gt;-&amp;nbsp;[모던&amp;nbsp;JavaScript&amp;nbsp;튜토리얼](&lt;a href=&quot;https://ko.javascript.info/)&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://ko.javascript.info/)&lt;/a&gt;&lt;br /&gt;-&amp;nbsp;[ECMAScript](&lt;a href=&quot;https://tc39.es/ecma262)&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://tc39.es/ecma262)&lt;/a&gt;&lt;/p&gt;</description>
      <category>javascript</category>
      <category>execution context</category>
      <category>FE</category>
      <category>JavaScript</category>
      <category>렉시컬 환경</category>
      <category>실행컨텍스트</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>ungju</author>
      <guid isPermaLink="true">https://ungju.tistory.com/13</guid>
      <comments>https://ungju.tistory.com/13#entry13comment</comments>
      <pubDate>Tue, 26 Nov 2024 02:53:53 +0900</pubDate>
    </item>
    <item>
      <title>[자바스크립트 기본] 함수 기초</title>
      <link>https://ungju.tistory.com/10</link>
      <description>&lt;details&gt;
&lt;summary&gt;목차&lt;/summary&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수&lt;br /&gt;첫 번째, 정의와 호출&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수 정의&lt;/li&gt;
&lt;li&gt;함수 호출&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째, Parameter와 Argument 그리고 기본값(default value)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;매개변수(parameter)&lt;/li&gt;
&lt;li&gt;전달인자(Argument)&lt;/li&gt;
&lt;li&gt;기본값(default value)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 번째, 반환값(return value)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;return&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;함수&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수는 프로그램을 구성하는 주요 &lt;code&gt;구성 요소(building block)&lt;/code&gt;다.&lt;br /&gt;스크립트 작성 시 특정 작업을 코드 블록으로 감싸서 하나의 실행 단위로 정의하고 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유사한 동작을 여러 곳에서 사용해야할 때, 불필요한 동작을 여러 번 작성할 필요없이 함수를 호출해 해당 기능을 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;내장 함수&lt;/b&gt;&lt;br /&gt;브라우저에 기본적으로 내장되어 있어서 함수를 만들지 않더라도 사용할 수 있는 &lt;code&gt;내장함수&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;alert('알림');
prompt('값 입력');
confirm('확인');
// 외 등등
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사용자 정의함수&lt;/b&gt;&lt;br /&gt;원하는 함수를 직접 정의하여 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1️⃣ 첫 번째, 정의와 호출&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 함수를 직접 만들어 사용하기 위해서 &lt;code&gt;함수 정의&lt;/code&gt;와 &lt;code&gt;함수 호출&lt;/code&gt;이 필요하다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수 정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수 호출&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;함수 정의&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수는 함수 정의(function definition)를 통해 생성해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;function, 함수 이름, 매개변수(parameter)를 써서 함수를 정의한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선언된 함수내부에는 실행될 본문을 넣어준다. (함수 선언문 활용)&lt;/p&gt;
&lt;pre class=&quot;arcade&quot;&gt;&lt;code&gt;function 함수이름(매개변수) {
    // 함수 본문
}


// 예시
function sayHi(){
    alert(&quot;Hello&quot;);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;함수 호출&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위처럼 작성된 함수를 호출하여 사용할 수 있도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수 이름(식별자) 옆에 &lt;code&gt;소괄호()&lt;/code&gt;를 붙여서 호출한다.&lt;/p&gt;
&lt;pre class=&quot;gcode&quot;&gt;&lt;code&gt;함수 이름();

// 예시
sayHi();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 호출된 함수는 함수의 본문을 실행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;미니 요약&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;함수 정의 및 선언&lt;/b&gt;: 함수의 기능을 정의함&lt;br /&gt;&lt;b&gt;함수 호출&lt;/b&gt;: 정의된 함수를 사용함&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2️⃣ 두 번째, Parameter와 Argument, 그리고 기본값(default value)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수는 기본적으로 입력(input)과 출력(output)으로 이루어진 동작이다.&lt;br /&gt;그래서 함수의 정의와 호출에 있어서 두 개념은 아주 중요하다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;매개변수(Parameter)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Parameter&lt;/b&gt;는 매개변수, 인자라고도 한다.&lt;br /&gt;&lt;code&gt;parameter&lt;/code&gt;는 함수가 정의될 때, 소괄호안에 넣어주며 함수가 받을 수 있는 입력받는 변수다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;몇 개의 변수를 받을 건지 자리를 표시해 여러개의 매개변수를 전달할 수 도 있다. &lt;code&gt;쉼표(,)&lt;/code&gt;를 사용해서 나열해주면 된다.&lt;/p&gt;
&lt;pre class=&quot;arcade&quot;&gt;&lt;code&gt;function 함수(매개변수) {
  // 함수 본문
}

// 예시
function sum(x, y){
    return x + y;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;전달인자(Argument)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Argument&lt;/b&gt;는 전달인자, 인수라고도 한다.&lt;br /&gt;&lt;code&gt;Argument&lt;/code&gt;는 함수가 실행될 때 &lt;code&gt;parameter&lt;/code&gt;자리에 대입되는 실제 값이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마찬가지로 몇 개의 값을 전달해 줄지 &lt;code&gt;쉼표(,)&lt;/code&gt;로 나열해주면된다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;함수 이름(인수);

// 예시
sum(3, 5);  // 8&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수를 호출할 때 인수값을 넣어주면 &lt;code&gt;매개변수(parameter)&lt;/code&gt;를 통해 함수 실행부에 전달된다.&lt;br /&gt;&lt;code&gt;sum&lt;/code&gt;이라는 이름의 함수에 &lt;code&gt;3&lt;/code&gt;과 &lt;code&gt;5&lt;/code&gt;를 &lt;code&gt;인수(argument)&lt;/code&gt;로 입력전달해주면 함수의 &lt;code&gt;매개변수&lt;/code&gt; 위치로 차례대로 들어가게 되고 각 변수의 위치에서 사용되게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과는 &lt;code&gt;x + y&lt;/code&gt; 에 3과 5가 들어가서 &lt;code&gt;8&lt;/code&gt;의 값을 보여준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;** 또 다른 예시 **&lt;/p&gt;
&lt;pre class=&quot;livescript&quot;&gt;&lt;code&gt;function greet(name) {  // 매개변수(parameter) -&amp;gt; name
  console.log(&quot;Hello, &quot; + name);
}

greet(&quot;Alice&quot;);  // 전달인자(argument) -&amp;gt; &quot;Alice&quot;

// 출력
// 콘솔창에 -&amp;gt; Hello, Alice 출력&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;기본값(default value)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수을 호출할 때 함수에 있는 매개변수(parameter)에 인수(argument)를 전달하지 않으면 기본값으로 &lt;code&gt;undefined&lt;/code&gt; 가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 매개변수 2개를 받아야하는 함수에 &lt;code&gt;sum(3)&lt;/code&gt; 하나의 인수만 입력하게 되면 첫 번째 매개변수에 해당하는 &lt;code&gt;x&lt;/code&gt;에만 &lt;code&gt;3&lt;/code&gt;이 할당되고 &lt;code&gt;y&lt;/code&gt;에는 &lt;code&gt;undefiend&lt;/code&gt;가 할당된다.&lt;/p&gt;
&lt;pre class=&quot;gml&quot;&gt;&lt;code&gt;// 예시
function sum(x, y){
    return x + y;
}

sum(3)  // NaN

// x -&amp;gt; 3
// y -&amp;gt; undefined
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더불어 함수 본문에서 실행되는 &lt;code&gt;x+y&lt;/code&gt;의 값에서 &lt;code&gt;y&lt;/code&gt;에는 기본값인 &lt;code&gt;undefined&lt;/code&gt;가 대입되는데 이는 다른 숫자와 연산할 때 &lt;code&gt;NaN&lt;/code&gt;을 발생시킨다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;전달하는 값이 없어도 기본으로 가지는 값을 만들어주기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 문제는 각 매개변수의 기본값을 입력해주면 문제 발생을 막을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매개변수에서 &lt;code&gt;y&lt;/code&gt;에 &lt;code&gt;0&lt;/code&gt;기본값을 주게 되면 인수로 값을 받지 않더라도 기본값 &lt;code&gt;0&lt;/code&gt;이 할당된다.&lt;/p&gt;
&lt;pre class=&quot;gml&quot;&gt;&lt;code&gt;// 예시
function sum(x, y = 0){
    return x + y;
}

sum(3)  // 3

// x -&amp;gt; 3
// y -&amp;gt; 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt; &lt;span&gt; &lt;/span&gt;미니 요약&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;매개변수(인자&lt;/b&gt;): 함수 정의 시 받는 변수 (parameter)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;전달인자(인수)&lt;/b&gt;: 함수 호출 시 전달되는 실제 값 (argument)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기본값(default value)&lt;/b&gt;: 인수로 전달받는 값이 없을 때 매개변수에 기본값 설정&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3️⃣ 반환값(return value)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;return&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수를 사용할 때 결과값을 반환하려면 함수 본문에 &lt;code&gt;return&lt;/code&gt;을 통해 값을 반환해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 사용한 두 함수를 예시로 보겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1번 함수&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;function greet(name) { 
  console.log(&quot;Hello, &quot; + name);
}

greet(&quot;Alice&quot;); &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2번 함수&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;ada&quot;&gt;&lt;code&gt;function sum(x, y){
    return x + y;
}

sum(3,5);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번 함수에는 &lt;code&gt;return&lt;/code&gt;이 없고 2번 함수에는 &lt;code&gt;return&lt;/code&gt;이 있다.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://velog.velcdn.com/images/deng_ju/post/197021bd-9d37-48b1-bb99-ca3a616242bf/image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;➡️ 1번 함수는 실행이 되면 내부에 &lt;code&gt;console.log()&lt;/code&gt;를 통해 콘솔창에 출력되지만, 값은 &lt;code&gt;undefined&lt;/code&gt;가 반환된다.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://velog.velcdn.com/images/deng_ju/post/1025e8de-0b2a-490a-9011-785ea1898427/image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;➡️ 2번 함수는 &lt;code&gt;8&lt;/code&gt;이라는 값이 &lt;code&gt;return&lt;/code&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;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;return이 있는 함수는 호출한 곳으로 &lt;b&gt;값을 반환&lt;/b&gt;한다.&lt;br /&gt;이 반환값은 &lt;b&gt;변수에 저장&lt;/b&gt;하여 다른 작업에 사용하기도 한다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;const result = sum(3,5);

console.log(result);  // 8&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반환값을 변수에 담아 사용하게 되면 아래와 같은 용도와 장점이 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;재사용에 용이하다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;계산 결과를 여러 곳에 활용해야하는 경우에 함수를 여러번 호출하지 않아도 되어서 유용하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;가독성, 코드 관리에 좋다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수의 결과값에 대해 명확한 변수명을 사용하면 의미를 쉽게 파악할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  미니 요약&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;반환값&lt;/b&gt;: 함수 호출 시 반환되는 값 (return value)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 함수에서 return을 사용하는 것은 필수는 아니지만, 필요에 따라 값을 반환하려면 return을 사용해야한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>javascript</category>
      <category>Core JavaScript</category>
      <category>FE</category>
      <category>function</category>
      <category>JavaScript</category>
      <author>ungju</author>
      <guid isPermaLink="true">https://ungju.tistory.com/10</guid>
      <comments>https://ungju.tistory.com/10#entry10comment</comments>
      <pubDate>Sun, 10 Nov 2024 00:52:04 +0900</pubDate>
    </item>
    <item>
      <title>반응형, 아직 Media Query만 쓰시나요? CSS Container Query(컨테이너 쿼리)</title>
      <link>https://ungju.tistory.com/9</link>
      <description>&lt;h1&gt;반응형 쿼리, 컨테이너 쿼리(Container Query)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;컨테이너 쿼리(Container Query)&lt;/b&gt; 라는 반응형 기능이 있다. 공식적으로 지원하기 시작한 것은 오래되지 않은 최신 기술에 속하지만, 어렵지 않게 요소에 맞는 반응형을 구현하기 아주 유용한 기능이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;미디어 쿼리와 컨테이너 쿼리의 차이점&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 반응형 CSS Query를 사용한다고 하면 &lt;code&gt;미디어 쿼리(Media Query)&lt;/code&gt;를 사용했다. 미디어 쿼리란, CSS에서 사용되는 기능으로 보편적으로 &lt;b&gt;뷰포트(viewport), 브라우저 혹은 디바이스&lt;/b&gt; 의 크기를 기준으로 그 조건에 맞는 반응형 레이아웃 및 스타일링을 적용하는 기능이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반응형 레이아웃과 스타일을 크기 기준으로 적용시킨다는 점과 &lt;code&gt;@규칙(at-rule)&lt;/code&gt;을 사용한다는 점에서 미디어쿼리랑 같지만 &lt;code&gt;컨테이너 쿼리&lt;/code&gt;는 개별 &lt;b&gt;컨테이너 요소의 크기를 기준&lt;/b&gt;으로 변경된다.&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&amp;nbsp;&lt;/th&gt;
&lt;th&gt;Media Query(미디어 쿼리)&lt;/th&gt;
&lt;th&gt;Container Query(컨테이너 쿼리)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;변경 기준&lt;/td&gt;
&lt;td&gt;viewport size(뷰포트 너비)&lt;/td&gt;
&lt;td&gt;inline-size (컨테이너의 가로사이즈, width)&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;h2 data-ke-size=&quot;size26&quot;&gt;컨테이너 쿼리 특징&lt;/h2&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;해당 컨테이너가 차지할 수 있는 영역이 더 좁아졌을 때 컨테이너가 포함하고 있는 글자의 크기를 더 작게 만들거나, 글자의 색상을 가독성있게 수정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Container Query(컨테이너 쿼리) 사용법&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 컨테이너 요소에 속성 적용&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1-1. container-type&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너 쿼리를 적용할 컨테이너 요소에 &lt;code&gt;container-type&lt;/code&gt;속성을 적용한다. 이 속성은 해당 요소가 컨테이너 쿼리를 사용할 수 있도록 지정해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;`inline-size`&amp;nbsp;container-type으로&amp;nbsp;지정하여&amp;nbsp;요소의&amp;nbsp;inline-size,즉&amp;nbsp;컨테이너의&amp;nbsp;너비에&amp;nbsp;따라&amp;nbsp;스타일을&amp;nbsp;적용할&amp;nbsp;수&amp;nbsp;있다.&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;.box-container {
    container-type: inline-size; 
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1-2. container-name&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;container-name&lt;/code&gt;속성으로 컨테이너 이름을 줘서 컨테이너 쿼리에 연동하여 사용이 가능하다.&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;.box-container {
    container-type: inline-size; 
    container-name: dengju;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. container query 구문&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미디어 쿼리랑 마찬가지로 &lt;code&gt;@규칙(at-rule)&lt;/code&gt;을 사용하여 작성한다.&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;@container (조건부) {
    적용 css
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;/* 컨테이너(box-container)의 크기가 400px 이하일 때 요소의 폰트 크기를 2rem으로 변경 */
/* 기본 사용 */
@container (max-width: 400px) {
    .box {
        font-size: 2rem;
    }
}


/* 컨테이너 이름 사용 */
@container dengju (max-width: 400px) {
    .box {
        font-size: 2rem;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조건부는 두 가지 방법으로 작성할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;@container dengju (max-width: 400px){}&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;@container dengju (width &amp;lt; 400px){}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 사용방법 종합&lt;/h3&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;.box-container {
    container-type: inline-size; 
    container-name: dengju;
}

.box {
    font-size: 4rem;
}

@container dengju (max-width: 400px) {
    .box {
        font-size: 2rem;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;code&gt;.box-container&lt;/code&gt;에 &lt;code&gt;container-type: inline-size;&lt;/code&gt;와 &lt;code&gt;container-name: dengju;&lt;/code&gt;를 적용하여 이 요소를 컨테이너로 설정했다. 이렇게 하면 이 컨테이너의 너비에 따라 내부 요소의 스타일을 조절할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.box&lt;/code&gt;의 기본 &lt;i&gt;font-size&lt;/i&gt;는 &lt;code&gt;4rem&lt;/code&gt;으로 설정했다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@container dengju (max-width: 400px)&lt;/code&gt; 조건부 규칙을 통해 &lt;code&gt;dengju&lt;/code&gt;라는 컨테이너의 너비가 &lt;i&gt;400px 이하&lt;/i&gt;가 되면 &lt;code&gt;.box&lt;/code&gt;의 &lt;i&gt;font-size&lt;/i&gt;가 &lt;code&gt;2rem&lt;/code&gt;으로 변경된다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 설정으로 &lt;code&gt;.box-container&lt;/code&gt;의 너비가 &lt;i&gt;400px 이하&lt;/i&gt;일 때 &lt;code&gt;.box&lt;/code&gt;의 글자 크기가 작아진다.&lt;/p&gt;</description>
      <category>CSS</category>
      <category>at-rule</category>
      <category>container query</category>
      <category>CSS</category>
      <category>Layout</category>
      <category>media query</category>
      <category>resposive web</category>
      <author>ungju</author>
      <guid isPermaLink="true">https://ungju.tistory.com/9</guid>
      <comments>https://ungju.tistory.com/9#entry9comment</comments>
      <pubDate>Tue, 5 Nov 2024 01:18:16 +0900</pubDate>
    </item>
  </channel>
</rss>