diff --git a/docs/30_ko.html b/docs/30_ko.html
index cd5823460b2290434f17b2927b3c1a801acca34a..ce14b75b8ffb9fd69f38149c660540c2ac54f131 100644
--- a/docs/30_ko.html
+++ b/docs/30_ko.html
@@ -37,7 +37,7 @@
             <div class="page">
             <h1>Chapter 2 - Conclusion</h1>
             <p>Rust의 핵심 개념인 소유권, 빌림, 그리고 빌림 검사기에 대해 배웠습니다.</p>
-<p>이러한 개념들은 Rust의 메모리 관리 체계의 핵심이며, 이를 이해하고 올바르게 사용함으로써 메모리 안전성과 효율성을 높일 수 있습니다/</p>
+<p>이러한 개념들은 Rust의 메모리 관리 체계의 핵심이며, 이를 이해하고 올바르게 사용함으로써 메모리 안전성과 효율성을 높일 수 있습니다.</p>
 <p>Rust의 강력한 컴파일러와 빌림 검사기는 코드가 메모리 안전성을 보장하도록 도와줍니다.</p>
 <div> <button type="button" class="collapsible">정답 보기</button> <div class="content"> <p>오류의 원인은 변수 s에 대한 변경 가능한 참조(r3)와 변경 불가능한 참조(r1과 r2)가 동시에 존재하기 때문입니다.
 
diff --git a/docs/32_ko.html b/docs/32_ko.html
index 399011fc63740bb8713d7663b14070a6242fa1cf..b3d6c5be37c9332e4139a494c249ac9819e2a022 100644
--- a/docs/32_ko.html
+++ b/docs/32_ko.html
@@ -35,14 +35,40 @@
                 <span class="toc"><a href="TOC_ko.html">목차</a></span>
             </div>
             <div class="page">
-            <h1>Hey</h1>
-            <p>CSW</p>
+            <h1>주요 컬렉션 타입 소개</h1>
+            <p>러스트는 일반적인 목적의 프로그래밍 데이터 구조에 대한 효율적인 구현을 제공하는 표준 컬렉션 라이브러리를 갖추고 있습니다.</p>
+<p>표준 구현을 사용하면 두 라이브러리 간에 데이터 변환 없이 원활하게 통신할 수 있습니다.</p>
+<p>가장 일반적인 사용 사례를 위해 <code>Vec</code> 또는 <code>HashMap</code>을 사용하는 것이 좋습니다.</p>
+<p>이 두 컬렉션은 대부분의 일반 데이터 저장 및 처리에 사용되며, 뛰어난 성능을 제공합니다.</p>
+<p>표준 라이브러리의 다른 컬렉션들은 특정 사용 사례에서 최적의 선택이지만, 비교적 특수한 경우에 해당합니다.</p>
+<p>실제로 <code>Vec</code>과 <code>HashMap</code>이 기술적으로 최적이 아니더라도, 시작하기에 충분한 선택이 될 것입니다.</p>
+<p>러스트의 컬렉션은 크게 4가지 주요 카테고리로 분류할 수 있습니다.</p>
+<ol>
+<li><strong>Sequences</strong>: <code>Vec</code>, <code>VecDeque</code>, <code>LinkedList</code></li>
+<li><strong>Maps</strong>: <code>HashMap</code>, <code>BTreeMap</code></li>
+<li><strong>Sets</strong>: <code>HashSet</code>, <code>BTreeSet</code></li>
+<li><strong>Misc</strong>: <code>BinaryHeap</code></li>
+</ol>
+<p>여기서는 러스트의 주요 컬렉션 타입인 벡터(Vector), 문자열(String) 및 해시맵(HashMap)에 대해 간략하게 소개하겠습니다.</p>
+<h2 id="vector">벡터(Vector)</h2>
+<p>벡터는 동적 배열로, 연속된 메모리 공간에 저장되는 동일한 타입의 요소들을 가집니다.</p>
+<p>벡터는 크기를 자동으로 조절할 수 있으며, 요소에 빠르게 접근할 수 있는 장점이 있습니다.</p>
+<h2 id="string">문자열(String)</h2>
+<p>문자열은 UTF-8 인코딩된 문자의 연속으로 구성되어 있습니다.</p>
+<p>러스트의 문자열은 변경이 불가능한 <code>&amp;str</code> 타입과 변경 가능한 <code>String</code> 타입이 있습니다.</p>
+<p>문자열은 텍스트 데이터를 저장하고 처리하는데 사용됩니다.</p>
+<h2 id="hashmap">해시맵(HashMap)</h2>
+<p>해시맵은 키-값 쌍을 저장하는 데 사용되는 컬렉션입니다.</p>
+<p>해시 함수를 사용하여 키를 해싱하여 값을 빠르게 찾을 수 있습니다.</p>
+<p>해시맵은 삽입, 검색 및 삭제 작업에 대한 평균 시간 복잡도가 O(1)입니다.</p>
             <div class="bottomnav">
                 <span class="back"><a href="chapter_3_ko.html" rel="prev">❮ 이전</a></span>
-                <span class="next"><a href="chapter_4_ko.html" rel="next">다음 ❯</a></span>
+                <span class="next"><a href="33_ko.html" rel="next">다음 ❯</a></span>
             </div>
             </div>
-            <div class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div>
+            <div class="code">
+            <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC+%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%0D%0Ause+std%3A%3Acollections%3A%3AHashMap%3B%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+names%3A+Vec%3CString%3E+%3D+Vec%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84+%EB%B2%A1%ED%84%B0%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++names.push%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%29%3B%0D%0A%0D%0A++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+ages%3A+HashMap%3CString%2C+u32%3E+%3D+HashMap%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC+%EC%97%B0%EA%B4%80%EB%90%9C+%EA%B0%92%EC%9D%84+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++ages.insert%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%2C+25%29%3B%0D%0A++++ages.insert%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%2C+24%29%3B%0D%0A++++ages.insert%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%2C+26%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EC%9A%94%EC%86%8C%EB%93%A4%EC%9D%84+%EB%B0%98%EB%B3%B5%ED%95%98%EB%A9%B0%2C+%EA%B0%81+%EC%9D%B4%EB%A6%84%EC%97%90+%EB%8C%80%ED%95%9C+%EB%82%98%EC%9D%B4%EB%A5%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++for+name+in+names.iter%28%29+%7B%0D%0A++++++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90%EC%84%9C+%EC%9D%B4%EB%A6%84%EC%97%90+%ED%95%B4%EB%8B%B9%ED%95%98%EB%8A%94+%EB%82%98%EC%9D%B4%EB%A5%BC+%EA%B0%80%EC%A0%B8%EC%98%B4%0D%0A++++++++let+age+%3D+ages.get%28name%29.unwrap%28%29%3B%0D%0A%0D%0A++++++++%2F%2F+%EA%B2%B0%EA%B3%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++++++println%21%28%22%7B%7D%EB%8B%98%EC%9D%98+%EB%82%98%EC%9D%B4%EB%8A%94+%7B%7D%EC%82%B4%EC%9E%85%EB%8B%88%EB%8B%A4.%22%2C+name%2C+age%29%3B%0D%0A++++%7D%0D%0A%7D%0D%0A" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals" title="Rust Playground" loading="lazy"></iframe>
+            </div>
         </div>
         <script>
         var pres = document.querySelectorAll("pre>code");
diff --git a/docs/33_ko.html b/docs/33_ko.html
index 326f4db41fa4d2d47318f506892c7ddae7d44429..6c45a7223f54d84d61b743c4e85ed0ea08d28ef0 100644
--- a/docs/33_ko.html
+++ b/docs/33_ko.html
@@ -35,14 +35,53 @@
                 <span class="toc"><a href="TOC_ko.html">목차</a></span>
             </div>
             <div class="page">
-            <h1>Hey</h1>
-            <p>CSW</p>
+            <h1>벡터(Vector)</h1>
+            <p>벡터는 동적 배열로, 연속된 메모리 공간에 저장되는 동일한 타입의 요소들을 가집니다.</p>
+<p>벡터는 크기를 자동으로 조절할 수 있으며, 요소에 빠르게 접근할 수 있는 장점이 있습니다.</p>
+<h2 id="a">a. 벡터 생성 및 초기화</h2>
+<p>벡터를 생성하려면 다음과 같은 방법을 사용할 수 있습니다.</p>
+<pre><code class="rust">// 빈 벡터 생성
+let mut vec1: Vec&lt;i32> = Vec::new();
+
+// 초기 값이 있는 벡터 생성
+let vec2 = vec![1, 2, 3, 4, 5];</code></pre>
+<h2 id="b">b. 벡터 요소에 접근하고 수정하기</h2>
+<p>벡터 요소에 접근하거나 수정하려면 인덱스를 사용합니다.</p>
+<pre><code class="rust">// 벡터에서 인덱스를 사용해 요소에 접근하기
+let first_element = vec2[0]; // 첫 번째 요소
+
+// 벡터에서 인덱스를 사용해 요소를 수정하기
+vec1.push(10); // 벡터 끝에 10 추가
+vec1[0] = 20;  // 첫 번째 요소를 20으로 변경</code></pre>
+<h2 id="c">c. 벡터 순회하기</h2>
+<p>벡터의 요소를 반복하려면 <code>for</code> 루프를 사용합니다.</p>
+<pre><code class="rust">for element in vec2.iter() {
+    println!("요소: {}", element);
+}</code></pre>
+<h2 id="d">d. 벡터 슬라이싱</h2>
+<p>벡터의 일부분만 참조하려면 슬라이스를 사용합니다.</p>
+<pre><code class="rust">let slice = &vec2[1..3]; // 인덱스 1부터 2까지의 슬라이스 생성</code></pre>
+<h2 id="e">e. 벡터 크기 조절 및 용량 관리</h2>
+<p>벡터의 크기를 조절하거나 용량을 관리하려면 다음과 같은 메서드를 사용합니다.</p>
+<pre><code class="rust">vec1.reserve(10); // 최소한 10개 요소를 저장할 수 있는 공간을 확보 vec1.shrink_to_fit(); // 벡터의 용량을 최소한으로 줄이기 vec1.resize(5, 0); // 벡터 크기를 5로 조절하고, 새로운 요소를 0으로 초기화</code></pre>
+<h2 id="f">f. 고급 벡터 사용법</h2>
+<p>벡터의 고급 사용법에는 벡터에서 요소를 제거하거나 벡터의 일부를 다른 벡터로 이동하는 등의 작업이 포함됩니다.</p>
+<pre><code class="rust">// 벡터에서 인덱스 i의 요소 제거
+let i = 2; vec1.remove(i);
+
+// 벡터에서 마지막 요소를 꺼내기
+if let Some(last_element) = vec1.pop() {
+    println!("마지막 요소: {}", last_element);
+}</code></pre>
+<p>더 많은 메소드는 <a href="https://doc.rust-lang.org/alloc/vec/struct.Vec.html#" target="_blank" rel="noopener">공식 문서</a>를 참고하세요.</p>
             <div class="bottomnav">
-                <span class="back"><a href="chapter_4_ko.html" rel="prev">❮ 이전</a></span>
+                <span class="back"><a href="32_ko.html" rel="prev">❮ 이전</a></span>
                 <span class="next"><a href="34_ko.html" rel="next">다음 ❯</a></span>
             </div>
             </div>
-            <div class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div>
+            <div class="code">
+            <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC+%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%0D%0Ause+std%3A%3Acollections%3A%3AHashMap%3B%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+names%3A+Vec%3CString%3E+%3D+Vec%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84+%EB%B2%A1%ED%84%B0%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++names.push%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%29%3B%0D%0A%0D%0A++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+ages%3A+HashMap%3CString%2C+u32%3E+%3D+HashMap%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC+%EC%97%B0%EA%B4%80%EB%90%9C+%EA%B0%92%EC%9D%84+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++ages.insert%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%2C+25%29%3B%0D%0A++++ages.insert%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%2C+24%29%3B%0D%0A++++ages.insert%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%2C+26%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EC%9A%94%EC%86%8C%EB%93%A4%EC%9D%84+%EB%B0%98%EB%B3%B5%ED%95%98%EB%A9%B0%2C+%EA%B0%81+%EC%9D%B4%EB%A6%84%EC%97%90+%EB%8C%80%ED%95%9C+%EB%82%98%EC%9D%B4%EB%A5%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++for+name+in+names.iter%28%29+%7B%0D%0A++++++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90%EC%84%9C+%EC%9D%B4%EB%A6%84%EC%97%90+%ED%95%B4%EB%8B%B9%ED%95%98%EB%8A%94+%EB%82%98%EC%9D%B4%EB%A5%BC+%EA%B0%80%EC%A0%B8%EC%98%B4%0D%0A++++++++let+age+%3D+ages.get%28name%29.unwrap%28%29%3B%0D%0A%0D%0A++++++++%2F%2F+%EA%B2%B0%EA%B3%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++++++println%21%28%22%7B%7D%EB%8B%98%EC%9D%98+%EB%82%98%EC%9D%B4%EB%8A%94+%7B%7D%EC%82%B4%EC%9E%85%EB%8B%88%EB%8B%A4.%22%2C+name%2C+age%29%3B%0D%0A++++%7D%0D%0A%7D%0D%0A" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals" title="Rust Playground" loading="lazy"></iframe>
+            </div>
         </div>
         <script>
         var pres = document.querySelectorAll("pre>code");
diff --git a/docs/34_ko.html b/docs/34_ko.html
index 7f12feab5dfe65545641eea40d978363d0945c5a..86e3373b4a1b1186827e0871202f5fbbc55ca5f1 100644
--- a/docs/34_ko.html
+++ b/docs/34_ko.html
@@ -35,14 +35,56 @@
                 <span class="toc"><a href="TOC_ko.html">목차</a></span>
             </div>
             <div class="page">
-            <h1>Hey</h1>
-            <p>CSW</p>
+            <h1>벡터의 반복자(Iterators)</h1>
+            <p>벡터와 같은 Iterator trait가 구현된 것들에는 요소들을 반복하고 처리할 때 사용할 수 있는 여러 가지 반복자 메서드가 있습니다.</p>
+<p><code>iter()</code>, <code>iter_mut()</code>, <code>into_iter()</code>는 각각 불변 참조, 가변 참조, 소유권 이동을 수행하는 반복자를 생성합니다.</p>
+<h3 id="1iter">1. iter()</h3>
+<p><code>iter()</code> 메서드는 벡터의 각 요소에 대한 불변 참조를 생성하는 반복자를 반환합니다.</p>
+<p>이 반복자는 벡터의 요소를 읽기 전용으로 사용할 때 유용합니다.</p>
+<pre><code class="rust">let vec = vec![1, 2, 3, 4, 5];
+
+for element in vec.iter() {
+    println!("요소: {}", element);
+}</code></pre>
+<h3 id="2iter_mut">2. iter_mut()</h3>
+<p><code>iter_mut()</code> 메서드는 벡터의 각 요소에 대한 가변 참조를 생성하는 반복자를 반환합니다.</p>
+<p>이 반복자는 벡터의 요소를 수정할 때 유용합니다.</p>
+<pre><code class="rust">let mut vec = vec![1, 2, 3, 4, 5];
+
+for element in vec.iter_mut() {
+    *element *= 2; // 각 요소에 2를 곱함
+}
+println!("변경된 벡터: {:?}", vec);</code></pre>
+<h3 id="3into_iter">3. into_iter()</h3>
+<p><code>into_iter()</code> 메서드는 벡터의 각 요소의 소유권을 이동하는 반복자를 반환합니다.</p>
+<p>이 반복자는 벡터의 요소를 소유권을 이동시키며 처리할 때 유용합니다.</p>
+<p>이를 통해 벡터의 요소를 다른 데이터 구조로 쉽게 옮길 수 있습니다.</p>
+<pre><code class="rust">let vec = vec!["a".to_string(), "b".to_string(), "c".to_string()];
+
+let mut uppercased_vec: Vec&lt;String> = Vec::new();
+
+for element in vec.into_iter() {
+    uppercased_vec.push(element.to_uppercase());
+}
+
+println!("대문자로 변경된 벡터: {:?}", uppercased_vec);</code></pre>
+<p><code>into_iter()</code>를 사용할 때 원래의 벡터는 더 이상 사용할 수 없습니다.</p>
+<p>소유권이 이동되어 원래 벡터에 대한 참조가 무효화되기 때문입니다.</p>
+<h2 id="">차이점</h2>
+<ul>
+<li><code>iter()</code>: 벡터의 요소에 대한 불변 참조를 생성하는 반복자를 반환합니다. 요소를 읽기 전용으로 사용할 때 사용됩니다.</li>
+<li><code>iter_mut()</code>: 벡터의 요소에 대한 가변 참조를 생성하는 반복자를 반환합니다. 요소를 수정할 때 사용됩니다.</li>
+<li><code>into_iter()</code>: 벡터의 요소의 소유권을 이동하는 반복자를 반환합니다. 요소를 소유권을 이동시키며 처리할 때 사용됩니다.</li>
+</ul>
+<p>이러한 반복자들은 각각 다양한 상황에 따라 벡터를 처리할 수 있습니다.</p>
             <div class="bottomnav">
-                <span class="back"><a href="chapter_4_ko.html" rel="prev">❮ 이전</a></span>
+                <span class="back"><a href="33_ko.html" rel="prev">❮ 이전</a></span>
                 <span class="next"><a href="35_ko.html" rel="next">다음 ❯</a></span>
             </div>
             </div>
-            <div class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div>
+            <div class="code">
+            <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC+%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%0D%0Ause+std%3A%3Acollections%3A%3AHashMap%3B%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+names%3A+Vec%3CString%3E+%3D+Vec%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84+%EB%B2%A1%ED%84%B0%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++names.push%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%29%3B%0D%0A%0D%0A++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+ages%3A+HashMap%3CString%2C+u32%3E+%3D+HashMap%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC+%EC%97%B0%EA%B4%80%EB%90%9C+%EA%B0%92%EC%9D%84+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++ages.insert%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%2C+25%29%3B%0D%0A++++ages.insert%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%2C+24%29%3B%0D%0A++++ages.insert%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%2C+26%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EC%9A%94%EC%86%8C%EB%93%A4%EC%9D%84+%EB%B0%98%EB%B3%B5%ED%95%98%EB%A9%B0%2C+%EA%B0%81+%EC%9D%B4%EB%A6%84%EC%97%90+%EB%8C%80%ED%95%9C+%EB%82%98%EC%9D%B4%EB%A5%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++for+name+in+names.iter%28%29+%7B%0D%0A++++++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90%EC%84%9C+%EC%9D%B4%EB%A6%84%EC%97%90+%ED%95%B4%EB%8B%B9%ED%95%98%EB%8A%94+%EB%82%98%EC%9D%B4%EB%A5%BC+%EA%B0%80%EC%A0%B8%EC%98%B4%0D%0A++++++++let+age+%3D+ages.get%28name%29.unwrap%28%29%3B%0D%0A%0D%0A++++++++%2F%2F+%EA%B2%B0%EA%B3%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++++++println%21%28%22%7B%7D%EB%8B%98%EC%9D%98+%EB%82%98%EC%9D%B4%EB%8A%94+%7B%7D%EC%82%B4%EC%9E%85%EB%8B%88%EB%8B%A4.%22%2C+name%2C+age%29%3B%0D%0A++++%7D%0D%0A%7D%0D%0A" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals" title="Rust Playground" loading="lazy"></iframe>
+            </div>
         </div>
         <script>
         var pres = document.querySelectorAll("pre>code");
