From 3935865c53461609848e49fd8066c8a89447153e Mon Sep 17 00:00:00 2001 From: Alfex4936 <ikr@kakao.com> Date: Thu, 4 May 2023 14:31:54 +0900 Subject: [PATCH] Update chapter 6 --- docs/08_ko.html | 37 ++++++++++++++++- docs/44_ko.html | 2 +- docs/45_ko.html | 2 +- docs/48_ko.html | 2 +- docs/49_ko.html | 65 ++++++++++++++++++++++++++++++ docs/TOC_ko.html | 6 ++- docs/chapter_6_ko.html | 18 +++++++-- docs/chapter_7_ko.html | 12 +++--- frontend/lessons/ko/chapter_1.yaml | 56 ++++++++++++++++++++++--- frontend/lessons/ko/chapter_5.yaml | 4 +- frontend/lessons/ko/chapter_6.yaml | 28 ++++++++++--- frontend/lessons/ko/chapter_7.yaml | 10 +---- 12 files changed, 204 insertions(+), 38 deletions(-) create mode 100644 docs/49_ko.html diff --git a/docs/08_ko.html b/docs/08_ko.html index 9a43fa8..301b151 100644 --- a/docs/08_ko.html +++ b/docs/08_ko.html @@ -37,14 +37,47 @@ <div class="page"> <h1>변수</h1> <p>Rust에서는 <code>let</code> 키워드를 사용하여 변수를 선언합니다.</p> -<div align="center"> <p> +<div align="center"> +<p> <img src="https://user-images.githubusercontent.com/2356749/223641752-4b38e61f-82f4-450d-b778-526cb7ad618c.png"> -</p> </div> +</p> +</div> <p>값을 할당할 때, Rust는 거의 대부분 변수의 타입을 추론할 수 있습니다.</p> <p>만약 Rust가 추론하지 못하면 변수의 선언 시 타입을 추가할 수 있습니다.</p> <p>변수의 이름을 여러 번 사용하여 값을 할당할 수 있습니다.</p> <p>이를 "shadowing"이라고 하며, 변수의 타입은 재할당될 때마다 변경됩니다.</p> <p>변수의 이름은 항상 <code>snake_case</code>로 작성합니다.</p> +<h1 id="">팁</h1> +<p>Rust에서는 <code>let</code> 키워드를 사용하여 변수를 만들 때, 표현식을 사용할 수 있습니다.</p> +<p>표현식(expression)은 어떤 값을 반환하는 코드 조각을 의미합니다.</p> +<p>Rust의 <code>match</code>와 <code>if</code>문은 표현식입니다. 이런 표현식을 사용하여 변수의 값을 초기화할 수 있습니다.</p> +<h2 id="match">match 표현식 사용하기</h2> +<p><code>match</code> 표현식은 여러 가지 패턴을 확인하고, 매치되는 패턴에 대한 값을 반환합니다. 예를 들면:</p> +<pre><code class="rust">let x = 3; + +let a = match x { + 1 => "one", + 2 => "two", + 3 => "three", + _ => "other", +}; + +println!("The value of a is: {}", a);</code></pre> +<p>위의 코드에서, <code>x</code> 값이 3이기 때문에 <code>a</code>의 값은 "three"가 됩니다.</p> +<h3 id="if">if 표현식 사용하기</h3> +<p><code>if</code> 표현식을 사용하여 조건에 따라 다른 값을 반환할 수도 있습니다. 예를 들면:</p> +<pre><code class="rust">let condition = true; + +let a = if condition { + "The condition is true" +} else { + "The condition is false" +}; + +println!("The value of a is: {}", a);</code></pre> +<p>위의 코드에서, <code>condition</code> 값이 <code>true</code>이므로 <code>a</code>의 값은 "The condition is true"가 됩니다.</p> +<p>이렇게 표현식을 사용하여 변수를 초기화하는 방식은 Rust에서 흔히 사용되는 문법입니다.</p> +<p>이를 통해 코드를 간결하게 작성할 수 있고, 변수의 값이 초기화되는 과정을 명확하게 이해할 수 있습니다.</p> <div class="bottomnav"> <span class="back"><a href="07_ko.html" rel="prev">❮ 이전</a></span> <span class="next"><a href="09_ko.html" rel="next">다음 ❯</a></span> diff --git a/docs/44_ko.html b/docs/44_ko.html index 8c44cdd..4501cc0 100644 --- a/docs/44_ko.html +++ b/docs/44_ko.html @@ -35,7 +35,7 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>cargo command</h1> + <h1>cargo build</h1> <h1 id="">의존성 관리</h1> <h3 id="cargotoml">Cargo.toml 파일을 사용한 외부 패키지 의존성 추가</h3> <p><code>Cargo.toml</code> 파일을 사용하여 프로젝트에 외부 패키지 의존성을 추가할 수 있습니다.</p> diff --git a/docs/45_ko.html b/docs/45_ko.html index cd72b65..868400c 100644 --- a/docs/45_ko.html +++ b/docs/45_ko.html @@ -35,7 +35,7 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>cargo command</h1> + <h1>cargo publish</h1> <h1 id="">테스트 작성 및 실행</h1> <h2 id="cargotest">cargo test 명령어를 사용한 테스트 코드 실행 방법</h2> <p><code>cargo test</code> 명령어를 사용하여 프로젝트의 테스트 코드를 실행할 수 있습니다.</p> diff --git a/docs/48_ko.html b/docs/48_ko.html index 63ba0a7..94e1428 100644 --- a/docs/48_ko.html +++ b/docs/48_ko.html @@ -39,7 +39,7 @@ <p>CSW</p> <div class="bottomnav"> <span class="back"><a href="chapter_6_ko.html" rel="prev">❮ 이전</a></span> - + <span class="next"><a href="49_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/49_ko.html b/docs/49_ko.html new file mode 100644 index 0000000..8a50b36 --- /dev/null +++ b/docs/49_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>Chapter 6 - Conclusion</h1> + <p>CSW</p> + <div class="bottomnav"> + <span class="back"><a href="48_ko.html" rel="prev">❮ 이전</a></span> + <span class="next"><a href="chapter_7_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/TOC_ko.html b/docs/TOC_ko.html index 8517b73..21b8583 100644 --- a/docs/TOC_ko.html +++ b/docs/TOC_ko.html @@ -81,11 +81,13 @@ <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">cargo command</a></li> -<li><a href="45_ko.html">cargo command</a></li> +<li><a href="44_ko.html">cargo build</a></li> +<li><a href="45_ko.html">cargo publish</a></li> <li><a href="46_ko.html">Chapter 5 - Conclusion</a></li> </ul><h3><a href="chapter_6_ko.html">Chapter 6 - 웹 서버</a></h3><ul> <li><a href="48_ko.html">Hey</a></li> +<li><a href="49_ko.html">Chapter 6 - Conclusion</a></li> +</ul><h3><a href="chapter_7_ko.html">마치며</a></h3><ul> </ul> </div> <div style="display: flex;flex-direction: column;justify-content: center;align-items: center;"> diff --git a/docs/chapter_6_ko.html b/docs/chapter_6_ko.html index 5f9f119..494721a 100644 --- a/docs/chapter_6_ko.html +++ b/docs/chapter_6_ko.html @@ -36,14 +36,26 @@ </div> <div class="page"> <h1>Chapter 6 - 웹 서버</h1> - <p>웹 프레임워크 actix-rs 소개</p> -<p>간단 카카오톡 챗봇 제작</p> + <p>이번 챕터에서는 실제로 Rust로 무엇을 만들면서 배워보려고</p> +<p>Rust의 웹 프레임워크 중 하나인 <a href="https://actix.rs/" target="_blank" rel="noopener">actix-rs</a>에 대해 소개하고자 합니다.</p> +<p>actix-rs는 Rust의 강력한 타입 시스템과 속도를 활용하여 높은 성능과 안전성을 제공하는 웹 프레임워크입니다.</p> +<p>actix-rs는 다음과 같은 특징을 가지고 있습니다.</p> +<ul> +<li>비동기적이고 멀티스레드인 웹 서버를 쉽게 구축할 수 있습니다.</li> +<li>HTTP/1.x와 HTTP/2를 모두 지원합니다.</li> +<li>웹소켓, 스트리밍, 파일 업로드 등 다양한 기능을 제공합니다.</li> +<li>미들웨어, 플러그인, 데이터 추출기 등을 통해 확장성이 뛰어납니다.</li> +<li>템플릿 엔진, 데이터베이스, 인증 등과 같은 다른 라이브러리와 쉽게 통합할 수 있습니다.</li> +</ul> +<p>실제 어떻게 만들 수 있는지 바로 보고 싶으시면 <a href="https://github.com/Alfex4936/Rust-Server/tree/main/chatbot" target="_blank" rel="noopener">아주대 카카오톡 챗봇을 actix-rs</a>로 만든 버전을 참고하세요.</p> <div class="bottomnav"> <span class="back"><a href="46_ko.html" rel="prev">❮ 이전</a></span> <span class="next"><a href="48_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"> + <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=use+actix_web%3A%3A%7Bget%2C+post%2C+web%2C+App%2C+HttpResponse%2C+HttpServer%2C+Responder%7D%3B%0A%0A%23%5Bget%28%22%2F%22%29%5D%0Aasync+fn+hello%28%29+-%3E+impl+Responder+%7B%0A++++HttpResponse%3A%3AOk%28%29.body%28%22Hello+world%21%22%29%0A%7D%0A%0A%23%5Bpost%28%22%2Fecho%22%29%5D%0Aasync+fn+echo%28req_body%3A+String%29+-%3E+impl+Responder+%7B%0A++++HttpResponse%3A%3AOk%28%29.body%28req_body%29%0A%7D%0A%0Aasync+fn+manual_hello%28%29+-%3E+impl+Responder+%7B%0A++++HttpResponse%3A%3AOk%28%29.body%28%22Hey+there%21%22%29%0A%7D%0A%0A%23%5Bactix_web%3A%3Amain%5D%0Aasync+fn+main%28%29+-%3E+std%3A%3Aio%3A%3AResult%3C%28%29%3E+%7B%0A++++HttpServer%3A%3Anew%28%7C%7C+%7B%0A++++++++App%3A%3Anew%28%29%0A++++++++++++.service%28hello%29%0A++++++++++++.service%28echo%29%0A++++++++++++.route%28%22%2Fhey%22%2C+web%3A%3Aget%28%29.to%28manual_hello%29%29%0A++++%7D%29%0A++++.bind%28%28%220.0.0.0%22%2C+8080%29%29%3F+%2F%2F+0.0.0.0%EC%9D%80+%EB%AA%A8%EB%93%A0+IP%2C+%EC%A3%BC%EB%A1%9C+public%ED%95%98%EA%B2%8C+%EC%97%B4+%EB%95%8C+%EC%94%80%0A++++.run%28%29%0A++++.await%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> <script> var pres = document.querySelectorAll("pre>code"); diff --git a/docs/chapter_7_ko.html b/docs/chapter_7_ko.html index 304221f..d04c869 100644 --- a/docs/chapter_7_ko.html +++ b/docs/chapter_7_ko.html @@ -35,16 +35,14 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>부록 - 코드 답안</h1> - <p>챕터 1 답안</p> + <h1>마치며</h1> + <p>CSW</p> <div class="bottomnav"> - <span class="back"><a href="39_ko.html" rel="prev">❮ 이전</a></span> - <span class="next"><a href="41_ko.html" rel="next">다음 ❯</a></span> + <span class="back"><a href="49_ko.html" rel="prev">❮ 이전</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=enum+Shape+%7B%0A++++Circle%28f64%29%2C+++++++++++++%2F%2F+%EB%B0%98%EC%A7%80%EB%A6%84%0A++++Rectangle%28f64%2C+f64%29%2C+++++%2F%2F+%EA%B0%80%EB%A1%9C%2C+%EC%84%B8%EB%A1%9C%0A++++Triangle%28f64%2C+f64%2C+f64%29%2C+%2F%2F+%EC%84%B8+%EB%B3%80%EC%9D%98+%EA%B8%B8%EC%9D%B4%0A%7D%0A%0A%2F%2F+%EB%84%93%EC%9D%B4%EB%A5%BC+%EA%B3%84%EC%82%B0%ED%95%98%EB%8A%94+%ED%95%A8%EC%88%98%0Afn+area%28shape%3A+%26Shape%29+-%3E+f64+%7B%0A++++match+shape+%7B%0A++++++++Shape%3A%3ACircle%28r%29+%3D%3E+3.14+*+r+*+r%2C%0A++++++++Shape%3A%3ARectangle%28w%2C+h%29+%3D%3E+w+*+h%2C%0A++++++++Shape%3A%3ATriangle%28a%2C+b%2C+c%29+%3D%3E+%7B%0A++++++++++++%2F%2F+%EC%82%BC%EA%B0%81%ED%98%95%EC%9D%98+%EB%84%93%EC%9D%B4+%EA%B3%B5%EC%8B%9D%0A++++++++++++let+s+%3D+%28a+%2B+b+%2B+c%29+%2F+2.0%3B%0A++++++++++++let+area+%3D+s+*+%28s+-+a%29+*+%28s+-+b%29+*+%28s+-+c%29%3B%0A++++++++++++%2F%2F+%EB%84%93%EC%9D%B4%EA%B0%80+%EC%9D%8C%EC%88%98%EB%A9%B4+%EC%97%90%EB%9F%AC+%EB%B0%9C%EC%83%9D%0A++++++++++++if+area+%3C+0.0+%7B%0A++++++++++++++++panic%21%28%22Invalid+triangle%22%29%3B%0A++++++++++++%7D+else+%7B%0A++++++++++++++++area.sqrt%28%29%0A++++++++++++%7D%0A++++++++%7D%0A++++%7D%0A%7D%0A%0A%2F%2F+%EB%91%98%EB%A0%88%EB%A5%BC+%EA%B3%84%EC%82%B0%ED%95%98%EB%8A%94+%ED%95%A8%EC%88%98%0Afn+perimeter%28shape%3A+%26Shape%29+-%3E+f64+%7B%0A++++match+shape+%7B%0A++++++++Shape%3A%3ACircle%28r%29+%3D%3E+2.0+*+3.14+*+r%2C%0A++++++++Shape%3A%3ARectangle%28w%2C+h%29+%3D%3E+2.0+*+%28w+%2B+h%29%2C%0A++++++++Shape%3A%3ATriangle%28a%2C+b%2C+c%29+%3D%3E+%7B%0A++++++++++++%2F%2F+%EC%82%BC%EA%B0%81%ED%98%95%EC%9D%98+%EB%91%98%EB%A0%88+%EA%B3%B5%EC%8B%9D%0A++++++++++++let+p+%3D+a+%2B+b+%2B+c%3B%0A++++++++++++%2F%2F+%EB%91%98%EB%A0%88%EA%B0%80+%EC%9D%8C%EC%88%98%EB%A9%B4+%EC%97%90%EB%9F%AC+%EB%B0%9C%EC%83%9D%0A++++++++++++if+p+%3C+0.0+%7B%0A++++++++++++++++panic%21%28%22Invalid+triangle%22%29%3B%0A++++++++++++%7D+else+%7B%0A++++++++++++++++p%0A++++++++++++%7D%0A++++++++%7D%0A++++%7D%0A%7D%0A%0A%2F%2F+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EC%A7%80+%ED%8C%90%EB%B3%84%ED%95%98%EB%8A%94+%ED%95%A8%EC%88%98%0Afn+is_square%28shape%3A+%26Shape%29+-%3E+bool+%7B%0A++++match+shape+%7B%0A++++++++Shape%3A%3ACircle%28_%29+%3D%3E+false%2C%0A++++++++Shape%3A%3ARectangle%28w%2C+h%29+%3D%3E+w+%3D%3D+h%2C%0A++++++++Shape%3A%3ATriangle%28_%2C+_%2C+_%29+%3D%3E+false%2C%0A++++%7D%0A%7D%0A%0A%2F%2F+%EA%B2%B0%EA%B3%BC%0A%2F*%0A%EC%9B%90+%EB%84%93%EC%9D%B4%3A+12.56%0A%EC%82%AC%EA%B0%81%ED%98%95+%EB%84%93%EC%9D%B4%3A+12%0A%EC%82%BC%EA%B0%81%ED%98%95+%EB%84%93%EC%9D%B4%3A+6%0A%EC%9B%90+%EB%91%98%EB%A0%88%3A+12.56%0A%EC%82%AC%EA%B0%81%ED%98%95+%EB%91%98%EB%A0%88%3A+14%0A%EC%82%BC%EA%B0%81%ED%98%95+%EB%91%98%EB%A0%88%3A+12%0A%EC%9B%90%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+false%0A%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+false%0A%EC%82%BC%EA%B0%81%ED%98%95%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+false%0A*%2F%0Afn+main%28%29+%7B%0A++++%2F%2F+Shape+%ED%83%80%EC%9E%85%EC%9D%98+%EA%B0%92%EB%93%A4%EC%9D%84+%EC%83%9D%EC%84%B1%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++let+circle+%3D+Shape%3A%3ACircle%282.0%29%3B%0A++++let+rectangle+%3D+Shape%3A%3ARectangle%283.0%2C+4.0%29%3B%0A++++let+triangle+%3D+Shape%3A%3ATriangle%283.0%2C+4.0%2C+5.0%29%3B%0A%0A++++%2F%2F+%EA%B0%81+%EB%8F%84%ED%98%95%EC%9D%98+%EB%84%93%EC%9D%B4%EB%A5%BC+%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++println%21%28%22%EC%9B%90+%EB%84%93%EC%9D%B4%3A+%7B%7D%22%2C+area%28%26circle%29%29%3B%0A++++println%21%28%22%EC%82%AC%EA%B0%81%ED%98%95+%EB%84%93%EC%9D%B4%3A+%7B%7D%22%2C+area%28%26rectangle%29%29%3B%0A++++println%21%28%22%EC%82%BC%EA%B0%81%ED%98%95+%EB%84%93%EC%9D%B4%3A+%7B%7D%22%2C+area%28%26triangle%29%29%3B%0A%0A++++%2F%2F+%EA%B0%81+%EB%8F%84%ED%98%95%EC%9D%98+%EB%91%98%EB%A0%88%EB%A5%BC+%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++println%21%28%22%EC%9B%90+%EB%91%98%EB%A0%88%3A+%7B%7D%22%2C+perimeter%28%26circle%29%29%3B%0A++++println%21%28%22%EC%82%AC%EA%B0%81%ED%98%95+%EB%91%98%EB%A0%88%3A+%7B%7D%22%2C+perimeter%28%26rectangle%29%29%3B%0A++++println%21%28%22%EC%82%BC%EA%B0%81%ED%98%95+%EB%91%98%EB%A0%88%3A+%7B%7D%22%2C+perimeter%28%26triangle%29%29%3B%0A%0A++++%2F%2F+%EA%B0%81+%EB%8F%84%ED%98%95%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EC%A7%80+%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++println%21%28%22%EC%9B%90%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+%7B%7D%22%2C+is_square%28%26circle%29%29%3B%0A++++println%21%28%22%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+%7B%7D%22%2C+is_square%28%26rectangle%29%29%3B%0A++++println%21%28%22%EC%82%BC%EA%B0%81%ED%98%95%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+%7B%7D%22%2C+is_square%28%26triangle%29%29%3B%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/frontend/lessons/ko/chapter_1.yaml b/frontend/lessons/ko/chapter_1.yaml index 331aae1..9a98081 100644 --- a/frontend/lessons/ko/chapter_1.yaml +++ b/frontend/lessons/ko/chapter_1.yaml @@ -60,7 +60,7 @@ - title: 변수 code: >- https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=fn%20main()%20%7B%0A%20%20%20%20%2F%2F%20let%20%ED%82%A4%EC%9B%8C%EB%93%9C%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%84%A0%EC%96%B8%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20x%20%3D%205%3B%20%2F%2F%20x%EC%97%90%205%EB%9D%BC%EB%8A%94%20%EA%B0%92%EC%9D%84%20%ED%95%A0%EB%8B%B9%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20y%3A%20f32%20%3D%203.14%3B%20%2F%2F%20y%EC%97%90%203.14%EB%9D%BC%EB%8A%94%20%EA%B0%92%EC%9D%84%20%ED%95%A0%EB%8B%B9%ED%95%98%EB%A9%B0%2C%20f32%20%ED%83%80%EC%9E%85%EC%9D%84%20%EB%AA%85%EC%8B%9C%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EC%A7%80%EC%A0%95%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%0A%20%20%20%20%2F%2F%20Rust%EB%8A%94%20%EB%8C%80%EB%B6%80%EB%B6%84%EC%9D%98%20%EA%B2%BD%EC%9A%B0%20%EB%B3%80%EC%88%98%EC%9D%98%20%ED%83%80%EC%9E%85%EC%9D%84%20%EC%B6%94%EB%A1%A0%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%0A%20%20%20%20%2F%2F%20%EB%A7%8C%EC%95%BD%20%ED%83%80%EC%9E%85%EC%9D%84%20%EB%AA%85%EC%8B%9C%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EC%A7%80%EC%A0%95%ED%95%98%EA%B3%A0%20%EC%8B%B6%EB%8B%A4%EB%A9%B4%20%EB%8B%A4%EC%9D%8C%EA%B3%BC%20%EA%B0%99%EC%9D%B4%20%EC%9E%91%EC%84%B1%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20z%3A%20i64%20%3D%20100%3B%0A%0A%20%20%20%20%2F%2F%20%EB%B3%80%EC%88%98%EC%9D%98%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EC%97%AC%EB%9F%AC%20%EB%B2%88%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EA%B0%92%EC%9D%84%20%ED%95%A0%EB%8B%B9%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20mut%20count%20%3D%200%3B%0A%20%20%20%20count%20%3D%201%3B%0A%20%20%20%20count%20%3D%202%3B%0A%0A%20%20%20%20%2F%2F%20%EB%B3%80%EC%88%98%EC%9D%98%20%ED%83%80%EC%9E%85%EC%9D%84%20%EB%B3%80%EA%B2%BD%ED%95%98%EC%97%AC%20%EC%9E%AC%EC%82%AC%EC%9A%A9%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20x%20%3D%20%22hello%22%3B%20%2F%2F%20x%EB%8A%94%20%EB%AC%B8%EC%9E%90%EC%97%B4%20%ED%83%80%EC%9E%85%EC%9E%85%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20x%20%3D%205%3B%20%2F%2F%20x%EB%8A%94%20%EC%A0%95%EC%88%98%20%ED%83%80%EC%9E%85%EC%9C%BC%EB%A1%9C%20%EB%B3%80%EA%B2%BD%EB%90%A9%EB%8B%88%EB%8B%A4.%0A%0A%20%20%20%20%2F%2F%20%EB%B3%80%EC%88%98%EC%9D%98%20%EC%9D%B4%EB%A6%84%EC%9D%80%20snake_case%EB%A1%9C%20%EC%9E%91%EC%84%B1%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20first_name%20%3D%20%22Choi%22%3B%0A%20%20%20%20let%20last_name%20%3D%20%22Blah%22%3B%0A%0A%20%20%20%20%2F%2F%20%EB%B3%80%EC%88%98%EC%9D%98%20%EA%B0%92%EC%9D%84%20%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%20%20%20%20println!(%22x%20is%20%7B%7D%22%2C%20x)%3B%20%2F%2F%20%22x%20is%205%22%EA%B0%80%20%EC%B6%9C%EB%A0%A5%EB%90%A9%EB%8B%88%EB%8B%A4.%0A%7D%0A - content_markdown: > + content_markdown: | Rust에서는 `let` 키워드를 사용하여 변수를 선언합니다. <div align="center"> @@ -71,18 +71,64 @@ 값을 할당할 때, Rust는 거의 대부분 변수의 타입을 추론할 수 있습니다. - 만약 Rust가 추론하지 못하면 변수의 선언 시 타입을 추가할 수 있습니다. - 변수의 이름을 여러 번 사용하여 값을 할당할 수 있습니다. - 이를 "shadowing"이라고 하며, 변수의 타입은 재할당될 때마다 변경됩니다. - 변수의 이름은 항상 `snake_case`로 작성합니다. + + # 팁 + + Rust에서는 `let` 키워드를 사용하여 변수를 만들 때, 표현식을 사용할 수 있습니다. + + 표현식(expression)은 어떤 값을 반환하는 코드 조각을 의미합니다. + + Rust의 `match`와 `if`문은 표현식입니다. 이런 표현식을 사용하여 변수의 값을 초기화할 수 있습니다. + + ## match 표현식 사용하기 + + `match` 표현식은 여러 가지 패턴을 확인하고, 매치되는 패턴에 대한 값을 반환합니다. 예를 들면: + + ```rust + let x = 3; + + let a = match x { + 1 => "one", + 2 => "two", + 3 => "three", + _ => "other", + }; + + println!("The value of a is: {}", a); + ``` + + 위의 코드에서, `x` 값이 3이기 때문에 `a`의 값은 "three"가 됩니다. + + ### if 표현식 사용하기 + + `if` 표현식을 사용하여 조건에 따라 다른 값을 반환할 수도 있습니다. 예를 들면: + + ```rust + let condition = true; + + let a = if condition { + "The condition is true" + } else { + "The condition is false" + }; + + println!("The value of a is: {}", a); + ``` + + 위의 코드에서, `condition` 값이 `true`이므로 `a`의 값은 "The condition is true"가 됩니다. + + 이렇게 표현식을 사용하여 변수를 초기화하는 방식은 Rust에서 흔히 사용되는 문법입니다. + + 이를 통해 코드를 간결하게 작성할 수 있고, 변수의 값이 초기화되는 과정을 명확하게 이해할 수 있습니다. + - title: 변수 업데이트 code: >- https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=fn+main%28%29+%7B%0A++++let+mut+x+%3D+42%3B%0A++++println%21%28%22%7B%7D%22%2C+x%29%3B%0A++++x+%3D+13%3B%0A++++println%21%28%22%7B%7D%22%2C+x%29%3B%0A%0A++++let+y+%3D+23%3B%0A++++println%21%28%22%7B%7D%22%2C+y%29%3B%0A++++%2F%2F+y+%3D+9%3B++%2F%2F+%EC%97%90%EB%9F%AC%0A%7D%0A diff --git a/frontend/lessons/ko/chapter_5.yaml b/frontend/lessons/ko/chapter_5.yaml index 85ea544..9957a48 100644 --- a/frontend/lessons/ko/chapter_5.yaml +++ b/frontend/lessons/ko/chapter_5.yaml @@ -50,7 +50,7 @@ 이렇게 생성된 프로젝트는 바로 빌드 및 실행이 가능한 상태입니다. -- title: cargo command +- title: cargo build source: >- /ferris_lofi.webp content_markdown: > @@ -140,7 +140,7 @@ cargo-korea 프로젝트로 이름을 만들어서 배포하면 됩니다. [@만드는 법 참고](https://choiseokwon.tistory.com/376) -- title: cargo command +- title: cargo publish source: >- /ferris_lofi.webp content_markdown: | diff --git a/frontend/lessons/ko/chapter_6.yaml b/frontend/lessons/ko/chapter_6.yaml index 84a2ed0..1e3d91b 100644 --- a/frontend/lessons/ko/chapter_6.yaml +++ b/frontend/lessons/ko/chapter_6.yaml @@ -1,13 +1,29 @@ - title: Chapter 6 - 웹 서버 - source: >- - /ajou.webp - content_markdown: > - 웹 프레임워크 actix-rs 소개 + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=use+actix_web%3A%3A%7Bget%2C+post%2C+web%2C+App%2C+HttpResponse%2C+HttpServer%2C+Responder%7D%3B%0A%0A%23%5Bget%28%22%2F%22%29%5D%0Aasync+fn+hello%28%29+-%3E+impl+Responder+%7B%0A++++HttpResponse%3A%3AOk%28%29.body%28%22Hello+world%21%22%29%0A%7D%0A%0A%23%5Bpost%28%22%2Fecho%22%29%5D%0Aasync+fn+echo%28req_body%3A+String%29+-%3E+impl+Responder+%7B%0A++++HttpResponse%3A%3AOk%28%29.body%28req_body%29%0A%7D%0A%0Aasync+fn+manual_hello%28%29+-%3E+impl+Responder+%7B%0A++++HttpResponse%3A%3AOk%28%29.body%28%22Hey+there%21%22%29%0A%7D%0A%0A%23%5Bactix_web%3A%3Amain%5D%0Aasync+fn+main%28%29+-%3E+std%3A%3Aio%3A%3AResult%3C%28%29%3E+%7B%0A++++HttpServer%3A%3Anew%28%7C%7C+%7B%0A++++++++App%3A%3Anew%28%29%0A++++++++++++.service%28hello%29%0A++++++++++++.service%28echo%29%0A++++++++++++.route%28%22%2Fhey%22%2C+web%3A%3Aget%28%29.to%28manual_hello%29%29%0A++++%7D%29%0A++++.bind%28%28%220.0.0.0%22%2C+8080%29%29%3F+%2F%2F+0.0.0.0%EC%9D%80+%EB%AA%A8%EB%93%A0+IP%2C+%EC%A3%BC%EB%A1%9C+public%ED%95%98%EA%B2%8C+%EC%97%B4+%EB%95%8C+%EC%94%80%0A++++.run%28%29%0A++++.await%0A%7D%0A + content_markdown: | + 이번 챕터에서는 실제로 Rust로 무엇을 만들면서 배워보려고 + + Rust의 웹 프레임워크 중 하나인 [actix-rs](https://actix.rs/)에 대해 소개하고자 합니다. + + actix-rs는 Rust의 강력한 타입 시스템과 속도를 활용하여 높은 성능과 안전성을 제공하는 웹 프레임워크입니다. + + actix-rs는 다음과 같은 특징을 가지고 있습니다. + - 비동기적이고 멀티스레드인 웹 서버를 쉽게 구축할 수 있습니다. + - HTTP/1.x와 HTTP/2를 모두 지원합니다. + - 웹소켓, 스트리밍, 파일 업로드 등 다양한 기능을 제공합니다. + - 미들웨어, 플러그인, 데이터 추출기 등을 통해 확장성이 뛰어납니다. + - 템플릿 엔진, 데이터베이스, 인증 등과 같은 다른 라이브러리와 쉽게 통합할 수 있습니다. - 간단 카카오톡 챗봇 제작 + 실제 어떻게 만들 수 있는지 바로 보고 싶으시면 [아주대 카카오톡 챗봇을 actix-rs](https://github.com/Alfex4936/Rust-Server/tree/main/chatbot)로 만든 버전을 참고하세요. - title: Hey source: >- /ferris_lofi.png - content_markdown: > + content_markdown: | + CSW +- title: Chapter 6 - Conclusion + source: >- + /ferris_lofi.png + content_markdown: | CSW diff --git a/frontend/lessons/ko/chapter_7.yaml b/frontend/lessons/ko/chapter_7.yaml index 3e0d388..fae02dd 100644 --- a/frontend/lessons/ko/chapter_7.yaml +++ b/frontend/lessons/ko/chapter_7.yaml @@ -1,11 +1,5 @@ -- title: 부록 - 코드 답안 - code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=enum+Shape+%7B%0A++++Circle%28f64%29%2C+++++++++++++%2F%2F+%EB%B0%98%EC%A7%80%EB%A6%84%0A++++Rectangle%28f64%2C+f64%29%2C+++++%2F%2F+%EA%B0%80%EB%A1%9C%2C+%EC%84%B8%EB%A1%9C%0A++++Triangle%28f64%2C+f64%2C+f64%29%2C+%2F%2F+%EC%84%B8+%EB%B3%80%EC%9D%98+%EA%B8%B8%EC%9D%B4%0A%7D%0A%0A%2F%2F+%EB%84%93%EC%9D%B4%EB%A5%BC+%EA%B3%84%EC%82%B0%ED%95%98%EB%8A%94+%ED%95%A8%EC%88%98%0Afn+area%28shape%3A+%26Shape%29+-%3E+f64+%7B%0A++++match+shape+%7B%0A++++++++Shape%3A%3ACircle%28r%29+%3D%3E+3.14+*+r+*+r%2C%0A++++++++Shape%3A%3ARectangle%28w%2C+h%29+%3D%3E+w+*+h%2C%0A++++++++Shape%3A%3ATriangle%28a%2C+b%2C+c%29+%3D%3E+%7B%0A++++++++++++%2F%2F+%EC%82%BC%EA%B0%81%ED%98%95%EC%9D%98+%EB%84%93%EC%9D%B4+%EA%B3%B5%EC%8B%9D%0A++++++++++++let+s+%3D+%28a+%2B+b+%2B+c%29+%2F+2.0%3B%0A++++++++++++let+area+%3D+s+*+%28s+-+a%29+*+%28s+-+b%29+*+%28s+-+c%29%3B%0A++++++++++++%2F%2F+%EB%84%93%EC%9D%B4%EA%B0%80+%EC%9D%8C%EC%88%98%EB%A9%B4+%EC%97%90%EB%9F%AC+%EB%B0%9C%EC%83%9D%0A++++++++++++if+area+%3C+0.0+%7B%0A++++++++++++++++panic%21%28%22Invalid+triangle%22%29%3B%0A++++++++++++%7D+else+%7B%0A++++++++++++++++area.sqrt%28%29%0A++++++++++++%7D%0A++++++++%7D%0A++++%7D%0A%7D%0A%0A%2F%2F+%EB%91%98%EB%A0%88%EB%A5%BC+%EA%B3%84%EC%82%B0%ED%95%98%EB%8A%94+%ED%95%A8%EC%88%98%0Afn+perimeter%28shape%3A+%26Shape%29+-%3E+f64+%7B%0A++++match+shape+%7B%0A++++++++Shape%3A%3ACircle%28r%29+%3D%3E+2.0+*+3.14+*+r%2C%0A++++++++Shape%3A%3ARectangle%28w%2C+h%29+%3D%3E+2.0+*+%28w+%2B+h%29%2C%0A++++++++Shape%3A%3ATriangle%28a%2C+b%2C+c%29+%3D%3E+%7B%0A++++++++++++%2F%2F+%EC%82%BC%EA%B0%81%ED%98%95%EC%9D%98+%EB%91%98%EB%A0%88+%EA%B3%B5%EC%8B%9D%0A++++++++++++let+p+%3D+a+%2B+b+%2B+c%3B%0A++++++++++++%2F%2F+%EB%91%98%EB%A0%88%EA%B0%80+%EC%9D%8C%EC%88%98%EB%A9%B4+%EC%97%90%EB%9F%AC+%EB%B0%9C%EC%83%9D%0A++++++++++++if+p+%3C+0.0+%7B%0A++++++++++++++++panic%21%28%22Invalid+triangle%22%29%3B%0A++++++++++++%7D+else+%7B%0A++++++++++++++++p%0A++++++++++++%7D%0A++++++++%7D%0A++++%7D%0A%7D%0A%0A%2F%2F+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EC%A7%80+%ED%8C%90%EB%B3%84%ED%95%98%EB%8A%94+%ED%95%A8%EC%88%98%0Afn+is_square%28shape%3A+%26Shape%29+-%3E+bool+%7B%0A++++match+shape+%7B%0A++++++++Shape%3A%3ACircle%28_%29+%3D%3E+false%2C%0A++++++++Shape%3A%3ARectangle%28w%2C+h%29+%3D%3E+w+%3D%3D+h%2C%0A++++++++Shape%3A%3ATriangle%28_%2C+_%2C+_%29+%3D%3E+false%2C%0A++++%7D%0A%7D%0A%0A%2F%2F+%EA%B2%B0%EA%B3%BC%0A%2F*%0A%EC%9B%90+%EB%84%93%EC%9D%B4%3A+12.56%0A%EC%82%AC%EA%B0%81%ED%98%95+%EB%84%93%EC%9D%B4%3A+12%0A%EC%82%BC%EA%B0%81%ED%98%95+%EB%84%93%EC%9D%B4%3A+6%0A%EC%9B%90+%EB%91%98%EB%A0%88%3A+12.56%0A%EC%82%AC%EA%B0%81%ED%98%95+%EB%91%98%EB%A0%88%3A+14%0A%EC%82%BC%EA%B0%81%ED%98%95+%EB%91%98%EB%A0%88%3A+12%0A%EC%9B%90%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+false%0A%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+false%0A%EC%82%BC%EA%B0%81%ED%98%95%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+false%0A*%2F%0Afn+main%28%29+%7B%0A++++%2F%2F+Shape+%ED%83%80%EC%9E%85%EC%9D%98+%EA%B0%92%EB%93%A4%EC%9D%84+%EC%83%9D%EC%84%B1%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++let+circle+%3D+Shape%3A%3ACircle%282.0%29%3B%0A++++let+rectangle+%3D+Shape%3A%3ARectangle%283.0%2C+4.0%29%3B%0A++++let+triangle+%3D+Shape%3A%3ATriangle%283.0%2C+4.0%2C+5.0%29%3B%0A%0A++++%2F%2F+%EA%B0%81+%EB%8F%84%ED%98%95%EC%9D%98+%EB%84%93%EC%9D%B4%EB%A5%BC+%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++println%21%28%22%EC%9B%90+%EB%84%93%EC%9D%B4%3A+%7B%7D%22%2C+area%28%26circle%29%29%3B%0A++++println%21%28%22%EC%82%AC%EA%B0%81%ED%98%95+%EB%84%93%EC%9D%B4%3A+%7B%7D%22%2C+area%28%26rectangle%29%29%3B%0A++++println%21%28%22%EC%82%BC%EA%B0%81%ED%98%95+%EB%84%93%EC%9D%B4%3A+%7B%7D%22%2C+area%28%26triangle%29%29%3B%0A%0A++++%2F%2F+%EA%B0%81+%EB%8F%84%ED%98%95%EC%9D%98+%EB%91%98%EB%A0%88%EB%A5%BC+%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++println%21%28%22%EC%9B%90+%EB%91%98%EB%A0%88%3A+%7B%7D%22%2C+perimeter%28%26circle%29%29%3B%0A++++println%21%28%22%EC%82%AC%EA%B0%81%ED%98%95+%EB%91%98%EB%A0%88%3A+%7B%7D%22%2C+perimeter%28%26rectangle%29%29%3B%0A++++println%21%28%22%EC%82%BC%EA%B0%81%ED%98%95+%EB%91%98%EB%A0%88%3A+%7B%7D%22%2C+perimeter%28%26triangle%29%29%3B%0A%0A++++%2F%2F+%EA%B0%81+%EB%8F%84%ED%98%95%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EC%A7%80+%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++println%21%28%22%EC%9B%90%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+%7B%7D%22%2C+is_square%28%26circle%29%29%3B%0A++++println%21%28%22%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+%7B%7D%22%2C+is_square%28%26rectangle%29%29%3B%0A++++println%21%28%22%EC%82%BC%EA%B0%81%ED%98%95%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+%7B%7D%22%2C+is_square%28%26triangle%29%29%3B%0A%7D%0A - content_markdown: > - 챕터 1 답안 - -- title: Hey +- title: 마치며 source: >- /ferris_lofi.png - content_markdown: > + content_markdown: | CSW -- GitLab