diff --git a/docs/35_ko.html b/docs/35_ko.html
index 604ccb4b0d62f6d64edefd1902a44655f174e30f..3d8b010ea49230f1b24cd5d3213de35a4ff479cb 100644
--- a/docs/35_ko.html
+++ b/docs/35_ko.html
@@ -35,15 +35,73 @@
                 <span class="toc"><a href="TOC_ko.html">목차</a></span>
             </div>
             <div class="page">
-            <h1>Hey</h1>
-            <p>CSW</p>
+            <h1>해시맵(HashMap)</h1>
+            <p>해시맵은 키-값 쌍을 저장하는 데 사용되는 컬렉션입니다.</p>
+<p>해시 함수를 사용하여 키를 해싱하여 값을 빠르게 찾을 수 있습니다.</p>
+<p>해시맵은 삽입, 검색 및 삭제 작업에 대한 평균 시간 복잡도가 <code>O(1)</code>입니다.</p>
+<h2 id="a">a. 해시맵 생성 및 초기화</h2>
+<p>해시맵을 생성하려면 다음과 같은 방법을 사용할 수 있습니다.</p>
+<pre><code class="rust">use std::collections::HashMap;
+
+// 빈 해시맵 생성
+let mut scores: HashMap&lt;String, u32> = HashMap::new();
+
+// 초기 값이 있는 해시맵 생성
+let scores = vec![("Alice", 50), ("Bob", 60)]
+    .into_iter()
+    .map(|(k, v)| (k.to_string(), v))
+    .collect::<HashMap<String, u32>>();</code></pre>
+<h2 id="b">b. 키-값 쌍 삽입 및 업데이트</h2>
+<p>해시맵에 키-값 쌍을 삽입하거나 업데이트하려면 <code>insert</code> 메서드를 사용합니다.</p>
+<pre><code class="rust">// 키-값 쌍 삽입
+scores.insert("Alice".to_string(), 50);
+scores.insert("Bob".to_string(), 60);
+
+// 키-값 쌍 업데이트
+scores.insert("Alice".to_string(), 55);</code></pre>
+<h2 id="c">c. 값에 접근하고 삭제하기</h2>
+<p>해시맵에서 값을 접근하거나 삭제하려면 <code>get</code> 또는 <code>remove</code> 메서드를 사용합니다.</p>
+<pre><code class="rust">// 값에 접근하기
+if let Some(score) = scores.get("Alice") {
+    println!("Alice의 점수: {}", score);
+}
+
+// 값 삭제하기
+scores.remove("Alice");</code></pre>
+<h2 id="d">d. 해시맵 순회하기</h2>
+<p>해시맵의 키-값 쌍을 반복하려면 <code>for</code> 루프를 사용합니다.</p>
+<pre><code class="rust">for (key, value) in &scores {
+    println!("{}: {}", key, value);
+}</code></pre>
+<h2 id="e">e. 일반적인 해시맵 작업</h2>
+<p>해시맵에서 자주 사용되는 작업들은 다음과 같습니다.</p>
+<ul>
+<li><code>contains_key</code>: 특정 키가 해시맵에 있는지 확인합니다.</li>
+<li><code>keys</code>: 해시맵의 모든 키를 반환합니다.</li>
+<li><code>values</code>: 해시맵의 모든 값을 반환합니다.</li>
+</ul>
+<pre><code class="rust">// 키가 해시맵에 있는지 확인하기
+if scores.contains_key("Alice") {
+    println!("Alice의 점수가 있습니다.");
+}
+
+// 해시맵의 모든 키 출력하기
+for key in scores.keys() {
+    println!("키: {}", key);
+}
+
+// 해시맵의 모든 값 출력하기
+for value in scores.values() {
+    println!("값: {}", value);
+}</code></pre>
+<p>더 많은 메소드는 <a href="https://doc.rust-lang.org/std/collections/struct.HashMap.html" target="_blank" rel="noopener">공식 문서</a>를 참고하세요.</p>
             <div class="bottomnav">
                 <span class="back"><a href="34_ko.html" rel="prev">❮ 이전</a></span>
-                <span class="next"><a href="chapter_5_ko.html" rel="next">다음 ❯</a></span>
+                <span class="next"><a href="36_ko.html" rel="next">다음 ❯</a></span>
             </div>
             </div>
             <div class="code">
-            <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=macro_rules%21+times+%7B%0D%0A++++%28%24num%3Aexpr%2C+%24body%3Ablock%29+%3D%3E+%7B%0D%0A++++++++times%21%28None%2C+%24num%2C+%24body%29%3B%0D%0A++++%7D%3B%0D%0A++++%28%24label%3Aexpr%2C+%24num%3Aexpr%2C+%24body%3Ablock%29+%3D%3E+%7B%0D%0A++++++++if+let+Some%28label%29+%3D+%24label+%7B%0D%0A++++++++++++println%21%28%22Task%3A+%7B%7D%22%2C+label%29%3B%0D%0A++++++++%7D%0D%0A%0D%0A++++++++let+mut+total_time+%3D+std%3A%3Atime%3A%3ADuration%3A%3Anew%280%2C+0%29%3B%0D%0A++++++++let+mut+min_time+%3D+std%3A%3Atime%3A%3ADuration%3A%3Afrom_secs%28u64%3A%3AMAX%29%3B%0D%0A++++++++let+mut+max_time+%3D+std%3A%3Atime%3A%3ADuration%3A%3Afrom_secs%280%29%3B%0D%0A%0D%0A++++++++for+_+in+0..%24num+%7B%0D%0A++++++++++++let+start_time+%3D+std%3A%3Atime%3A%3AInstant%3A%3Anow%28%29%3B%0D%0A++++++++++++%24body%0D%0A++++++++++++let+elapsed+%3D+start_time.elapsed%28%29%3B%0D%0A++++++++++++total_time+%2B%3D+elapsed%3B%0D%0A++++++++++++min_time+%3D+min_time.min%28elapsed%29%3B%0D%0A++++++++++++max_time+%3D+max_time.max%28elapsed%29%3B%0D%0A++++++++++++println%21%28%0D%0A++++++++++++++++%22Execution+time+for+iteration%3A+%7B%7D+ms%22%2C%0D%0A++++++++++++++++elapsed.as_millis%28%29%0D%0A++++++++++++%29%3B%0D%0A++++++++%7D%0D%0A%0D%0A++++++++let+avg_time+%3D+total_time+%2F+%24num%3B%0D%0A++++++++println%21%28%22Average+execution+time%3A+%7B%7D+ms%22%2C+avg_time.as_millis%28%29%29%3B%0D%0A++++++++println%21%28%22Minimum+execution+time%3A+%7B%7D+ms%22%2C+min_time.as_millis%28%29%29%3B%0D%0A++++++++println%21%28%22Maximum+execution+time%3A+%7B%7D+ms%22%2C+max_time.as_millis%28%29%29%3B%0D%0A++++%7D%3B%0D%0A%7D%0D%0A%0D%0Afn+is_prime%28n%3A+u64%29+-%3E+bool+%7B%0D%0A++++if+n+%3C%3D+1+%7B%0D%0A++++++++return+false%3B%0D%0A++++%7D%0D%0A++++for+i+in+2..%3D%28%28n+as+f64%29.sqrt%28%29+as+u64%29+%7B%0D%0A++++++++if+n+%25+i+%3D%3D+0+%7B%0D%0A++++++++++++return+false%3B%0D%0A++++++++%7D%0D%0A++++%7D%0D%0A++++true%0D%0A%7D%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++times%21%28Some%28%22Prime+number+summation%22%29%2C+3%2C+%7B%0D%0A++++++++let+mut+sum+%3D+0u64%3B%0D%0A++++++++let+mut+num+%3D+2u64%3B%0D%0A++++++++let+mut+counter+%3D+0%3B%0D%0A%0D%0A++++++++while+counter+%3C+10_000+%7B%0D%0A++++++++++++if+is_prime%28num%29+%7B%0D%0A++++++++++++++++sum+%2B%3D+num%3B%0D%0A++++++++++++++++counter+%2B%3D+1%3B%0D%0A++++++++++++%7D%0D%0A++++++++++++num+%2B%3D+1%3B%0D%0A++++++++%7D%0D%0A++++++++println%21%28%22Sum+of+first+10%2C000+prime+numbers%3A+%7B%7D%22%2C+sum%29%3B%0D%0A++++%7D%29%3B%0D%0A%7D" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals" title="Rust Playground" loading="lazy"></iframe>
+            <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC+%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%0D%0Ause+std%3A%3Acollections%3A%3AHashMap%3B%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+names%3A+Vec%3CString%3E+%3D+Vec%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84+%EB%B2%A1%ED%84%B0%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++names.push%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%29%3B%0D%0A%0D%0A++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+ages%3A+HashMap%3CString%2C+u32%3E+%3D+HashMap%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC+%EC%97%B0%EA%B4%80%EB%90%9C+%EA%B0%92%EC%9D%84+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++ages.insert%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%2C+25%29%3B%0D%0A++++ages.insert%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%2C+24%29%3B%0D%0A++++ages.insert%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%2C+26%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EC%9A%94%EC%86%8C%EB%93%A4%EC%9D%84+%EB%B0%98%EB%B3%B5%ED%95%98%EB%A9%B0%2C+%EA%B0%81+%EC%9D%B4%EB%A6%84%EC%97%90+%EB%8C%80%ED%95%9C+%EB%82%98%EC%9D%B4%EB%A5%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++for+name+in+names.iter%28%29+%7B%0D%0A++++++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90%EC%84%9C+%EC%9D%B4%EB%A6%84%EC%97%90+%ED%95%B4%EB%8B%B9%ED%95%98%EB%8A%94+%EB%82%98%EC%9D%B4%EB%A5%BC+%EA%B0%80%EC%A0%B8%EC%98%B4%0D%0A++++++++let+age+%3D+ages.get%28name%29.unwrap%28%29%3B%0D%0A%0D%0A++++++++%2F%2F+%EA%B2%B0%EA%B3%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++++++println%21%28%22%7B%7D%EB%8B%98%EC%9D%98+%EB%82%98%EC%9D%B4%EB%8A%94+%7B%7D%EC%82%B4%EC%9E%85%EB%8B%88%EB%8B%A4.%22%2C+name%2C+age%29%3B%0D%0A++++%7D%0D%0A%7D%0D%0A" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals" title="Rust Playground" loading="lazy"></iframe>
             </div>
         </div>
         <script>
diff --git a/docs/36_ko.html b/docs/36_ko.html
index 92162c6e6a2ea4e8c4d2fe1b833d92b61d67a4ca..fff2c94a10a91a386682ece3345bf1fc16c9f9a3 100644
--- a/docs/36_ko.html
+++ b/docs/36_ko.html
@@ -35,14 +35,47 @@
                 <span class="toc"><a href="TOC_ko.html">목차</a></span>
             </div>
             <div class="page">
-            <h1>Hey</h1>
-            <p>CSW</p>
+            <h1>이터레이터(Iterators) 소개</h1>
+            <p>이터레이터는 Rust에서 컬렉션의 요소를 순회하고 처리하는 데 중요한 역할을 하는 추상화 개념입니다.</p>
+<p>이터레이터는 컬렉션의 요소를 효율적이고 간결한 방법으로 처리할 수 있게 도와줍니다.</p>
+<h2 id="arust">a. 이터레이터 개념 및 Rust에서의 중요성</h2>
+<p>이터레이터는 데이터 집합을 순차적으로 접근하는 데 사용되는 개체입니다.</p>
+<p>Rust에서 이터레이터는 컬렉션의 요소를 처리하는 데 사용되며, 함수형 프로그래밍 패턴과 함께 사용할 수 있습니다.</p>
+<p>이터레이터는 함수형 프로그래밍을 지원하며, 일반적으로 Rust의 for 루프에서 사용됩니다.</p>
+<p>Rust에서 이터레이터의 중요성은 다음과 같습니다:</p>
+<ol>
+<li>코드의 간결성: 이터레이터를 사용하면 반복문을 사용하는 코드를 보다 간결하게 작성할 수 있습니다.</li>
+<li>느긋한 평가(Lazy evaluation): 이터레이터는 필요한 경우에만 요소를 처리하므로, 메모리 사용량과 실행 시간을 줄일 수 있습니다.</li>
+<li>컴포지션: 이터레이터를 사용하면 여러 이터레이터 메서드를 연결하여 작업을 쉽게 구성할 수 있습니다.</li>
+</ol>
+<h2 id="biteratornextcollect">b. Iterator 트레잇과 메서드 소개 (next, collect 등)</h2>
+<p><code>Iterator</code> 트레잇은 Rust의 이터레이터를 구현하는 데 사용되는 트레잇입니다.</p>
+<p>이 트레잇에는 다음과 같은 메서드가 정의되어 있습니다.</p>
+<h3 id="next">next</h3>
+<p><code>next</code> 메서드는 이터레이터의 다음 요소를 반환합니다.</p>
+<p>모든 요소를 순회한 경우, <code>None</code>을 반환합니다.</p>
+<pre><code class="rust">let mut numbers = vec![1, 2, 3, 4, 5].into_iter();
+
+while let Some(number) = numbers.next() {
+    println!("Number: {}", number);
+}</code></pre>
+<h3 id="collect">collect</h3>
+<p><code>collect</code> 메서드는 이터레이터의 요소를 다른 컬렉션 타입으로 변환합니다.</p>
+<pre><code class="rust">let numbers = vec![1, 2, 3, 4, 5];
+let doubled_numbers: Vec&lt;_> = numbers.iter().map(|x| x * 2).collect();
+
+println!("Doubled numbers: {:?}", doubled_numbers);</code></pre>
+<p>이 외에도 다양한 이터레이터 메서드가 있습니다.</p>
+<p>예를 들어, <code>filter</code>, <code>map</code>, <code>fold</code>, <code>take</code>, <code>skip</code>, <code>all</code>, <code>any</code> 등의 메서드를 사용하여 이터레이터를 처리할 수 있습니다.</p>
+<p>더 많은 메소드는 <a href="https://doc.rust-lang.org/core/iter/trait.Iterator.html" target="_blank" rel="noopener">공식 문서</a>를 참고하세요.</p>
             <div class="bottomnav">
-                <span class="back"><a href="chapter_5_ko.html" rel="prev">❮ 이전</a></span>
-                <span class="next"><a href="chapter_6_ko.html" rel="next">다음 ❯</a></span>
+                <span class="back"><a href="35_ko.html" rel="prev">❮ 이전</a></span>
+                <span class="next"><a href="37_ko.html" rel="next">다음 ❯</a></span>
+            </div>
             </div>
+            <div class="code">
+            <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC+%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%0D%0Ause+std%3A%3Acollections%3A%3AHashMap%3B%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+names%3A+Vec%3CString%3E+%3D+Vec%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84+%EB%B2%A1%ED%84%B0%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++names.push%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%29%3B%0D%0A%0D%0A++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+ages%3A+HashMap%3CString%2C+u32%3E+%3D+HashMap%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC+%EC%97%B0%EA%B4%80%EB%90%9C+%EA%B0%92%EC%9D%84+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++ages.insert%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%2C+25%29%3B%0D%0A++++ages.insert%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%2C+24%29%3B%0D%0A++++ages.insert%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%2C+26%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EC%9A%94%EC%86%8C%EB%93%A4%EC%9D%84+%EB%B0%98%EB%B3%B5%ED%95%98%EB%A9%B0%2C+%EA%B0%81+%EC%9D%B4%EB%A6%84%EC%97%90+%EB%8C%80%ED%95%9C+%EB%82%98%EC%9D%B4%EB%A5%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++for+name+in+names.iter%28%29+%7B%0D%0A++++++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90%EC%84%9C+%EC%9D%B4%EB%A6%84%EC%97%90+%ED%95%B4%EB%8B%B9%ED%95%98%EB%8A%94+%EB%82%98%EC%9D%B4%EB%A5%BC+%EA%B0%80%EC%A0%B8%EC%98%B4%0D%0A++++++++let+age+%3D+ages.get%28name%29.unwrap%28%29%3B%0D%0A%0D%0A++++++++%2F%2F+%EA%B2%B0%EA%B3%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++++++println%21%28%22%7B%7D%EB%8B%98%EC%9D%98+%EB%82%98%EC%9D%B4%EB%8A%94+%7B%7D%EC%82%B4%EC%9E%85%EB%8B%88%EB%8B%A4.%22%2C+name%2C+age%29%3B%0D%0A++++%7D%0D%0A%7D%0D%0A" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals" title="Rust Playground" loading="lazy"></iframe>
             </div>
-            <div class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div>
         </div>
         <script>
         var pres = document.querySelectorAll("pre>code");
diff --git a/docs/37_ko.html b/docs/37_ko.html
index 92162c6e6a2ea4e8c4d2fe1b833d92b61d67a4ca..cb16302c0ababff6f07696c82374142d0b81ea18 100644
--- a/docs/37_ko.html
+++ b/docs/37_ko.html
@@ -35,14 +35,50 @@
                 <span class="toc"><a href="TOC_ko.html">목차</a></span>
             </div>
             <div class="page">
-            <h1>Hey</h1>
-            <p>CSW</p>
+            <h1>Chapter 3 - Conclusion</h1>
+            <p>다음은 여러분들이 Vec와 HashMap을 사용하여 문제를 해결해 보는 고급 문제입니다.</p>
+<p>아래 주석을 참고하여 코드를 완성해보세요.</p>
+<p>문제 설명:<br />
+이름과 점수가 주어진 학생들의 정보를 Vec와 HashMap을 사용해 관리하고, 평균 점수를 계산하고 출력하는 프로그램을 작성하세요.</p>
+<ol>
+<li>Vec를 사용하여 학생들의 이름 목록을 저장하세요.</li>
+<li>HashMap을 사용하여 학생들의 이름과 점수를 저장하세요.</li>
+<li>학생들의 평균 점수를 계산하고 출력하세요.</li>
+</ol>
+<div> <button type="button" class="collapsible">정답 보기</button> <div class="content"> <p> <pre><code class="rust">use std::collections::HashMap;
+
+fn main() {
+    let students = vec![
+        ("김철수", 80),
+        ("이영희", 90),
+        ("박지민", 85),
+        ("최영수", 95),
+    ];
+
+    let mut names = Vec::new();
+    let mut scores = HashMap::new();
+
+    for (name, score) in students {
+        // 이름 목록 Vec에 학생 이름을 추가합니다.
+        names.push(name);
+
+        // 이름과 점수를 HashMap에 저장합니다.
+        scores.insert(name, score);
+    }
+
+    // 학생들의 평균 점수를 계산하고 출력합니다.
+    let total_score: i32 = scores.values().sum();
+    let average_score: f64 = total_score as f64 / names.len() as f64;
+    println!("학생들의 평균 점수: {:.2}", average_score);
+}</code></pre> </div> </div>
             <div class="bottomnav">
-                <span class="back"><a href="chapter_5_ko.html" rel="prev">❮ 이전</a></span>
-                <span class="next"><a href="chapter_6_ko.html" rel="next">다음 ❯</a></span>
+                <span class="back"><a href="36_ko.html" rel="prev">❮ 이전</a></span>
+                <span class="next"><a href="chapter_4_ko.html" rel="next">다음 ❯</a></span>
+            </div>
             </div>
+            <div class="code">
+            <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=use+std%3A%3Acollections%3A%3AHashMap%3B%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++let+students+%3D+vec%21%5B%0D%0A++++++++%28%22%EA%B9%80%EC%B2%A0%EC%88%98%22%2C+80%29%2C%0D%0A++++++++%28%22%EC%9D%B4%EC%98%81%ED%9D%AC%22%2C+90%29%2C%0D%0A++++++++%28%22%EB%B0%95%EC%A7%80%EB%AF%BC%22%2C+85%29%2C%0D%0A++++++++%28%22%EC%B5%9C%EC%98%81%EC%88%98%22%2C+95%29%2C%0D%0A++++%5D%3B%0D%0A%0D%0A++++let+mut+names+%3D+Vec%3A%3Anew%28%29%3B%0D%0A++++let+mut+scores+%3D+HashMap%3A%3Anew%28%29%3B%0D%0A%0D%0A++++for+%28name%2C+score%29+in+students+%7B%0D%0A++++++++%2F%2F+TODO+1%3A+%EC%9D%B4%EB%A6%84+%EB%AA%A9%EB%A1%9D+Vec%EC%97%90+%ED%95%99%EC%83%9D+%EC%9D%B4%EB%A6%84%EC%9D%84+%EC%B6%94%EA%B0%80%ED%95%98%EC%84%B8%EC%9A%94.%0D%0A++++++++%2F%2F+%EC%B1%84%EC%9B%8C%EB%B3%B4%EC%84%B8%EC%9A%94.%0D%0A%0D%0A++++++++%2F%2F+TODO+2%3A+%EC%9D%B4%EB%A6%84%EA%B3%BC+%EC%A0%90%EC%88%98%EB%A5%BC+HashMap%EC%97%90+%EC%A0%80%EC%9E%A5%ED%95%98%EC%84%B8%EC%9A%94.%0D%0A++++++++%2F%2F+%EC%B1%84%EC%9B%8C%EB%B3%B4%EC%84%B8%EC%9A%94.%0D%0A++++%7D%0D%0A%0D%0A++++%2F%2F+TODO+3%3A+%ED%95%99%EC%83%9D%EB%93%A4%EC%9D%98+%ED%8F%89%EA%B7%A0+%EC%A0%90%EC%88%98%EB%A5%BC+%EA%B3%84%EC%82%B0%ED%95%98%EA%B3%A0+%EC%B6%9C%EB%A0%A5%ED%95%98%EC%84%B8%EC%9A%94.%0D%0A++++%2F%2F+%EC%B1%84%EC%9B%8C%EB%B3%B4%EC%84%B8%EC%9A%94.%0D%0A%7D%0D%0A" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals" title="Rust Playground" loading="lazy"></iframe>
             </div>
-            <div class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div>
         </div>
         <script>
         var pres = document.querySelectorAll("pre>code");
diff --git a/docs/39_ko.html b/docs/39_ko.html
index f42220be22b0afbee8813d5dd5aa84fbc9423c11..9b74448be62c7071e149679e56a732081103178f 100644
--- a/docs/39_ko.html
+++ b/docs/39_ko.html
@@ -35,11 +35,96 @@
                 <span class="toc"><a href="TOC_ko.html">목차</a></span>
             </div>
             <div class="page">
-            <h1>Hey</h1>
-            <p>CSW</p>
+            <h1>동시성(Concurrency)</h1>
+            <h2 id="a">a. 동시성의 개념 및 중요성</h2>
+<p>동시성(Concurrency)은 여러 작업이 동시에 실행되는 것처럼 보이게 만드는 프로그래밍 기법입니다.</p>
+<p>동시성을 사용하면 애플리케이션의 성능을 향상시킬 수 있으며, 멀티코어 프로세서와 같은 병렬 컴퓨팅 기술을 최대한 활용할 수 있습니다.</p>
+<p>Rust는 동시성 문제를 안전하게 다루기 위한 독특한 기능을 제공하며,</p>
+<p>이러한 기능 덕분에 데이터 경쟁이나 교착 상태와 같은 동시성 문제가 발생할 가능성을 줄일 수 있습니다.</p>
+<h2 id="bthread">b. 스레드(Thread) 사용하기</h2>
+<p>스레드는 프로세스 내에서 실행되는 독립적인 작업 단위입니다.</p>
+<p>Rust에서 스레드를 생성하고 관리하려면 <code>std::thread</code> 모듈을 사용합니다.</p>
+<pre><code class="rust">use std::thread;
+use std::time::Duration;
+
+fn main() {
+    let handle = thread::spawn(|| {
+        for i in 1..10 {
+            println!("스레드에서: {}", i);
+            thread::sleep(Duration::from_millis(1));
+        }
+    });
+
+    for i in 1..5 {
+        println!("메인 스레드에서: {}", i);
+        thread::sleep(Duration::from_millis(1));
+    }
+
+    handle.join().unwrap();
+}</code></pre>
+<h2 id="cchannels">c. 채널(Channels)을 사용한 통신</h2>
+<p>채널은 스레드 간에 메시지를 전달하는 동기화 primitive입니다.</p>
+<p>Rust에서는 <code>std::sync::mpsc</code>(multiple producer, single consumer) 모듈을 사용하여 채널을 구현할 수 있습니다.</p>
+<pre><code class="rust">use std::sync::mpsc;
+use std::thread;
+
+fn main() {
+    let (tx, rx) = mpsc::channel();
+
+    thread::spawn(move || {
+        let val = String::from("안녕하세요");
+        tx.send(val).unwrap();
+    });
+
+    let received = rx.recv().unwrap();
+    println!("수신: {}", received);
+}</code></pre>
+<h2 id="dmutex">d. 뮤텍스(Mutex) 및 동기화 프리미티브</h2>
+<p>뮤텍스(Mutex)는 한 번에 하나의 스레드만 데이터에 접근할 수 있도록 하는 동기화 프리미티브입니다.</p>
+<p>Rust에서 뮤텍스를 사용하려면 <code>std::sync::Mutex</code>를 사용합니다.</p>
+<pre><code class="rust">use std::sync::{Arc, Mutex};
+use std::thread;
+
+fn main() {
+    let counter = Arc::new(Mutex::new(0::new()));
+    let mut handles = vec![];
+    for _ in 0..10 {
+    let counter = Arc::clone(&counter);
+    let handle = thread::spawn(move || {
+          let mut num = counter.lock().unwrap();
+          *num += 1;
+      });
+      handles.push(handle);
+    }
+
+    for handle in handles {
+        handle.join().unwrap();
+    }
+
+    println!("결과: {}", *counter.lock().unwrap());
+}</code></pre>
+<h2 id="easyncawait">e. 비동기 프로그래밍 및 async/await</h2>
+<p>비동기 프로그래밍은 동시에 실행되어야 하는 작업을 더 효율적으로 관리할 수 있도록 합니다.</p>
+<p>Rust에서는 <code>async</code>와 <code>await</code> 키워드를 사용하여 비동기 코드를 작성할 수 있습니다.</p>
+<pre><code class="rust">use futures::executor::block_on;
+
+async fn hello_world() {
+    println!("안녕, 비동기 세계!");
+}
+
+fn main() {
+    let future = hello_world(); // async 함수는 호출되면 Future를 반환합니다.
+    block_on(future); // 비동기 함수를 실행하기 위해 블로킹 실행기 사용
+}</code></pre>
+<p>비동기 프로그래밍에서 주요한 것은 비동기 함수와 Future, 실행기(executor) 등의 개념입니다.</p>
+<p>비동기 함수는 async fn으로 정의되며, Future를 반환합니다.</p>
+<p>Future는 실행 결과를 나타내는 값으로, 실행기를 사용하여 평가할 수 있습니다.</p>
+<p>이를 통해 동시에 실행되어야 하는 작업을 효율적으로 관리할 수 있습니다.</p>
+<p>Rust에서는 주로 <code>tokio</code>라는 라이브러를 사용하여 async를 좀 더 쉽게 사용하고 더 많은 기능을 제공 받습니다.</p>
+<p>tokio를 공부하고 싶으신 분들은 <a href="https://tokio.rs/" target="_blank" rel="noopener">@여기</a>를 참고하세요.</p>
             <div class="bottomnav">
-                <span class="back"><a href="chapter_6_ko.html" rel="prev">❮ 이전</a></span>
-                <span class="next"><a href="chapter_7_ko.html" rel="next">다음 ❯</a></span>
+                <span class="back"><a href="chapter_4_ko.html" rel="prev">❮ 이전</a></span>
+                <span class="next"><a href="40_ko.html" rel="next">다음 ❯</a></span>
             </div>
             </div>
             <div class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div>
diff --git a/docs/40_ko.html b/docs/40_ko.html
index f0e69938a98b916ca6af80045f924b2b17bdcd9b..ea18f1cbb2b1bdca72e35c96dec8f5cd4d559e77 100644
--- a/docs/40_ko.html
+++ b/docs/40_ko.html
@@ -35,14 +35,107 @@
                 <span class="toc"><a href="TOC_ko.html">목차</a></span>
             </div>
             <div class="page">
-            <h1>Hey</h1>
-            <p>CSW</p>
+            <h1>매크로(Macros)</h1>
+            <p>Rust의 매크로 시스템은 코드를 생성하고 추상화하는 강력한 방법을 제공합니다.</p>
+<h2 id="a">a. 매크로의 개념 및 사용 사례</h2>
+<p>매크로는 코드를 생성하거나 특정 패턴에 따라 코드를 변형하는 데 사용되는 메타 프로그래밍 기술입니다.</p>
+<p>Rust에서는 매크로를 사용하여 코드 중복을 줄이고, 가독성을 향상시키며, 유연한 추상화를 구현할 수 있습니다.</p>
+<p>매크로는 주로 컴파일 시간에 코드를 생성하거나 수정하는 작업에 사용됩니다. (ex. <code>println!</code>)</p>
+<h2 id="bdeclarativemacros">b. 선언형 매크로(Declarative Macros) 생성하기</h2>
+<p>선언형 매크로는 매크로 규칙을 사용하여 코드를 생성하는 매크로입니다.</p>
+<p><code>macro_rules!</code> 키워드를 사용하여 선언형 매크로를 정의할 수 있습니다.</p>
+<pre><code class="rust">macro_rules! vec {
+    ( $( $x:expr ),* ) => {
+        {
+            let mut temp_vec = Vec::new();
+            $(
+                temp_vec.push($x);
+            )*
+            temp_vec
+        }
+    };
+}
+
+fn main() {
+    let v = vec![1, 2, 3];
+    println!("v: {:?}", v);
+}</code></pre>
+<h2 id="cproceduralmacros">c. 프로시저 매크로(Procedural Macros) 생성하기</h2>
+<p>프로시저 매크로는 Rust의 컴파일러에 플러그인으로 동작하는 함수입니다.</p>
+<p>프로시저 매크로는 주로 속성(attribute)에 사용되며, 소스 코드를 받아 변형된 소스 코드를 반환합니다.</p>
+<p>프로시저 매크로를 정의하려면 <code>proc_macro</code> 라이브러리를 사용하고, 별도의 크레이트로 구성해야 합니다.</p>
+<pre><code class="rust">// 프로시저 매크로를 정의하는 크레이트입니다.
+use proc_macro::TokenStream;
+use quote::quote;
+use syn::{parse_macro_input, DeriveInput};
+
+#[proc_macro_derive(HelloMacro)]
+pub fn hello_macro_derive(input: TokenStream) -> TokenStream {
+    let ast = parse_macro_input!(input as DeriveInput);
+    let name = &ast.ident;
+    let gen = quote! {
+        impl HelloMacro for #name {
+            fn hello_macro() {
+                println!("안녕하세요, 여기는 {}입니다.", stringify!(#name));
+            }
+        }
+    };
+    gen.into()
+}</code></pre>
+<pre><code class="rust">// 프로시저 매크로를 사용하는 크레이트입니다.
+use hello_macro::HelloMacro;
+use hello_macro_derive::HelloMacro;
+
+#[derive(HelloMacro)]
+struct Pancakes;
+
+fn main() {
+    Pancakes::hello_macro();
+}</code></pre>
+<h2 id="d">d. 매크로 규칙 및 패턴 매칭</h2>
+<p>Rust의 매크로는 패턴 매칭을 통해 매개 변수를 추출하고, 규칙에 따라 코드를 생성합니다.</p>
+<p>매크로에서 패턴 매칭을 사용하려면 다음 구문을 사용합니다.</p>
+<ul>
+<li><code>$name:expr</code>: 표현식(Expressions) 매치</li>
+<li><code>$name:ident</code>: 식별자(Identifiers) 매치</li>
+<li><code>$name:ty</code>: 타입(Types) 매치</li>
+<li><code>$name:pat</code>: 패턴(Patterns) 매치</li>
+<li><code>$name:stmt</code>: 문장(Statements) 매치</li>
+<li><code>$name:block</code>: 블록(Blocks) 매치</li>
+<li><code>$name:meta</code>: 메타 데이터(Meta-data) 매치</li>
+<li><code>$name:tt</code>: 토큰 트리(Token Tree) 매치</li>
+<li><code>$name:item</code>: 항목(Items) 매치</li>
+</ul>
+<p>또한, 매크로에서 사용할 수 있는 반복자 구문도 있습니다.</p>
+<ul>
+<li><code>$(...)*</code>: 0회 이상 반복</li>
+<li><code>$(...)+</code>: 1회 이상 반복</li>
+</ul>
+<pre><code class="rust">macro_rules! create_function {
+    ($func_name:ident) => (
+        fn $func_name() {
+            println!("함수 {}가 호출되었습니다.", stringify!($func_name));
+        }
+    );
+}
+
+create_function!(foo);
+create_function!(bar);
+
+fn main() {
+    foo();
+    bar();
+}</code></pre>
+<p>이렇게 매크로를 사용하여 코드 생성 및 추상화를 구현하면, 유연한 프로그래밍을 할 수 있고, 가독성 및 유지보수성을 높일 수 있습니다.</p>
+<p>매크로의 핵심은 패턴 매칭과 규칙을 통해 코드를 재사용하고, 확장성을 높이는 것입니다.</p>
             <div class="bottomnav">
-                <span class="back"><a href="chapter_7_ko.html" rel="prev">❮ 이전</a></span>
-                
+                <span class="back"><a href="39_ko.html" rel="prev">❮ 이전</a></span>
+                <span class="next"><a href="41_ko.html" rel="next">다음 ❯</a></span>
+            </div>
             </div>
+            <div class="code">
+            <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=macro_rules%21+times+%7B%0D%0A++++%28%24num%3Aexpr%2C+%24body%3Ablock%29+%3D%3E+%7B%0D%0A++++++++times%21%28None%2C+%24num%2C+%24body%29%3B%0D%0A++++%7D%3B%0D%0A++++%28%24label%3Aexpr%2C+%24num%3Aexpr%2C+%24body%3Ablock%29+%3D%3E+%7B%0D%0A++++++++if+let+Some%28label%29+%3D+%24label+%7B%0D%0A++++++++++++println%21%28%22Task%3A+%7B%7D%22%2C+label%29%3B%0D%0A++++++++%7D%0D%0A%0D%0A++++++++let+mut+total_time+%3D+std%3A%3Atime%3A%3ADuration%3A%3Anew%280%2C+0%29%3B%0D%0A++++++++let+mut+min_time+%3D+std%3A%3Atime%3A%3ADuration%3A%3Afrom_secs%28u64%3A%3AMAX%29%3B%0D%0A++++++++let+mut+max_time+%3D+std%3A%3Atime%3A%3ADuration%3A%3Afrom_secs%280%29%3B%0D%0A%0D%0A++++++++for+_+in+0..%24num+%7B%0D%0A++++++++++++let+start_time+%3D+std%3A%3Atime%3A%3AInstant%3A%3Anow%28%29%3B%0D%0A++++++++++++%24body%0D%0A++++++++++++let+elapsed+%3D+start_time.elapsed%28%29%3B%0D%0A++++++++++++total_time+%2B%3D+elapsed%3B%0D%0A++++++++++++min_time+%3D+min_time.min%28elapsed%29%3B%0D%0A++++++++++++max_time+%3D+max_time.max%28elapsed%29%3B%0D%0A++++++++++++println%21%28%0D%0A++++++++++++++++%22Execution+time+for+iteration%3A+%7B%7D+ms%22%2C%0D%0A++++++++++++++++elapsed.as_millis%28%29%0D%0A++++++++++++%29%3B%0D%0A++++++++%7D%0D%0A%0D%0A++++++++let+avg_time+%3D+total_time+%2F+%24num%3B%0D%0A++++++++println%21%28%22Average+execution+time%3A+%7B%7D+ms%22%2C+avg_time.as_millis%28%29%29%3B%0D%0A++++++++println%21%28%22Minimum+execution+time%3A+%7B%7D+ms%22%2C+min_time.as_millis%28%29%29%3B%0D%0A++++++++println%21%28%22Maximum+execution+time%3A+%7B%7D+ms%22%2C+max_time.as_millis%28%29%29%3B%0D%0A++++%7D%3B%0D%0A%7D%0D%0A%0D%0Afn+is_prime%28n%3A+u64%29+-%3E+bool+%7B%0D%0A++++if+n+%3C%3D+1+%7B%0D%0A++++++++return+false%3B%0D%0A++++%7D%0D%0A++++for+i+in+2..%3D%28%28n+as+f64%29.sqrt%28%29+as+u64%29+%7B%0D%0A++++++++if+n+%25+i+%3D%3D+0+%7B%0D%0A++++++++++++return+false%3B%0D%0A++++++++%7D%0D%0A++++%7D%0D%0A++++true%0D%0A%7D%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++times%21%28Some%28%22Prime+number+summation%22%29%2C+3%2C+%7B%0D%0A++++++++let+mut+sum+%3D+0u64%3B%0D%0A++++++++let+mut+num+%3D+2u64%3B%0D%0A++++++++let+mut+counter+%3D+0%3B%0D%0A%0D%0A++++++++while+counter+%3C+10_000+%7B%0D%0A++++++++++++if+is_prime%28num%29+%7B%0D%0A++++++++++++++++sum+%2B%3D+num%3B%0D%0A++++++++++++++++counter+%2B%3D+1%3B%0D%0A++++++++++++%7D%0D%0A++++++++++++num+%2B%3D+1%3B%0D%0A++++++++%7D%0D%0A++++++++println%21%28%22Sum+of+first+10%2C000+prime+numbers%3A+%7B%7D%22%2C+sum%29%3B%0D%0A++++%7D%29%3B%0D%0A%7D" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals" title="Rust Playground" loading="lazy"></iframe>
             </div>
-            <div class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div>
         </div>
         <script>
         var pres = document.querySelectorAll("pre>code");
diff --git a/docs/41_ko.html b/docs/41_ko.html
index f0e69938a98b916ca6af80045f924b2b17bdcd9b..3387a9974b836b79725a9ddee4aeae6653d3e8e9 100644
--- a/docs/41_ko.html
+++ b/docs/41_ko.html
@@ -35,14 +35,65 @@
                 <span class="toc"><a href="TOC_ko.html">목차</a></span>
             </div>
             <div class="page">
-            <h1>Hey</h1>
-            <p>CSW</p>
+            <h1>unsafe 코드</h1>
+            <p>Rust는 기본적으로 안전한 프로그래밍을 위한 다양한 기능을 제공합니다.</p>
+<p>하지만, 때로는 안전성을 포기하고, 저수준의 시스템 작업을 수행해야 하는 경우가 있습니다.</p>
+<p>이 때 <code>unsafe</code> 키워드를 사용합니다.</p>
+<h2 id="aunsafe">a. unsafe의 개념 및 필요성</h2>
+<p><code>unsafe</code>는 Rust 컴파일러가 안전성을 보장할 수 없는 코드를 표시하는 키워드입니다.</p>
+<p>이를 사용하면 Rust의 안전성 검사를 우회하고, 저수준의 시스템 작업을 수행할 수 있습니다.</p>
+<p>주로 외부 함수, 원시 포인터, 정적 변수에 접근하는 등의 작업에 사용됩니다.</p>
+<h2 id="bunsafe">b. unsafe 함수 및 메서드</h2>
+<p><code>unsafe</code> 키워드를 사용하여 함수와 메서드를 정의할 수 있습니다.</p>
+<p>이를 사용하면 안전하지 않은 작업을 수행할 수 있습니다.</p>
+<p>호출하는 쪽에서도 <code>unsafe</code> 블록 내에서 호출해야 합니다.</p>
+<pre><code class="rust">unsafe fn dangerous_function() {
+    // 안전하지 않은 작업 수행
+}
+
+fn main() {
+    unsafe {
+        dangerous_function();
+    }
+}</code></pre>
+<h2 id="crawpointers">c. 원시 포인터(Raw Pointers) 사용하기</h2>
+<p>원시 포인터는 메모리 주소를 직접 가리키는 포인터로, Rust의 안전성을 보장하지 않습니다.</p>
+<p><code>*const T</code>와 <code>*mut T</code> 형식으로 사용할 수 있습니다.</p>
+<p>원시 포인터는 <code>unsafe</code> 블록 내에서 사용해야 합니다.</p>
+<pre><code class="rust">fn main() {
+    let mut num = 5;
+    let r1 = &num as *const i32;
+    let r2 = &mut num as *mut i32;
+
+    unsafe {
+        println!("r1 가리키는 값: {}", *r1);
+        println!("r2 가리키는 값: {}", *r2);
+    }
+}</code></pre>
+<h2 id="dffiforeignfunctioninterface">d. 외부 함수 및 FFI(Foreign Function Interface) 사용하기</h2>
+<p>외부 함수는 다른 프로그래밍 언어로 작성된 함수를 Rust에서 호출할 수 있도록 해주는 인터페이스입니다.</p>
+<p>외부 함수를 사용하려면 <code>extern</code> 키워드와 <code>unsafe</code>를 사용해야 합니다.</p>
+<pre><code class="rust">// C 언어의 함수를 호출하는 예시
+extern "C" {
+    fn abs(input: i32) -> i32;
+}
+
+fn main() {
+    let x = -3;
+    let result = unsafe { abs(x) };
+    println!("{}의 절댓값은 {}입니다.", x, result);
+}</code></pre>
+<p>이렇게 <code>unsafe</code>를 사용하여 Rust의 안전성 검사를 우회할 수 있습니다.</p>
+<p>하지만 가능한 한 <code>unsafe</code>를 사용하지 않고, 안전한 코드를 작성하는 것이 좋습니다.</p>
+<p>정말 필요한 경우에만 사용하고, 주의해서 사용해야 합니다.</p>
             <div class="bottomnav">
-                <span class="back"><a href="chapter_7_ko.html" rel="prev">❮ 이전</a></span>
-                
+                <span class="back"><a href="40_ko.html" rel="prev">❮ 이전</a></span>
+                <span class="next"><a href="42_ko.html" rel="next">다음 ❯</a></span>
+            </div>
             </div>
+            <div class="code">
+            <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=fn+main%28%29+%7B%0A++++let+mut+vec1+%3D+vec%21%5B1%2C+2%2C+3%5D%3B%0A++++let+mut+vec2+%3D+vec%21%5B4%2C+5%2C+6%5D%3B%0A%0A++++println%21%28%22%EA%B5%90%ED%99%98+%EC%A0%84%3A+vec1+%3D+%7B%3A%3F%7D%2C+vec2+%3D+%7B%3A%3F%7D%22%2C+vec1%2C+vec2%29%3B%0A%0A++++unsafe+%7B%0A++++++++unsafe_swap%28%26mut+vec1%2C+%26mut+vec2%29%3B%0A++++%7D%0A%0A++++println%21%28%22%EA%B5%90%ED%99%98+%ED%9B%84%3A+vec1+%3D+%7B%3A%3F%7D%2C+vec2+%3D+%7B%3A%3F%7D%22%2C+vec1%2C+vec2%29%3B%0A%7D%0A%0A%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EB%82%B4%EB%B6%80+%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC+%EC%A7%81%EC%A0%91+%EA%B5%90%ED%99%98%ED%95%98%EA%B8%B0+%EC%9C%84%ED%95%B4+%EC%9B%90%EC%8B%9C+%ED%8F%AC%EC%9D%B8%ED%84%B0%EC%99%80+unsafe%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94+%ED%95%A8%EC%88%98%0Aunsafe+fn+unsafe_swap%28vec1%3A+%26mut+%5Bi32%5D%2C+vec2%3A+%26mut+%5Bi32%5D%29+%7B%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EA%B8%B8%EC%9D%B4%EA%B0%80+%EA%B0%99%EC%9D%80%EC%A7%80+%ED%99%95%EC%9D%B8%0A++++assert_eq%21%28vec1.len%28%29%2C+vec2.len%28%29%29%3B%0A%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EB%82%B4%EB%B6%80+%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%97%90+%EC%A0%91%EA%B7%BC%ED%95%98%EA%B8%B0+%EC%9C%84%ED%95%B4+%EC%9B%90%EC%8B%9C+%ED%8F%AC%EC%9D%B8%ED%84%B0%EB%A5%BC+%EC%83%9D%EC%84%B1%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++let+ptr1+%3D+vec1.as_mut_ptr%28%29%3B%0A++++let+ptr2+%3D+vec2.as_mut_ptr%28%29%3B%0A%0A++++%2F%2F+%EC%9B%90%EC%8B%9C+%ED%8F%AC%EC%9D%B8%ED%84%B0%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC+%EB%B2%A1%ED%84%B0%EC%9D%98+%EC%9B%90%EC%86%8C%EB%A5%BC+%EA%B5%90%ED%99%98%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++for+i+in+0..vec1.len%28%29+%7B%0A++++++++%2F%2F+%EC%9B%90%EC%8B%9C+%ED%8F%AC%EC%9D%B8%ED%84%B0%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94+%EC%97%B0%EC%82%B0%EC%9D%80+unsafe+%EB%B8%94%EB%A1%9D+%EB%82%B4%EC%97%90%EC%84%9C+%EC%88%98%ED%96%89%ED%95%B4%EC%95%BC+%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++++++let+temp+%3D+*ptr1.add%28i%29%3B%0A++++++++*ptr1.add%28i%29+%3D+*ptr2.add%28i%29%3B%0A++++++++*ptr2.add%28i%29+%3D+temp%3B%0A++++%7D%0A%7D%0A" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals" title="Rust Playground" loading="lazy"></iframe>
             </div>
-            <div class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div>
         </div>
         <script>
         var pres = document.querySelectorAll("pre>code");
diff --git a/docs/42_ko.html b/docs/42_ko.html
new file mode 100644
index 0000000000000000000000000000000000000000..7504a17319614348df291a3412a34109785aadc7
--- /dev/null
+++ b/docs/42_ko.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html>
+    <html lang="ko">
+    <head>
+        <title>Rust 튜토리얼 - 자기주도프로젝트</title>
+
+        <meta charset="UTF-8">
+        <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
+        <meta content="utf-8" http-equiv="encoding">
+        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
+        <meta name="keywords" content="Rust, Programming, Learning">
+        <meta name="description" content="Rust tutorial website based on tour_of_rust by 최석원">
+        <meta name="theme-color" content="#ff6801"/>
+        <meta http-equiv="Cache-Control" content="max-age=3600">
+        
+        <link rel="stylesheet" href="tour.css">
+        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/night-owl.min.css">
+        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.1/css/all.min.css">
+        
+        <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
+        <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
+        <link rel="/manifest" href="./site.webmanifest">
+        
+        <script src="//unpkg.com/@highlightjs/cdn-assets@11.7.0/highlight.min.js"></script>
+
+        <script src="./tour.js" defer></script>
+        <!-- <script>hljs.highlightAll();</script> -->
+        <script src="./highlight.badge.min.js"></script>
+    </head>
+    <body>
+        <div class="tour">
+            <div class="header">
+                <span class="title"><a href="index.html">Rust 튜토리얼</a></span>
+                <span class="nav">
+                <span class="toc"><a href="TOC_ko.html">목차</a></span>
+            </div>
+            <div class="page">
+            <h1>Chapter 4 - Conclusion</h1>
+            <p>다음은 여러분들이 unsafe와 macro를 사용하여 문제를 해결해 보는 고급 문제입니다.</p>
+<p>아래 주석을 참고하여 코드를 완성해보세요.</p>
+<p>문제 설명:<br />
+두 개의 Vec<i32> 벡터를 더하는 프로그램을 작성하세요.</p>
+<p>이때, 매크로를 사용하여 덧셈 작업을 수행하고, 벡터의 내부 데이터에 직접 접근하기 위해 unsafe를 사용하세요.</p>
+<ol>
+<li>매크로를 사용하여 두 벡터의 덧셈을 수행하는 함수를 작성하세요.</li>
+<li>unsafe를 사용하여 벡터의 내부 데이터에 접근하고 값을 더하세요.</li>
+</ol>
+<div> <button type="button" class="collapsible">정답 보기</button> <div class="content"> <p> <pre><code class="rust">// 매크로를 사용하여 두 벡터의 덧셈을 수행하는 함수를 작성합니다.
+macro_rules! add_vectors {
+    ($vec1:expr, $vec2:expr) => {
+        add_vectors_unsafe(&$vec1, &$vec2)
+    };
+}
+
+fn main() {
+    let vec1 = vec![1, 2, 3];
+    let vec2 = vec![4, 5, 6];
+    let result = add_vectors!(vec1, vec2);
+
+    println!("벡터 덧셈 결과: {:?}", result);
+}
+
+fn add_vectors_unsafe(vec1: &[i32], vec2: &[i32]) -> Vec&lt;i32> {
+    // 벡터의 길이가 같은지 확인합니다.
+    assert_eq!(vec1.len(), vec2.len());
+
+    let mut result = Vec::with_capacity(vec1.len());
+
+    // unsafe를 사용하여 벡터의 내부 데이터에 접근하고 값을 더합니다.
+    let ptr1 = vec1.as_ptr();
+    let ptr2 = vec2.as_ptr();
+    for i in 0..vec1.len() {
+        unsafe {
+            result.push(*ptr1.add(i) + *ptr2.add(i));
+        }
+    }
+
+    result
+}</code></pre> </div> </div>
+            <div class="bottomnav">
+                <span class="back"><a href="41_ko.html" rel="prev">❮ 이전</a></span>
+                <span class="next"><a href="chapter_5_ko.html" rel="next">다음 ❯</a></span>
+            </div>
+            </div>
+            <div class="code">
+            <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+TODO+1%3A+%EB%A7%A4%ED%81%AC%EB%A1%9C%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC+%EB%91%90+%EB%B2%A1%ED%84%B0%EC%9D%98+%EB%8D%A7%EC%85%88%EC%9D%84+%EC%88%98%ED%96%89%ED%95%98%EB%8A%94+%ED%95%A8%EC%88%98%EB%A5%BC+%EC%9E%91%EC%84%B1%ED%95%98%EC%84%B8%EC%9A%94.%0D%0A%2F%2F+%EC%B1%84%EC%9B%8C%EB%B3%B4%EC%84%B8%EC%9A%94.%0D%0Amacro_rules%21+...%0D%0A%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++let+vec1+%3D+vec%21%5B1%2C+2%2C+3%5D%3B%0D%0A++++let+vec2+%3D+vec%21%5B4%2C+5%2C+6%5D%3B%0D%0A++++let+result+%3D+add_vectors%21%28vec1%2C+vec2%29%3B%0D%0A%0D%0A++++println%21%28%22%EB%B2%A1%ED%84%B0+%EB%8D%A7%EC%85%88+%EA%B2%B0%EA%B3%BC%3A+%7B%3A%3F%7D%22%2C+result%29%3B%0D%0A%7D%0D%0A%0D%0A%0D%0Afn+add_vectors_unsafe%28vec1%3A+%26%5Bi32%5D%2C+vec2%3A+%26%5Bi32%5D%29+-%3E+Vec%3Ci32%3E+%7B%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EA%B8%B8%EC%9D%B4%EA%B0%80+%EA%B0%99%EC%9D%80%EC%A7%80+%ED%99%95%EC%9D%B8%ED%95%A9%EB%8B%88%EB%8B%A4.%0D%0A++++assert_eq%21%28vec1.len%28%29%2C+vec2.len%28%29%29%3B%0D%0A%0D%0A++++let+mut+result+%3D+Vec%3A%3Awith_capacity%28vec1.len%28%29%29%3B%0D%0A%0D%0A++++%2F%2F+TODO+2%3A+unsafe%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC+%EB%B2%A1%ED%84%B0%EC%9D%98+%EB%82%B4%EB%B6%80+%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%97%90+%EC%A0%91%EA%B7%BC%ED%95%98%EA%B3%A0+%EA%B0%92%EC%9D%84+%EB%8D%94%ED%95%98%EC%84%B8%EC%9A%94.%0D%0A++++%2F%2F+%EC%B1%84%EC%9B%8C%EB%B3%B4%EC%84%B8%EC%9A%94.%0D%0A%0D%0A++++result%0D%0A%7D%0D%0A" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals" title="Rust Playground" loading="lazy"></iframe>
+            </div>
+        </div>
+        <script>
+        var pres = document.querySelectorAll("pre>code");
+        for (var i = 0; i < pres.length; i++) {
+            hljs.highlightElement(pres[i]);
+        }
+        var options = {
+            loadDelay: 0,
+            copyIconClass: "far fa-clipboard",
+            checkIconClass: "fa fa-check text-success",
+            blogURL: "http://rust-study.ajousw.kr/"
+        };
+        window.highlightJsBadge(options);
+        </script>
+
+        <footer>
+          <p><a target="_blank" rel="noopener" href="https://www.youtube.com/c/SoftwareToolTime">아주대학교 Software Tool Time</a> - Rust 튜토리얼 (Basic)</p>
+        </footer>
+    </body>
+</html>
\ No newline at end of file
diff --git a/docs/44_ko.html b/docs/44_ko.html
new file mode 100644
index 0000000000000000000000000000000000000000..92162c6e6a2ea4e8c4d2fe1b833d92b61d67a4ca
--- /dev/null
+++ b/docs/44_ko.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+    <html lang="ko">
+    <head>
+        <title>Rust 튜토리얼 - 자기주도프로젝트</title>
+
+        <meta charset="UTF-8">
+        <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
+        <meta content="utf-8" http-equiv="encoding">
+        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
+        <meta name="keywords" content="Rust, Programming, Learning">
+        <meta name="description" content="Rust tutorial website based on tour_of_rust by 최석원">
+        <meta name="theme-color" content="#ff6801"/>
+        <meta http-equiv="Cache-Control" content="max-age=3600">
+        
+        <link rel="stylesheet" href="tour.css">
+        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/night-owl.min.css">
+        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.1/css/all.min.css">
+        
+        <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
+        <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
+        <link rel="/manifest" href="./site.webmanifest">
+        
+        <script src="//unpkg.com/@highlightjs/cdn-assets@11.7.0/highlight.min.js"></script>
+
+        <script src="./tour.js" defer></script>
+        <!-- <script>hljs.highlightAll();</script> -->
+        <script src="./highlight.badge.min.js"></script>
+    </head>
+    <body>
+        <div class="tour">
+            <div class="header">
+                <span class="title"><a href="index.html">Rust 튜토리얼</a></span>
+                <span class="nav">
+                <span class="toc"><a href="TOC_ko.html">목차</a></span>
+            </div>
+            <div class="page">
+            <h1>Hey</h1>
+            <p>CSW</p>
+            <div class="bottomnav">
+                <span class="back"><a href="chapter_5_ko.html" rel="prev">❮ 이전</a></span>
+                <span class="next"><a href="chapter_6_ko.html" rel="next">다음 ❯</a></span>
+            </div>
+            </div>
+            <div class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div>
+        </div>
+        <script>
+        var pres = document.querySelectorAll("pre>code");
+        for (var i = 0; i < pres.length; i++) {
+            hljs.highlightElement(pres[i]);
+        }
+        var options = {
+            loadDelay: 0,
+            copyIconClass: "far fa-clipboard",
+            checkIconClass: "fa fa-check text-success",
+            blogURL: "http://rust-study.ajousw.kr/"
+        };
+        window.highlightJsBadge(options);
+        </script>
+
+        <footer>
+          <p><a target="_blank" rel="noopener" href="https://www.youtube.com/c/SoftwareToolTime">아주대학교 Software Tool Time</a> - Rust 튜토리얼 (Basic)</p>
+        </footer>
+    </body>
+</html>
\ No newline at end of file
diff --git a/docs/46_ko.html b/docs/46_ko.html
new file mode 100644
index 0000000000000000000000000000000000000000..63ba0a75fcf6938fcb0d7db524f3a034c386e7bf
--- /dev/null
+++ b/docs/46_ko.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+    <html lang="ko">
+    <head>
+        <title>Rust 튜토리얼 - 자기주도프로젝트</title>
+
+        <meta charset="UTF-8">
+        <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
+        <meta content="utf-8" http-equiv="encoding">
+        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
+        <meta name="keywords" content="Rust, Programming, Learning">
+        <meta name="description" content="Rust tutorial website based on tour_of_rust by 최석원">
+        <meta name="theme-color" content="#ff6801"/>
+        <meta http-equiv="Cache-Control" content="max-age=3600">
+        
+        <link rel="stylesheet" href="tour.css">
+        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/night-owl.min.css">
+        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.1/css/all.min.css">
+        
+        <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
+        <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
+        <link rel="/manifest" href="./site.webmanifest">
+        
+        <script src="//unpkg.com/@highlightjs/cdn-assets@11.7.0/highlight.min.js"></script>
+
+        <script src="./tour.js" defer></script>
+        <!-- <script>hljs.highlightAll();</script> -->
+        <script src="./highlight.badge.min.js"></script>
+    </head>
+    <body>
+        <div class="tour">
+            <div class="header">
+                <span class="title"><a href="index.html">Rust 튜토리얼</a></span>
+                <span class="nav">
+                <span class="toc"><a href="TOC_ko.html">목차</a></span>
+            </div>
+            <div class="page">
+            <h1>Hey</h1>
+            <p>CSW</p>
+            <div class="bottomnav">
+                <span class="back"><a href="chapter_6_ko.html" rel="prev">❮ 이전</a></span>
+                
+            </div>
+            </div>
+            <div class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div>
+        </div>
+        <script>
+        var pres = document.querySelectorAll("pre>code");
+        for (var i = 0; i < pres.length; i++) {
+            hljs.highlightElement(pres[i]);
+        }
+        var options = {
+            loadDelay: 0,
+            copyIconClass: "far fa-clipboard",
+            checkIconClass: "fa fa-check text-success",
+            blogURL: "http://rust-study.ajousw.kr/"
+        };
+        window.highlightJsBadge(options);
+        </script>
+
+        <footer>
+          <p><a target="_blank" rel="noopener" href="https://www.youtube.com/c/SoftwareToolTime">아주대학교 Software Tool Time</a> - Rust 튜토리얼 (Basic)</p>
+        </footer>
+    </body>
+</html>
\ No newline at end of file
diff --git a/docs/TOC_ko.html b/docs/TOC_ko.html
index c12b814cb8a8968829172022bdb439ef1a130869..bb945aeb7e2b89eac9354309e3f99f5e2caaf9d0 100644
--- a/docs/TOC_ko.html
+++ b/docs/TOC_ko.html
@@ -68,17 +68,22 @@
 <li><a href="28_ko.html">라이프타임: 참조의 유효 기간 이해하기</a></li>
 <li><a href="29_ko.html">빌림 검사기</a></li>
 <li><a href="30_ko.html">Chapter 2 - Conclusion</a></li>
-</ul><h3><a href="chapter_3_ko.html">Chapter 3 - Generic, Trait</a></h3><ul>
-<li><a href="32_ko.html">Hey</a></li>
+</ul><h3><a href="chapter_3_ko.html">Chapter 3 - Collections and Iterators</a></h3><ul>
+<li><a href="32_ko.html">주요 컬렉션 타입 소개</a></li>
+<li><a href="33_ko.html">벡터(Vector)</a></li>
+<li><a href="34_ko.html">벡터의 반복자(Iterators)</a></li>
+<li><a href="35_ko.html">해시맵(HashMap)</a></li>
+<li><a href="36_ko.html">이터레이터(Iterators) 소개</a></li>
+<li><a href="37_ko.html">Chapter 3 - Conclusion</a></li>
 </ul><h3><a href="chapter_4_ko.html">Chapter 4 - Advanced</a></h3><ul>
-<li><a href="34_ko.html">Hey</a></li>
-<li><a href="35_ko.html">Hey</a></li>
-</ul><h3><a href="chapter_5_ko.html">Chapter 5 - Module</a></h3><ul>
-<li><a href="37_ko.html">Hey</a></li>
-</ul><h3><a href="chapter_6_ko.html">Chapter 6 - Web Framework</a></h3><ul>
-<li><a href="39_ko.html">Hey</a></li>
-</ul><h3><a href="chapter_7_ko.html">부록 - 코드 답안</a></h3><ul>
-<li><a href="41_ko.html">Hey</a></li>
+<li><a href="39_ko.html">동시성(Concurrency)</a></li>
+<li><a href="40_ko.html">매크로(Macros)</a></li>
+<li><a href="41_ko.html">unsafe 코드</a></li>
+<li><a href="42_ko.html">Chapter 4 - Conclusion</a></li>
+</ul><h3><a href="chapter_5_ko.html">Chapter 5 - Cargo</a></h3><ul>
+<li><a href="44_ko.html">Hey</a></li>
+</ul><h3><a href="chapter_6_ko.html">Chapter 6 - 웹 서버</a></h3><ul>
+<li><a href="46_ko.html">Hey</a></li>
             </ul>
             </div>
             <div style="display: flex;flex-direction: column;justify-content: center;align-items: center;">
diff --git a/docs/chapter_3_ko.html b/docs/chapter_3_ko.html
index 92d609622bb187895e60b5047d36ce22ea8bca81..6ba0a77abbb3dd950be93d6e5fff95949e43e983 100644
--- a/docs/chapter_3_ko.html
+++ b/docs/chapter_3_ko.html
@@ -35,14 +35,27 @@
                 <span class="toc"><a href="TOC_ko.html">목차</a></span>
             </div>
             <div class="page">
-            <h1>Chapter 3 - Generic, Trait</h1>
-            <p>OOP</p>
+            <h1>Chapter 3 - Collections and Iterators</h1>
+            <h1 id="">컬렉션과 그 중요성</h1>
+<p>컬렉션은 여러 요소를 그룹화하여 저장하고 관리할 수 있는 프로그래밍 구조입니다.</p>
+<p>이러한 컬렉션은 데이터를 조직화하고, 검색, 추가 및 제거와 같은 다양한 작업을 수행할 수 있도록 돕습니다.</p>
+<p>러스트에서는 주로 벡터(Vector), 문자열(String) 및 해시맵(HashMap)과 같은 컬렉션을 사용합니다.</p>
+<h2 id="-1">컬렉션의 중요성</h2>
+<p>프로그래밍에서 컬렉션은 다음과 같은 이유로 중요합니다.</p>
+<ol>
+<li><strong>데이터 조직화</strong>: 컬렉션을 사용하면 개별 변수를 사용하는 것보다 데이터를 보다 효율적으로 저장하고 관리할 수 있습니다.</li>
+<li><strong>확장성</strong>: 컬렉션은 데이터를 동적으로 추가하거나 제거할 수 있어 프로그램의 유연성을 높입니다.</li>
+<li><strong>검색 및 필터링</strong>: 컬렉션은 데이터를 쉽게 검색, 정렬 및 필터링할 수 있도록 지원합니다.</li>
+<li><strong>성능 최적화</strong>: 러스트의 컬렉션은 메모리 접근 및 할당을 효율적으로 관리하여 성능을 향상시킵니다.</li>
+</ol>
+<p>이러한 이유로 컬렉션은 프로그래밍에서 핵심 요소로 간주되며, 러스트에서는 이를 효과적으로 활용할 수 있는 다양한 컬렉션 타입을 제공합니다.</p>
+<p>이 챕터에서는 러스트의 주요 컬렉션 타입에 대해 알아보겠습니다.</p>
             <div class="bottomnav">
                 <span class="back"><a href="30_ko.html" rel="prev">❮ 이전</a></span>
                 <span class="next"><a href="32_ko.html" rel="next">다음 ❯</a></span>
             </div>
             </div>
-            <div class="code"><center><img src="/ajou.webp" alt="Rust Tutorial" width="300" height="100%"></center></div>
+            <div class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div>
         </div>
         <script>
         var pres = document.querySelectorAll("pre>code");
diff --git a/docs/chapter_4_ko.html b/docs/chapter_4_ko.html
index 2ef530ac88d54e946fe1264dd17b4645a6126b37..ba320a37c3d417157f750a5c3d89742675cc626f 100644
--- a/docs/chapter_4_ko.html
+++ b/docs/chapter_4_ko.html
@@ -36,10 +36,31 @@
             </div>
             <div class="page">
             <h1>Chapter 4 - Advanced</h1>
-            <p>Concurrency, Macro, Unsafe</p>
+            <h1 id="rust">Rust 고급 주제: 강좌 개요</h1>
+<p>이 장에서는 Rust의 고급 주제에 대해 다룹니다.</p>
+<p>동시성, <code>unsafe</code>, 매크로와 같은 Rust 고급 구문에 대해 배웁니다.</p>
+<h2 id="1concurrency">1. 동시성(Concurrency)</h2>
+<p>Rust는 동시성 문제를 안전하게 다루기 위한 독특한 기능을 제공합니다.</p>
+<p>a. 동시성의 개념 및 중요성<br />
+b. 스레드(Thread) 사용하기<br />
+c. 채널(Channels)을 사용한 통신<br />
+d. 뮤텍스(Mutex) 및 동기화 프리미티브<br />
+e. 비동기 프로그래밍 및 <code>async</code>/<code>await</code></p>
+<h2 id="2unsafe">2. <code>unsafe</code> 코드</h2>
+<p>Rust의 안전성 보장을 어기는 경우에는 <code>unsafe</code> 블록을 사용해야 합니다.</p>
+<p>a. <code>unsafe</code>의 개념 및 필요성<br />
+b. <code>unsafe</code> 함수 및 메서드<br />
+c. 원시 포인터(Raw Pointers) 사용하기<br />
+d. 외부 함수 및 FFI(Foreign Function Interface) 사용하기</p>
+<h2 id="3macros">3. 매크로(Macros)</h2>
+<p>Rust의 매크로 시스템은 코드를 생성하고 추상화하는 강력한 방법을 제공합니다.</p>
+<p>a. 매크로의 개념 및 사용 사례<br />
+b. 선언형 매크로(Declarative Macros) 생성하기<br />
+c. 프로시저 매크로(Procedural Macros) 생성하기<br />
+d. 매크로 규칙 및 패턴 매칭</p>
             <div class="bottomnav">
-                <span class="back"><a href="32_ko.html" rel="prev">❮ 이전</a></span>
-                <span class="next"><a href="34_ko.html" rel="next">다음 ❯</a></span>
+                <span class="back"><a href="37_ko.html" rel="prev">❮ 이전</a></span>
+                <span class="next"><a href="39_ko.html" rel="next">다음 ❯</a></span>
             </div>
             </div>
             <div class="code"><center><img src="/ajou.webp" alt="Rust Tutorial" width="300" height="100%"></center></div>
diff --git a/docs/chapter_5_ko.html b/docs/chapter_5_ko.html
index 7b04194b5db1fa0c4f3e5d9a7b6e13efb78e1d61..66bfafaed42b89d44bc721f6a66cb67d62e40d73 100644
--- a/docs/chapter_5_ko.html
+++ b/docs/chapter_5_ko.html
@@ -35,12 +35,12 @@
                 <span class="toc"><a href="TOC_ko.html">목차</a></span>
             </div>
             <div class="page">
-            <h1>Chapter 5 - Module</h1>
+            <h1>Chapter 5 - Cargo</h1>
             <p>모듈 사용</p>
 <p>간단한 모듈 제작 및 업로드</p>
             <div class="bottomnav">
-                <span class="back"><a href="35_ko.html" rel="prev">❮ 이전</a></span>
-                <span class="next"><a href="37_ko.html" rel="next">다음 ❯</a></span>
+                <span class="back"><a href="42_ko.html" rel="prev">❮ 이전</a></span>
+                <span class="next"><a href="44_ko.html" rel="next">다음 ❯</a></span>
             </div>
             </div>
             <div class="code"><center><img src="/ajou.webp" alt="Rust Tutorial" width="300" height="100%"></center></div>
diff --git a/docs/chapter_6_ko.html b/docs/chapter_6_ko.html
index 86fae590bf72dcebf203522c8a41c1a9ed41c593..ea552e48388d52968cf86a0bd83e8fbb80c7416e 100644
--- a/docs/chapter_6_ko.html
+++ b/docs/chapter_6_ko.html
@@ -35,12 +35,12 @@
                 <span class="toc"><a href="TOC_ko.html">목차</a></span>
             </div>
             <div class="page">
-            <h1>Chapter 6 - Web Framework</h1>
+            <h1>Chapter 6 - 웹 서버</h1>
             <p>웹 프레임워크 actix-rs 소개</p>
 <p>간단 카카오톡 챗봇 제작</p>
             <div class="bottomnav">
-                <span class="back"><a href="37_ko.html" rel="prev">❮ 이전</a></span>
-                <span class="next"><a href="39_ko.html" rel="next">다음 ❯</a></span>
+                <span class="back"><a href="44_ko.html" rel="prev">❮ 이전</a></span>
+                <span class="next"><a href="46_ko.html" rel="next">다음 ❯</a></span>
             </div>
             </div>
             <div class="code"><center><img src="/ajou.webp" alt="Rust Tutorial" width="300" height="100%"></center></div>
diff --git a/frontend/lessons/ko/chapter_2.yaml b/frontend/lessons/ko/chapter_2.yaml
index 5e34aeb5f569f17202773202c4a530386b29829d..6dd810d08209b82a73f902a09a2fc1fff504d5bf 100644
--- a/frontend/lessons/ko/chapter_2.yaml
+++ b/frontend/lessons/ko/chapter_2.yaml
@@ -385,7 +385,7 @@
     Rust의 핵심 개념인 소유권, 빌림, 그리고 빌림 검사기에 대해 배웠습니다.
 
 
-    이러한 개념들은 Rust의 메모리 관리 체계의 핵심이며, 이를 이해하고 올바르게 사용함으로써 메모리 안전성과 효율성을 높일 수 있습니다/
+    이러한 개념들은 Rust의 메모리 관리 체계의 핵심이며, 이를 이해하고 올바르게 사용함으로써 메모리 안전성과 효율성을 높일 수 있습니다.
 
 
     Rust의 강력한 컴파일러와 빌림 검사기는 코드가 메모리 안전성을 보장하도록 도와줍니다.
diff --git a/frontend/lessons/ko/chapter_3.yaml b/frontend/lessons/ko/chapter_3.yaml
index dd4d5558990495bcbd179d1de5e9c07f53457604..512e8ae3f5edb028d3aa535779ca0efb499b8651 100644
--- a/frontend/lessons/ko/chapter_3.yaml
+++ b/frontend/lessons/ko/chapter_3.yaml
@@ -1,10 +1,525 @@
-- title: Chapter 3 - Generic, Trait
-  source: >-
-    /ajou.webp
-  content_markdown: >
-    OOP
-- title: Hey
+- title: Chapter 3 - Collections and Iterators
   source: >-
     /ferris_lofi.png
   content_markdown: >
-    CSW
+    # 컬렉션과 그 중요성
+
+    컬렉션은 여러 요소를 그룹화하여 저장하고 관리할 수 있는 프로그래밍 구조입니다.
+
+
+    이러한 컬렉션은 데이터를 조직화하고, 검색, 추가 및 제거와 같은 다양한 작업을 수행할 수 있도록 돕습니다.
+
+
+    러스트에서는 주로 벡터(Vector), 문자열(String) 및 해시맵(HashMap)과 같은 컬렉션을 사용합니다.
+
+
+    ## 컬렉션의 중요성
+
+    프로그래밍에서 컬렉션은 다음과 같은 이유로 중요합니다.
+
+
+    1. **데이터 조직화**: 컬렉션을 사용하면 개별 변수를 사용하는 것보다 데이터를 보다 효율적으로 저장하고 관리할 수 있습니다.
+
+    2. **확장성**: 컬렉션은 데이터를 동적으로 추가하거나 제거할 수 있어 프로그램의 유연성을 높입니다.
+
+    3. **검색 및 필터링**: 컬렉션은 데이터를 쉽게 검색, 정렬 및 필터링할 수 있도록 지원합니다.
+
+    4. **성능 최적화**: 러스트의 컬렉션은 메모리 접근 및 할당을 효율적으로 관리하여 성능을 향상시킵니다.
+
+
+    이러한 이유로 컬렉션은 프로그래밍에서 핵심 요소로 간주되며, 러스트에서는 이를 효과적으로 활용할 수 있는 다양한 컬렉션 타입을 제공합니다.
+
+
+    이 챕터에서는 러스트의 주요 컬렉션 타입에 대해 알아보겠습니다.
+- title: 주요 컬렉션 타입 소개
+  code: >-
+    https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC+%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%0D%0Ause+std%3A%3Acollections%3A%3AHashMap%3B%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+names%3A+Vec%3CString%3E+%3D+Vec%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84+%EB%B2%A1%ED%84%B0%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++names.push%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%29%3B%0D%0A%0D%0A++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+ages%3A+HashMap%3CString%2C+u32%3E+%3D+HashMap%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC+%EC%97%B0%EA%B4%80%EB%90%9C+%EA%B0%92%EC%9D%84+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++ages.insert%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%2C+25%29%3B%0D%0A++++ages.insert%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%2C+24%29%3B%0D%0A++++ages.insert%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%2C+26%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EC%9A%94%EC%86%8C%EB%93%A4%EC%9D%84+%EB%B0%98%EB%B3%B5%ED%95%98%EB%A9%B0%2C+%EA%B0%81+%EC%9D%B4%EB%A6%84%EC%97%90+%EB%8C%80%ED%95%9C+%EB%82%98%EC%9D%B4%EB%A5%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++for+name+in+names.iter%28%29+%7B%0D%0A++++++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90%EC%84%9C+%EC%9D%B4%EB%A6%84%EC%97%90+%ED%95%B4%EB%8B%B9%ED%95%98%EB%8A%94+%EB%82%98%EC%9D%B4%EB%A5%BC+%EA%B0%80%EC%A0%B8%EC%98%B4%0D%0A++++++++let+age+%3D+ages.get%28name%29.unwrap%28%29%3B%0D%0A%0D%0A++++++++%2F%2F+%EA%B2%B0%EA%B3%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++++++println%21%28%22%7B%7D%EB%8B%98%EC%9D%98+%EB%82%98%EC%9D%B4%EB%8A%94+%7B%7D%EC%82%B4%EC%9E%85%EB%8B%88%EB%8B%A4.%22%2C+name%2C+age%29%3B%0D%0A++++%7D%0D%0A%7D%0D%0A
+  comment: >-
+    이 예제 코드는 Vec, String, HashMap을 함께 사용하여 각각의 이름(String)에 대한 나이(u32) 정보를 저장하고 출력합니다. names 벡터에는 문자열로 된 이름이 저장되며, ages 해시맵에는 각 이름에 해당하는 나이가 저장됩니다. 코드는 벡터의 요소를 반복하며, 각 이름에 대한 나이를 해시맵에서 가져와 출력합니다.
+  content_markdown: >
+    러스트는 일반적인 목적의 프로그래밍 데이터 구조에 대한 효율적인 구현을 제공하는 표준 컬렉션 라이브러리를 갖추고 있습니다.
+
+
+    표준 구현을 사용하면 두 라이브러리 간에 데이터 변환 없이 원활하게 통신할 수 있습니다.
+
+
+    가장 일반적인 사용 사례를 위해 `Vec` 또는 `HashMap`을 사용하는 것이 좋습니다.
+
+
+    이 두 컬렉션은 대부분의 일반 데이터 저장 및 처리에 사용되며, 뛰어난 성능을 제공합니다.
+
+
+    표준 라이브러리의 다른 컬렉션들은 특정 사용 사례에서 최적의 선택이지만, 비교적 특수한 경우에 해당합니다.
+
+
+    실제로 `Vec`과 `HashMap`이 기술적으로 최적이 아니더라도, 시작하기에 충분한 선택이 될 것입니다.
+
+
+    러스트의 컬렉션은 크게 4가지 주요 카테고리로 분류할 수 있습니다.
+
+    1. **Sequences**: `Vec`, `VecDeque`, `LinkedList`
+
+    2. **Maps**: `HashMap`, `BTreeMap`
+
+    3. **Sets**: `HashSet`, `BTreeSet`
+
+    4. **Misc**: `BinaryHeap`
+
+
+    여기서는 러스트의 주요 컬렉션 타입인 벡터(Vector), 문자열(String) 및 해시맵(HashMap)에 대해 간략하게 소개하겠습니다.
+
+    ## 벡터(Vector)
+
+    벡터는 동적 배열로, 연속된 메모리 공간에 저장되는 동일한 타입의 요소들을 가집니다.
+
+
+    벡터는 크기를 자동으로 조절할 수 있으며, 요소에 빠르게 접근할 수 있는 장점이 있습니다.
+
+    ## 문자열(String)
+
+    문자열은 UTF-8 인코딩된 문자의 연속으로 구성되어 있습니다.
+
+
+    러스트의 문자열은 변경이 불가능한 `&str` 타입과 변경 가능한 `String` 타입이 있습니다.
+
+
+    문자열은 텍스트 데이터를 저장하고 처리하는데 사용됩니다.
+
+    ## 해시맵(HashMap)
+
+    해시맵은 키-값 쌍을 저장하는 데 사용되는 컬렉션입니다.
+
+
+    해시 함수를 사용하여 키를 해싱하여 값을 빠르게 찾을 수 있습니다.
+
+
+    해시맵은 삽입, 검색 및 삭제 작업에 대한 평균 시간 복잡도가 O(1)입니다.
+- title: 벡터(Vector)
+  code: >-
+    https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC+%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%0D%0Ause+std%3A%3Acollections%3A%3AHashMap%3B%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+names%3A+Vec%3CString%3E+%3D+Vec%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84+%EB%B2%A1%ED%84%B0%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++names.push%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%29%3B%0D%0A%0D%0A++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+ages%3A+HashMap%3CString%2C+u32%3E+%3D+HashMap%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC+%EC%97%B0%EA%B4%80%EB%90%9C+%EA%B0%92%EC%9D%84+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++ages.insert%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%2C+25%29%3B%0D%0A++++ages.insert%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%2C+24%29%3B%0D%0A++++ages.insert%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%2C+26%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EC%9A%94%EC%86%8C%EB%93%A4%EC%9D%84+%EB%B0%98%EB%B3%B5%ED%95%98%EB%A9%B0%2C+%EA%B0%81+%EC%9D%B4%EB%A6%84%EC%97%90+%EB%8C%80%ED%95%9C+%EB%82%98%EC%9D%B4%EB%A5%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++for+name+in+names.iter%28%29+%7B%0D%0A++++++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90%EC%84%9C+%EC%9D%B4%EB%A6%84%EC%97%90+%ED%95%B4%EB%8B%B9%ED%95%98%EB%8A%94+%EB%82%98%EC%9D%B4%EB%A5%BC+%EA%B0%80%EC%A0%B8%EC%98%B4%0D%0A++++++++let+age+%3D+ages.get%28name%29.unwrap%28%29%3B%0D%0A%0D%0A++++++++%2F%2F+%EA%B2%B0%EA%B3%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++++++println%21%28%22%7B%7D%EB%8B%98%EC%9D%98+%EB%82%98%EC%9D%B4%EB%8A%94+%7B%7D%EC%82%B4%EC%9E%85%EB%8B%88%EB%8B%A4.%22%2C+name%2C+age%29%3B%0D%0A++++%7D%0D%0A%7D%0D%0A
+  comment: >-
+    이 예제 코드는 Vec, String, HashMap을 함께 사용하여 각각의 이름(String)에 대한 나이(u32) 정보를 저장하고 출력합니다. names 벡터에는 문자열로 된 이름이 저장되며, ages 해시맵에는 각 이름에 해당하는 나이가 저장됩니다. 코드는 벡터의 요소를 반복하며, 각 이름에 대한 나이를 해시맵에서 가져와 출력합니다.
+  content_markdown: >
+    벡터는 동적 배열로, 연속된 메모리 공간에 저장되는 동일한 타입의 요소들을 가집니다.
+
+
+    벡터는 크기를 자동으로 조절할 수 있으며, 요소에 빠르게 접근할 수 있는 장점이 있습니다.
+
+
+    ## a. 벡터 생성 및 초기화
+
+    벡터를 생성하려면 다음과 같은 방법을 사용할 수 있습니다.
+
+    %rust%
+    // 빈 벡터 생성
+
+    let mut vec1: Vec<i32> = Vec::new();
+
+
+    // 초기 값이 있는 벡터 생성
+
+    let vec2 = vec![1, 2, 3, 4, 5];
+    %end%
+
+    ## b. 벡터 요소에 접근하고 수정하기
+
+    벡터 요소에 접근하거나 수정하려면 인덱스를 사용합니다.
+
+    %rust%
+    // 벡터에서 인덱스를 사용해 요소에 접근하기
+
+    let first_element = vec2[0]; // 첫 번째 요소
+
+
+    // 벡터에서 인덱스를 사용해 요소를 수정하기
+
+    vec1.push(10); // 벡터 끝에 10 추가
+
+    vec1[0] = 20;  // 첫 번째 요소를 20으로 변경
+    %end%
+
+    ## c. 벡터 순회하기
+
+    벡터의 요소를 반복하려면 `for` 루프를 사용합니다.
+
+    %rust%
+    for element in vec2.iter() {
+        println!("요소: {}", element);
+    }
+    %end%
+
+    ## d. 벡터 슬라이싱
+
+    벡터의 일부분만 참조하려면 슬라이스를 사용합니다.
+
+    %rust%
+    let slice = &vec2[1..3]; // 인덱스 1부터 2까지의 슬라이스 생성
+    %end%
+
+    ## e. 벡터 크기 조절 및 용량 관리
+
+    벡터의 크기를 조절하거나 용량을 관리하려면 다음과 같은 메서드를 사용합니다.
+
+    %rust%
+    vec1.reserve(10); // 최소한 10개 요소를 저장할 수 있는 공간을 확보
+    vec1.shrink_to_fit(); // 벡터의 용량을 최소한으로 줄이기
+    vec1.resize(5, 0); // 벡터 크기를 5로 조절하고, 새로운 요소를 0으로 초기화
+    %end%
+
+    ## f. 고급 벡터 사용법
+
+    벡터의 고급 사용법에는 벡터에서 요소를 제거하거나 벡터의 일부를 다른 벡터로 이동하는 등의 작업이 포함됩니다.
+
+    %rust%
+    // 벡터에서 인덱스 i의 요소 제거
+
+    let i = 2;
+    vec1.remove(i);
+
+
+    // 벡터에서 마지막 요소를 꺼내기
+
+    if let Some(last_element) = vec1.pop() {
+        println!("마지막 요소: {}", last_element);
+    }
+    %end%
+
+
+    더 많은 메소드는 [공식 문서](https://doc.rust-lang.org/alloc/vec/struct.Vec.html#)를 참고하세요.
+- title: 벡터의 반복자(Iterators)
+  code: >-
+    https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC+%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%0D%0Ause+std%3A%3Acollections%3A%3AHashMap%3B%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+names%3A+Vec%3CString%3E+%3D+Vec%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84+%EB%B2%A1%ED%84%B0%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++names.push%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%29%3B%0D%0A%0D%0A++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+ages%3A+HashMap%3CString%2C+u32%3E+%3D+HashMap%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC+%EC%97%B0%EA%B4%80%EB%90%9C+%EA%B0%92%EC%9D%84+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++ages.insert%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%2C+25%29%3B%0D%0A++++ages.insert%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%2C+24%29%3B%0D%0A++++ages.insert%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%2C+26%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EC%9A%94%EC%86%8C%EB%93%A4%EC%9D%84+%EB%B0%98%EB%B3%B5%ED%95%98%EB%A9%B0%2C+%EA%B0%81+%EC%9D%B4%EB%A6%84%EC%97%90+%EB%8C%80%ED%95%9C+%EB%82%98%EC%9D%B4%EB%A5%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++for+name+in+names.iter%28%29+%7B%0D%0A++++++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90%EC%84%9C+%EC%9D%B4%EB%A6%84%EC%97%90+%ED%95%B4%EB%8B%B9%ED%95%98%EB%8A%94+%EB%82%98%EC%9D%B4%EB%A5%BC+%EA%B0%80%EC%A0%B8%EC%98%B4%0D%0A++++++++let+age+%3D+ages.get%28name%29.unwrap%28%29%3B%0D%0A%0D%0A++++++++%2F%2F+%EA%B2%B0%EA%B3%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++++++println%21%28%22%7B%7D%EB%8B%98%EC%9D%98+%EB%82%98%EC%9D%B4%EB%8A%94+%7B%7D%EC%82%B4%EC%9E%85%EB%8B%88%EB%8B%A4.%22%2C+name%2C+age%29%3B%0D%0A++++%7D%0D%0A%7D%0D%0A
+  comment: >-
+    이 예제 코드는 Vec, String, HashMap을 함께 사용하여 각각의 이름(String)에 대한 나이(u32) 정보를 저장하고 출력합니다. names 벡터에는 문자열로 된 이름이 저장되며, ages 해시맵에는 각 이름에 해당하는 나이가 저장됩니다. 코드는 벡터의 요소를 반복하며, 각 이름에 대한 나이를 해시맵에서 가져와 출력합니다.
+  content_markdown: >
+    벡터와 같은 Iterator trait가 구현된 것들에는 요소들을 반복하고 처리할 때 사용할 수 있는 여러 가지 반복자 메서드가 있습니다.
+
+
+    `iter()`, `iter_mut()`, `into_iter()`는 각각 불변 참조, 가변 참조, 소유권 이동을 수행하는 반복자를 생성합니다.
+
+
+    ### 1. iter()
+
+    `iter()` 메서드는 벡터의 각 요소에 대한 불변 참조를 생성하는 반복자를 반환합니다.
+
+
+    이 반복자는 벡터의 요소를 읽기 전용으로 사용할 때 유용합니다.
+
+
+    %rust%
+    let vec = vec![1, 2, 3, 4, 5];
+
+
+    for element in vec.iter() {
+        println!("요소: {}", element);
+    }
+    %end%
+
+
+    ### 2. iter_mut()
+
+    `iter_mut()` 메서드는 벡터의 각 요소에 대한 가변 참조를 생성하는 반복자를 반환합니다.
+
+
+    이 반복자는 벡터의 요소를 수정할 때 유용합니다.
+
+    %rust%
+    let mut vec = vec![1, 2, 3, 4, 5];
+
+
+    for element in vec.iter_mut() {
+        *element *= 2; // 각 요소에 2를 곱함
+    }
+
+    println!("변경된 벡터: {:?}", vec);
+    %end%
+
+    ### 3. into_iter()
+
+    `into_iter()` 메서드는 벡터의 각 요소의 소유권을 이동하는 반복자를 반환합니다.
+
+
+    이 반복자는 벡터의 요소를 소유권을 이동시키며 처리할 때 유용합니다.
+
+
+    이를 통해 벡터의 요소를 다른 데이터 구조로 쉽게 옮길 수 있습니다.
+
+
+    %rust%
+    let vec = vec!["a".to_string(), "b".to_string(), "c".to_string()];
+
+
+    let mut uppercased_vec: Vec<String> = Vec::new();
+
+
+    for element in vec.into_iter() {
+        uppercased_vec.push(element.to_uppercase());
+    }
+
+
+    println!("대문자로 변경된 벡터: {:?}", uppercased_vec);
+    %end%
+
+    `into_iter()`를 사용할 때 원래의 벡터는 더 이상 사용할 수 없습니다.
+
+
+    소유권이 이동되어 원래 벡터에 대한 참조가 무효화되기 때문입니다.
+
+
+    ## 차이점
+
+    - `iter()`: 벡터의 요소에 대한 불변 참조를 생성하는 반복자를 반환합니다. 요소를 읽기 전용으로 사용할 때 사용됩니다.
+
+    - `iter_mut()`: 벡터의 요소에 대한 가변 참조를 생성하는 반복자를 반환합니다. 요소를 수정할 때 사용됩니다.
+
+    - `into_iter()`: 벡터의 요소의 소유권을 이동하는 반복자를 반환합니다. 요소를 소유권을 이동시키며 처리할 때 사용됩니다.
+
+
+
+    이러한 반복자들은 각각 다양한 상황에 따라 벡터를 처리할 수 있습니다.
+- title: 해시맵(HashMap)
+  code: >-
+    https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC+%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%0D%0Ause+std%3A%3Acollections%3A%3AHashMap%3B%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+names%3A+Vec%3CString%3E+%3D+Vec%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84+%EB%B2%A1%ED%84%B0%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++names.push%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%29%3B%0D%0A%0D%0A++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+ages%3A+HashMap%3CString%2C+u32%3E+%3D+HashMap%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC+%EC%97%B0%EA%B4%80%EB%90%9C+%EA%B0%92%EC%9D%84+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++ages.insert%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%2C+25%29%3B%0D%0A++++ages.insert%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%2C+24%29%3B%0D%0A++++ages.insert%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%2C+26%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EC%9A%94%EC%86%8C%EB%93%A4%EC%9D%84+%EB%B0%98%EB%B3%B5%ED%95%98%EB%A9%B0%2C+%EA%B0%81+%EC%9D%B4%EB%A6%84%EC%97%90+%EB%8C%80%ED%95%9C+%EB%82%98%EC%9D%B4%EB%A5%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++for+name+in+names.iter%28%29+%7B%0D%0A++++++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90%EC%84%9C+%EC%9D%B4%EB%A6%84%EC%97%90+%ED%95%B4%EB%8B%B9%ED%95%98%EB%8A%94+%EB%82%98%EC%9D%B4%EB%A5%BC+%EA%B0%80%EC%A0%B8%EC%98%B4%0D%0A++++++++let+age+%3D+ages.get%28name%29.unwrap%28%29%3B%0D%0A%0D%0A++++++++%2F%2F+%EA%B2%B0%EA%B3%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++++++println%21%28%22%7B%7D%EB%8B%98%EC%9D%98+%EB%82%98%EC%9D%B4%EB%8A%94+%7B%7D%EC%82%B4%EC%9E%85%EB%8B%88%EB%8B%A4.%22%2C+name%2C+age%29%3B%0D%0A++++%7D%0D%0A%7D%0D%0A
+  comment: >-
+    이 예제 코드는 Vec, String, HashMap을 함께 사용하여 각각의 이름(String)에 대한 나이(u32) 정보를 저장하고 출력합니다. names 벡터에는 문자열로 된 이름이 저장되며, ages 해시맵에는 각 이름에 해당하는 나이가 저장됩니다. 코드는 벡터의 요소를 반복하며, 각 이름에 대한 나이를 해시맵에서 가져와 출력합니다.
+  content_markdown: >
+    해시맵은 키-값 쌍을 저장하는 데 사용되는 컬렉션입니다.
+
+
+    해시 함수를 사용하여 키를 해싱하여 값을 빠르게 찾을 수 있습니다.
+
+
+    해시맵은 삽입, 검색 및 삭제 작업에 대한 평균 시간 복잡도가 `O(1)`입니다.
+
+
+    ## a. 해시맵 생성 및 초기화
+
+    해시맵을 생성하려면 다음과 같은 방법을 사용할 수 있습니다.
+
+
+    %rust%
+    use std::collections::HashMap;
+
+
+    // 빈 해시맵 생성
+
+    let mut scores: HashMap<String, u32> = HashMap::new();
+
+
+    // 초기 값이 있는 해시맵 생성
+
+    let scores = vec![("Alice", 50), ("Bob", 60)]
+        .into_iter()
+        .map(|(k, v)| (k.to_string(), v))
+        .collect::<HashMap<String, u32>>();
+    %end%
+
+
+    ## b. 키-값 쌍 삽입 및 업데이트
+
+    해시맵에 키-값 쌍을 삽입하거나 업데이트하려면 `insert` 메서드를 사용합니다.
+
+    %rust%
+    // 키-값 쌍 삽입
+
+    scores.insert("Alice".to_string(), 50);
+
+    scores.insert("Bob".to_string(), 60);
+
+
+    // 키-값 쌍 업데이트
+
+    scores.insert("Alice".to_string(), 55);
+    %end%
+
+    ## c. 값에 접근하고 삭제하기
+
+    해시맵에서 값을 접근하거나 삭제하려면 `get` 또는 `remove` 메서드를 사용합니다.
+
+    %rust%
+    // 값에 접근하기
+
+    if let Some(score) = scores.get("Alice") {
+        println!("Alice의 점수: {}", score);
+    }
+
+
+    // 값 삭제하기
+
+    scores.remove("Alice");
+    %end%
+
+    ## d. 해시맵 순회하기
+
+    해시맵의 키-값 쌍을 반복하려면 `for` 루프를 사용합니다.
+
+    %rust%
+    for (key, value) in &scores {
+        println!("{}: {}", key, value);
+    }
+    %end%
+
+    ## e. 일반적인 해시맵 작업
+
+    해시맵에서 자주 사용되는 작업들은 다음과 같습니다.
+
+    - `contains_key`: 특정 키가 해시맵에 있는지 확인합니다.
+
+    - `keys`: 해시맵의 모든 키를 반환합니다.
+
+    - `values`: 해시맵의 모든 값을 반환합니다.
+
+    %rust%
+    // 키가 해시맵에 있는지 확인하기
+
+    if scores.contains_key("Alice") {
+        println!("Alice의 점수가 있습니다.");
+    }
+
+
+    // 해시맵의 모든 키 출력하기
+
+    for key in scores.keys() {
+        println!("키: {}", key);
+    }
+
+
+    // 해시맵의 모든 값 출력하기
+
+    for value in scores.values() {
+        println!("값: {}", value);
+    }
+    %end%
+
+    더 많은 메소드는 [공식 문서](https://doc.rust-lang.org/std/collections/struct.HashMap.html)를 참고하세요.
+- title: 이터레이터(Iterators) 소개
+  code: >-
+    https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC+%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%0D%0Ause+std%3A%3Acollections%3A%3AHashMap%3B%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+names%3A+Vec%3CString%3E+%3D+Vec%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84+%EB%B2%A1%ED%84%B0%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++names.push%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%29%3B%0D%0A%0D%0A++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+ages%3A+HashMap%3CString%2C+u32%3E+%3D+HashMap%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC+%EC%97%B0%EA%B4%80%EB%90%9C+%EA%B0%92%EC%9D%84+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++ages.insert%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%2C+25%29%3B%0D%0A++++ages.insert%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%2C+24%29%3B%0D%0A++++ages.insert%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%2C+26%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EC%9A%94%EC%86%8C%EB%93%A4%EC%9D%84+%EB%B0%98%EB%B3%B5%ED%95%98%EB%A9%B0%2C+%EA%B0%81+%EC%9D%B4%EB%A6%84%EC%97%90+%EB%8C%80%ED%95%9C+%EB%82%98%EC%9D%B4%EB%A5%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++for+name+in+names.iter%28%29+%7B%0D%0A++++++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90%EC%84%9C+%EC%9D%B4%EB%A6%84%EC%97%90+%ED%95%B4%EB%8B%B9%ED%95%98%EB%8A%94+%EB%82%98%EC%9D%B4%EB%A5%BC+%EA%B0%80%EC%A0%B8%EC%98%B4%0D%0A++++++++let+age+%3D+ages.get%28name%29.unwrap%28%29%3B%0D%0A%0D%0A++++++++%2F%2F+%EA%B2%B0%EA%B3%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++++++println%21%28%22%7B%7D%EB%8B%98%EC%9D%98+%EB%82%98%EC%9D%B4%EB%8A%94+%7B%7D%EC%82%B4%EC%9E%85%EB%8B%88%EB%8B%A4.%22%2C+name%2C+age%29%3B%0D%0A++++%7D%0D%0A%7D%0D%0A
+  comment: >-
+    이 예제 코드는 Vec, String, HashMap을 함께 사용하여 각각의 이름(String)에 대한 나이(u32) 정보를 저장하고 출력합니다. names 벡터에는 문자열로 된 이름이 저장되며, ages 해시맵에는 각 이름에 해당하는 나이가 저장됩니다. 코드는 벡터의 요소를 반복하며, 각 이름에 대한 나이를 해시맵에서 가져와 출력합니다.
+  content_markdown: >
+    이터레이터는 Rust에서 컬렉션의 요소를 순회하고 처리하는 데 중요한 역할을 하는 추상화 개념입니다.
+
+
+    이터레이터는 컬렉션의 요소를 효율적이고 간결한 방법으로 처리할 수 있게 도와줍니다.
+
+
+    ## a. 이터레이터 개념 및 Rust에서의 중요성
+
+    이터레이터는 데이터 집합을 순차적으로 접근하는 데 사용되는 개체입니다.
+
+
+    Rust에서 이터레이터는 컬렉션의 요소를 처리하는 데 사용되며, 함수형 프로그래밍 패턴과 함께 사용할 수 있습니다.
+
+
+    이터레이터는 함수형 프로그래밍을 지원하며, 일반적으로 Rust의 for 루프에서 사용됩니다.
+
+
+    Rust에서 이터레이터의 중요성은 다음과 같습니다:
+
+    1. 코드의 간결성: 이터레이터를 사용하면 반복문을 사용하는 코드를 보다 간결하게 작성할 수 있습니다.
+
+    2. 느긋한 평가(Lazy evaluation): 이터레이터는 필요한 경우에만 요소를 처리하므로, 메모리 사용량과 실행 시간을 줄일 수 있습니다.
+
+    3. 컴포지션: 이터레이터를 사용하면 여러 이터레이터 메서드를 연결하여 작업을 쉽게 구성할 수 있습니다.
+
+
+    ## b. Iterator 트레잇과 메서드 소개 (next, collect 등)
+
+    `Iterator` 트레잇은 Rust의 이터레이터를 구현하는 데 사용되는 트레잇입니다.
+
+
+    이 트레잇에는 다음과 같은 메서드가 정의되어 있습니다.
+
+    ### next
+
+    `next` 메서드는 이터레이터의 다음 요소를 반환합니다.
+
+
+    모든 요소를 순회한 경우, `None`을 반환합니다.
+
+    %rust%
+    let mut numbers = vec![1, 2, 3, 4, 5].into_iter();
+
+
+    while let Some(number) = numbers.next() {
+        println!("Number: {}", number);
+    }
+    %end%
+
+    ### collect
+
+    `collect` 메서드는 이터레이터의 요소를 다른 컬렉션 타입으로 변환합니다.
+
+    %rust%
+    let numbers = vec![1, 2, 3, 4, 5];
+
+    let doubled_numbers: Vec<_> = numbers.iter().map(|x| x * 2).collect();
+
+
+    println!("Doubled numbers: {:?}", doubled_numbers);
+    %end%
+
+    이 외에도 다양한 이터레이터 메서드가 있습니다.
+
+
+    예를 들어, `filter`, `map`, `fold`, `take`, `skip`, `all`, `any` 등의 메서드를 사용하여 이터레이터를 처리할 수 있습니다.
+
+
+    더 많은 메소드는 [공식 문서](https://doc.rust-lang.org/core/iter/trait.Iterator.html)를 참고하세요.
+- title: Chapter 3 - Conclusion
+  code: >-
+    https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=use+std%3A%3Acollections%3A%3AHashMap%3B%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++let+students+%3D+vec%21%5B%0D%0A++++++++%28%22%EA%B9%80%EC%B2%A0%EC%88%98%22%2C+80%29%2C%0D%0A++++++++%28%22%EC%9D%B4%EC%98%81%ED%9D%AC%22%2C+90%29%2C%0D%0A++++++++%28%22%EB%B0%95%EC%A7%80%EB%AF%BC%22%2C+85%29%2C%0D%0A++++++++%28%22%EC%B5%9C%EC%98%81%EC%88%98%22%2C+95%29%2C%0D%0A++++%5D%3B%0D%0A%0D%0A++++let+mut+names+%3D+Vec%3A%3Anew%28%29%3B%0D%0A++++let+mut+scores+%3D+HashMap%3A%3Anew%28%29%3B%0D%0A%0D%0A++++for+%28name%2C+score%29+in+students+%7B%0D%0A++++++++%2F%2F+TODO+1%3A+%EC%9D%B4%EB%A6%84+%EB%AA%A9%EB%A1%9D+Vec%EC%97%90+%ED%95%99%EC%83%9D+%EC%9D%B4%EB%A6%84%EC%9D%84+%EC%B6%94%EA%B0%80%ED%95%98%EC%84%B8%EC%9A%94.%0D%0A++++++++%2F%2F+%EC%B1%84%EC%9B%8C%EB%B3%B4%EC%84%B8%EC%9A%94.%0D%0A%0D%0A++++++++%2F%2F+TODO+2%3A+%EC%9D%B4%EB%A6%84%EA%B3%BC+%EC%A0%90%EC%88%98%EB%A5%BC+HashMap%EC%97%90+%EC%A0%80%EC%9E%A5%ED%95%98%EC%84%B8%EC%9A%94.%0D%0A++++++++%2F%2F+%EC%B1%84%EC%9B%8C%EB%B3%B4%EC%84%B8%EC%9A%94.%0D%0A++++%7D%0D%0A%0D%0A++++%2F%2F+TODO+3%3A+%ED%95%99%EC%83%9D%EB%93%A4%EC%9D%98+%ED%8F%89%EA%B7%A0+%EC%A0%90%EC%88%98%EB%A5%BC+%EA%B3%84%EC%82%B0%ED%95%98%EA%B3%A0+%EC%B6%9C%EB%A0%A5%ED%95%98%EC%84%B8%EC%9A%94.%0D%0A++++%2F%2F+%EC%B1%84%EC%9B%8C%EB%B3%B4%EC%84%B8%EC%9A%94.%0D%0A%7D%0D%0A
+  content_markdown: >
+    다음은 여러분들이 Vec와 HashMap을 사용하여 문제를 해결해 보는 고급 문제입니다.
+
+
+    아래 주석을 참고하여 코드를 완성해보세요.
+
+
+    문제 설명:
+
+    이름과 점수가 주어진 학생들의 정보를 Vec와 HashMap을 사용해 관리하고, 평균 점수를 계산하고 출력하는 프로그램을 작성하세요.
+
+    1. Vec를 사용하여 학생들의 이름 목록을 저장하세요.
+
+    2. HashMap을 사용하여 학생들의 이름과 점수를 저장하세요.
+
+    3. 학생들의 평균 점수를 계산하고 출력하세요.
+
+
+    <div>
+    <button type="button" class="collapsible">정답 보기</button>
+    <div class="content">
+    <p>
+    %rust%
+    use std::collections::HashMap;
+
+
+    fn main() {
+        let students = vec![
+            ("김철수", 80),
+            ("이영희", 90),
+            ("박지민", 85),
+            ("최영수", 95),
+        ];
+
+        let mut names = Vec::new();
+        let mut scores = HashMap::new();
+
+        for (name, score) in students {
+            // 이름 목록 Vec에 학생 이름을 추가합니다.
+            names.push(name);
+
+            // 이름과 점수를 HashMap에 저장합니다.
+            scores.insert(name, score);
+        }
+
+        // 학생들의 평균 점수를 계산하고 출력합니다.
+        let total_score: i32 = scores.values().sum();
+        let average_score: f64 = total_score as f64 / names.len() as f64;
+        println!("학생들의 평균 점수: {:.2}", average_score);
+    }
+    %end%
+    </div>
+    </div>
diff --git a/frontend/lessons/ko/chapter_4.yaml b/frontend/lessons/ko/chapter_4.yaml
index 7780cce3dab7beae448c940ef955c3bb3227feac..f95e8e45a545b239be6151dff791df2ad44902b8 100644
--- a/frontend/lessons/ko/chapter_4.yaml
+++ b/frontend/lessons/ko/chapter_4.yaml
@@ -2,14 +2,532 @@
   source: >-
     /ajou.webp
   content_markdown: >
-    Concurrency, Macro, Unsafe
-- title: Hey
+    # Rust 고급 주제: 강좌 개요
+
+    이 장에서는 Rust의 고급 주제에 대해 다룹니다.
+
+
+    동시성, `unsafe`, 매크로와 같은 Rust 고급 구문에 대해 배웁니다.
+
+
+    ## 1. 동시성(Concurrency)
+
+    Rust는 동시성 문제를 안전하게 다루기 위한 독특한 기능을 제공합니다.
+
+
+    a. 동시성의 개념 및 중요성
+
+    b. 스레드(Thread) 사용하기
+
+    c. 채널(Channels)을 사용한 통신
+
+    d. 뮤텍스(Mutex) 및 동기화 프리미티브
+
+    e. 비동기 프로그래밍 및 `async`/`await`
+
+
+    ## 2. `unsafe` 코드
+
+    Rust의 안전성 보장을 어기는 경우에는 `unsafe` 블록을 사용해야 합니다.
+
+
+    a. `unsafe`의 개념 및 필요성
+
+    b. `unsafe` 함수 및 메서드
+
+    c. 원시 포인터(Raw Pointers) 사용하기
+
+    d. 외부 함수 및 FFI(Foreign Function Interface) 사용하기
+
+
+    ## 3. 매크로(Macros)
+
+    Rust의 매크로 시스템은 코드를 생성하고 추상화하는 강력한 방법을 제공합니다.
+
+
+    a. 매크로의 개념 및 사용 사례
+
+    b. 선언형 매크로(Declarative Macros) 생성하기
+
+    c. 프로시저 매크로(Procedural Macros) 생성하기
+
+    d. 매크로 규칙 및 패턴 매칭
+- title: 동시성(Concurrency)
   source: >-
     /ferris_lofi.png
   content_markdown: >
-    CSW
-- title: Hey
+    ## a. 동시성의 개념 및 중요성
+
+    동시성(Concurrency)은 여러 작업이 동시에 실행되는 것처럼 보이게 만드는 프로그래밍 기법입니다.
+
+
+    동시성을 사용하면 애플리케이션의 성능을 향상시킬 수 있으며, 멀티코어 프로세서와 같은 병렬 컴퓨팅 기술을 최대한 활용할 수 있습니다.
+
+
+    Rust는 동시성 문제를 안전하게 다루기 위한 독특한 기능을 제공하며,
+
+
+    이러한 기능 덕분에 데이터 경쟁이나 교착 상태와 같은 동시성 문제가 발생할 가능성을 줄일 수 있습니다.
+
+
+    ## b. 스레드(Thread) 사용하기
+
+    스레드는 프로세스 내에서 실행되는 독립적인 작업 단위입니다.
+
+
+    Rust에서 스레드를 생성하고 관리하려면 `std::thread` 모듈을 사용합니다.
+
+    %rust%
+    use std::thread;
+
+    use std::time::Duration;
+
+
+    fn main() {
+        let handle = thread::spawn(|| {
+            for i in 1..10 {
+                println!("스레드에서: {}", i);
+                thread::sleep(Duration::from_millis(1));
+            }
+        });
+
+        for i in 1..5 {
+            println!("메인 스레드에서: {}", i);
+            thread::sleep(Duration::from_millis(1));
+        }
+
+        handle.join().unwrap();
+    }
+    %end%
+
+    ## c. 채널(Channels)을 사용한 통신
+
+    채널은 스레드 간에 메시지를 전달하는 동기화 primitive입니다.
+
+
+    Rust에서는 `std::sync::mpsc`(multiple producer, single consumer) 모듈을 사용하여 채널을 구현할 수 있습니다.
+
+
+    %rust%
+    use std::sync::mpsc;
+
+    use std::thread;
+
+
+    fn main() {
+        let (tx, rx) = mpsc::channel();
+
+        thread::spawn(move || {
+            let val = String::from("안녕하세요");
+            tx.send(val).unwrap();
+        });
+
+        let received = rx.recv().unwrap();
+        println!("수신: {}", received);
+    }
+    %end%
+
+
+    ## d. 뮤텍스(Mutex) 및 동기화 프리미티브
+
+    뮤텍스(Mutex)는 한 번에 하나의 스레드만 데이터에 접근할 수 있도록 하는 동기화 프리미티브입니다.
+
+
+     Rust에서 뮤텍스를 사용하려면 `std::sync::Mutex`를 사용합니다.
+
+    %rust%
+    use std::sync::{Arc, Mutex};
+
+    use std::thread;
+
+
+    fn main() {
+        let counter = Arc::new(Mutex::new(0::new()));
+        let mut handles = vec![];
+        for _ in 0..10 {
+        let counter = Arc::clone(&counter);
+        let handle = thread::spawn(move || {
+              let mut num = counter.lock().unwrap();
+              *num += 1;
+          });
+          handles.push(handle);
+        }
+
+        for handle in handles {
+            handle.join().unwrap();
+        }
+
+        println!("결과: {}", *counter.lock().unwrap());
+    }
+    %end%
+
+
+    ## e. 비동기 프로그래밍 및 async/await
+
+    비동기 프로그래밍은 동시에 실행되어야 하는 작업을 더 효율적으로 관리할 수 있도록 합니다.
+
+
+    Rust에서는 `async`와 `await` 키워드를 사용하여 비동기 코드를 작성할 수 있습니다.
+
+    %rust%
+    use futures::executor::block_on;
+
+
+    async fn hello_world() {
+        println!("안녕, 비동기 세계!");
+    }
+
+
+    fn main() {
+        let future = hello_world(); // async 함수는 호출되면 Future를 반환합니다.
+        block_on(future); // 비동기 함수를 실행하기 위해 블로킹 실행기 사용
+    }
+    %end%
+
+
+    비동기 프로그래밍에서 주요한 것은 비동기 함수와 Future, 실행기(executor) 등의 개념입니다.
+
+
+    비동기 함수는 async fn으로 정의되며, Future를 반환합니다.
+
+
+    Future는 실행 결과를 나타내는 값으로, 실행기를 사용하여 평가할 수 있습니다.
+
+
+    이를 통해 동시에 실행되어야 하는 작업을 효율적으로 관리할 수 있습니다.
+
+
+    Rust에서는 주로 `tokio`라는 라이브러를 사용하여 async를 좀 더 쉽게 사용하고 더 많은 기능을 제공 받습니다.
+
+
+    tokio를 공부하고 싶으신 분들은 [@여기](https://tokio.rs/)를 참고하세요.
+- title: 매크로(Macros)
   code: >-
     https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=macro_rules%21+times+%7B%0D%0A++++%28%24num%3Aexpr%2C+%24body%3Ablock%29+%3D%3E+%7B%0D%0A++++++++times%21%28None%2C+%24num%2C+%24body%29%3B%0D%0A++++%7D%3B%0D%0A++++%28%24label%3Aexpr%2C+%24num%3Aexpr%2C+%24body%3Ablock%29+%3D%3E+%7B%0D%0A++++++++if+let+Some%28label%29+%3D+%24label+%7B%0D%0A++++++++++++println%21%28%22Task%3A+%7B%7D%22%2C+label%29%3B%0D%0A++++++++%7D%0D%0A%0D%0A++++++++let+mut+total_time+%3D+std%3A%3Atime%3A%3ADuration%3A%3Anew%280%2C+0%29%3B%0D%0A++++++++let+mut+min_time+%3D+std%3A%3Atime%3A%3ADuration%3A%3Afrom_secs%28u64%3A%3AMAX%29%3B%0D%0A++++++++let+mut+max_time+%3D+std%3A%3Atime%3A%3ADuration%3A%3Afrom_secs%280%29%3B%0D%0A%0D%0A++++++++for+_+in+0..%24num+%7B%0D%0A++++++++++++let+start_time+%3D+std%3A%3Atime%3A%3AInstant%3A%3Anow%28%29%3B%0D%0A++++++++++++%24body%0D%0A++++++++++++let+elapsed+%3D+start_time.elapsed%28%29%3B%0D%0A++++++++++++total_time+%2B%3D+elapsed%3B%0D%0A++++++++++++min_time+%3D+min_time.min%28elapsed%29%3B%0D%0A++++++++++++max_time+%3D+max_time.max%28elapsed%29%3B%0D%0A++++++++++++println%21%28%0D%0A++++++++++++++++%22Execution+time+for+iteration%3A+%7B%7D+ms%22%2C%0D%0A++++++++++++++++elapsed.as_millis%28%29%0D%0A++++++++++++%29%3B%0D%0A++++++++%7D%0D%0A%0D%0A++++++++let+avg_time+%3D+total_time+%2F+%24num%3B%0D%0A++++++++println%21%28%22Average+execution+time%3A+%7B%7D+ms%22%2C+avg_time.as_millis%28%29%29%3B%0D%0A++++++++println%21%28%22Minimum+execution+time%3A+%7B%7D+ms%22%2C+min_time.as_millis%28%29%29%3B%0D%0A++++++++println%21%28%22Maximum+execution+time%3A+%7B%7D+ms%22%2C+max_time.as_millis%28%29%29%3B%0D%0A++++%7D%3B%0D%0A%7D%0D%0A%0D%0Afn+is_prime%28n%3A+u64%29+-%3E+bool+%7B%0D%0A++++if+n+%3C%3D+1+%7B%0D%0A++++++++return+false%3B%0D%0A++++%7D%0D%0A++++for+i+in+2..%3D%28%28n+as+f64%29.sqrt%28%29+as+u64%29+%7B%0D%0A++++++++if+n+%25+i+%3D%3D+0+%7B%0D%0A++++++++++++return+false%3B%0D%0A++++++++%7D%0D%0A++++%7D%0D%0A++++true%0D%0A%7D%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++times%21%28Some%28%22Prime+number+summation%22%29%2C+3%2C+%7B%0D%0A++++++++let+mut+sum+%3D+0u64%3B%0D%0A++++++++let+mut+num+%3D+2u64%3B%0D%0A++++++++let+mut+counter+%3D+0%3B%0D%0A%0D%0A++++++++while+counter+%3C+10_000+%7B%0D%0A++++++++++++if+is_prime%28num%29+%7B%0D%0A++++++++++++++++sum+%2B%3D+num%3B%0D%0A++++++++++++++++counter+%2B%3D+1%3B%0D%0A++++++++++++%7D%0D%0A++++++++++++num+%2B%3D+1%3B%0D%0A++++++++%7D%0D%0A++++++++println%21%28%22Sum+of+first+10%2C000+prime+numbers%3A+%7B%7D%22%2C+sum%29%3B%0D%0A++++%7D%29%3B%0D%0A%7D
   content_markdown: >
-    CSW
+    Rust의 매크로 시스템은 코드를 생성하고 추상화하는 강력한 방법을 제공합니다.
+
+    ## a. 매크로의 개념 및 사용 사례
+
+    매크로는 코드를 생성하거나 특정 패턴에 따라 코드를 변형하는 데 사용되는 메타 프로그래밍 기술입니다.
+
+
+    Rust에서는 매크로를 사용하여 코드 중복을 줄이고, 가독성을 향상시키며, 유연한 추상화를 구현할 수 있습니다.
+
+
+    매크로는 주로 컴파일 시간에 코드를 생성하거나 수정하는 작업에 사용됩니다. (ex. `println!`)
+
+
+    ## b. 선언형 매크로(Declarative Macros) 생성하기
+
+    선언형 매크로는 매크로 규칙을 사용하여 코드를 생성하는 매크로입니다.
+
+
+    `macro_rules!` 키워드를 사용하여 선언형 매크로를 정의할 수 있습니다.
+
+    %rust%
+    macro_rules! vec {
+        ( $( $x:expr ),* ) => {
+            {
+                let mut temp_vec = Vec::new();
+                $(
+                    temp_vec.push($x);
+                )*
+                temp_vec
+            }
+        };
+    }
+
+
+    fn main() {
+        let v = vec![1, 2, 3];
+        println!("v: {:?}", v);
+    }
+    %end%
+
+
+    ## c. 프로시저 매크로(Procedural Macros) 생성하기
+
+    프로시저 매크로는 Rust의 컴파일러에 플러그인으로 동작하는 함수입니다.
+
+
+    프로시저 매크로는 주로 속성(attribute)에 사용되며, 소스 코드를 받아 변형된 소스 코드를 반환합니다.
+
+
+    프로시저 매크로를 정의하려면 `proc_macro` 라이브러리를 사용하고, 별도의 크레이트로 구성해야 합니다.
+
+
+    %rust%
+    // 프로시저 매크로를 정의하는 크레이트입니다.
+
+    use proc_macro::TokenStream;
+
+    use quote::quote;
+
+    use syn::{parse_macro_input, DeriveInput};
+
+
+    #[proc_macro_derive(HelloMacro)]
+
+    pub fn hello_macro_derive(input: TokenStream) -> TokenStream {
+        let ast = parse_macro_input!(input as DeriveInput);
+        let name = &ast.ident;
+        let gen = quote! {
+            impl HelloMacro for #name {
+                fn hello_macro() {
+                    println!("안녕하세요, 여기는 {}입니다.", stringify!(#name));
+                }
+            }
+        };
+        gen.into()
+    }
+    %end%
+
+
+    %rust%
+    // 프로시저 매크로를 사용하는 크레이트입니다.
+
+    use hello_macro::HelloMacro;
+
+    use hello_macro_derive::HelloMacro;
+
+
+    #[derive(HelloMacro)]
+
+    struct Pancakes;
+
+
+    fn main() {
+        Pancakes::hello_macro();
+    }
+    %end%
+
+
+    ## d. 매크로 규칙 및 패턴 매칭
+
+    Rust의 매크로는 패턴 매칭을 통해 매개 변수를 추출하고, 규칙에 따라 코드를 생성합니다.
+
+
+    매크로에서 패턴 매칭을 사용하려면 다음 구문을 사용합니다.
+
+    - `$name:expr`: 표현식(Expressions) 매치
+
+    - `$name:ident`: 식별자(Identifiers) 매치
+
+    - `$name:ty`: 타입(Types) 매치
+
+    - `$name:pat`: 패턴(Patterns) 매치
+
+    - `$name:stmt`: 문장(Statements) 매치
+
+    - `$name:block`: 블록(Blocks) 매치
+
+    - `$name:meta`: 메타 데이터(Meta-data) 매치
+
+    - `$name:tt`: 토큰 트리(Token Tree) 매치
+
+    - `$name:item`: 항목(Items) 매치
+
+
+    또한, 매크로에서 사용할 수 있는 반복자 구문도 있습니다.
+
+    - `$(...)*`: 0회 이상 반복
+
+    - `$(...)+`: 1회 이상 반복
+
+
+    %rust%
+    macro_rules! create_function {
+        ($func_name:ident) => (
+            fn $func_name() {
+                println!("함수 {}가 호출되었습니다.", stringify!($func_name));
+            }
+        );
+    }
+
+
+    create_function!(foo);
+
+    create_function!(bar);
+
+
+    fn main() {
+        foo();
+        bar();
+    }
+    %end%
+
+    이렇게 매크로를 사용하여 코드 생성 및 추상화를 구현하면, 유연한 프로그래밍을 할 수 있고, 가독성 및 유지보수성을 높일 수 있습니다.
+
+
+    매크로의 핵심은 패턴 매칭과 규칙을 통해 코드를 재사용하고, 확장성을 높이는 것입니다.
+
+- title: unsafe 코드
+  code: >-
+    https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=fn+main%28%29+%7B%0A++++let+mut+vec1+%3D+vec%21%5B1%2C+2%2C+3%5D%3B%0A++++let+mut+vec2+%3D+vec%21%5B4%2C+5%2C+6%5D%3B%0A%0A++++println%21%28%22%EA%B5%90%ED%99%98+%EC%A0%84%3A+vec1+%3D+%7B%3A%3F%7D%2C+vec2+%3D+%7B%3A%3F%7D%22%2C+vec1%2C+vec2%29%3B%0A%0A++++unsafe+%7B%0A++++++++unsafe_swap%28%26mut+vec1%2C+%26mut+vec2%29%3B%0A++++%7D%0A%0A++++println%21%28%22%EA%B5%90%ED%99%98+%ED%9B%84%3A+vec1+%3D+%7B%3A%3F%7D%2C+vec2+%3D+%7B%3A%3F%7D%22%2C+vec1%2C+vec2%29%3B%0A%7D%0A%0A%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EB%82%B4%EB%B6%80+%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC+%EC%A7%81%EC%A0%91+%EA%B5%90%ED%99%98%ED%95%98%EA%B8%B0+%EC%9C%84%ED%95%B4+%EC%9B%90%EC%8B%9C+%ED%8F%AC%EC%9D%B8%ED%84%B0%EC%99%80+unsafe%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94+%ED%95%A8%EC%88%98%0Aunsafe+fn+unsafe_swap%28vec1%3A+%26mut+%5Bi32%5D%2C+vec2%3A+%26mut+%5Bi32%5D%29+%7B%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EA%B8%B8%EC%9D%B4%EA%B0%80+%EA%B0%99%EC%9D%80%EC%A7%80+%ED%99%95%EC%9D%B8%0A++++assert_eq%21%28vec1.len%28%29%2C+vec2.len%28%29%29%3B%0A%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EB%82%B4%EB%B6%80+%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%97%90+%EC%A0%91%EA%B7%BC%ED%95%98%EA%B8%B0+%EC%9C%84%ED%95%B4+%EC%9B%90%EC%8B%9C+%ED%8F%AC%EC%9D%B8%ED%84%B0%EB%A5%BC+%EC%83%9D%EC%84%B1%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++let+ptr1+%3D+vec1.as_mut_ptr%28%29%3B%0A++++let+ptr2+%3D+vec2.as_mut_ptr%28%29%3B%0A%0A++++%2F%2F+%EC%9B%90%EC%8B%9C+%ED%8F%AC%EC%9D%B8%ED%84%B0%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC+%EB%B2%A1%ED%84%B0%EC%9D%98+%EC%9B%90%EC%86%8C%EB%A5%BC+%EA%B5%90%ED%99%98%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++for+i+in+0..vec1.len%28%29+%7B%0A++++++++%2F%2F+%EC%9B%90%EC%8B%9C+%ED%8F%AC%EC%9D%B8%ED%84%B0%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94+%EC%97%B0%EC%82%B0%EC%9D%80+unsafe+%EB%B8%94%EB%A1%9D+%EB%82%B4%EC%97%90%EC%84%9C+%EC%88%98%ED%96%89%ED%95%B4%EC%95%BC+%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++++++let+temp+%3D+*ptr1.add%28i%29%3B%0A++++++++*ptr1.add%28i%29+%3D+*ptr2.add%28i%29%3B%0A++++++++*ptr2.add%28i%29+%3D+temp%3B%0A++++%7D%0A%7D%0A
+  comment: >-
+    이 예제에서는 벡터의 내부 데이터에 직접 접근하여 값을 교환하는 것이 가능하지만, Rust의 안전성을 보장할 수 없기 때문에 unsafe를 사용해야 합니다. 이런 경우에는 가능하면 안전한 Rust 코드를 사용하거나, 필요한 경우에만 최소한의 unsafe 코드를 사용하여 작업을 수행하는 것이 좋습니다.
+  content_markdown: >
+    Rust는 기본적으로 안전한 프로그래밍을 위한 다양한 기능을 제공합니다.
+
+
+    하지만, 때로는 안전성을 포기하고, 저수준의 시스템 작업을 수행해야 하는 경우가 있습니다.
+
+
+    이 때 `unsafe` 키워드를 사용합니다.
+
+
+    ## a. unsafe의 개념 및 필요성
+
+    `unsafe`는 Rust 컴파일러가 안전성을 보장할 수 없는 코드를 표시하는 키워드입니다.
+
+
+    이를 사용하면 Rust의 안전성 검사를 우회하고, 저수준의 시스템 작업을 수행할 수 있습니다.
+
+
+    주로 외부 함수, 원시 포인터, 정적 변수에 접근하는 등의 작업에 사용됩니다.
+
+
+    ## b. unsafe 함수 및 메서드
+
+    `unsafe` 키워드를 사용하여 함수와 메서드를 정의할 수 있습니다.
+
+
+    이를 사용하면 안전하지 않은 작업을 수행할 수 있습니다.
+
+
+    호출하는 쪽에서도 `unsafe` 블록 내에서 호출해야 합니다.
+
+
+    %rust%
+    unsafe fn dangerous_function() {
+        // 안전하지 않은 작업 수행
+    }
+
+
+    fn main() {
+        unsafe {
+            dangerous_function();
+        }
+    }
+    %end%
+
+
+    ## c. 원시 포인터(Raw Pointers) 사용하기
+
+    원시 포인터는 메모리 주소를 직접 가리키는 포인터로, Rust의 안전성을 보장하지 않습니다.
+
+
+    `*const T`와 `*mut T` 형식으로 사용할 수 있습니다.
+
+
+    원시 포인터는 `unsafe` 블록 내에서 사용해야 합니다.
+
+    %rust%
+    fn main() {
+        let mut num = 5;
+        let r1 = &num as *const i32;
+        let r2 = &mut num as *mut i32;
+
+        unsafe {
+            println!("r1 가리키는 값: {}", *r1);
+            println!("r2 가리키는 값: {}", *r2);
+        }
+    }
+    %end%
+
+
+    ## d. 외부 함수 및 FFI(Foreign Function Interface) 사용하기
+
+    외부 함수는 다른 프로그래밍 언어로 작성된 함수를 Rust에서 호출할 수 있도록 해주는 인터페이스입니다.
+
+
+    외부 함수를 사용하려면 `extern` 키워드와 `unsafe`를 사용해야 합니다.
+
+    %rust%
+    // C 언어의 함수를 호출하는 예시
+
+    extern "C" {
+        fn abs(input: i32) -> i32;
+    }
+
+
+    fn main() {
+        let x = -3;
+        let result = unsafe { abs(x) };
+        println!("{}의 절댓값은 {}입니다.", x, result);
+    }
+    %end%
+
+    이렇게 `unsafe`를 사용하여 Rust의 안전성 검사를 우회할 수 있습니다.
+
+
+    하지만 가능한 한 `unsafe`를 사용하지 않고, 안전한 코드를 작성하는 것이 좋습니다.
+
+
+    정말 필요한 경우에만 사용하고, 주의해서 사용해야 합니다.
+- title: Chapter 4 - Conclusion
+  code: >-
+    https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+TODO+1%3A+%EB%A7%A4%ED%81%AC%EB%A1%9C%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC+%EB%91%90+%EB%B2%A1%ED%84%B0%EC%9D%98+%EB%8D%A7%EC%85%88%EC%9D%84+%EC%88%98%ED%96%89%ED%95%98%EB%8A%94+%ED%95%A8%EC%88%98%EB%A5%BC+%EC%9E%91%EC%84%B1%ED%95%98%EC%84%B8%EC%9A%94.%0D%0A%2F%2F+%EC%B1%84%EC%9B%8C%EB%B3%B4%EC%84%B8%EC%9A%94.%0D%0Amacro_rules%21+...%0D%0A%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++let+vec1+%3D+vec%21%5B1%2C+2%2C+3%5D%3B%0D%0A++++let+vec2+%3D+vec%21%5B4%2C+5%2C+6%5D%3B%0D%0A++++let+result+%3D+add_vectors%21%28vec1%2C+vec2%29%3B%0D%0A%0D%0A++++println%21%28%22%EB%B2%A1%ED%84%B0+%EB%8D%A7%EC%85%88+%EA%B2%B0%EA%B3%BC%3A+%7B%3A%3F%7D%22%2C+result%29%3B%0D%0A%7D%0D%0A%0D%0A%0D%0Afn+add_vectors_unsafe%28vec1%3A+%26%5Bi32%5D%2C+vec2%3A+%26%5Bi32%5D%29+-%3E+Vec%3Ci32%3E+%7B%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EA%B8%B8%EC%9D%B4%EA%B0%80+%EA%B0%99%EC%9D%80%EC%A7%80+%ED%99%95%EC%9D%B8%ED%95%A9%EB%8B%88%EB%8B%A4.%0D%0A++++assert_eq%21%28vec1.len%28%29%2C+vec2.len%28%29%29%3B%0D%0A%0D%0A++++let+mut+result+%3D+Vec%3A%3Awith_capacity%28vec1.len%28%29%29%3B%0D%0A%0D%0A++++%2F%2F+TODO+2%3A+unsafe%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC+%EB%B2%A1%ED%84%B0%EC%9D%98+%EB%82%B4%EB%B6%80+%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%97%90+%EC%A0%91%EA%B7%BC%ED%95%98%EA%B3%A0+%EA%B0%92%EC%9D%84+%EB%8D%94%ED%95%98%EC%84%B8%EC%9A%94.%0D%0A++++%2F%2F+%EC%B1%84%EC%9B%8C%EB%B3%B4%EC%84%B8%EC%9A%94.%0D%0A%0D%0A++++result%0D%0A%7D%0D%0A
+  content_markdown: >
+    다음은 여러분들이 unsafe와 macro를 사용하여 문제를 해결해 보는 고급 문제입니다.
+
+
+    아래 주석을 참고하여 코드를 완성해보세요.
+
+
+    문제 설명:
+
+    두 개의 Vec<i32> 벡터를 더하는 프로그램을 작성하세요.
+
+
+    이때, 매크로를 사용하여 덧셈 작업을 수행하고, 벡터의 내부 데이터에 직접 접근하기 위해 unsafe를 사용하세요.
+
+    1. 매크로를 사용하여 두 벡터의 덧셈을 수행하는 함수를 작성하세요.
+
+    2. unsafe를 사용하여 벡터의 내부 데이터에 접근하고 값을 더하세요.
+
+
+    <div>
+    <button type="button" class="collapsible">정답 보기</button>
+    <div class="content">
+    <p>
+    %rust%
+    // 매크로를 사용하여 두 벡터의 덧셈을 수행하는 함수를 작성합니다.
+
+    macro_rules! add_vectors {
+        ($vec1:expr, $vec2:expr) => {
+            add_vectors_unsafe(&$vec1, &$vec2)
+        };
+    }
+
+
+    fn main() {
+        let vec1 = vec![1, 2, 3];
+        let vec2 = vec![4, 5, 6];
+        let result = add_vectors!(vec1, vec2);
+
+        println!("벡터 덧셈 결과: {:?}", result);
+    }
+
+
+    fn add_vectors_unsafe(vec1: &[i32], vec2: &[i32]) -> Vec<i32> {
+        // 벡터의 길이가 같은지 확인합니다.
+        assert_eq!(vec1.len(), vec2.len());
+
+        let mut result = Vec::with_capacity(vec1.len());
+
+        // unsafe를 사용하여 벡터의 내부 데이터에 접근하고 값을 더합니다.
+        let ptr1 = vec1.as_ptr();
+        let ptr2 = vec2.as_ptr();
+        for i in 0..vec1.len() {
+            unsafe {
+                result.push(*ptr1.add(i) + *ptr2.add(i));
+            }
+        }
+
+        result
+    }
+    %end%
+    </div>
+    </div>
diff --git a/frontend/lessons/ko/chapter_5.yaml b/frontend/lessons/ko/chapter_5.yaml
index 36035776f0e9b1201f8403ba72bb1ccc4b1a28e9..3c6b2482bb463e31bbf0be342b0f83fddaa8e002 100644
--- a/frontend/lessons/ko/chapter_5.yaml
+++ b/frontend/lessons/ko/chapter_5.yaml
@@ -1,4 +1,4 @@
-- title: Chapter 5 - Module
+- title: Chapter 5 - Cargo
   source: >-
     /ajou.webp
   content_markdown: >
diff --git a/frontend/lessons/ko/chapter_6.yaml b/frontend/lessons/ko/chapter_6.yaml
index f775a7dfd0474090d907f1016ae9a188aa65b36f..84a2ed0835ff69cc0c42e2fa17c08f276adefd71 100644
--- a/frontend/lessons/ko/chapter_6.yaml
+++ b/frontend/lessons/ko/chapter_6.yaml
@@ -1,4 +1,4 @@
-- title: Chapter 6 - Web Framework
+- title: Chapter 6 - 웹 서버
   source: >-
     /ajou.webp
   content_markdown: >