diff --git a/Quest00/README.md b/Quest00/README.md
index 006bc98ad..736a98d5d 100644
--- a/Quest00/README.md
+++ b/Quest00/README.md
@@ -16,12 +16,90 @@
## Checklist
* 형상관리 시스템은 왜 나오게 되었을까요?
+* -
+💡 소프트웨어의 변경사항을 체계적으로 추적하고 통제하는 것.
+
+형상 관리는 일반적인 단순 버전관리 기반의 소프트웨어 운용을 좀 더 포괄적인 학술 분야의 형태로 넓히는 근간.
+
+소프트웨어 개발에서는 단순 파일 변경내역을 관리할 뿐만 아니라 소프트웨어 개발에서 발생할 수 있는 다양한 결과물(요구사항 정의서, 설계 문서, 코드 등등)에 대해 형상을 만들고 이를 체계적으로 관리하고자 나오게되었다.
+
+
+
* git은 어떤 형상관리 시스템이고 어떤 특징을 가지고 있을까요? 분산형 형상관리 시스템이란 무엇일까요?
+
+- 특징 : 2005년 개발된 형상관리 도구로 매우 빠른 속도를 가지고 있으며 분산형 관리 시스템을 가지고 있다. 다른 형상관리 도구에 비해 다양한 기능을 지원하며 최근 가장 대중화되어 사용되고 있다. 처음 사용시 다른 도구에 비해 사용법을 숙지하는데 어려움을 가질 수 있으나 로컬 관리와 중앙 관리가 모두 가능하여 장소에 구애받지 않고 협업을 가능케 한다.
+
+* 분산형 형상관리 시스템이란,
+ - 분산버전관리 시스템에서 저장소는 모든 클라이언트가 저장소가 될 수 있다. 예를 들어 TFS에서 get latest version을 통해 저장소에서 프로젝트를 가져오면, 저장소에서 사용자의 컴퓨터에 최신의 코드를 받아오게 된다. 이 말은 소스 코드는 물론 그동안의 변경 이력까지 모든 정보를 가져와 로컬 컴퓨터 또한 완전한 저장소가 된다
+
+
+
* git은 어떻게 개발되게 되었을까요? git이 분산형 시스템을 채택한 이유는 무엇일까요?
+ - * git을 분산형 시스템으로 채택한 이유
+ - 하나의 서버에 집중되어 모든 작업 내역이 저장되는 중앙 집중형 형상관리 체계와 달리 개개인의 작업 히스토리 역시 각자의 서버에 저장해 관리될 수 있어 같은 파일 하나를 여러명이 동시에 작업하는 병렬 개발이 가능하며 'commit'이라는 행위 자체가 공동 코드로 즉시 병합됨을 의미하지 않아 개인 작업/공동 작업으로 분리될 수 있다. 따라서, 예기치 못 한 충돌이나 변경 사항을 해결하기 위한 시간을 최소화 시켜준다
+ -
* git과 GitHub은 어떻게 다를까요?
+ - git은 형상관리 도구이며, github는 git을 공유/업로드 할 수 잇는 눈에 보이는 웹 호스팅 서비스, 즉 플랫폼이다.
+
* git의 clone/add/commit/push/pull/branch/stash 명령은 무엇이며 어떨 때 이용하나요? 그리고 어떻게 사용하나요?
+ - git clone : 원격 저장소에 있는 작업/프로젝트를 로컬 저장소로 가지고 오는(복제) 명령어
+- git add : 작업 중인 로컬 저장소에 있는 파일들을 스테이징 상태로 변경시켜주는(커밋 가능한 상태) 명령어
+- git commit : 로컬 저장소(디렉토리)에 있는 모든 파일에 대한 스냅샷(이전 스냅샷과 비교하여 변경된 부분)을 기록하는 명령어
+- git push : 로컬 저장소에서 작업한 후 commit한 내역을 원격 저장소로 보내는 명령어
+- git pull : push와 반대로 원격 저장소에 업로드된 작업 내역을 로컬 저장소로 가져오고 싶을 때 사용하는 명령어
+- git branch : 여러 명이 각기 다른 저장소에서 작업하고 싶을 때 작업 공간(branch)를 만들어주는 명령어로 모든 브랜치의 목록을 보거나, 생성하고 삭제할 수 있음
+- git stash : 지금 바로 commit 하고 싶지는 않지만 다른 작업을 해야 할 때 저장해놓고 나중에 가져와서 쓰려고 할 때 사용하는 저장소이자 명령어
+
* git의 Object, Commit, Head, Branch, Tag는 어떤 개념일까요? git 시스템은 프로젝트의 히스토리를 어떻게 저장할까요?
+ - **Object 파일 개념 정리**
+
+깃은 Git.디렉토리 안에 objects 디렉토리에 파일과 관련해 총 세가지 유형을 가지게 된다.
+
+1. blob : 실제 데이터를 저장
+
+2. tree : commit한 시점의 버전의 파일들의 주소를 저장
+
+3. commit : tree의 주소와 이전 버전의 주소를 저장
+
+이는 위로 갈수록 세부적인 실제 데이터를 가지게 된다.
+
+working directory (working copy, working tree)
+
+기본적으로 우리가 볼 수 있는 디렉토리 우리가 지금 현재 파일을 다루는 디렉토리를 말한다.
+
+---
+
+- Head : 모든 브렌치에는 HEAD값이 존재하는데, HEAD는 브렌치의 마지막 커밋 즉 현재 속한 브랜치의 가장 최신 커밋을 의미합니다.
+
+## **예시**
+
+### checkout으로 앞뒤 이동
+
+⭐️ **^ 또는 ~: 갯수만큼 해당 브렌치의 이전(옛날)으로 이동**
+
+```
+git checkout HEAD^
+```
+
+```
+git checkout HEAD^^^
+```
+
+## **⭐️ -: 해당 브랜치의 한 단계 최근 커밋으로 이동**
+
+```
+git checkout -
+```
+
+---
+
+- Commit : commit 객체는 tree 객체에 대한 참조, 부모(이전 커밋) 객체와 작성자와 같은 메타 데이터에 대한 참조를 저장한다.
+- Branch : 효과적으로 파일의 변경사항에 대한 스냅샷을 보여주는 포인터의 일종이다. 새로운 기능을 추가하거나 버그/이슈를 수정할 때 브랜치를 생성/사용하여 효율적으로 작업을 할 수 있다.
+- Tag : 특정 commit에 별명을 붙여주는 명령어로 Tag를 통해서 commit 상태로 쉽게 변경하거나 reset을 통해 돌아가는 것 역시 쉽다. release 버전을 명시해 특정 태그에 해당하는 버전을 배포할 수도 있다.
+
+
* 리모트 git 저장소에 원하지 않는 파일이 올라갔을 때 이를 되돌리려면 어떻게 해야 할까요?
+ - git log에서 해당 파일 업로드된 commit id 확인하고, git reset --hard 되돌리고자 하는 commit id 를 입력 하여 되돌린다.
## Quest
* GitHub에 가입한 뒤, [이 커리큘럼의 GitHub 저장소](https://github.com/KnowRe-Dev/WebDevCurriculum)의 우상단의 Fork 버튼을 눌러 자신의 저장소에 복사해 둡니다.
diff --git a/Quest00/sandbox/CommitTest.txt b/Quest00/sandbox/CommitTest.txt
new file mode 100644
index 000000000..f8a612e3f
--- /dev/null
+++ b/Quest00/sandbox/CommitTest.txt
@@ -0,0 +1 @@
+commit test
\ No newline at end of file
diff --git a/Quest01/README.md b/Quest01/README.md
index f3741ed0a..879ff8600 100644
--- a/Quest01/README.md
+++ b/Quest01/README.md
@@ -1,55 +1,110 @@
# Quest 01. HTML과 웹의 기초
## Introduction
-* HTML은 HyperText Markup Language의 약자로, 웹 브라우저에 내용을 표시하기 위한 가장 기본적인 언어입니다. 이번 퀘스트를 통해 HTML에 관한 기초적인 사항들을 알아볼 예정입니다.
+
+- HTML은 HyperText Markup Language의 약자로, 웹 브라우저에 내용을 표시하기 위한 가장 기본적인 언어입니다. 이번 퀘스트를 통해 HTML에 관한 기초적인 사항들을 알아볼 예정입니다.
## Topics
-* HTML의 역사
- * HTML 4.01, XHTML 1.0, XHTML 1.1
- * XHTML 2.0과 HTML5의 대립
- * HTML5와 현재
-* 브라우저의 역사
- * Mosaic와 Netscape
- * Internet Explorer의 독점시대
- * Firefox와 Chrome의 등장
- * iOS Safari와 모바일 환경의 브라우저
- * Edge와 Whale 등의 최근의 Chromium 계열 브라우저
-* HTML 문서의 구조
- * ``, `
`와 `` 등의 HTML 문서의 기본 구조
- * 시맨틱 엘리먼트
- * 블록 엘리먼트와 인라인 엘리먼트의 차이
+
+- HTML의 역사
+ - HTML 4.01, XHTML 1.0, XHTML 1.1
+ - XHTML 2.0과 HTML5의 대립
+ - HTML5와 현재
+- 브라우저의 역사
+ - Mosaic와 Netscape
+ - Internet Explorer의 독점시대
+ - Firefox와 Chrome의 등장
+ - iOS Safari와 모바일 환경의 브라우저
+ - Edge와 Whale 등의 최근의 Chromium 계열 브라우저
+- HTML 문서의 구조
+ - ``, ``와 `` 등의 HTML 문서의 기본 구조
+ - 시맨틱 엘리먼트
+ - 블록 엘리먼트와 인라인 엘리먼트의 차이
## Resources
-* [MDN - HTML](https://developer.mozilla.org/ko/docs/Web/HTML)
-* [HTML For Beginners](https://html.com/)
-* [History of the web browser](https://en.wikipedia.org/wiki/History_of_the_web_browser)
-* [History of HTML](https://en.wikipedia.org/wiki/HTML)
-* [StatCounter](https://gs.statcounter.com/)
+
+- [MDN - HTML](https://developer.mozilla.org/ko/docs/Web/HTML)
+- [HTML For Beginners](https://html.com/)
+- [History of the web browser](https://en.wikipedia.org/wiki/History_of_the_web_browser)
+- [History of HTML](https://en.wikipedia.org/wiki/HTML)
+- [StatCounter](https://gs.statcounter.com/)
## Checklist
-* HTML 표준의 역사는 어떻게 될까요?
- * HTML 표준을 지키는 것은 왜 중요할까요?
- * XHTML 2.0은 왜 세상에 나오지 못하게 되었을까요?
- * HTML5 표준은 어떤 과정을 통해 정해질까요?
-* 브라우저의 역사는 어떻게 될까요?
- * Internet Explorer가 브라우저 시장을 독점하면서 어떤 문제가 일어났고, 이 문제는 어떻게 해결되었을까요?
- * 현재 시점에 브라우저별 점유율은 어떻게 될까요? 이 브라우저별 점유율을 알아보는 것은 왜 중요할까요?
- * 브라우저 엔진(렌더링 엔진)이란 무엇일까요? 어떤 브라우저들이 어떤 엔진을 쓸까요?
- * 모바일 시대 이후, 최근에 출시된 브라우저들은 어떤 특징을 가지고 있을까요?
-* HTML 문서는 어떤 구조로 이루어져 있나요?
- * ``에 자주 들어가는 엘리먼트들은 어떤 것이 있고, 어떤 역할을 할까요?
- * 시맨틱 태그는 무엇일까요?
- * 시맨틱 엘리먼트를 사용하면 어떤 점이 좋을까요?
- * ``과 ``, `
`, ``, `` 엘리먼트의 차이점은 무엇인가요?
- * 블록 레벨 엘리먼트와 인라인 엘리먼트는 어떤 차이가 있을까요?
+
+- HTML 표준의 역사는 어떻게 될까요?
+
+ - HTML 표준을 지키는 것은 왜 중요할까요?
+ 답 : 표준을 알아야 누구나 접근할 수 있게 되어 차별없는 접근이 가능. 이러한 상호 간의 호환성이 이유이다. 산업에 있어서도 규격화된 기준이 있으면 개발과 제작물을 만드는데 편함.
+
+ - XHTML 2.0은 왜 세상에 나오지 못하게 되었을까요?
+ 답: xml과 html 을 합성하여 확장된 태그와 엄격한 문법을 가진 xhtml이며, xml은 버전과 버전사이의 하위 호환성을 지원하지 않고 이전 태그들이 사용도 안되는 문제도 존재.
+
+ - HTML5 표준은 어떤 과정을 통해 정해질까요?
+ 답: w3c의 정기적인 컨소시엄을 통해 10년간 w3c 권고안을 발표한다. 이런 웹에 관하여 토론할 수 있는 열린포럼, 심포지엄을 통해 사용자의 불편을 이해하고 차기 표준안을 반영할 수 있게 지속적인 활동함.
+
+- 브라우저의 역사는 어떻게 될까요?
+ 답: 브라우저는 1990년대 초반에 시작되었고, 그 당시에는 텍스트와 이미지만을 표시가 가능했다. 1993년에 Mosaic 개발하면서 그래픽 및 멀티미디어 지원 가능해지고 사용자들이 웹 컨텐츠가 더 많아짐.
+
+ - Internet Explorer가 브라우저 시장을 독점하면서 어떤 문제가 일어났고, 이 문제는 어떻게 해결되었을까요?
+ 답: Internet Explorer 는 웹 표준을 준수하지 않아서 사이트를 구현시 거기에 맞춰서 해야했다. 또한 보안취약점이 많아서 사용자들이 개인 정보 유출 빈도가 많았음. Eu와 미국정부에서 인터넷 익스플로러를 제거하거나 다른 브라우저를 기본 브라우저로 지정하고, 웹 표준 준수도 개선시켜, 웹 개발자들이 웹 사이트를 구현할 때 호환성 문제를 최소화시킴.
+
+ - 현재 시점에 브라우저별 점유율은 어떻게 될까요? 이 브라우저별 점유율을 알아보는 것은 왜 중요할까요?
+ 답: 2020년 기준 크롬이 64.1% 압도적 1위이며 뒤이어 사파리 17.7% , 파이어폭스 4.6 %로 되어있다.
+ 점유율을 알아보는 것이 중요한 이유는 웹 개발자와 디자이너에게 중요한 정보를 제공해주며, 마케팅과 비즈니스 전략 수립에 도움이되고, 웹 표준 준수를 위한 가이드 제공, 웹 기술의 발전을 예측하는 데 도움이 되기 때문이다.
+
+ - 브라우저 엔진(렌더링 엔진)이란 무엇일까요? 어떤 브라우저들이 어떤 엔진을 쓸까요?
+ 답: 브라우저 엔진이란 내용 정보인 HTML, XML과 서식정보인 CSS,XML 등을 읽어들여 사람이 읽을 수 있는 문서로 표시하는, 웹 브라우저의 핵심 기능을 담당하는 소프트웨어이다.
+ 구글 크롬: Blink 엔진
+ 모질라 파이어폭스: Gecko 엔진
+ 애플 사파리: WebKit 엔진
+ 마이크로소프트 엣지: Blink 엔진 또는 이전에는 Trident 엔진
+ 인터넷 익스플로러: Trident 엔진
+ 오페라: Blink 엔진
+ 모질라 파이어폭스는 Quantum 엔진을 개발하여 자체 엔진을 개발하여 씀.
+
+ - 모바일 시대 이후, 최근에 출시된 브라우저들은 어떤 특징을 가지고 있을까요?
+ 답: 1. 모바일 퍼스트 디자인: 모바일 사용량이 PC 사용을 앞서고 나서, 최근 브라우저들이 모바일 퍼스트 디자인을 채택함. 2. 브라우저 제작사들은 보안 강화를 위해 매년 보안 업데이트 출시, 그리고 브라우저에서 HTTPS 프로토콜을 사용하여 개인정보 보호 3. HTML5와 CSS3은 최신 웹 기술의 예로서, 이제 모든 브라우저에서 이러한 웹 표준을 지원 4. 인공지능 기술의 적용: 인공지능 기술을 활용한 브라우저가 등장하고 있다. 5. 다양한 기기 지원: 모바일 기기뿐만 아니라 데스크탑, 노트북, 태블릿 등 다양한 기기에서 동작하도록 최적화된 브라우저들이 출시되고 있다.
+
+- HTML 문서는 어떤 구조로 이루어져 있나요?
+답: 선언: 문서가 HTML5로 작성되었음을 나타냄
+ 요소: HTML 문서의 루트 요소로, 모든 내용이 포함
+ 요소: 문서의 메타데이터를 정의합니다. 이 요소 안에는 문서 제목, 스타일 시트, 스크립트, 메타 태그 등이 포함
+ 요소: 문서의 제목을 정의합니다. 브라우저 탭에 표시
+ 요소: 문서의 본문을 정의합니다. 웹 페이지에서 실제로 보여지는 내용들이 포함
+
diff --git a/Quest04/README.md b/Quest04/README.md
index c44fbb1c1..6ac66f4d0 100644
--- a/Quest04/README.md
+++ b/Quest04/README.md
@@ -1,47 +1,79 @@
# Quest 04. OOP의 기본
## Introduction
-* 이번 퀘스트에서는 바닐라 자바스크립트의 객체지향 프로그래밍에 대해 알아볼 예정입니다.
+
+- 이번 퀘스트에서는 바닐라 자바스크립트의 객체지향 프로그래밍에 대해 알아볼 예정입니다.
## Topics
-* 객체지향 프로그래밍
- * 프로토타입 기반 객체지향 프로그래밍
- * 자바스크립트 클래스
- * 생성자
- * 멤버 함수
- * 멤버 변수
- * 정보의 은폐
- * 다형성
-* 코드의 재사용
+
+- 객체지향 프로그래밍
+ - 프로토타입 기반 객체지향 프로그래밍
+ - 자바스크립트 클래스
+ - 생성자
+ - 멤버 함수
+ - 멤버 변수
+ - 정보의 은폐
+ - 다형성
+- 코드의 재사용
## Resources
-* [MDN - Classes](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Classes)
-* [MDN - Inheritance and the prototype chain](https://developer.mozilla.org/ko/docs/Web/JavaScript/Inheritance_and_the_prototype_chain)
-* [MDN - Inheritance](https://developer.mozilla.org/ko/docs/Learn/JavaScript/Objects/Inheritance)
-* [Polymorphism](https://medium.com/@viktor.kukurba/object-oriented-programming-in-javascript-3-polymorphism-fb564c9f1ce8)
-* [Class Composition](https://alligator.io/js/class-composition/)
-* [Inheritance vs Composition](https://woowacourse.github.io/javable/post/2020-05-18-inheritance-vs-composition/)
+
+- [MDN - Classes](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Classes)
+- [MDN - Inheritance and the prototype chain](https://developer.mozilla.org/ko/docs/Web/JavaScript/Inheritance_and_the_prototype_chain)
+- [MDN - Inheritance](https://developer.mozilla.org/ko/docs/Learn/JavaScript/Objects/Inheritance)
+- [Polymorphism](https://medium.com/@viktor.kukurba/object-oriented-programming-in-javascript-3-polymorphism-fb564c9f1ce8)
+- [Class Composition](https://alligator.io/js/class-composition/)
+- [Inheritance vs Composition](https://woowacourse.github.io/javable/post/2020-05-18-inheritance-vs-composition/)
## Checklist
-* 객체지향 프로그래밍은 무엇일까요?
- * `#`로 시작하는 프라이빗 필드는 왜 필요한 것일까요? 정보를 은폐(encapsulation)하면 어떤 장점이 있을까요?
- * 다형성이란 무엇인가요? 다형성은 어떻게 코드 구조의 정리를 도와주나요?
- * 상속이란 무엇인가요? 상속을 할 때의 장점과 단점은 무엇인가요?
- * OOP의 합성(Composition)이란 무엇인가요? 합성이 상속에 비해 가지는 장점은 무엇일까요?
-* 자바스크립트의 클래스는 어떻게 정의할까요?
- * 프로토타입 기반의 객체지향 프로그래밍은 무엇일까요?
- * 자바스크립트의 클래스는 이전의 프로토타입 기반의 객체지향 구현과 어떤 관계를 가지고 있나요?
+
+- 객체지향 프로그래밍은 무엇일까요?
+ 답: 객체 지향 프로그래밍은 문제를 해결하기 위해 필요한 객체 만들고, 그 객체들간의 상호 작용을 통해 문제 해결 방법.
+
+ - `#`로 시작하는 프라이빗 필드는 왜 필요한 것일까요? 정보를 은폐(encapsulation)하면 어떤 장점이 있을까요?
+ :`#`은 객체지향프로그맹 언어에서 캡슐화 원칙을 따르기 위해 필요함. 캡슐화를 통해 객체의 세부 내용 은폐가 되며 이 은폐 덕분에 변경이 발생시 오류 발생이 적고 재사용하기 편리함.
+
+ - 다형성이란 무엇인가요? 다형성은 어떻게 코드 구조의 정리를 도와주나요?
+ 답: -다형성은 같은 타입 또는 클래스를 상속받은 서로 다른 클래스 객체가 같은 메서드를 호출할 때, 각자 다른 방식으로 동작하도록 하는 것을 말한다.
+
+ * 그래서 동일한 프로토타입에도 실행결과가 다른 객체로써 활용 가능.
+
+ - 상속이란 무엇인가요? 상속을 할 때의 장점과 단점은 무엇인가요?
+ 답: 상속이란 객체들간의 관계를 구축하는 방법이다.
+ 장점 : 코드 재사용성에 좋음.
+ 유지보수성이 높아진다.
+ 다향성을 지원.
+ 단점 : 의존성이 높아짐 (하위 클래스가 상위클래스에 의존하기 때문에)
+ 가독성이 떨어짐.
+ 오버라이딩 문제 발생.
+
+ - OOP의 합성(Composition)이란 무엇인가요? 합성이 상속에 비해 가지는 장점은 무엇일까요?
+ 답: OOP의 합성은 두개 이상의 클래스를 조합하여 새로운 클래스로 만드는 방법.
+ 합성의 장점은 객체를 더 작은 부분으로 나누어 다른 클래스에 포함시킬 수 있다는 것.
+
+- 자바스크립트의 클래스는 어떻게 정의할까요?
+ 답: ES6에서 부터 "class"키워드를 사용하여 정의한다. 예) class 함수명 {
+ ...
+ }
+
+ - 프로토타입 기반의 객체지향 프로그래밍은 무엇일까요?
+ 답: 프로토타입 객체를 먼저 만들고 이것을 토대로 새로운 객체 생성.(템플릿역할)
+
+ - 자바스크립트의 클래스는 이전의 프로토타입 기반의 객체지향 구현과 어떤 관계를 가지고 있나요?
+ 답: ?? (이부분은 정확한 관계를 잘 모르겠음) 클래스 문법은 프로토타입 기반의 객체 지향 프로그래밍을 더 쉽고 직관적으로 사용할 수 있도록 개선하게 해줌
## Quest
-* 웹 상에서 동작하는 간단한 바탕화면 시스템을 만들 예정입니다.
-* 요구사항은 다음과 같습니다:
- * 아이콘은 폴더와 일반 아이콘, 두 가지의 종류가 있습니다.
- * 아이콘들을 드래그를 통해 움직일 수 있어야 합니다.
- * 폴더 아이콘은 더블클릭하면 해당 폴더가 창으로 열리며, 열린 폴더의 창 역시 드래그를 통해 움직일 수 있어야 합니다.
- * 바탕화면의 생성자를 통해 처음에 생겨날 아이콘과 폴더의 개수를 받을 수 있습니다.
- * 여러 개의 바탕화면을 각각 다른 DOM 엘리먼트에서 동시에 운영할 수 있습니다.
- * Drag & Drop API를 사용하지 말고, 실제 마우스 이벤트(mouseover, mousedown, mouseout 등)를 사용하여 구현해 보세요!
+
+- 웹 상에서 동작하는 간단한 바탕화면 시스템을 만들 예정입니다.
+- 요구사항은 다음과 같습니다:
+ - 아이콘은 폴더와 일반 아이콘, 두 가지의 종류가 있습니다.
+ - 아이콘들을 드래그를 통해 움직일 수 있어야 합니다.
+ - 폴더 아이콘은 더블클릭하면 해당 폴더가 창으로 열리며, 열린 폴더의 창 역시 드래그를 통해 움직일 수 있어야 합니다.
+ - 바탕화면의 생성자를 통해 처음에 생겨날 아이콘과 폴더의 개수를 받을 수 있습니다.
+ - 여러 개의 바탕화면을 각각 다른 DOM 엘리먼트에서 동시에 운영할 수 있습니다.
+ - Drag & Drop API를 사용하지 말고, 실제 마우스 이벤트(mouseover, mousedown, mouseout 등)를 사용하여 구현해 보세요!
## Advanced
-* 객체지향의 역사는 어떻게 될까요?
-* Smalltalk, Java, Go, Kotlin 등의 언어들로 넘어오면서 객체지향 패러다임 측면에서 어떤 발전이 있었을까요?
+
+- 객체지향의 역사는 어떻게 될까요?
+- Smalltalk, Java, Go, Kotlin 등의 언어들로 넘어오면서 객체지향 패러다임 측면에서 어떤 발전이 있었을까요?
diff --git a/Quest05/README.md b/Quest05/README.md
index f55779419..ba1302d7d 100644
--- a/Quest05/README.md
+++ b/Quest05/README.md
@@ -1,33 +1,58 @@
# Quest 05. OOP 특훈
## Introduction
-* 이번 퀘스트에서는 바닐라 자바스크립트의 객체지향 프로그래밍을 조금 더 훈련해 보겠습니다.
+
+- 이번 퀘스트에서는 바닐라 자바스크립트의 객체지향 프로그래밍을 조금 더 훈련해 보겠습니다.
## Topics
-* Separation of Concerns
-* 객체지향의 설계 원칙
- * SOLID 원칙
-* Local Storage
+
+- Separation of Concerns
+- 객체지향의 설계 원칙
+ - SOLID 원칙
+- Local Storage
## Resources
-* [Separation of concerns](https://jonbellah.com/articles/separation-of-concerns/)
-* [SOLID](https://en.wikipedia.org/wiki/SOLID)
-* [객체지향 설계 5원칙](https://webdoli.tistory.com/210)
-* [MDN - Local Storage](https://developer.mozilla.org/ko/docs/Web/API/Window/localStorage)
+
+- [Separation of concerns](https://jonbellah.com/articles/separation-of-concerns/)
+- [SOLID](https://en.wikipedia.org/wiki/SOLID)
+- [객체지향 설계 5원칙](https://webdoli.tistory.com/210)
+- [MDN - Local Storage](https://developer.mozilla.org/ko/docs/Web/API/Window/localStorage)
## Checklist
-* 관심사의 분리 원칙이란 무엇인가요? 웹에서는 이러한 원칙이 어떻게 적용되나요?
-* 객체지향의 SOLID 원칙이란 무엇인가요? 이 원칙을 구체적인 예를 들어 설명할 수 있나요?
-* 로컬 스토리지란 무엇인가요? 로컬 스토리지의 내용을 개발자 도구를 이용해 확인하려면 어떻게 해야 할까요?
+
+- 관심사의 분리 원칙이란 무엇인가요? 웹에서는 이러한 원칙이 어떻게 적용되나요?
+
+```
+ 소프트웨어 공학에서 매우 중요한 원칙 중 하나이며, 프로그램을 여러 부분 나누어 각 부분이 서로 독립적으로 개발, 변경, 유지보수 될 수 있도록 하는 것.
+ 웹에서는 관심사의 분리 원칙을 적용하여 사용자 인터페이스, 데이터 베이스 접근, 비즈니스 로직등 각각 분리하여 개발한다.
+ 이렇게 함으로써 유지보수가 용이해진다.
+```
+
+- 객체지향의 SOLID 원칙이란 무엇인가요? 이 원칙을 구체적인 예를 들어 설명할 수 있나요?
+
+```
+ 답: SOLID는 객체 지향 프로그래밍에서 디자인 원칙을 나타내는 두문자어이다.
+ SRP (Single Responsibility Principle) : 하나의 클래스는 하나의 책임만을 가져야 한다는 원칙
+ OCP (Open-Closed Principle) : 소프트웨어 개체(클래스, 모듈, 함수)는 확장에는 열려 있어야 하지만 변경에는 닫혀 있어야 한다는 원칙
+ LSP (Liskov Substitution Principle) : 자식 클래스는 부모 클래스의 기능을 수행할 수 있어야 한다는 원칙
+ ISP (Interface Segregation Principle) : 클라이언트는 자신이 사용하지 않는 메소드에 의존하지 않아야 한다는 원칙
+ DIP (Dependency Inversion Principle) : 추상화에 의존해야 하며 구체화에는 의존해서는 안 된다는 원칙
+
+- 로컬 스토리지란 무엇인가요? 로컬 스토리지의 내용을 개발자 도구를 이용해 확인하려면 어떻게 해야 할까요?
+ 답: 로컬 스토리지는 사용자의 로컬에 존재하는 저장소이다.
+ 크롬 브라우저 개발자도구에서 Application 탭을 선택 , 그다음 Storage 에서 local Storage 영역에서 확인하고 싶은 도메인 선택.
+```
## Quest
-* 외부 라이브러리나 프레임워크를 사용하지 않고, 자바스크립트를 이용하여 간단한 웹브라우저 기반의 텍스트 에디터를 만들어 보겠습니다.
- * 기본적으로 VSCode와 같이 탭을 이용해 여러 개의 파일을 동시에 편집할 수 있습니다.
- * 탭을 눌러 열려 있는 다른 파일을 편집할 수 있으며 탭을 언제든지 닫을 수 있습니다.
- * VSCode와 같이 새 파일, 로드, 저장, 다른 이름으로 저장 등의 기능을 가집니다. 저장은 웹 브라우저의 로컬 스토리지를 이용합니다.
- * VSCode와 같이 탭이 수정되었는데 저장되기 이전일 경우 이를 알려주는 인디케이터가 작동합니다.
- * 같은 이름의 파일을 저장할 경우 에러를 표시해야 합니다.
-* 이번 퀘스트의 결과물은 앞으로의 많은 퀘스트에서 재사용되게 되니, 주의깊게 코드를 작성해 보세요!
+
+- 외부 라이브러리나 프레임워크를 사용하지 않고, 자바스크립트를 이용하여 간단한 웹브라우저 기반의 텍스트 에디터를 만들어 보겠습니다.
+ - 기본적으로 VSCode와 같이 탭을 이용해 여러 개의 파일을 동시에 편집할 수 있습니다.
+ - 탭을 눌러 열려 있는 다른 파일을 편집할 수 있으며 탭을 언제든지 닫을 수 있습니다.
+ - VSCode와 같이 새 파일, 로드, 저장, 다른 이름으로 저장 등의 기능을 가집니다. 저장은 웹 브라우저의 로컬 스토리지를 이용합니다.
+ - VSCode와 같이 탭이 수정되었는데 저장되기 이전일 경우 이를 알려주는 인디케이터가 작동합니다.
+ - 같은 이름의 파일을 저장할 경우 에러를 표시해야 합니다.
+- 이번 퀘스트의 결과물은 앞으로의 많은 퀘스트에서 재사용되게 되니, 주의깊게 코드를 작성해 보세요!
## Advanced
-* 웹 프론트엔드 개발에서 이러한 방식의 패턴을 더 일반화해서 정리할 수 있을까요? 이 퀘스트에서 각각의 클래스들이 공통적으로 수행하게 되는 일들에는 무엇이 있을까요?
+
+- 웹 프론트엔드 개발에서 이러한 방식의 패턴을 더 일반화해서 정리할 수 있을까요? 이 퀘스트에서 각각의 클래스들이 공통적으로 수행하게 되는 일들에는 무엇이 있을까요?
diff --git a/Quest06/README.md b/Quest06/README.md
index a518bd8f2..76887773a 100644
--- a/Quest06/README.md
+++ b/Quest06/README.md
@@ -1,47 +1,129 @@
# Quest 06. 인터넷의 이해
## Introduction
-* 이번 퀘스트에서는 인터넷이 어떻게 동작하며, 서버와 클라이언트, 웹 브라우저 등의 역할은 무엇인지 알아보겠습니다.
+
+- 이번 퀘스트에서는 인터넷이 어떻게 동작하며, 서버와 클라이언트, 웹 브라우저 등의 역할은 무엇인지 알아보겠습니다.
## Topics
-* 서버와 클라이언트, 그리고 웹 브라우저
-* 인터넷을 구성하는 여러 가지 프로토콜
- * IP
- * TCP
- * HTTP
-* DNS
+
+- 서버와 클라이언트, 그리고 웹 브라우저
+- 인터넷을 구성하는 여러 가지 프로토콜
+ - IP
+ - TCP
+ - HTTP
+- DNS
## Resources
-* [OSI 모형](https://ko.wikipedia.org/wiki/OSI_%EB%AA%A8%ED%98%95)
-* [IP](https://ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%EB%84%B7_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C)
- * [Online service Traceroute](http://ping.eu/traceroute/)
-* [TCP](https://ko.wikipedia.org/wiki/%EC%A0%84%EC%86%A1_%EC%A0%9C%EC%96%B4_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C)
- * [Wireshark](https://www.wireshark.org/download.html)
-* [HTTP](https://ko.wikipedia.org/wiki/HTTP)
- * Chrome developer tool, Network tab
-* [DNS](https://ko.wikipedia.org/wiki/%EB%8F%84%EB%A9%94%EC%9D%B8_%EB%84%A4%EC%9E%84_%EC%8B%9C%EC%8A%A4%ED%85%9C)
- * [Web-based Dig](http://networking.ringofsaturn.com/Tools/dig.php)
+
+- [OSI 모형](https://ko.wikipedia.org/wiki/OSI_%EB%AA%A8%ED%98%95)
+- [IP](https://ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%EB%84%B7_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C)
+ - [Online service Traceroute](http://ping.eu/traceroute/)
+- [TCP](https://ko.wikipedia.org/wiki/%EC%A0%84%EC%86%A1_%EC%A0%9C%EC%96%B4_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C)
+ - [Wireshark](https://www.wireshark.org/download.html)
+- [HTTP](https://ko.wikipedia.org/wiki/HTTP)
+ - Chrome developer tool, Network tab
+- [DNS](https://ko.wikipedia.org/wiki/%EB%8F%84%EB%A9%94%EC%9D%B8_%EB%84%A4%EC%9E%84_%EC%8B%9C%EC%8A%A4%ED%85%9C)
+ - [Web-based Dig](http://networking.ringofsaturn.com/Tools/dig.php)
## Checklist
-* 인터넷은 어떻게 동작하나요? Internet Protocol Suite의 레이어 모델에 입각하여 설명해 보세요.
- * 근거리에서 서로 떨어진 두 전자기기가 유선/무선으로 서로 통신하는 프로토콜은 어떻게 동작할까요?
- * 근거리에 있는 여러 대의 전자기기가 서로 통신하는 프로토콜은 어떻게 동작할까요?
- * 아주 멀리 떨어져 있는 두 전자기기가 유선/무선으로 서로 통신하는 프로토콜은 어떻게 동작할까요?
- * 두 전자기기가 신뢰성을 가지고 통신할 수 있도록 하기 위한 프로토콜은 어떻게 동작할까요?
- * HTTP는 어떻게 동작할까요?
-* 우리가 브라우저의 주소 창에 www.knowre.com 을 쳤을 때, 어떤 과정을 통해 서버의 IP 주소를 알게 될까요?
+
+- 인터넷은 어떻게 동작하나요? Internet Protocol Suite의 레이어 모델에 입각하여 설명해 보세요.
+
+ ```
+ 지역 PC 가 인터넷에 접근할때 인터넷 영역에서의 수많은 라우팅을 관리하는 Hob(Default Gateway)이 필요하고, 최종적으로 인터넷 사이트에 해당하는 라우터에 접근.
+
+ > 보통 상대의 목적지 IP주소는 특정 값으로 정해지지만, 인터넷의 경우엔 0.0.0.0/0으로 특정지어지지 않음.
+ > 라우팅 경로 정보가 정해져 있는 정적라우팅과는 달리, 네트워크 상황에 따라 정보를 빠르게 확보할 수 있는 경로를 중심으로 패킷을 전송하는 라우팅이다.
+ > 데이터 정보에 포함된 목적지 주소가 인터넷처럼 광범위하거나, 정적라우팅을 통한 탐색이 불가능할 경우 동적 라우팅을 통해 데이터 전달을 진행.
+
+ - 근거리에서 서로 떨어진 두 전자기기가 유선/무선으로 서로 통신하는 프로토콜은 어떻게 동작할까요?
+ 답:
+
+ > 근거리에 놓여진 두 기기의 네트워크 대역은 보통 정적 라우팅을 통해 연결하며, 라우팅테이블에 저장된 두 기기의 IP와 PORT 정보를 통해 데이터 전달이 이루어진다.
+ > 와이파이를 통해 연결하면 무선 공유기를 통한 라우팅을 진행할 것이고, 블루투스를 통해 연결하면 BLE stack 프로토콜을 기반으로 통신을 진행함.
+ ```
+
+ - 근거리에 있는 여러 대의 전자기기가 서로 통신하는 프로토콜은 어떻게 동작할까요?
+
+ ```
+ > 일반적으로 이더넷프로토콜을 사용한다. > 이더넷은 근거리 통신망에서 가장 널리 사용되는 통신 프로토콜 중 하나이다.
+ > 이더넷은 케이블 통해 연결된 여러 대의 컴퓨터나 기기들이 데이터를 주고 받도록 함.
+ > 이더넷은 물리적으로 스타형태의 토폴로지를 가지며, 이는 모든 기기가 중앙의 네트워크 허브나 스위치에 연결되어 있다.
+ > 따라서 데이터 보낼 때 해당 기기의 MAC 주소를 확인하고 해당 MAC 주소를 가지고 있는 기기에 데이터를 전송하는 방식으로 동작.
+
+ ```
+
+ - 아주 멀리 떨어져 있는 두 전자기기가 유선/무선으로 서로 통신하는 프로토콜은 어떻게 동작할까요?
+
+ ```
+ > 사용하는 프로토콜은 두 기기간 거리보다는 두 기기가 네트워크를 어떤 형태를 통해 연결하였으며 어떤 통신규약을 채용하고 있는지에 영향을 받음.
+ > 보통 멀리 떨어져 있는 기기의 경우엔 근거리 대역의 네트워크가 없어 라우팅 테이블 작성이 어려워서, 인터넷과 같이 Hob(지역 통신사)를 통한 데이터 전달이 이루어짐.
+ ```
+
+ - 두 전자기기가 신뢰성을 가지고 통신할 수 있도록 하기 위한 프로토콜은 어떻게 동작할까요?
+
+ ```
+ > 웹과 사용자간의 대표적인 통신규약인 HTTP는 SSL인증을 적용한 HTTPS 프로토콜을 사용한 것이 가장 대표적은 보안 적용예이다.
+ > HTTP프로토콜을 통한 데이터통신 과정에 SSL/TLS 암호화 방식(양방향 암호화)를 적용하여 상대적으로 안전한 전달이 가능하도록 한 방식.
+ ```
+
+ - HTTP는 어떻게 동작할까요?
+
+ ```
+ > HTTP는 웹에서 데이터를 주고받기 위한 프로토콜로, 클라이언트와 서버 간에 요청과 응답을 주고받으면서 동작
+ > HTTP는 기본적으로 텍스트 기반의 프로토콜이므로, 데이터 전송 시에는 인코딩 및 디코딩 과정이 필요
+ ```
+
+- 우리가 브라우저의 주소 창에 www.knowre.com 을 쳤을 때, 어떤 과정을 통해 서버의 IP 주소를 알게 될까요?
+ ```
+ > DNS 조회 시작: 먼저, 브라우저는 DNS(Domain Name System) 서버에게 www.knowre.com의 IP 주소를 물어본다.
+ > 로컬 DNS 조회: 로컬 DNS 캐시에서 해당 도메인의 IP 주소가 캐싱되어 있으면, 브라우저는 바로 해당 IP 주소로 연결을 시도
+ > Root DNS 조회: 로컬 DNS 캐시에 해당 도메인의 IP 주소가 없으면, 브라우저는 최상위 DNS 서버인 Root DNS 서버에게 해당 도메인의 IP 주소를 물어본다.
+ > TLD DNS 조회: Root DNS 서버는 해당 도메인의 Top Level Domain(TLD) DNS 서버의 IP 주소를 브라우저에게 알려줌.
+ > Authoritative DNS 조회: 브라우저는 TLD DNS 서버에 해당 도메인의 Authoritative DNS 서버의 IP 주소를 물어본다.
+ > IP 주소 반환: Authoritative DNS 서버는 해당 도메인의 IP 주소를 브라우저에게 반환함. 이제 브라우저는 해당 IP 주소로 서버와 연결을 시도
+ > 위와 같은 과정을 통해, 브라우저는 www.knowre.com 도메인의 IP 주소를 찾아내고 해당 서버와 연결을 시도
+ ```
## Quest
-* tracert(Windows가 아닌 경우 traceroute) 명령을 통해 www.google.com 까지 가는 경로를 찾아 보세요.
- * 어떤 IP주소들이 있나요?
- * 그 IP주소들은 어디에 위치해 있나요?
-* Wireshark를 통해 www.google.com 으로 요청을 날렸을 떄 어떤 TCP 패킷이 오가는지 확인해 보세요
- * TCP 패킷을 주고받는 과정은 어떻게 되나요?
- * 각각의 패킷에 어떤 정보들이 담겨 있나요?
-* telnet 명령을 통해 http://www.google.com/ URL에 HTTP 요청을 날려 보세요.
- * 어떤 헤더들이 있나요?
- * 그 헤더들은 어떤 역할을 하나요?
+
+- tracert(Windows가 아닌 경우 traceroute) 명령을 통해 www.google.com 까지 가는 경로를 찾아 보세요.
+
+ - 어떤 IP주소들이 있나요?
+ > 172.40.0.1 / 192.168.10.1 / 114.71.195.1 등 총
+ > 17가지 정도 나옴.
+
+- 그 IP주소들은 어디에 위치해 있나요?
+
+ > kix07s07-in-f4.1e100.net ?
+
+- Wireshark를 통해 www.google.com 으로 요청을 날렸을 떄 어떤 TCP 패킷이 오가는지 확인해 보세요
+ - TCP 패킷을 주고받는 과정은 어떻게 되나요?
+ 1. 연결설정 : 클라이언트는 서버에 접속을 요청하는 SYN
+ 패킷을 보내고, 서버는 클라이언트로부터 받은 SYN 패킷에
+ 대한 ACK와 SYN 패킷을 보내 연결 요청 수락.
+ 2. 데이터 전송 : 연결 설정되면, 클라이언트와 서버는
+ 데이터 전송.
+ 3. 연결 종료: 데이터 전송 완료시, 클라이언트 또는 서버
+ 중 하나가 연결 종료를 요청.
+ - 각각의 패킷에 어떤 정보들이 담겨 있나요?
+ ```
+ 1.송신지 포트 번호 (Source port number) : 데이터를 보내는 측의 포트 번호입니다.
+ 2.수신지 포트 번호 (Destination port number) : 데이터를 받는 측의 포트 번호입니다.
+ 3.시퀀스 번호 (Sequence number) : 세그먼트의 첫 번째 바이트의 순서 번호입니다. 이 값을 통해 수신 측에서 데이터의 순서를 파악할 수 있습니다.
+ 4.확인 응답 번호 (Acknowledgment number) : 수신 측에서 예상하는 다음 시퀀스 번호입니다. 이 값을 통해 송신 측에서 수신 측으로부터 받은 세그먼트를 확인할 수 있습니다.
+ 5.데이터 오프셋 (Data offset) : 세그먼트의 시작 위치로부터 데이터가 시작되는 위치까지의 바이트 수를 나타냅니다.
+ 6.제어 비트 (Control bits) : 세그먼트의 제어 정보를 포함하는 비트 필드입니다. 예를 들어, SYN 비트는 연결 설정 요청을 나타내며, ACK 비트는 수신한 데이터의 확인을 나타냅니다.
+ 7.윈도우 크기 (Window size) : 수신 측이 현재 처리할 수 있는 데이터의 양을 나타냅니다.
+ 8.체크섬 (Checksum) : 세그먼트의 오류 검출을 위한 체크섬 값입니다.
+ 9.중요 데이터 표시 (Urgent pointer) : 세그먼트의 긴급 데이터의 위치를 나타냅니다.
+ 10.옵션 (Options) : 세그먼트의 기타 옵션 정보를 포함합니다.
+ ```
+- telnet 명령을 통해 http://www.google.com/ URL에 HTTP 요청을 날려 보세요.
+ - 어떤 헤더들이 있나요?
+ - 그 헤더들은 어떤 역할을 하나요?
## Advanced
-* HTTP의 최신 버전인 HTTP/3는 어떤 식으로 구성되어 있을까요?
-* TCP/IP 외에 전세계적인 네트워크를 구성하기 위한 다른 방식도 제안된 바 있을까요?
+
+- HTTP의 최신 버전인 HTTP/3는 어떤 식으로 구성되어 있을까요?
+- TCP/IP 외에 전세계적인 네트워크를 구성하기 위한 다른 방식도 제안된 바 있을까요?
diff --git a/Quest07/README.md b/Quest07/README.md
index 8a77c24ec..dcecf97f5 100644
--- a/Quest07/README.md
+++ b/Quest07/README.md
@@ -1,39 +1,120 @@
# Quest 07. node.js의 기초
## Introduction
-* 이번 퀘스트에서는 node.js의 기본적인 구조와 개념에 대해 알아 보겠습니다.
+
+- 이번 퀘스트에서는 node.js의 기본적인 구조와 개념에 대해 알아 보겠습니다.
## Topics
-* node.js
-* npm
-* CommonJS와 ES Modules
+
+- node.js
+- npm
+- CommonJS와 ES Modules
## Resources
-* [About node.js](https://nodejs.org/ko/about/)
-* [Node.js의 아키텍쳐](https://edu.goorm.io/learn/lecture/557/%ED%95%9C-%EB%88%88%EC%97%90-%EB%81%9D%EB%82%B4%EB%8A%94-node-js/lesson/174356/node-js%EC%9D%98-%EC%95%84%ED%82%A4%ED%85%8D%EC%B3%90)
-* [npm](https://docs.npmjs.com/about-npm)
-* [npm CLI commands](https://docs.npmjs.com/cli/v7/commands)
-* [npm - package.json](https://docs.npmjs.com/cli/v7/configuring-npm/package-json)
-* [How NodeJS Require works!](https://www.thirdrocktechkno.com/blog/how-nodejs-require-works)
-* [MDN - JavaScript Modules](https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Modules)
-* [ES modules: A cartoon deep-dive](https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/)
-* [require vs import](https://www.geeksforgeeks.org/difference-between-node-js-require-and-es6-import-and-export/)
+
+- [About node.js](https://nodejs.org/ko/about/)
+- [Node.js의 아키텍쳐](https://edu.goorm.io/learn/lecture/557/%ED%95%9C-%EB%88%88%EC%97%90-%EB%81%9D%EB%82%B4%EB%8A%94-node-js/lesson/174356/node-js%EC%9D%98-%EC%95%84%ED%82%A4%ED%85%8D%EC%B3%90)
+- [npm](https://docs.npmjs.com/about-npm)
+- [npm CLI commands](https://docs.npmjs.com/cli/v7/commands)
+- [npm - package.json](https://docs.npmjs.com/cli/v7/configuring-npm/package-json)
+- [How NodeJS Require works!](https://www.thirdrocktechkno.com/blog/how-nodejs-require-works)
+- [MDN - JavaScript Modules](https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Modules)
+- [ES modules: A cartoon deep-dive](https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/)
+- [require vs import](https://www.geeksforgeeks.org/difference-between-node-js-require-and-es6-import-and-export/)
## Checklist
-* node.js는 무엇인가요? node.js의 내부는 어떻게 구성되어 있을까요?
-* npm이 무엇인가요? `package.json` 파일은 어떤 필드들로 구성되어 있나요?
-* npx는 어떤 명령인가요? npm 패키지를 `-g` 옵션을 통해 글로벌로 저장하는 것과 그렇지 않은 것은 어떻게 다른가요?
-* 자바스크립트 코드에서 다른 파일의 코드를 부르는 시도들은 지금까지 어떤 것이 있었을까요? CommonJS 대신 ES Modules가 등장한 이유는 무엇일까요?
-* ES Modules는 기존의 `require()`와 동작상에 어떤 차이가 있을까요? CommonJS는 할 수 있으나 ES Modules가 할 수 없는 일에는 어떤 것이 있을까요?
-* node.js에서 ES Modules를 사용하려면 어떻게 해야 할까요? ES Modules 기반의 코드에서 CommonJS 기반의 패키지를 불러오려면 어떻게 해야 할까요? 그 반대는 어떻게 될까요?
+
+- node.js는 무엇인가요? node.js의 내부는 어떻게 구성되어 있을까요?
+
+```
+> Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임이다.
+즉, 노드를 통해 다양한 자바스크립트 앱을 실행 가능하며, 서버를 실행하는데 제일 많이 사용.
+> Node.js는 서버사이트 스크립트 언어가 아니다. 프로그램 (환경) 이다.
+> Node.js의 내부 구조는 V8 엔진과 libuv 그리고 Node.js 바인딩 모듈로 구성된다. V8 엔진은 구글에서 개발한 JavaScript엔진으로, Node.js에서 JavaScript 코드를 실행 시크는 역할을 한다.
+> libuv는 Node.js 에서 I/O 작업을 비동기적으로 처리하기 위한 멀티 플랫폼 I/O 라이브러리이다.
+> 이 라이브러리를 통해 Node.js는 단일 스레드와 이벤트 루프를 사용하여 I/O 작업을 비동기적으로 처리 한다.
+> Node.js 바인딩 모듈은 C/C++ 언어로 작성된 바이너리 모듈을 Node.js에서 사용할 수 있도록 연결해주는 역할을 한다.
+```
+
+- npm이 무엇인가요? `package.json` 파일은 어떤 필드들로 구성되어 있나요?
+
+```
+> npm은 말 그대로 노드 패키지를 관리해주는 틀이다.
+ * 이때 이 패키지들이 서로 의존이 되어 있어서, 하나의 문제가 발생하면 다른것들 까지 기능하지 않을 수 있다. 그래서 이를 관리하기 위해 Package.json가 있다.
+> `package.json은 해당 프로젝트의 정보를 담고 있으며, 프로젝트의 이름과 버전, 라이선스, 의존성 등의 정보를 기록한다.
+> 필드 구성
+ name: 패키지의 이름을 나타낸다. 이 이름은 npm 레지스트리에서 고유해야 한다.
+version: 패키지의 버전을 나타낸다.일반적으로 Major.Minor.Patch 형식으로 작성 됨.
+description: 패키지에 대한 간단한 설명을 나타낸다.
+main: 패키지의 진입점 파일의 경로를 지정한다.
+keywords: 패키지를 검색할 때 사용되는 키워드를 나타낸다.
+author: 패키지의 작성자 정보를 나타낸다.
+license: 패키지의 라이선스 정보를 나타낸다.
+repository: 패키지의 소스 코드 저장소 정보를 나타낸다.
+dependencies: 패키지가 의존하는 다른 패키지들의 정보를 나타낸다.
+devDependencies: 패키지를 개발할 때만 필요한 다른 패키지들의 정보를 나타낸다.
+scripts: 패키지에서 실행할 수 있는 스크립트를 나타낸다.
+bin: 패키지에서 실행 가능한 바이너리 파일들의 정보를 나타낸다.
+```
+
+- npx는 어떤 명령인가요? npm 패키지를 `-g` 옵션을 통해 글로벌로 저장하는 것과 그렇지 않은 것은 어떻게 다른가요?
+
+```
+> npx는 npm을 좀 더 편하게 사용하기 위해 나온 npm에서 제공해주는 하나의 도구이다. (Package Runner)(실행)
+> npx는 npm 레지스트리에 올라가 있는 패키지를 쉽게 설치하고 관리할 수 있또록 도와주는 CLI(Command line interface) 도구이다.
+> npm install 명령어를 사용하여 패키지를 설치할 때 -g 옵션을 주면 해당 패키지가 글로벌(Global) 영역에 설치된다. 글로벌 영역에 설치된 패키지는 해당 시스템 전체에서 사용 가능.
+> 반면에 -g 옵션 없이 패키지를 설치하면 로컬(Local) 영역에 설치가 된다. 로컬 영역에 설치된 패키지는 해당 프로젝트 내에서만 사용가능. 따라서, -g 옵션을 사용하여 글로벌 영역에 패키지를 설치하면 여러 프로젝트에서 해당 패키지를 사용할 수 있다.
+```
+
+- 자바스크립트 코드에서 다른 파일의 코드를 부르는 시도들은 지금까지 어떤 것이 있었을까요? CommonJS 대신 ES Modules가 등장한 이유는 무엇일까요?
+
+```
+1. 형식으로 사용. 이 방법은 HTML 파일 안에서 다른 JavaScript 파일을 불러올 때 주로 사용.
+
+2. require 함수를 사용하여 다른 JavaScript 파일을 불러오기
+ > require('파일 경로') 형식으로 사용. 이 방법은 Node.js에서 주로 사용.
+
+3.import 문을 사용하여 다른 JavaScript 모듈을 불러오기
+> import { 모듈 내용 } from '모듈 경로' 형식으로 사용. 이 방법은 ECMAScript 6부터 사용 가능하며, 주로 브라우저에서 사용.
+AJAX를 사용하여 다른 JavaScript 파일을 불러오기
+
+4. XMLHttpRequest 객체를 사용하여 다른 파일을 가져옵니다.
+> 이 방법은 주로 웹 애플리케이션에서 사용.
+
+5. importScripts 함수를 사용하여 다른 JavaScript 파일을 불러오기
+> importScripts('파일 경로') 형식으로 사용. 이 방법은 워커(worker) 스크립트에서 사용.
+
+> ES Modules는 정적인 방식으로 모듈을 가져오고 내보내서, CommonJS보다 더 나은 성능을 보이고 , 모듈 로딩이 비동기적으로 이루어져서, 필요한 모듈만 로드하여 불필요한 리소스 낭비를 방지할 수 있다. 그리고 최신 문법을 지원하기 때문에, 모듈을 작성하고 읽기 쉬운 코드를 작성할 수 있다.
+```
+
+- ES Modules는 기존의 `require()`와 동작상에 어떤 차이가 있을까요? CommonJS는 할 수 있으나 ES Modules가 할 수 없는 일에는 어떤 것이 있을까요?
+
+```
+> `require()`는 CommonJS 모듈 시스템에서 사용되는 함수이며, 모듈을 가져올 때 동기적으로 처리된다. 반면, ES Modules에서는 `import`구문을 사용하여 모듈을 가져오며, 이는 비동기적으로 처리 된다. 또한, `require() 함수는 동적 로딩 지원하지만, ES Modules에서 동적 로딩 불가능하다.
+
+> CommonJS는 모듈을 동기적으로 로딩하며, 코드 실행시 로드되고 ES Modules는 비동기적 로딩되어 런타임 시에 동적으로 로드 되서 이로 인해 CommonJs는 동적으로 모듈을 로드하는 것이 가능하지만 ES는 불가능하다. 그리고 CommonJS에서는 exports를 직접 수정이 가능하지만 ES는 불가능하다.
+```
+
+- node.js에서 ES Modules를 사용하려면 어떻게 해야 할까요? ES Modules 기반의 코드에서 CommonJS 기반의 패키지를 불러오려면 어떻게 해야 할까요? 그 반대는 어떻게 될까요?
+
+```
+> package.json 파일에 "type": "module"을 추가한다. 이를 통해 Node.js는 ES Modules를 사용할 것임을 인식
+
+> ES Modules 기반의 코드에서 CommonJS 기반의 패키지를 불러오려면, Node.js에서 제공하는 `require()` 함수를 사용한다.
+
+> 반대로, CommonJS 기반의 코드에서 ES Modules 패키지를 불러오려면, Node.js 버전 13.2.0 이후부터는 정식으로 ESM을 지원하기 시작하여 import 문법을 사용할 수 있다. 하지만, 이전 버전의 Node.js에서는 import를 사용할 수 없으며, Babel과 같은 transpiler를 사용해야 한다.
+```
## Quest
-* 스켈레톤 코드에는 다음과 같은 네 개의 패키지가 있으며, 용도는 다음과 같습니다:
- * `cjs-package`: CommonJS 기반의 패키지입니다. 다른 코드가 이 패키지의 함수와 내용을 참조하게 됩니다.
- * `esm-package`: ES Modules 기반의 패키지입니다. 다른 코드가 이 패키지의 함수와 내용을 참조하게 됩니다.
- * `cjs-my-project`: `cjs-package`와 `esm-package`에 모두 의존하는, CommonJS 기반의 프로젝트입니다.
- * `esm-my-project`: `cjs-package`와 `esm-package`에 모두 의존하는, ES Modules 기반의 프로젝트입니다.
-* 각각의 패키지의 `package.json`과 `index.js` 또는 `index.mjs` 파일을 수정하여, 각각의 `*-my-project`들이 `*-package`에 노출된 함수와 클래스를 활용할 수 있도록 만들어 보세요.
+
+- 스켈레톤 코드에는 다음과 같은 네 개의 패키지가 있으며, 용도는 다음과 같습니다:
+ - `cjs-package`: CommonJS 기반의 패키지입니다. 다른 코드가 이 패키지의 함수와 내용을 참조하게 됩니다.
+ - `esm-package`: ES Modules 기반의 패키지입니다. 다른 코드가 이 패키지의 함수와 내용을 참조하게 됩니다.
+ - `cjs-my-project`: `cjs-package`와 `esm-package`에 모두 의존하는, CommonJS 기반의 프로젝트입니다.
+ - `esm-my-project`: `cjs-package`와 `esm-package`에 모두 의존하는, ES Modules 기반의 프로젝트입니다.
+- 각각의 패키지의 `package.json`과 `index.js` 또는 `index.mjs` 파일을 수정하여, 각각의 `*-my-project`들이 `*-package`에 노출된 함수와 클래스를 활용할 수 있도록 만들어 보세요.
## Advanced
-* node.js 외의 자바스크립트 런타임에는 어떤 것이 있을까요?
+
+- node.js 외의 자바스크립트 런타임에는 어떤 것이 있을까요?
diff --git a/Quest08/README.md b/Quest08/README.md
index b19acb48b..6f6867dd1 100644
--- a/Quest08/README.md
+++ b/Quest08/README.md
@@ -1,42 +1,134 @@
# Quest 08. 웹 API의 기초
## Introduction
-* 이번 퀘스트에서는 웹 API 서버의 기초를 알아보겠습니다.
+
+- 이번 퀘스트에서는 웹 API 서버의 기초를 알아보겠습니다.
## Topics
-* HTTP Method
-* node.js `http` module
- * `req`와 `res` 객체
+
+- HTTP Method
+- node.js `http` module
+ - `req`와 `res` 객체
## Resources
-* [MDN - Content-Type Header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type)
-* [MDN - HTTP Methods](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods)
-* [MDN - MIME Type](https://developer.mozilla.org/en-US/docs/Glossary/MIME_type)
-* [Postman](https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop)
-* [HTTP Node.js Manual & Documentation](https://nodejs.org/api/http.html)
+
+- [MDN - Content-Type Header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type)
+- [MDN - HTTP Methods](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods)
+- [MDN - MIME Type](https://developer.mozilla.org/en-US/docs/Glossary/MIME_type)
+- [Postman](https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop)
+- [HTTP Node.js Manual & Documentation](https://nodejs.org/api/http.html)
## Checklist
-* HTTP의 GET과 POST 메소드는 어떻게 다른가요?
- * 다른 HTTP 메소드에는 무엇이 있나요?
-* HTTP 서버에 GET과 POST를 통해 데이터를 보내려면 어떻게 해야 하나요?
- * HTTP 요청의 `Content-Type` 헤더는 무엇인가요?
- * Postman에서 POST 요청을 보내는 여러 가지 방법(`form-data`, `x-www-form-urlencoded`, `raw`, `binary`) 각각은 어떤 용도를 가지고 있나요?
-* node.js의 `http` 모듈을 통해 HTTP 요청을 처리할 때,
- * `req`와 `res` 객체에는 어떤 정보가 담겨있을까요?
- * GET과 POST에 대한 처리 형태가 달라지는 이유는 무엇인가요?
-* 만약 API 엔드포인트(URL)가 아주 많다고 한다면, HTTP POST 요청의 `Content-Type` 헤더에 따라 다른 방식으로 동작하는 서버를 어떻게 정리하면 좋을까요?
- * 그 밖에 서버가 요청들에 따라 공통적으로 처리하는 일에는 무엇이 있을까요? 이를 어떻게 정리하면 좋을까요?
+
+- HTTP의 GET과 POST 메소드는 어떻게 다른가요?
+
+```
+> GET은 서버에서 어떤 데이터를 가져와서 보여줄 때 사용. 어떤 값이나 내용, 상태등을 바꾸지 않는 경우에 사용을 하는 것
+> Post는 서버상의 데이터 값이나 상태를 바꾸기 위해서 사용.
+> GET은 Idempotent, POST는 Non-idempotent하게 설계 됨. (Idempotent = 멱등성) - 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질
+ > Get과 Post의 리소스 전달 방식의 차이를 표현
+ GET POST
+ 캐시 ⭕️ ❌
+ 브라우저 기록 ⭕️ ❌
+ 북마크 추가 ⭕️ ❌
+ 데이터 길이 제한 ⭕️ ❌
+ HTTP 응답 코드 200(Ok) 201(Created)
+ 언제 주로 사용하는가 리소스 요청 리소스 생성
+ 리소스 전달 방식 쿼리스트링 HTTP Body
+ idempotent ⭕️ ❌
+```
+
+- 다른 HTTP 메소드에는 무엇이 있나요?
+
+```
+> PUT: 이 방법은 서버의 리소스를 업데이트하는 데 사용. RESTful 웹 서비스에서 기존 리소스를 새 데이터로 업데이트하는 데 자주 사용.
+DELETE: 이 방법은 서버에서 리소스를 삭제하는 데 사용.RESTful 웹 서비스에서 기존 리소스를 삭제하는 데 자주 사용.
+HEAD: 이 메서드는 실제 리소스 내용을 검색하지 않고 리소스에 대한 헤더 정보를 검색하는 데 사용.리소스가 존재하는지 확인하거나 리소스에 대한 메타데이터를 검색하는 데 자주 사용.
+OPTIONS: 이 메서드는 리소스에 사용할 수 있는 통신 옵션에 대한 정보를 검색하는 데 사용. 리소스에 대해 허용된 HTTP 메서드에 대한 정보를 검색하는 데 자주 사용.
+PATCH: 이 방법은 새로운 데이터의 부분 집합으로 리소스를 업데이트하는 데 사용. 기존 리소스의 일부를 업데이트하기 위해 RESTful 웹 서비스에서 자주 사용.
+TRACE: 이 방법은 클라이언트와 서버 간의 요청 및 응답의 진단 추적을 검색하는 데 사용. 디버깅 목적으로 자주 사용.
+```
+
+- HTTP 서버에 GET과 POST를 통해 데이터를 보내려면 어떻게 해야 하나요?
+ ```
+ > GET으로 데이터 보내기:
+ 1. 데이터를 쿼리 매개변수로 URL 추가. 예를 들어 "이름" 및 "나이" 데이터를 보내려는 경우 다음과 같이 URL에 추가 가능.
+ `http://example.com/path?name=John&age=30`
+ 2. 사용자가 요청을 제출하면 브라우저는 데이터를 URL의 일부로 서버 보냄.
+ 3. 서버 측에서는 서버 측 프로그래밍 언어를 사용하여 쿼리 매개변수에서 데이터를 검색 가능.
+
+ > POST를 통해 데이터 보내기:
+ 1. 보낼 데이터로 양식을 만듬 예를 들어 "이름"과 "나이" 데이터를 보내려면 이름이 "이름"과 "나이"인 두 개의 입력 필드가 있는 양식을 만듬.
+ 2. 폼의 method 속성을 "POST"로 설정하고 action 속성을 데이터를 받을 서버의 URL로 설정합니다.
+ Copy code
+
+ 사용자가 양식을 제출하면 브라우저는 데이터를 요청 본문으로 서버에 보냄.
+ 서버 측에서는 서버 측 프로그래밍 언어를 사용하여 요청 본문에서 데이터를 검색 가능.
+ ```
+ - HTTP 요청의 `Content-Type` 헤더는 무엇인가요?
+
+```
+ > 'Content-Type' 헤더는 HTTP 요청의 메시지 본문에서 전송되는 콘텐츠 유형을 지정하는 HTTP 요청 헤더. 메시지 본문을 구문 분석하는 방법과 포함된 데이터를 처리하는 방법을 결정하기 위해 서버에서 사용.
+```
+
+- Postman에서 POST 요청을 보내는 여러 가지 방법(`form-data`, `x-www-form-urlencoded`, `raw`, `binary`) 각각은 어떤 용도를 가지고 있나요?
+
+```
+> form-data: 이 옵션은 HTML 형식의 형식으로 데이터를 보낼 때 사용합니다. 일반적으로 파일을 업로드하거나 이진 콘텐츠가 포함된 데이터를 보내는 데 사용됩니다. 'form-data' 형식에서 데이터는 일련의 키-값 쌍으로 전송됩니다.
+> x-www-form-urlencoded: 이 옵션은 URL 인코딩 형식으로 데이터를 보내는 데 사용됩니다. 일반적으로 HTML 양식 데이터를 서버에 제출하는 데 사용됩니다. x-www-form-urlencoded 형식에서 데이터는 URL 인코딩 형식으로 인코딩된 데이터와 함께 메시지 본문의 키-값 쌍으로 전송됩니다.
+> raw: 이 옵션은 JSON 또는 XML과 같은 원시 형식으로 데이터를 보내는 데 사용됩니다. 일반적으로 RESTful API에 데이터를 보내는 데 사용됩니다. 'raw' 형식에서 데이터는 추가 형식 없이 메시지 본문에 일반 텍스트로 전송됩니다.
+> binary: 이 옵션은 이미지 또는 오디오 파일과 같은 바이너리 데이터를 원시 형식으로 보내는 데 사용됩니다. 일반적으로 서버에 파일을 업로드하는 데 사용됩니다. 'binary' 형식에서 데이터는 추가 형식 없이 원시 이진 형식으로 전송됩니다.
+```
+
+- node.js의 `http` 모듈을 통해 HTTP 요청을 처리할 때,
+ - `req`와 `res` 객체에는 어떤 정보가 담겨있을까요?
+ ```
+ > `req` 개체는 클라이언트에서 서버로 들어오는 HTTP 요청을 나타낸다. 여기에는 사용된 HTTP 메서드 (예:GET, POST) 요청된 리소스의 URL, 헤더(예: User-Agent헤더) 및 메세지 본문과 같은 정보가 포함된다.
+ > `req` 개체에서 액세스할 수 있는 속성
+ 1.req.method: 요청에 사용된 HTTP 메서드(예: GET, POST).
+ 2. req.url: 요청된 리소스의 URL
+ 3. req.headers: 요청과 함께 전송된 헤더를 포함하는 개체
+ 4. req.body: 요청에 JavaScript 객체가 있는 경우 요청의 메시지 본문으로, JavaScript 객체로 구문 분석됨
+ ```
+ - node.js의 `http` 모듈을 통해 HTTP 요청을 처리할 때,
+ - GET과 POST에 대한 처리 형태가 달라지는 이유는 무엇인가요?
+ ```
+ >GET 및 POST 요청에 대한 처리 유형은 데이터 전송 방법이 다르고 서버가 데이터를 사용하기 위해 데이터를 다르게 구문 분석해야 하기 때문에 다르다.
+ > GET 요청은 URL의 쿼리 문자열로 데이터를 전송하는 반면 POST 요청은 HTTP 요청의 메세지 본문으로 데이터를 전송합니다.
+ ```
+- 만약 API 엔드포인트(URL)가 아주 많다고 한다면, HTTP POST 요청의 `Content-Type` 헤더에 따라 다른 방식으로 동작하는 서버를 어떻게 정리하면 좋을까요?
+
+```
+> Node.js의 미들웨어를 사용하여 서버를 구성
+> 미들웨어는 서버의 요청 처리 파이프라인에 기능을 추가하는 방법
+> 요청 및 응답 객체를 수정하거나 요청-응답 주기를 조기에 종료할 수 있는 기능으로 구성한다. 다양한 Content-Type 헤더를 처리하는 맥락에서 미들웨어는 들어오는 POST 요청의 Content-Type 헤더를 검사하고 요청을 콘텐츠 유형에 따라 적절한 처리기 기능으로 라우팅 가능.
+
+```
+
+- 그 밖에 서버가 요청들에 따라 공통적으로 처리하는 일에는 무엇이 있을까요? 이를 어떻게 정리하면 좋을까요?
+
+```
+> HTTP POST 요청의 'Content-Type' 헤더 외에도 서버는 HTTP 메서드, URL, 쿼리 매개변수, 쿠키 및 요청 헤더와 같은 HTTP 요청의 다른 헤더와 데이터도 처리가능.
+> Node.js에서는 http 또는 https 모듈을 사용하여 HTTP 또는 HTTPS 서버를 만들고 서버 개체의 request 이벤트를 사용하여 다양한 유형의 요청을 처리할 수 있다. request 이벤트는 들어오는 request 객체와 나가는 response 객체라는 두 가지 인수를 제공. 이러한 개체의 속성과 메서드를 사용하여 들어오는 요청을 검사 및 수정하고 응답을 다시 클라이언트로 보내기 가능.
+> 서버에서 HTTP 요청의 이러한 다양한 측면을 분류하기 위해 사용 중인 프로그래밍 언어 및 웹 프레임워크에 따라 다양한 기술과 도구를 사용할 수 있습니다.
+```
## Quest
-* 다음의 동작을 하는 서버를 만들어 보세요.
- * 브라우저의 주소창에 `http://localhost:8080`을 치면 `Hello World!`를 응답하여 브라우저에 출력합니다.
- * 서버의 `/foo` URL에 `bar` 변수로 임의의 문자열을 GET 메소드로 보내면, `Hello, [문자열]`을 출력합니다.
- * 서버의 `/foo` URL에 `bar` 키에 임의의 문자열 값을 갖는 JSON 객체를 POST 메소드로 보내면, `Hello, [문자열]`을 출력합니다.
- * 서버의 `/pic/upload` URL에 그림 파일을 POST 하면 서버에 보안상 적절한 방법으로 파일이 업로드 됩니다.
- * 서버의 `/pic/show` URL을 GET 하면 브라우저에 위에 업로드한 그림이 뜹니다.
- * 서버의 `/pic/download` URL을 GET 하면 브라우저에 위에 업로드한 그림이 `pic.jpg`라는 이름으로 다운로드 됩니다.
-* expressJS와 같은 외부 프레임워크를 사용하지 않고, node.js의 기본 모듈만을 사용해서 만들어 보세요.
-* 처리하는 요청의 종류에 따라 공통적으로 나타나는 코드를 정리해 보세요.
+
+- 다음의 동작을 하는 서버를 만들어 보세요.
+ - 브라우저의 주소창에 `http://localhost:8080`을 치면 `Hello World!`를 응답하여 브라우저에 출력합니다.
+ - 서버의 `/foo` URL에 `bar` 변수로 임의의 문자열을 GET 메소드로 보내면, `Hello, [문자열]`을 출력합니다.
+ - 서버의 `/foo` URL에 `bar` 키에 임의의 문자열 값을 갖는 JSON 객체를 POST 메소드로 보내면, `Hello, [문자열]`을 출력합니다.
+ - 서버의 `/pic/upload` URL에 그림 파일을 POST 하면 서버에 보안상 적절한 방법으로 파일이 업로드 됩니다.
+ - 서버의 `/pic/show` URL을 GET 하면 브라우저에 위에 업로드한 그림이 뜹니다.
+ - 서버의 `/pic/download` URL을 GET 하면 브라우저에 위에 업로드한 그림이 `pic.jpg`라는 이름으로 다운로드 됩니다.
+- expressJS와 같은 외부 프레임워크를 사용하지 않고, node.js의 기본 모듈만을 사용해서 만들어 보세요.
+- 처리하는 요청의 종류에 따라 공통적으로 나타나는 코드를 정리해 보세요.
## Advanced
-* 서버가 파일 업로드를 지원할 때 보안상 주의할 점에는 무엇이 있을까요?
+
+- 서버가 파일 업로드를 지원할 때 보안상 주의할 점에는 무엇이 있을까요?
diff --git a/Quest09/README.md b/Quest09/README.md
index 7e2950c0c..d6c87700a 100644
--- a/Quest09/README.md
+++ b/Quest09/README.md
@@ -1,49 +1,161 @@
# Quest 09. 서버와 클라이언트의 대화
## Introduction
-* 이번 퀘스트에서는 서버와 클라이언트의 연동, 그리고 웹 API의 설계 방법론 중 하나인 REST에 대해 알아보겠습니다.
+
+- 이번 퀘스트에서는 서버와 클라이언트의 연동, 그리고 웹 API의 설계 방법론 중 하나인 REST에 대해 알아보겠습니다.
## Topics
-* expressJS, fastify
-* AJAX, `XMLHttpRequest`, `fetch()`
-* REST, CRUD
-* CORS
+
+- expressJS, fastify
+- AJAX, `XMLHttpRequest`, `fetch()`
+- REST, CRUD
+- CORS
## Resources
-* [Express Framework](http://expressjs.com/)
-* [Fastify Framework](https://www.fastify.io/)
-* [MDN - Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)
-* [MDN - XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest)
-* [REST API Tutorial](https://restfulapi.net/)
-* [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete)
-* [MDN - CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)
+
+- [Express Framework](http://expressjs.com/)
+- [Fastify Framework](https://www.fastify.io/)
+- [MDN - Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)
+- [MDN - XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest)
+- [REST API Tutorial](https://restfulapi.net/)
+- [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete)
+- [MDN - CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)
## Checklist
-* 비동기 프로그래밍이란 무엇인가요?
- * 콜백을 통해 비동기적 작업을 할 때의 불편한 점은 무엇인가요? 콜백지옥이란 무엇인가요?
- * 자바스크립트의 Promise는 어떤 객체이고 어떤 일을 하나요?
- * 자바스크립트의 `async`와 `await` 키워드는 어떤 역할을 하며 그 정체는 무엇일까요?
-* 브라우저 내 스크립트에서 외부 리소스를 가져오려면 어떻게 해야 할까요?
- * 브라우저의 `XMLHttpRequest` 객체는 무엇이고 어떻게 동작하나요?
- * `fetch` API는 무엇이고 어떻게 동작하나요?
-* REST는 무엇인가요?
- * REST API는 어떤 목적을 달성하기 위해 나왔고 어떤 장점을 가지고 있나요?
- * RESTful한 API 설계의 단점은 무엇인가요?
-* CORS란 무엇인가요? 이러한 기능이 왜 필요할까요? CORS는 어떻게 구현될까요?
+
+- 비동기 프로그래밍이란 무엇인가요?
+
+```
+ > 비동기 프로그래밍이란 특정 코드가 처리가 완료되기 전, 처리하는 도중에도 아래로 계속 내려가며 수행을 하는 것이다.
+```
+
+- 콜백을 통해 비동기적 작업을 할 때의 불편한 점은 무엇인가요? 콜백지옥이란 무엇인가요?
+
+```
+> 우선 콜백이란? 콜백 또는 콜백 함수는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말함.
+> 비동기 작업이 '완료되면' 콜백 함수를 호출 하는 방법이다. 그래서 그 함수가 끝날 때까지 아무것도 하지 못한다
+> 콜백지옥이란 함수안에 또 함수, 그 안에 함수 또 함수 와 같이 정말 복잡한 구조를 가진 것을 콜백지옥이라고 한다. 가독성이 떨어지고 실수 위험이 커짐.
+```
+
+- 자바스크립트의 Promise는 어떤 객체이고 어떤 일을 하나요?
+
+```
+> Promise는 생성자에 인자로 들어가는 함수에 첫 번째 인자로는 수행할 비동기 작업, 두번째 인자로는 그 결과물을 콜백함수에 전달하는 함수가 들어간다.
+```
+
+- 자바스크립트의 `async`와 `await` 키워드는 어떤 역할을 하며 그 정체는 무엇일까요?
+
+```
+> `await` 키워드는 약속이 해결될 때까지 함수 실행을 일시 중지하기 위해 `async` 함수 내에서 사용 된다.
+> 약속과 함께 사용하면 `await`는 약속이 이행되거나 거부 될 때까지 `async` 함수의 실행을 차단한다.
+> 약속이 이행되면 `await`는 약속의 이행된 값을 반환.
+> 약속 거부시 `await는 거부된 값을 오류로 표시.
+```
+
+```
+// 예시 코드
+ async function getData() {
+ try {
+ const response = await fetch('https://example.com/data.json');
+ const data = await response.json();
+ console.log(data);
+ } catch (error) {
+ console.log(error);
+ }
+}
+
+getData();
+```
+
+- 브라우저 내 스크립트에서 외부 리소스를 가져오려면 어떻게 해야 할까요?
+
+```
+> JavaScript에서는 fetch() 함수를 사용하여 브라우저 내 스크립트에서 외부 리소스를 가져올 수 있음.
+> fetch() 함수는 요청에 대한 응답을 나타내는 Response 개체로 확인되는 약속을 반환.
+
+// 다음은 fetch()를 사용하여 외부 JSON 파일에서 데이터를 가져오는 방법의 예.
+fetch('https://example.com/data.json')
+ .then(response => response.json())
+ .then(data => {
+ // Do something with the data
+ })
+ .catch(error => console.error(error));
+```
+
+- 브라우저의 `XMLHttpRequest` 객체는 무엇이고 어떻게 동작하나요?
+
+```
+> `XMLHttpRequest` 객체는 클라이언트 측 JavaScript 코드가 서버에 HTTP 요청을 하고 응답을 다시 받을 수 있도록 하는 API이다.
+> 동작방법은 개체의 새 인스턴스를 맏늘고 해당 메서드를 호출하여 HTTP 요청을 설정하고 서버에 보내는 방식으로 작동.
+> 서버의 응답은 비동기적으로 수신. 즉, 브라우저가 응답을 기다리는 동안 다른 코드 계속 실행 가능.
+```
+
+- `fetch` API는 무엇이고 어떻게 동작하나요?
+
+```
+> fetch() API는 리소르를 가져오기 위해 비동기 네트워크 요청을 만드는 최신 내장 JavaScript 메서드 이다.
+> 이전 XMLHttpRequest 개체에 비해 더 간단하고 유연한 인터페이스 제공
+> fetch() 메서드는 요청에 대한 응답을 나타내는 Response 개체로 확인되는 약속을 반환.
+> Response 개체에는 다양한 메서드와 속성을 사용하여 액세스할 수 있는 응답상태, 헤더 및 본문에 대한 정보가 포함.
+```
+
+- REST는 무엇인가요?
+
+```
+ > REST는 Representational State Transfer의 약자로 웹 서비스 디자인에 사용되는 아키텍처 스타일이다.
+ > 웹에서 리소스를 정의하고 처리하는 방법을 지정하는 일련의 제약 조건.
+ > RESTful 시스템에서 리소스는 URL(Uniform Resource Locator)로 표시되며 GET, POST, PUT 및 DELETE와 같은 HTTP 메서드를 사용하여 리소스와 상호 작용.
+ > 리소스 상태는 JSON 또는 XML과 같은 표현 형식으로 클라이언트와 서버 간에 전송된다.
+```
+
+- REST API는 어떤 목적을 달성하기 위해 나왔고 어떤 장점을 가지고 있나요?
+
+```
+> REST API의 주요 목적은 시스템이 인터넷을 통해 통신할 수 있는 표준화 된 방법을 제공하는 것이다.
+> REST는 웹 서비스의 디자인을 단순화하여 개발, 유지 관리및 확장을 쉽게 하기 위해 만들어짐.
+> RESTful API의 장점
+확장성: RESTful API는 많은 수의 동시 클라이언트를 처리할 수 있으므로 높은 확장성이 필요한 애플리케이션에 이상적이다.
+유연성: RESTful API는 표준 HTTP 메서드를 사용하기 때문에 웹 브라우저, 모바일 장치 및 기타 웹 서비스를 비롯한 다양한 클라이언트에서 사용할 수 있다.
+개발 용이성: RESTful API는 표준 HTTP 메서드를 사용하고 일련의 잘 정의된 규칙을 따르기 때문에 개발 및 테스트가 쉽다.
+결합 감소: RESTful API는 클라이언트와 서버 간의 느슨한 결합을 허용한다. 즉, 서버의 변경 사항이 클라이언트에 영향을 미치지 않으며 그 반대의 경우도 마찬가지이다.
+캐싱: RESTful API는 응답 캐싱을 지원하여 성능을 개선하고 서버의 로드를 줄일 수 있다.
+상태 비저장: RESTful API는 상태 비저장이다. 즉, 각 요청에는 요청을 완료하는 데 필요한 모든 정보가 포함된다. 이렇게 하면 서버측 코드를 더 쉽게 개발하고 유지 관리할 수 있다.
+상호 운용성: RESTful API는 플랫폼에 구애받지 않으며 HTTP를 지원하는 모든 언어 또는 플랫폼에서 구현될 수 있으므로 상호 운용성이 매우 높다.
+```
+
+- RESTful한 API 설계의 단점은 무엇인가요?
+
+```
+학습 곡선: RESTful API는 잘 정의된 규칙 집합을 따르므로 개발자가 배우고 마스터하는 데 시간이 걸릴 수 있습니다. 이로 인해 특히 REST를 처음 사용하는 팀의 경우 개발 프로세스가 느려질 수 있습니다.
+오버헤드: RESTful API는 HTTP에 의존하기 때문에 다른 유형의 API보다 더 장황할 수 있습니다. 이로 인해 특히 연결이 제한된 클라이언트의 경우 대기 시간이 길어지고 대역폭 사용량이 증가할 수 있습니다.
+보안: RESTful API는 표준 HTTP 인증 방법을 사용하여 보호할 수 있지만 CSRF(Cross-Site Request Forgery) 및 XSS(Cross-Site Scripting)와 같은 공격에도 취약할 수 있습니다. 이러한 유형의 공격으로부터 보호하기 위해 강력한 보안 조치를 구현하는 것이 중요합니다.
+버전 관리: RESTful API가 시간이 지남에 따라 발전함에 따라 새로운 기능을 도입하면서 이전 버전과의 호환성을 유지하기가 어려울 수 있습니다. 이를 위해서는 클라이언트가 변경 사항을 손상시키지 않고 API를 계속 사용할 수 있도록 신중한 버전 관리 및 문서화가 필요할 수 있습니다.
+이기종 클라이언트: RESTful API는 광범위한 클라이언트에서 사용하도록 설계되었기 때문에 모든 클라이언트의 요구 사항을 동등하게 잘 충족하는 API를 설계하는 것이 어려울 수 있습니다. 이를 위해서는 다양한 클라이언트의 요구 사항과 이러한 요구 사항을 충족하는 API 설계와 관련된 장단점을 신중하게 고려해야 할 수 있습니다.
+```
+
+- CORS란 무엇인가요? 이러한 기능이 왜 필요할까요? CORS는 어떻게 구현될까요?
+
+```
+ > CORS(Cross-Orign Resource Sharing)는 웹 브라우저에 구현된 보안 기능으로, 웹 에플리케이션이 다른 도메인의 리소스에 대한 교차 출처 요청을 할 수 있도록 한다. 즉, CORS는 서버가 리소스에 액세스 할 수 있는 사람과 조건을 지정할 수 있도록 하는 메커니즘이다.
+ > CORS기능이 필요한 이유는 웹 브라우저는 웹 페이지가 제공되는 도메인이 아닌 다른 도메인에서 호스팅되는 리소스에 대한 요청을 웹 페이즈를 제한하는 동일 출처 정책으로 인해 이러한 요청을 차단한다.
+ > CORS를 활성화하려면 리소스를 호스팅하는 서버가 클라이언트 요청에 대한 응답으로 추가 HTTP 헤더를 보내야 한다. 이러한 헤더에는 리소스에 액세스할 수 있는 도메인을 지정하는 'Access-Control-Allow-Origin'과 리소스에 허용되는 HTTP 메서드를 지정하는 'Access-Control-Allow-Methods'가 포함된다.
+```
## Quest
-* 이번 퀘스트는 Midterm에 해당하는 과제입니다. 분량이 제법 많으니 한 번 기능별로 세부 일정을 정해 보고, 과제 완수 후에 그 일정이 얼마나 지켜졌는지 스스로 한 번 돌아보세요.
- * 이번 퀘스트부터는 skeleton을 제공하지 않습니다!
-* Quest 05에서 만든 메모장 시스템을 서버와 연동하는 어플리케이션으로 만들어 보겠습니다.
- * 클라이언트는 `fetch` API를 통해 서버와 통신합니다.
- * 서버는 8000번 포트에 REST API를 엔드포인트로 제공하여, 클라이언트의 요청에 응답합니다.
- * 클라이언트로부터 온 새 파일 저장, 삭제, 다른 이름으로 저장 등의 요청을 받아 서버의 로컬 파일시스템을 통해 저장되어야 합니다.
- * 서버에 어떤 식으로 저장하는 것이 좋을까요?
- * API 서버 외에, 클라이언트를 띄우기 위한 서버가 3000번 포트로 따로 떠서 API 서버와 서로 통신할 수 있어야 합니다.
- * Express나 Fastify 등의 프레임워크를 사용해도 무방합니다.
-* 클라이언트 프로젝트와 서버 프로젝트 모두 `npm i`만으로 디펜던시를 설치하고 바로 실행될 수 있게 제출되어야 합니다.
-* 이번 퀘스트부터는 앞의 퀘스트의 결과물에 의존적인 경우가 많습니다. 제출 폴더를 직접 만들어 제출해 보세요!
+
+- 이번 퀘스트는 Midterm에 해당하는 과제입니다. 분량이 제법 많으니 한 번 기능별로 세부 일정을 정해 보고, 과제 완수 후에 그 일정이 얼마나 지켜졌는지 스스로 한 번 돌아보세요.
+ - 이번 퀘스트부터는 skeleton을 제공하지 않습니다!
+- Quest 05에서 만든 메모장 시스템을 서버와 연동하는 어플리케이션으로 만들어 보겠습니다.
+ - 클라이언트는 `fetch` API를 통해 서버와 통신합니다.
+ - 서버는 8000번 포트에 REST API를 엔드포인트로 제공하여, 클라이언트의 요청에 응답합니다.
+ - 클라이언트로부터 온 새 파일 저장, 삭제, 다른 이름으로 저장 등의 요청을 받아 서버의 로컬 파일시스템을 통해 저장되어야 합니다.
+ - 서버에 어떤 식으로 저장하는 것이 좋을까요?
+ - API 서버 외에, 클라이언트를 띄우기 위한 서버가 3000번 포트로 따로 떠서 API 서버와 서로 통신할 수 있어야 합니다.
+ - Express나 Fastify 등의 프레임워크를 사용해도 무방합니다.
+- 클라이언트 프로젝트와 서버 프로젝트 모두 `npm i`만으로 디펜던시를 설치하고 바로 실행될 수 있게 제출되어야 합니다.
+- 이번 퀘스트부터는 앞의 퀘스트의 결과물에 의존적인 경우가 많습니다. 제출 폴더를 직접 만들어 제출해 보세요!
## Advanced
-* `fetch` API는 구현할 수 없지만 `XMLHttpRequest`로는 구현할 수 있는 기능이 있을까요?
-* REST 이전에는 HTTP API에 어떤 패러다임들이 있었을까요? REST의 대안으로는 어떤 것들이 제시되고 있을까요?
+
+- `fetch` API는 구현할 수 없지만 `XMLHttpRequest`로는 구현할 수 있는 기능이 있을까요?
+- REST 이전에는 HTTP API에 어떤 패러다임들이 있었을까요? REST의 대안으로는 어떤 것들이 제시되고 있을까요?
diff --git a/Quest10/README.md b/Quest10/README.md
index 613fbd17c..f1c27bf3e 100644
--- a/Quest10/README.md
+++ b/Quest10/README.md
@@ -1,34 +1,104 @@
# Quest 10. 인증의 이해
## Introduction
-* 이번 퀘스트에서는 웹에서의 인증에 관해 알아보겠습니다.
+
+- 이번 퀘스트에서는 웹에서의 인증에 관해 알아보겠습니다.
## Topics
-* Cookie
-* Session
-* JWT
+
+- Cookie
+- Session
+- JWT
## Resources
-* [MDN - HTTP 쿠키](https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies)
-* [Cookies and Sessions](https://web.stanford.edu/~ouster/cgi-bin/cs142-fall10/lecture.php?topic=cookie)
-* [JWT](https://jwt.io/)
+
+- [MDN - HTTP 쿠키](https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies)
+- [Cookies and Sessions](https://web.stanford.edu/~ouster/cgi-bin/cs142-fall10/lecture.php?topic=cookie)
+- [JWT](https://jwt.io/)
## Checklist
-* 쿠키란 무엇일까요?
- * 쿠키는 어떤 식으로 동작하나요?
- * 쿠키는 어떤 식으로 서버와 클라이언트 사이에 정보를 주고받나요?
-* 웹 어플리케이션의 세션이란 무엇일까요?
- * 세션의 ID와 내용은 각각 어디에 저장되고 어떻게 서버와 교환되나요?
-* JWT란 무엇인가요?
- * JWT 토큰은 어디에 저장되고 어떻게 서버와 교환되나요?
-* 세션에 비해 JWT가 가지는 장점은 무엇인가요? 또 JWT에 비해 세션이 가지는 장점은 무엇인가요?
+
+- 쿠키란 무엇일까요?
+
+ ```
+ > HTTP 쿠키는 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각이다.
+ > 브라우저는 그 데이터 조각들을 저장해 놓았다가, 동일한 서버에 재 요청 시 저장된 데이터를 함께 전송한다.
+ > 쿠키는 두 요청이 동일한 브라우저에서 들어왔는지 아닌지를 판단할 때 주로 사용한다.
+ > 이를 이용하여 사용자의 로그인 상태 유지 할 수있음.
+ ```
+
+ - 쿠키는 어떤 식으로 동작하나요?
+ - 쿠키는 어떤 식으로 서버와 클라이언트 사이에 정보를 주고받나요?
+
+ ```
+ > 쿠키는 서버가 클라이언트의 웹브라우제어 소량의 정보를 저장하고 나중에 클라이언트가 서버에 다시 액세스할 때 해당 정보를 검색하는 방법이다. 이를 통해 서버는 클라이어트에 대한 특정 기본 설정 또는 설정을 기억하고 여러 요청에서 상태를 유지 가능.
+
+ > 클라이언트가 서버에 요청하면 서버는 응답에 하나 이상의 쿠키를 포함할 수 있습니다. 쿠키는 쿠키와 해당 값을 설정하는 데 사용되는 Set-Cookie 헤더와 함께 HTTP 헤더로 전송됩니다.
+
+ //예시코드
+ Set-Cookie: sessionId=1234567890; expires=Sun, 12 Nov 2023 00:00:00 GMT; path=/
+
+ > 그러면 값이 1234567890인 sessionId라는 쿠키가 설정됩니다. 'expires' 속성은 쿠키의 만료 날짜와 시간을 지정하고 'path' 속성은 쿠키가 유효한 서버의 경로를 지정합니다.
+ > 클라이언트가 서버에 다른 요청을 보낼 때 요청의 도메인 및 경로와 일치하는 모든 쿠키를 포함합니다. 쿠키는 요청에 하나 이상의 쿠키를 포함하는 데 사용되는 'Cookie' 헤더와 함께 HTTP 헤더로 전송됩니다.
+ ```
+
+- 웹 어플리케이션의 세션이란 무엇일까요?
+
+ ```
+ > 세션이란 여러 HTTP 요청에서 애플리케이션과 사용자의 상호 작용과 관련된 데이터를 지속적으로 저장하는 방법이다.
+ > 일반적인 웹 에플리케이션에서 사용자가 수행한 각 HTTP 요청은 동일한 사용자가 수행한 이전 요청에 대한 내재 지식 없이 서버에서 독립적인 트랜잭션으로 처리된다.
+
+ ```
+
+ - 세션의 ID와 내용은 각각 어디에 저장되고 어떻게 서버와 교환되나요?
+
+ ```
+
+ > 여러 요청에서 상태를 유지하기 위해 웹 애플리케이션은 일반적으로 고유 식별자(세션 ID라고 함)를 각 사용자의 상호 작용과 연결하는 세션 메커니즘을 사용. 세션 ID는 일반적으로 사용자 컴퓨터에 쿠키로 저장되며 서버에 대한 후속 HTTP 요청에 포함됩니다.
+ > 서버가 세션 ID가 있는 요청을 수신하면 해당 세션과 연결된 저장된 데이터를 조회하고 이를 사용하여 응답을 사용자 정의합니다. 예를 들어 사용자가 애플리케이션에 로그인한 경우 서버는 사용자의 ID 또는 액세스 수준을 세션 데이터에 저장하고 이 정보를 사용하여 사용자가 액세스할 수 있는 기능을 제어할 수 있습니다.
+ > 세션은 서버 측(예: 메모리, 데이터베이스 또는 캐시) 또는 클라이언트 측(예: 서명 및 암호화된 쿠키 사용)에 세션 데이터를 저장하는 것을 포함하여 다양한 기술을 사용하여 구현될 수 있습니다. 세션 관리에는 특정 시간이 지나면 세션이 자동으로 무효화되는 세션 만료 또는 비활성 기간 후 세션이 무효화되는 세션 시간 초과와 같은 기능도 포함될 수 있습니다.
+ ```
+
+- JWT란 무엇인가요?
+
+```
+> JWT는 JSON 웹 토큰(JSON Web Token)의 약자로 당사자간에 데이터를 JSON 객체로 전송하는 작고 독립적인 방법.
+> JWT 는 일반적으로 웹 에플리케이션의 인증 및 권한 부여에 사용되며 종종 기존 세션 기반 인증 메커니즘을 대체하는 데 사용.
+```
+
+- JWT 토큰은 어디에 저장되고 어떻게 서버와 교환되나요?
+
+```
+> JWT 토큰은 애플리케이션의 요구 사항에 따라 다양한 방법으로 저장 가능.
+> 가장 일반적인 저장 메커니즘은 쿠키 및 로컬저장소지만 세션 저장소 및 HTTP 헤더와 같은 다른 옵션도 가능.
+> 사용자가 웹 에플리케이션에 로그인 하면 서버는 사용자에 대한 정보가 포함된 JWT 토큰을 생성하고 비밀키로 서명.
+> 그런 다음 JWT 토큰은 클라이언트에 문자열로 반환되며 쿠키 또는 로컬 저장소에 저장.
+```
+
+- 세션에 비해 JWT가 가지는 장점은 무엇인가요? 또 JWT에 비해 세션이 가지는 장점은 무엇인가요?
+
+```
+> 세션에 비해 JWT의 장점은
+ > 상태 비저장: JWT는 독립적이며 서버 측 스토리지 또는 상태가 필요하지 않습니다. 즉, JWT는 분산 환경에서 사용할 수 있고 확장성이 뛰어납니다.
+ > 분산형: JWT는 공유 세션 상태 없이도 다양한 도메인 또는 서비스에서 사용자를 인증하고 권한을 부여하는 데 사용할 수 있습니다.
+ > 모바일 친화적: JWT는 로컬 스토리지 또는 기타 클라이언트 측 스토리지 메커니즘을 사용하여 모바일 장치에 쉽게 저장할 수 있습니다.
+ > 서버 로드 감소: JWT는 서버 측 스토리지 또는 상태가 필요하지 않기 때문에 서버의 로드를 줄이고 애플리케이션 성능을 향상시킬 수 있습니다.
+
+ JWT에 비해 세션의 장점:
+ > 더 안전함: 세션 데이터가 서버 측에 저장되고 암호화되어 공격으로부터 보호될 수 있으므로 세션은 경우에 따라 JWT보다 더 나은 보안을 제공할 수 있습니다.
+ > 더 많은 제어: 세션은 개발자에게 사용자의 세션 상태에 대한 더 많은 제어를 제공하며 복잡한 워크플로 및 사용자 지정 동작을 구현하는 데 사용할 수 있습니다.
+ > 간단한 구현: 세션은 암호화 알고리즘 및 서명 확인에 대한 지식이 필요하지 않기 때문에 일반적으로 JWT보다 구현이 간단합니다.
+
+```
## Quest
-* 이번에는 메모장 시스템에 로그인 기능을 넣고자 합니다.
- * 사용자는 딱 세 명만 존재한다고 가정하고, 아이디와 비밀번호, 사용자의 닉네임은 하드코딩해도 무방합니다.
- * 로그인했을 때 해당 사용자가 이전에 작업했던 탭들과 마지막으로 활성화된 탭 등의 상태가 로딩 되어야 합니다.
- * 세션을 이용한 버전과, JWT를 이용한 버전 두 가지를 만들어 보세요!
- * 세션을 이용할 경우 세션은 서버의 메모리나 파일에 저장하면 됩니다.
+
+- 이번에는 메모장 시스템에 로그인 기능을 넣고자 합니다.
+ - 사용자는 딱 세 명만 존재한다고 가정하고, 아이디와 비밀번호, 사용자의 닉네임은 하드코딩해도 무방합니다.
+ - 로그인했을 때 해당 사용자가 이전에 작업했던 탭들과 마지막으로 활성화된 탭 등의 상태가 로딩 되어야 합니다.
+ - 세션을 이용한 버전과, JWT를 이용한 버전 두 가지를 만들어 보세요!
+ - 세션을 이용할 경우 세션은 서버의 메모리나 파일에 저장하면 됩니다.
## Advanced
-* Web Authentication API(WebAuthn)은 무엇인가요?
+
+- Web Authentication API(WebAuthn)은 무엇인가요?
diff --git a/Quest11/README.md b/Quest11/README.md
index b9ac1bd54..e0741d30f 100644
--- a/Quest11/README.md
+++ b/Quest11/README.md
@@ -1,39 +1,191 @@
# Quest 11. RDB의 기초와 ORM
## Introduction
-* 이번 퀘스트에서는 데이터베이스를 다루는 방법에 대해 알아보겠습니다.
+
+- 이번 퀘스트에서는 데이터베이스를 다루는 방법에 대해 알아보겠습니다.
## Topics
-* RDBMS
-* MySQL
-* ORM
-* Hash
- * scrypt
+
+- RDBMS
+- MySQL
+- ORM
+- Hash
+ - scrypt
## Resources
-* [MySQL 101 – The basics](https://www.globo.tech/learning-center/mysql-101-basics/)
-* [Sequelize](https://sequelize.org/)
-* [안전한 패스워드 저장](https://d2.naver.com/helloworld/318732)
+
+- [MySQL 101 – The basics](https://www.globo.tech/learning-center/mysql-101-basics/)
+- [Sequelize](https://sequelize.org/)
+- [안전한 패스워드 저장](https://d2.naver.com/helloworld/318732)
## Checklist
-* RDBMS 테이블의 정규화는 무엇인가요?
-* MySQL 외의 RDB에는 어떤 것들이 있나요?
- * Relational Database 외에 다른 DB에는 어떤 것들이 있을까요?
-* RDBMS에서 테이블의 인덱싱은 무엇인가요? 인덱싱을 하면 어떤 점이 다르며, 어떤 식으로 동작하나요?
-* ORM을 사용하는 것은 사용하지 않는 것에 비해 어떤 장단점을 가지고 있나요?
- * 자바스크립트 생태계의 ORM에는 어떤 것들이 있나요?
-* 모델간의 1:1, 1:N, N:M 관계는 각각 무엇이고 어떨 때 사용하나요?
-* DB에 사용자의 암호를 평문으로 저장하지 않고도 사용자의 암호를 인증하는 것이 가능한 이유는 무엇일까요?
- * 해시 함수에는 어떤 것이 있나요?
- * 사용자의 암호를 해싱하여 저장할 때 어떤 식으로 저장하는 것이 보안에 좋을까요?
+
+- RDBMS 테이블의 정규화는 무엇인가요?
+ ```
+ >RDBMS(Relational DataBase Management System)를 설계할 때,
+ 중복을 최소화하면서 데이터 구조를 짜는 프로세스이다.
+ ```
+- MySQL 외의 RDB에는 어떤 것들이 있나요?
+
+ ```
+ 1.Oracle: 대규모 비즈니스 애플리케이션을 위해 설계된 강력한 RDBMS입니다. 높은 안정성과 확장성을 제공하며,
+ 다양한 운영 체제와 하드웨어 플랫폼에서 실행될 수 있습니다.
+
+ 2.Microsoft SQL Server: Microsoft에서 제공하는 RDBMS입니다. Windows 운영 체제에서 실행될 수 있으며,
+ 대규모 비즈니스 애플리케이션을 위해 설계되었습니다.
+
+ 3.PostgreSQL: 오픈 소스 RDBMS로, 안정성과 확장성이 높습니다. 다양한 운영 체제에서 실행될 수 있으며,
+ 다양한 기능을 제공합니다.
+
+ 4.SQLite: 경량 RDBMS로, 단일 파일로 데이터베이스를 관리합니다. 모바일 디바이스 및
+ 웹 브라우저에서 작동하기에 적합합니다.
+ ```
+
+ - Relational Database 외에 다른 DB에는 어떤 것들이 있을까요?
+
+ ```
+ 1.NoSQL 데이터베이스 NoSQL 데이터베이스는 관계형 데이터베이스와 달리 스키마가 없거나
+ 유연한 스키마를 가지고 있습니다. 데이터는 다양한 형식으로 저장될 수 있으며,
+ 일반적으로 대량의 비정형 데이터를 처리하는 데 사용됩니다.
+ 예를 들어, MongoDB, Cassandra, Redis 등이 있습니다.
+
+ 2. 그래프 데이터베이스 그래프 데이터베이스는 데이터를 노드(node)와 엣지(edge)로
+ 구성된 그래프 형식으로 저장합니다. 이러한 구조는 연결된 데이터를 쉽게 검색하고
+ 분석할 수 있으므로, 소셜 미디어, 추천 시스템, 지리 정보 시스템 등에 자주 사용됩니다.
+ 예를 들어, Neo4j, OrientDB 등이 있습니다.
+
+ 3. 객체 지향 데이터베이스 객체 지향 데이터베이스는 객체 지향 프로그래밍에서 사용되는
+ 객체를 데이터베이스에 저장하는 방식입니다. 이러한 데이터베이스는 복잡한 객체를
+ 쉽게 저장하고 관리할 수 있으며, 객체 간의 관계를 쉽게 모델링할 수 있습니다.
+ 예를 들어, db4o, Versant 등이 있습니다.
+
+ 4. 키-값 스토어 키-값 스토어는 키와 값을 쌍으로 저장하는 단순한 데이터베이스입니다.
+ 이러한 데이터베이스는 분산 시스템과 클라우드 컴퓨팅에 적합합니다.
+ 예를 들어, Riak, Amazon DynamoDB, Apache Cassandra 등이 있습니다.
+ ```
+
+- RDBMS에서 테이블의 인덱싱은 무엇인가요? 인덱싱을 하면 어떤 점이 다르며, 어떤 식으로 동작하나요?
+
+```
+> 인덱싱은 데이터 베이스 내의 테이블에서 레코드들을 빠르게
+검색하기 위한 기술.
+> 인덱싱을 사용하면 데이터베이스는 검색을 수행할 때 전체
+테이블을 스캔 하지 않고 인덱스를 사용하여 필요한 레코드를
+더 빠르게 찾을 수 있음.
+> 인덱스는 일반적으로 B-tree 또는 B+tree 알고리즘을 사용하여
+구현된다. 이러한 알고리즘은 인덱스키를 기반으로 트리 구조를
+맏늘어 빠른 검색이 가능.
+> 인덱스는 데이터베이스 성능을 향상시키는데 중요한 역할 수행.
+```
+
+- ORM을 사용하는 것은 사용하지 않는 것에 비해 어떤 장단점을 가지고 있나요?
+
+```
+ 장점 :
+ 1. 완벽한 객체지향적인 코드-> 직관적인 이해가 쉬움
+ : ORM을 이용하면 SQL문이 아닌 클래스의 메서드를 통해
+ 데이터베이스 조작할 수 있어, 개발자가 객체 모델만 이용해서
+ 프로그래밍을 하는데 집중 할 수 있음.
+ 2. 재사용, 유지보수, 리팩토링의 용이성
+ : ORM을 통해 작성한 객체를 재활용할 수 있다는 측면에서
+ 재사용 및 유지보수의 편리성이 증가.
+ 3. DBMS 종속성 하락
+ : 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하고, 객체의 자료형 타입까지 사용할 수 있기 때문에 RDBMS의
+ 데이터 구조와 객체지향 모델 사이의 간격을 좁힐 수 있다.
+ 객체에만 집중할 수 있기 때문에 DBMS를 교체하는 큰 작업에도
+ 리스크가 적고 드는 시간도 줌.
+
+ 단점:
+ 1.ORM이 모든 걸 해결해줄 수 없다. -> 적절하게 SQL문을 사용할 수 있어야한다.
+ : 프로젝트의 복잡성이 커질 수록 난이도도 올라가고 부족한 설계로 잘못 구현되었을 경우 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있다. 또한 일부 자주 사용되는 대형 SQL문은 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 SQL문을 써야할 수도 있다.
+ 2. 복잡한 쿼리문의 경우 오히려 SQL문으로 사용이 직관적이면서 효율적일 수 있다.
+```
+
+- 자바스크립트 생태계의 ORM에는 어떤 것들이 있나요?
+
+```
+1. Sequelize: Sequelize는 Node.js 기반 ORM으로, MySQL, PostgreSQL, SQLite, MSSQL 등의 데이터베이스와 호환됩니다.
+
+2. Mongoose: Mongoose는 MongoDB에 대한 객체 데이터 모델링(Object Data Modeling)을 지원하는 ORM입니다.
+
+3. TypeORM: TypeORM은 TypeScript와 함께 사용하는 ORM으로, MySQL, PostgreSQL, SQLite, MSSQL, Oracle 등의 데이터베이스를 지원합니다.
+
+4. Waterline: Waterline은 Node.js ORM으로, NoSQL 및 관계형 데이터베이스에서 작동합니다. MongoDB, MySQL, PostgreSQL, Redis 등을 지원합니다.
+
+5. Bookshelf.js: Bookshelf.js는 Node.js ORM으로, MySQL, PostgreSQL, SQLite, MSSQL 등의 데이터베이스와 호환됩니다.
+
+6. Objection.js: Objection.js는 Node.js ORM으로, PostgreSQL, MySQL, SQLite3, MSSQL 등의 데이터베이스를 지원합니다.
+
+7. Prisma: Prisma는 TypeScript를 사용하여 데이터베이스에 대한 타입 안전한 ORM을 제공합니다. PostgreSQL, MySQL, SQLite, MS SQL Server 등의 데이터베이스를 지원합니다.
+
+
+```
+
+- 모델간의 1:1, 1:N, N:M 관계는 각각 무엇이고 어떨 때 사용하나요?
+
+```
+ > 관계는 두 엔티티가 서로 관련이 있을 때를 말하는데, 1:1, 1:N, N:M 관계를 맺을 수 있다.
+ > 1:1 관계란 어느 엔티티 쪽에서 상대 엔티티와 반드시 단 하나의 관계를 가지는 것을 말한다.
+ > 1:N 관계는 한 쪽 엔티티가 관계를 맺은 엔티티 쪽의 여러 객체를 가질 수 있는 것을 의미한다.
+ 현실세계에는 1:N관계가 많이 있는데, 실제 DB를 설계할 때 자주 쓰이는 방식이다.
+ 1:N 관계는 N:M 관계처럼 새로운 테이블을 만들지 않는다.
+> N:M 관계는 관계를 가진 양쪽 엔티티 모두에서 1:N 관계를 가지는 것을 말한다.
+
+즉, 서로가 서로를 1:N 관계로 보고 있는 것이다.
+
+
+```
+
+>
+
+- DB에 사용자의 암호를 평문으로 저장하지 않고도 사용자의 암호를 인증하는 것이 가능한 이유는 무엇일까요?
+
+```
+ > 암호는 일반적으로 데이터베이스에 저장되기전에 해시된다.
+ 해싱은 입력을 받아 고정 크기 출력을 생성하는 단뱡향 프로세스이다.
+ >해시는 입력에 고유하므로 입력이 조금만 변경되어도 완전히 다른 해시가 생성된다.
+ > 이로 인해 해시의 입력을 리버스 엔지니어링 하기 매우 어렵다.
+그래서 사용자 암호를 데이터 베이스에 일반 텍스트로 저장하지
+않고도 보안 인증이 가능하다. 공격자가 데이터베이스에 대한
+액세스 권한을 얻더라도 암호는 해시된 값으로만 저장되기 때문에
+암호를 읽고 이를 사용하여 사용자 계정에 액세스 x
+```
+
+- 해시 함수에는 어떤 것이 있나요?
+
+```
+> 해시 함수는 임이의 길이를 갖는 메시지를 입력받아 고정된 길이의 해시값을 출력하는 함수
+>Division (제산법)
+Mid – Square (제곱법)
+Digit Analysis (숫자 분석법)
+Shifting (이동법)
+Radix Conversion (기수 변환법)
+Folding (중첩법)
+Pseudo Random (난수 생성법)
+SHA-1
+SHA-256
+SHA-384
+SHA-512
+```
+
+- 사용자의 암호를 해싱하여 저장할 때 어떤 식으로 저장하는 것이 보안에 좋을까요?
+
+```
+> 사용자 암호를 해싱하고 저장할 때 보안을 위해 암호를 저장하는 가장 좋은 방법은 bcrypt, scrypt 또는 Argon2와 같은 강력한 해싱 알고리즘을 사용하는 것
+> bcrypt, scrypt 또는 Argon2와 같은 강력하고 느린 해싱 알고리즘을 사용.
+> 각 암호에 대해 고유한 솔트를 사용.
+> 적절한 액세스 제어 및 암호화를 사용하여 비밀번호 데이터베이스를 안전하게 유지.
+```
## Quest
-* 이번에는 메모장을 파일이 아닌 DB기반으로 만들어 보고자 합니다.
- * 적절한 테이블을 설계해 보세요.
- * Sequelize를 이용하여 데이터의 모델을 만들고 어플리케이션에 적용해 보세요.
- * 사용자의 비밀번호는 해싱을 통해 저장되어야 합니다.
+
+- 이번에는 메모장을 파일이 아닌 DB기반으로 만들어 보고자 합니다.
+ - 적절한 테이블을 설계해 보세요.
+ - Sequelize를 이용하여 데이터의 모델을 만들고 어플리케이션에 적용해 보세요.
+ - 사용자의 비밀번호는 해싱을 통해 저장되어야 합니다.
## Advanced
-* Object–relational impedance mismatch란 어떤 개념인가요?
-* Foreign Key란 무엇인가요? 이것을 사용할 때의 장점과 단점은 무엇일까요?
-* 이전에 쓰이던 해시함수들에는 어떤 것이 있을까요? 패스워드 해싱의 추세의 역사는 어떻게 이어져왔나요?
+
+- Object–relational impedance mismatch란 어떤 개념인가요?
+- Foreign Key란 무엇인가요? 이것을 사용할 때의 장점과 단점은 무엇일까요?
+- 이전에 쓰이던 해시함수들에는 어떤 것이 있을까요? 패스워드 해싱의 추세의 역사는 어떻게 이어져왔나요?
diff --git a/Quest12/README.md b/Quest12/README.md
index 790143a43..0d8fb1128 100644
--- a/Quest12/README.md
+++ b/Quest12/README.md
@@ -1,32 +1,107 @@
# Quest 12. 보안의 기초
## Introduction
-* 이번 퀘스트에서는 가장 기초적인 웹 서비스 보안에 대해 알아보겠습니다.
+
+- 이번 퀘스트에서는 가장 기초적인 웹 서비스 보안에 대해 알아보겠습니다.
## Topics
-* XSS, CSRF, SQL Injection
-* HTTPS, TLS
+
+- XSS, CSRF, SQL Injection
+- HTTPS, TLS
## Resources
-* [The Basics of Web Application Security](https://martinfowler.com/articles/web-security-basics.html)
-* [Website Security 101](https://spyrestudios.com/web-security-101/)
-* [Web Security Fundamentals](https://www.shopify.com.ng/partners/blog/web-security-2018)
-* [OWASP Cheat Sheet Series](https://cheatsheetseries.owasp.org/)
-* [Wikipedia - TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security)
+
+- [The Basics of Web Application Security](https://martinfowler.com/articles/web-security-basics.html)
+- [Website Security 101](https://spyrestudios.com/web-security-101/)
+- [Web Security Fundamentals](https://www.shopify.com.ng/partners/blog/web-security-2018)
+- [OWASP Cheat Sheet Series](https://cheatsheetseries.owasp.org/)
+- [Wikipedia - TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security)
## Checklist
-* 입력 데이터의 Validation을 웹 프론트엔드에서 했더라도 서버에서 또 해야 할까요? 그 이유는 무엇일까요?
- * 서버로부터 받은 HTML 내용을 그대로 검증 없이 프론트엔드에 innerHTML 등을 통해 적용하면 어떤 문제점이 있을까요?
- * XSS(Cross-site scripting)이란 어떤 공격기법일까요?
- * CSRF(Cross-site request forgery)이란 어떤 공격기법일까요?
- * SQL Injection이란 어떤 공격기법일까요?
-* 대부분의 최신 브라우저에서는 HTTP 대신 HTTPS가 권장됩니다. 이유가 무엇일까요?
- * HTTPS와 TLS는 어떤 식으로 동작하나요? HTTPS는 어떤 역사를 가지고 있나요?
- * HTTPS의 서비스 과정에서 인증서는 어떤 역할을 할까요? 인증서는 어떤 체계로 되어 있을까요?
+
+- 입력 데이터의 Validation을 웹 프론트엔드에서 했더라도 서버에서 또 해야 할까요? 그 이유는 무엇일까요?
+
+ ```
+ > 프론트엔드에 대한 유효성 검사는 주로 실시간 피드백을 제공하고 사용자가 유효하지 않은 데이터를 제출하지 못하도록
+ 방지하여 사용자 경험을 개선하기 위한 것.
+ > 그러나 클라이언트 쪽 코드를 조작하거나 다른 도구를 사용하여
+ 잘못된 데이터를 서버에 보낼 수 있는 악의적인 사용자가 이
+ 유요성 검사를 무시 가능.
+ > 따라서 데이터 무결성, 보안 및 일관성을 보장하려면 서버 측의
+ 유효성 검사가 필수적.
+
+ ```
+
+ - 서버로부터 받은 HTML 내용을 그대로 검증 없이 프론트엔드에 innerHTML 등을 통해 적용하면 어떤 문제점이 있을까요?
+
+ ```
+ > 그럴경우 XSS(교차 사이트 스크립팅) 공격을 비롯한 다양한 보안 취약점에 노출된다.
+ > innerHTML을 통해 서버에서 받은 검증되지 않은 HTML
+ 콘텐츠를 적용하면 프런트 엔드 코드가 이러한 공격에 취약해진다.
+ > 확인되지 않은 HTML 콘텐츠에는 서버 측 리소스에 대한 무단 액세스, 데이터 유출 및 서비스 거부 공격과 같은 다른 보안 위험도 발생.
+ ```
+
+ - XSS(Cross-site scripting)이란 어떤 공격기법일까요?
+
+ ```
+ > XSS공격은 공격자가 악성코드를 웹 페이지에 주입한 다음 피해자의 브라우저에서 실행될 때 발생.
+ > 이를 통해 공격자는 로그인 자격 증명이나 개인 데이터와 같은
+ 민감한 정보를 훔치거나 웹 페이지의 콘텐츠를 조작 가능.
+ ```
+
+ - CSRF(Cross-site request forgery)이란 어떤 공격기법일까요?
+
+ ```
+ > CSRF(Cross-site request forgery)는 사용자와 웹 사이트 간의 신뢰 관계를 악용하는 공격 기법의 한 유형
+ > CSRF 공격에서 공격자는 사용자가 의도하지 않은 웹사이트에서 작업 수행하도록 속임.
+ > 악성 웹사이트를 만들거나 피해자에게 악성 링크를 보냄.
+ > 피해자가 웹사이트를 방문하거나 링크 클릭시 공격자와
+ 웹사이트는 피해자의 자격 증명 또는 세션 정보를 사용하여
+ 대상 웹사이트에 요청 보냄.
+ > 요청이 합법적인 출처인거 처럼 하고나서 진위 여부 확인하지 않고 요청 처리.
+ > 결과적으로 공격자는 대상 웹 사이트에서 사용자 암호 변경, 무단 구매 또는 사용자 데이터 삭제와 같은 무단 작업을 수행할 수 있게 됨.
+ ```
+
+ - SQL Injection이란 어떤 공격기법일까요?
+
+ ```
+ > SQL Injection은 공격자가 사용자 입력을 조작하여 웹 응용 프로그램의 데이터베이스에서 악의적인 SQL 문을 실행할 수 있도록 하는 일종의 공격 기술이다.
+ ```
+
+ - 대부분의 최신 브라우저에서는 HTTP 대신 HTTPS가 권장됩니다. 이유가 무엇일까요?
+
+ ```
+ > HTTPS는 사용자의 브라우저와 사용자가 액세스하는 웹사이트 사이에 안전하고 암호화된 연결을 제공하므로 대부분의 최신 브라우저에서 HTTP 대신 권장 함.
+ > HTTPS(Hypertext Transfer Protocol Secure)는 SSL/TLS 암호화를 사용하여 사용자의 브라우저와 웹사이트 간에 전송되는 데이터를 보호한다. 이 암호화는 네트워크를 통해 전송되는 모든 데이터가 스크램블되어 데이터를 가로채는 사람이 읽을 수 없도록 한다.
+ ```
+
+ - HTTPS와 TLS는 어떤 식으로 동작하나요? HTTPS는 어떤 역사를 가지고 있나요?
+
+ ```
+ > 사용자가 HTTPS를 사용하여 웹사이트에 액세스하면 브라우저는 TLS를 사용하여 서버와의 보안 연결을 시작.
+ 여기에는 키 교환 및 인증 프로세스가 포함되며,
+ 여기서 서버는 자신의 신원을 확인하는 디지털 인증서를 브라우저에 제시하고 브라우저는 인증서를 사용하여
+ 두 당사자 간에 전송되는 데이터를 암호화 및 해독하기 위한 보안 세션 키를 설정.
+ 보안 연결이 설정되면 브라우저와 서버 간에 전송되는 모든 데이터가 암호화되어 제3자의 가로채기 및 변조로부터 보호 됨.
+ ```
+
+ - HTTPS의 서비스 과정에서 인증서는 어떤 역할을 할까요? 인증서는 어떤 체계로 되어 있을까요?
+
+ ```
+ > 인증서는 액세스 중인 웹사이트의 신원을 확인하고 사용자의 브라우저와 웹 서버 간에 암호화된 보안 연결을 설정하는 데 사용 된다.
+ > HTTPS에서 사용되는 인증서 시스템은 계층적 신뢰 구조를 기반으로 한다. 계층 구조의 맨 위에는 모든 주요 웹 브라우저
+ 및 운영 체제에서 기본적으로 신뢰하는 루트 CA가 있다. 이러한 루트 CA는 다른 CA에 중간 인증서를 발급하고 다른 CA는
+ 웹사이트 소유자에게 인증서를 발급한다.
+ > 계층적 신뢰 구조를 사용하면 웹사이트 인증서가 합법적인 웹사이트 소유자에게만 발급되고 인증서 자체가 신뢰할 수 있고 검증 가능하도록 보장가능. 웹 사이트의 인증서를 확인할 수 없거나 신뢰할 수 없는 것으로 간주되는 경우 브라우저는 사용자에게 경고 메시지를 표시하여 주의해서 진행하거나 웹 사이트를 완전히 피하라고 조언한다.
+
+
+ ```
## Quest
-* 메모장의 서버와 클라이언트에 대해, 로컬에서 발행한 인증서를 통해 HTTPS 서비스를 해 보세요.
+
+- 메모장의 서버와 클라이언트에 대해, 로컬에서 발행한 인증서를 통해 HTTPS 서비스를 해 보세요.
## Advanced
-* TLS의 인증서에 쓰이는 암호화 알고리즘은 어떤 종류가 있을까요?
-* HTTP/3은 기존 버전과 어떻게 다를까요? HTTP의 버전 3이 나오게 된 이유는 무엇일까요?
+
+- TLS의 인증서에 쓰이는 암호화 알고리즘은 어떤 종류가 있을까요?
+- HTTP/3은 기존 버전과 어떻게 다를까요? HTTP의 버전 3이 나오게 된 이유는 무엇일까요?
diff --git a/Quest13/README.md b/Quest13/README.md
index 4f6fe2447..74013eeb1 100644
--- a/Quest13/README.md
+++ b/Quest13/README.md
@@ -1,34 +1,140 @@
# Quest 13. 웹 API의 응용과 GraphQL
## Introduction
-* 이번 퀘스트에서는 차세대 웹 API의 대세로 각광받고 있는 GraphQL에 대해 알아보겠습니다.
+
+- 이번 퀘스트에서는 차세대 웹 API의 대세로 각광받고 있는 GraphQL에 대해 알아보겠습니다.
## Topics
-* GraphQL
- * Schema
- * Resolver
- * DataLoader
-* Apollo
+
+- GraphQL
+ - Schema
+ - Resolver
+ - DataLoader
+- Apollo
## Resources
-* [GraphQL](https://graphql.org/)
-* [GraphQL.js](http://graphql.org/graphql-js/)
-* [DataLoader](https://github.com/facebook/dataloader)
-* [Apollo](https://www.apollographql.com/)
+
+- [GraphQL](https://graphql.org/)
+- [GraphQL.js](http://graphql.org/graphql-js/)
+- [DataLoader](https://github.com/facebook/dataloader)
+- [Apollo](https://www.apollographql.com/)
## Checklist
-* GraphQL API는 무엇인가요? REST의 어떤 단점을 보완해 주나요?
-* GraphQL 스키마는 어떤 역할을 하며 어떤 식으로 정의되나요?
-* GraphQL 리졸버는 어떤 역할을 하며 어떤 식으로 정의되나요?
- * GraphQL 리졸버의 성능 향상을 위한 DataLoader는 무엇이고 어떻게 쓰나요?
-* 클라이언트 상에서 GraphQL 요청을 보내려면 어떻게 해야 할까요?
- * Apollo 프레임워크(서버/클라이언트)의 장점은 무엇일까요?
- * Apollo Client를 쓰지 않고 Vanilla JavaScript로 GraphQL 요청을 보내려면 어떻게 해야 할까요?
-* GraphQL 기반의 API를 만들 때 에러처리와 HTTP 상태코드 등은 어떻게 하는게 좋을까요?
+
+- GraphQL API는 무엇인가요? REST의 어떤 단점을 보완해 주나요?
+ ```
+ >GraphQL은 API를 위한 퀴리 언어이며 타입 시스템을 사용하여 쿼리를 실행하는 서버사이드 런타임.
+ > GraphQL은 특정한 데이터베이스나 특정한 스토리지 엔진과 관계 되어 있지 않으며 기존 코드와 데이터에 의해 대체.
+ > SQL이 데이터베이스 시스템으로부터 데이터를 가져오는 목적을 가진다면, GraphQL은 클라이언트가 데이터를 서버로부터 가져오는 것을 목적으로 한다.
+ > GraphQL API는 데이터 검색에 보다 효율적이고 유연한 접근
+ 방식을 제공하여 REST API의 일부 단점을 해결한다.
+ 1. 데이터의 과다 가져오기 및 부족 가져오기: REST API는 고정
+ 데이터 구조를 반환하므로 클라이언트가 실제로 필요한 것보다
+ 많거나 적은 데이터를 받는 경우가 많다. 반대로 GraphQL
+ API를 사용하면 클라이언트가 필요한 데이터를 정확히 지정할
+ 수 있으므로 데이터의 과다 가져오기 및 부족 가져오기를
+ 줄일 수 있다.
+ 2.여러 요청: REST API는 종종 클라이언트가 필요한 모든
+ 데이터를 검색하기 위해 여러 요청을 해야 한다. 반대로
+ GraphQL API는 클라이언트가 단일 쿼리에서 필요한 모든
+ 데이터를 요청할 수 있도록 하여 데이터 검색에 필요한 요청
+ 수를 줄인다.
+ 3. 버전 관리: REST API는 이전 버전과의 호환성을 유지하기 위해 종종 버전 관리가 필요하다. 반대로 GraphQL API는 스키마
+ 진화를 지원한다. 즉, 기존 클라이언트를 손상시키지 않고
+ 스키마를 변경할 수 있다.
+ ```
+- GraphQL 스키마는 어떤 역할을 하며 어떤 식으로 정의되나요?
+ ```
+ > GraphQL API에서 스키마는 쿼리할 수 있는 데이터 유형과
+ 수행할 수 있는 작업을 정의한다. 검색할 수 있는 데이터와
+ 실행할 수 있는 작업에 대한 명확한 이해를 제공하는 서버와
+ 클라이언트 간의 계약 역할을 한다.
+ ```
+- GraphQL 리졸버는 어떤 역할을 하며 어떤 식으로 정의되나요?
+ ```
+ > GraphQL 리졸버(resolver)는 GraphQL 쿼리에서 요청된 데이터 검색을
+ 담당하는 함수다. GraphQL 스키마의 각 필드에 대해
+ 정의되며 해당 필드와 연결된 데이터를 검색하는 방법을
+ 지정한다.
+ > 리졸버는 데이터베이스, API 및 기타 데이터 소스를 비롯한
+ 다양한 소스에서 데이터를 검색할 수 있다. 또한 데이터를
+ 클라이언트에 반환하기 전에 데이터에 대한 변환 또는 유효성
+ 검사를 수행할 수 있다.
+ ```
+ - GraphQL 리졸버의 성능 향상을 위한 DataLoader는 무엇이고 어떻게 쓰나요?
+ ```
+ > DataLoader는 데이터 요청을 일괄 처리 및 캐싱하여 GraphQL 리졸버의 성능을 개선하는 데 사용할 수 있는 유틸리티 라이브러리이다.
+ > GraphQL 쿼리에 동일한 데이터 소스의 데이터가 필요한 여러
+ 필드가 포함된 경우 DataLoader 라이브러리를 사용하여 이러한
+ 요청을 일괄 처리하고 보다 효율적인 방식으로 데이터를 검색한다.
+ >
+ ```
+- 클라이언트 상에서 GraphQL 요청을 보내려면 어떻게 해야 할까요?
+
+ ```
+ > 클라이언트에서 GraphQL 요청을 보내는 일반적인 방법 중 하나는 대부분의 최신 웹 브라우저에 내장된 fetch API를
+ 사용하는 것
+ ```
+
+ ```
+ JavaScript에서 fetch를 사용하여 GraphQL 요청을 보내는 방법의 예
+
+ fetch('/graphql', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query: '{ hello }' })
+ })
+ .then(res => res.json())
+ .then(data => console.log(data))
+ .catch(err => console.error(err));
+ ```
+
+ - Apollo 프레임워크(서버/클라이언트)의 장점은 무엇일까요?
+
+ ```
+ > Apollo 프레임워크는 서버 측 및 클라이언트 측 구성
+ 요소를 모두 제공하는 널리 사용되는 오픈 소스 GraphQL
+ 구현이다.
+ > Apollo 서버의 장점
+ : 1. 사용하기 쉬움: Apollo Server는 GraphQL을 처음 접하는
+ 개발자도 쉽게 설정하고 사용할 수 있습니다. GraphQL
+ 스키마 및 리졸버를 정의하기 위한 간단하고 직관적인 API를
+ 제공합니다.
+ 2.성능: Apollo Server는 성능에 최적화되어 있으며 속도 저하없이 많은 수의 동시 요청을 처리할 수 있습니다.
+ 3.데이터 소스: Apollo Server는 데이터베이스, REST API
+ 및 마이크로서비스를 포함한 다양한 데이터 소스와의 통합을
+ 위한 내장 지원 기능을 갖추고 있습니다.
+ 4.미들웨어: Apollo Server는 개발자가 인증, 로깅 및
+ 캐싱과 같은 사용자 지정 기능을 GraphQL API에 추가할 수
+ 있는 미들웨어 시스템을 제공합니다.
+ ```
+
+ - Apollo Client를 쓰지 않고 Vanilla JavaScript로 GraphQL 요청을 보내려면 어떻게 해야 할까요?
+
+ ```
+ >Apollo 클라이언트를 사용하지 않고 바닐라 JavaScript로
+ GraphQL 요청을 보내려면 fetch API 또는 axios 또는
+ request와 같은 라이브러리를 사용할 수 있다.
+ ```
+
+- GraphQL 기반의 API를 만들 때 에러처리와 HTTP 상태코드 등은 어떻게 하는게 좋을까요?
+
+```
+ > 1. 적절한 HTTP 상태 코드 사용
+ 2. 응답에 오류 메세지 반환
+ 3. GraphQL 관련 오류 코드 사용
+ 4. 서버에서 오류 포착 및 처리
+ 5. 오류 미들웨어 사용
+ 6. 문서제공: HTTP 상태코드, GraphQL 관련 오류 코드 및 사용자가 반환하는
+ 모든사용자 정의 오류 메세지를 포함하여 오류 처리에 대한 정보가
+ 포함된 API 문서를 제공함.
+```
## Quest
-* 메모장의 서버와 클라이언트 부분을 GraphQL API로 수정해 보세요.
+
+- 메모장의 서버와 클라이언트 부분을 GraphQL API로 수정해 보세요.
## Advanced
-* GraphQL이 아직 제대로 수행하지 못하거나 불가능한 요구사항에는 어떤 것이 있을까요?
-* GraphQL의 경쟁자에는 어떤 것이 있을까요?
+
+- GraphQL이 아직 제대로 수행하지 못하거나 불가능한 요구사항에는 어떤 것이 있을까요?
+- GraphQL의 경쟁자에는 어떤 것이 있을까요?
diff --git a/Quest14/README.md b/Quest14/README.md
index 835469b61..ebc197eeb 100644
--- a/Quest14/README.md
+++ b/Quest14/README.md
@@ -1,31 +1,100 @@
# Quest 14. 정적 분석: 타입스크립트와 린트 시스템
## Introduction
-* 이번 퀘스트에서는 타입스크립트와 린트 시스템을 통해 코드에 대한 정적분석의 장점에 대해 알아보겠습니다.
+
+- 이번 퀘스트에서는 타입스크립트와 린트 시스템을 통해 코드에 대한 정적분석의 장점에 대해 알아보겠습니다.
## Topics
-* Lint
- * ESLint
-* TypeScript
+
+- Lint
+ - ESLint
+- TypeScript
## Resources
-* [ESLint](https://eslint.org/)
-* [TypeScript](https://www.typescriptlang.org/)
+
+- [ESLint](https://eslint.org/)
+- [TypeScript](https://www.typescriptlang.org/)
## Checklist
-* 코드를 린팅하는 것의 장점은 무엇일까요?
- * 린트 규칙은 어떻게 설정하는 것이 좋을까요? 너무 빡빡한 규칙과 너무 헐거운 규칙 사이에서 어떻게 밸런스를 잡아야 할까요?
-* 타입스크립트는 어떤 언어인가요?
- * 타입스크립트를 사용했을 때 얻을 수 있는 장점은 무엇인가요?
- * 타입스크립트를 사용하면서 타입이 없는 라이브러리나 프레임워크를 사용해야 할 경우에는 어떻게 해야 할까요?
- * any 타입을 남용하는 것은 왜 좋지 않을까요?
-* 린트와 빌드 등의 과정을 개발 싸이클에서 편하게 수행하려면 어떻게 하는 것이 좋을까요?
+
+- 코드를 린팅하는 것의 장점은 무엇일까요?
+
+```
+ > 전반적으로 linting은 코드 품질, 일관성 및 유지 관리 가능성을 개선하여
+ 개발 효율성을 높이고 생산 오류를
+ 줄이는 데 도움이 될 수 있습니다.
+ > 1. 향상된 코드품질
+ 2. 일관된 코드 스타일
+ 3. 디버깅 시간 단축
+ 4. 코드 유지 관리 향상
+ 5. 개발잣 생산성 향상
+ 6. 개선된 코드 검토 프로세스
+```
+
+- 린트 규칙은 어떻게 설정하는 것이 좋을까요? 너무 빡빡한 규칙과 너무 헐거운 규칙 사이에서 어떻게 밸런스를 잡아야 할까요?
+
+```
+> 규모가 큰 곳에서는 여러 개발자 존재 그만큼 많은 branch 존재.
+> 그래서 branch를 가장 효율적으로 관리 하기위해서 적당한
+규칙을 만들기 위해서 코딩 진행 환경, 개발자 성향 고려해야함.
+> 그렇기 때문에 적당한 규칙과 어떻게 적용할지 밸런스 고려 필요.
+
+```
+
+- 타입스크립트는 어떤 언어인가요?
+
+```
+ > JavaScript에 type을 지정해준 언어.
+ > 컴파일 언어, 정적 타입 언어.
+ > 객체 지향 프로그래밍 지원
+
+```
+
+- 타입스크립트를 사용했을 때 얻을 수 있는 장점은 무엇인가요?
+
+```
+> 오류룰 이른 시점에서 체크할 수 있고, 자료형을 구체적으로
+ 지정해주므로(type) 실행속도가 매우 빠르다.
+> JavaScript와 100%호환가능하므로, 확장 관점에 용이
+> VsCode와 같은 에디터 및 여러 라이브러리/프레임워크가 타입스크립트를 지원
+> 프로젝트 규모가 커질수록 타입스크립트의 장점이 많이 활용
+```
+
+- 타입스크립트를 사용하면서 타입이 없는 라이브러리나 프레임워크를 사용해야 할 경우에는 어떻게 해야 할까요?
+
+```
+> 타입스크립트 자체가 javascript를 지원하여서, 두파일의 상효 작용 자체 문제 x
+> 즉 라이브러리가 타입스크립트를 지원하지 않는다 해서 모든
+파일을 자바스크립트로 바꿀 필요없이, 해당 지원이 안되는부분
+만 javascript를 사용해도 무방.
+```
+
+- any 타입을 남용하는 것은 왜 좋지 않을까요?
+
+```
+ > 타입스크립트는 각 자료형을 구체적으로 지정해주는데 의미가
+ 있는 언어이다.
+ > 그래서 any를 남용하게되면 타입스크립트를 사용하는 의미가
+ 없어지고, 그만큼 이점을 활용하기 힘듬.
+```
+
+- 린트와 빌드 등의 과정을 개발 싸이클에서 편하게 수행하려면 어떻게 하는 것이 좋을까요?
+
+```
+ > 1. 사용하기 편한 린터 및 빌드 도구를 선택한다.
+ 2. 개발 주기의 일부로 자동 실행되도록 linter 및 빌드 도구 설정.
+ 3. 프로젝트의 특정 요구 사항에 맞게 linter 및 빌드도구 구성한다.
+ 4. 플러그인 및 확장 기능을 사용하여 린터 및 빌드 도구의 기능 향상시키는 것이 좋다.
+
+```
## Quest
-* 메모장 시스템에 린트 시스템을 적용해 보세요.
-* 메모장 시스템을 타입스크립트 기반으로 수정해 보세요.
-* `package.json` 파일의 `scripts` 항목을 이용하여 린트와 빌드 등의 작업을 스크립트화 해 보세요.
+
+- 메모장 시스템에 린트 시스템을 적용해 보세요.
+- 메모장 시스템을 타입스크립트 기반으로 수정해 보세요.
+- `package.json` 파일의 `scripts` 항목을 이용하여 린트와 빌드 등의 작업을 스크립트화 해 보세요.
## Advanced
-* 자바스크립트 코드에 대한 정적분석은 어떤 과정을 통해 이루어질까요?
- * 이러한 정적분석을 수행해 주는 핵심 역할을 하는 npm 패키지는 어떤 것이 있을까요?
+
+- 자바스크립트 코드에 대한 정적분석은 어떤 과정을 통해 이루어질까요?
+ - 이러한 정적분석을 수행해 주는 핵심 역할을 하는 npm 패키지는 어떤 것이 있을까요?
diff --git a/Quest15/README.md b/Quest15/README.md
index 4ab6da6c8..226a5eb44 100644
--- a/Quest15/README.md
+++ b/Quest15/README.md
@@ -1,37 +1,155 @@
# Quest 15. 자동화된 테스트
## Introduction
-* 이번 퀘스트에서는 자동화된 테스트에 어떤 장점이 있는지, 어떤 식으로 구축할 수 있는지에 대해 알아보겠습니다.
+
+- 이번 퀘스트에서는 자동화된 테스트에 어떤 장점이 있는지, 어떤 식으로 구축할 수 있는지에 대해 알아보겠습니다.
## Topics
-* Automated Test
- * TDD
- * Unit Test
- * Integration Test
- * E2E Test
- * Stub & Mock
-* Jest
-* Puppeteer
+
+- Automated Test
+ - TDD
+ - Unit Test
+ - Integration Test
+ - E2E Test
+ - Stub & Mock
+- Jest
+- Puppeteer
## Resources
-* [Unit Test (단위 테스트) 도입하기](https://www.popit.kr/unit-test-%EB%8B%A8%EC%9C%84-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8F%84%EC%9E%85%ED%95%98%EA%B8%B0-1%ED%8E%B8/)
-* [소프트웨어 테스트 안티 패턴](https://velog.io/@leejh3224/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%95%88%ED%8B%B0-%ED%8C%A8%ED%84%B4)
-* [End-to-End testing with Puppeteer and Jest](https://medium.com/touch4it/end-to-end-testing-with-puppeteer-and-jest-ec8198145321)
-* [Mock & Stub](https://stackoverflow.com/questions/3459287/whats-the-difference-between-a-mock-stub)
+
+- [Unit Test (단위 테스트) 도입하기](https://www.popit.kr/unit-test-%EB%8B%A8%EC%9C%84-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8F%84%EC%9E%85%ED%95%98%EA%B8%B0-1%ED%8E%B8/)
+- [소프트웨어 테스트 안티 패턴](https://velog.io/@leejh3224/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%95%88%ED%8B%B0-%ED%8C%A8%ED%84%B4)
+- [End-to-End testing with Puppeteer and Jest](https://medium.com/touch4it/end-to-end-testing-with-puppeteer-and-jest-ec8198145321)
+- [Mock & Stub](https://stackoverflow.com/questions/3459287/whats-the-difference-between-a-mock-stub)
## Checklist
-* 자동화된 테스트를 만드는 것에는 어떤 장점과 단점이 있을까요?
- * TDD(Test-Driven Development)란 무엇인가요? TDD의 장점과 단점은 무엇일까요?
-* 테스트들 간의 계층에 따라 어떤 단계들이 있을까요?
- * 유닛 테스트, 통합 테스트, E2E 테스트는 각각 어떤 것을 뜻하나요?
- * 테스트에 있어서 Stub과 Mock은 어떤 개념을 가리키는 것일까요?
-* Jest는 어떤 일을 하며 어떻게 사용하는 테스트 프레임워크일까요?
- * Jest 이외의 테스트 프레임워크는 어떤 것이 있고 어떤 장단점이 있을까요?
-* Puppeteer는 어떤 일을 하며 어떻게 사용하는 테스트 프레임워크일까요?
+
+- 자동화된 테스트를 만드는 것에는 어떤 장점과 단점이 있을까요?
+
+```
+ > 장점: 1.테스트당 비용 절감
+ 2. HR 비용 절감
+ 3. 더 빠른 테스트 주기
+ 4. 더욱 넓은 커버리지
+ 5. 원격 제어와 일관성의 유지
+ 단점: 1. 초기 투자비용
+ 2. 유지 보수 비용
+ 3. 테스트 커버리지 제한
+ 4. 오류 처리의 한계
+ 5. 사람의 감각 부재
+ 6. 자동화된 테스트의 가치
+ 7. 환경 제약
+
+```
+
+- TDD(Test-Driven Development)란 무엇인가요? TDD의 장점과 단점은 무엇일까요?
+
+```
+> TDD는 소프트웨어 개발 방법론 중 하나로, 테스트 케이스를
+먼저 작성하고 해당 테스트 케이스를 통과하는 코드를
+작성하는 방식이다.
+> 장점: 1. 더 나은 코드 품질
+ 2. 빠른 피드백
+ 3. 버그 예방
+ 4. 자기 문서화 코드
+ 단점: 1. 초기투자 비용 높음
+ 2. 추가적인 작성 시간 필요
+```
+
+- 테스트들 간의 계층에 따라 어떤 단계들이 있을까요?
+
+```
+ > 소프트웨어 테스트의 계층구조는 4단계로 나뉘어짐.
+ 1. 단위 테스트
+ - 개발자가 작성한 코드의 최소 단위인 모듈이나 함수등을
+ 테스트하는 단계
+ - 소스 코드 라인 단위로 테스트를 수행하며, 모든 분기 경로
+ 와 예외 상황을 포함하는 테스트 케이스를 작성하여 실행
+ 2. 통합 테스트
+ - 각 모듈이나 컴포넌트들이 결합하여 시스템 전체의 기능
+ 수행하는지 확인 단계
+ - 각 모듈들이 연결되고, 상효작용하는 부분을 중심으로
+ 테스트 수행
+ 3. 시스템 테스트
+ - 전체 시스템의 기능적 요구사항을 만족하는지 검증하는 단계
+ - 사용자 시나리오에 기반하여 시스템의 전반적인 기능 테스트
+ 4. 인수 테스트
+ - 사용자가 요구한 기능과 비즈니스 요구사항을 충족하는지를
+ 검증하는 단계
+ - 사용자의 입장에서 시스템을 검증하며, 시스템의
+ 최종인수를 결정하는 단계
+```
+
+- 유닛 테스트, 통합 테스트, E2E 테스트는 각각 어떤 것을 뜻하나요?
+
+```
+> 유닛테스트는 소프트웨어 개발에서 가장 작은 단위인 모듈
+이나 함수를 개발자가 작성한 후에 해당 모듈이나 함수의
+동작을 검증하는 테스트이다.
+> 통합테스트는 각각 모듈이나 컴포넌트들이 결합되어 작동할
+ 때의 동작을 검증하는 테스트이다.
+> E2E 테스트는 전체 시스템의 기능을 검증하는 테스트이다.
+
+```
+
+- 테스트에 있어서 Stub과 Mock은 어떤 개념을 가리키는 것일까요?
+
+```
+> Stub과 Mock은 소프트웨어 테스트에서 사용되는 개념으로,
+다른 코드와의 상효작용을 대신하여 테스트를 수행하는 방법
+> Stub은 실제로 동작하는 대신, 특정한 동작을 수행하는
+가짜 객체이다.
+> Mock은 Stub과 비슷하지만, 실제 동작하는 대신 호출된 함수
+나 메서드의 호출 여부나 파라미터, 반환값 등을 검증하는 객체
+```
+
+- Jest는 어떤 일을 하며 어떻게 사용하는 테스트 프레임워크일까요?
+
+```
+ > Jest는 JavaScript 언어를 사용하는 프로젝트의 테스트를 작성
+ 하고 실행할 수 있는 테스트 프레임워크이다.
+ > Jest는 기본적으로 React 프로젝트에 대한 테스트를 지원
+ 하도록 설계되었다.
+ > 하지만 React에 국한되지 않고 일반적인 JavaScript 프로젝트
+ 에서도 사용 가능.
+```
+
+- Jest 이외의 테스트 프레임워크는 어떤 것이 있고 어떤 장단점이 있을까요?
+
+```
+> Mocha는 Node.js와 브라우저를 지원하는 테스트 프레임워크.
+ 장점: 다양한 Assertion 라이브러리와 플러그인 지원.
+ Node.js와 브라우저 모두 지원.
+ 다양한 유형의 테스트를 지원가능.
+ 단점: Assertion 라이브러리를 따로 사용해야함.
+ > Jasmine은 BDD 스타일의 테스트 프레임워크이다.
+ Mocha와 유사한 방식으로 describ와 it 함수 사용하여 테스트 작성.
+ 장점: 자체적으로 Assertiob 라이브러리 제공하기 때문에,
+ 별도의 라이브러리 설치가 필요 x
+ BDD 스타일의 테스트를 지원하며, 다양한 유형의 테스트 지원
+ 단점: 다른 Assertion 라이브러리를 사용 할 수 없음.
+```
+
+- Puppeteer는 어떤 일을 하며 어떻게 사용하는 테스트 프레임워크일까요?
+
+```
+> Puppeteer는 구글에서 개발한 Node.js 기반의 headless
+ 브라우저이다.
+ > 브라우저를 자동화하여 웹 에플리케이션을 테스트하거나
+ 스크래핑하는데 사용.
+ > Puppeteer는 Chrome 브라우저를 자동으로 실행하므로,
+ Chrome의 모든 기능을 사용할 수 있다. 또한,
+ Puppeteer는 headless 모드와 non-headless 모드를
+ 지원한다. headless 모드에서는 브라우저가 화면에
+ 표시되지 않고 백그라운드에서 동작하므로, 테스트를
+ 자동으로 실행하는 데 적합하다.
+```
## Quest
-* 직전 퀘스트의 메모장의 서버와 클라이언트 각 부분에 유닛 테스트, 통합 테스트, E2E 테스트 등을 추가해 보세요.
- * `npm test` 명령을 통해 모든 테스트가 돌고 그 결과를 출력할 수 있어야 합니다.
+
+- 직전 퀘스트의 메모장의 서버와 클라이언트 각 부분에 유닛 테스트, 통합 테스트, E2E 테스트 등을 추가해 보세요.
+ - `npm test` 명령을 통해 모든 테스트가 돌고 그 결과를 출력할 수 있어야 합니다.
## Advanced
-* 테스트의 커버리지는 어떤 개념일까요? 프로젝트에서 테스트의 커버리지는 어떻게 접근하는 것이 좋을까요?
+
+- 테스트의 커버리지는 어떤 개념일까요? 프로젝트에서 테스트의 커버리지는 어떻게 접근하는 것이 좋을까요?
diff --git a/Quest16-F/README.md b/Quest16-F/README.md
index 2713f7458..4bf9c8508 100644
--- a/Quest16-F/README.md
+++ b/Quest16-F/README.md
@@ -1,36 +1,120 @@
# Quest 16-F. 컴포넌트 기반 개발
## Introduction
-* 이번 퀘스트에서는 Vue.js 프레임워크를 통해 컴포넌트 기반의 웹 클라이언트 개발 방법론을 더 자세히 알아보겠습니다.
+
+- 이번 퀘스트에서는 Vue.js 프레임워크를 통해 컴포넌트 기반의 웹 클라이언트 개발 방법론을 더 자세히 알아보겠습니다.
## Topics
-* Vue.js framework
-* vuex
-* Virtual DOM
+
+- Vue.js framework
+- vuex
+- Virtual DOM
## Resources
-* [Vue.js](https://vuejs.org)
- * [Lifecycle Hooks](https://v3.vuejs.org/guide/composition-api-lifecycle-hooks.html)
- * [State Management](https://v3.vuejs.org/guide/state-management.html)
- * [Virtual DOM](https://v3.vuejs.org/guide/optimizations.html#virtual-dom)
+
+- [Vue.js](https://vuejs.org)
+ - [Lifecycle Hooks](https://v3.vuejs.org/guide/composition-api-lifecycle-hooks.html)
+ - [State Management](https://v3.vuejs.org/guide/state-management.html)
+ - [Virtual DOM](https://v3.vuejs.org/guide/optimizations.html#virtual-dom)
## Checklist
-* Vue.js는 어떤 특징을 가지고 있는 웹 프레임워크인가요?
- * Vue.js는 내부적으로 어떤 식으로 동작하나요?
-* Vue.js에서의 컴포넌트란 무엇인가요?
- * Vue 컴포넌트의 라이프사이클은 어떤 식으로 호출되나요?
-* 컴포넌트 간에 데이터를 주고받을 때 단방향 바인딩과 양방향 바인딩 방식이 어떻게 다르고, 어떤 장단점을 가지고 있나요?
-* Vue.js 기반의 웹 어플리케이션을 위한 상태관리 라이브러리에는 어떤 것이 있을까요? 이러한 상태관리 툴을 사용하는 것에는 어떤 장단점이 있을까요?
+
+- Vue.js는 어떤 특징을 가지고 있는 웹 프레임워크인가요?
+
+```
+ > Vue.js는 사용자 인터페이스 개발을 위한 Progressive Framework이다.
+ > Vue.js는 SPA(single Page Application) 개발을 위한 프론트엔드 프레임워크인데,
+ 여기서 SPA는 단일 페이지 에플리케이션을 말한다.
+ SPA가 무엇인지 이해하기 위해서는 기존의 웹의 동작 방식을 먼저 이해해야한다.
+```
+
+- Vue.js는 내부적으로 어떤 식으로 동작하나요?
+
+```
+> Vue는 이 data 객체의 모든 프로퍼티를 전역 프로터퍼티와
+합쳐서 내부에서 관리하는 하나의 객체로 만듬.
+이때 methods도 해당 객체 합쳐진다. 바로 이런 작업이 Vue의 내부에서 이루어짐.
+> Data에 대해 Vue가 하는 작업 중 가장 핵심적인 일은 프로퍼티를
+JavaScript의 기능인 프록시로 래핑해서 Data 객체를 반응형 Data 객체로 바꾸는 일.
+```
+
+- Vue.js에서의 컴포넌트란 무엇인가요?
+
+```
+ > 컴포넌트는 애플리케이션 전체에서 사용할 수 있는 일련의 기능을
+ 캡슐화하는 재사용 가능한 코드 조각이다.
+ > 구성 요소는 독립 실행형 요소이거나 더 큰 응용 프로그램을 형성하기 위해
+ 함께 작동할 수 있는 여러 구성 요소의
+ 조합일 수 있다.
+ >
+```
+
+- Vue 컴포넌트의 라이프사이클은 어떤 식으로 호출되나요?
+
+```
+> Vue 구성 요소의 라이프사이클은 구성 요소의 생성, 마운트,
+ 업데이트 및 소멸 중에 호출되는 일련의 메서드를 정의함.
+> 모든 라이프사이클 훅은 자동으로 this컨텍스트가 인스턴스에
+바인딩되어 있으므로, data,computed 및 methods 속성에 접근가능
+> 1. Creation 컴포넌트들을 초기화하는 단계이며
+해당 단계에서 실행되는 훅들이 라이프사이클 중에서 가장 처음 실행된다.
+ 2. Mounting DOM 삽입단계
+ Mounting 단계는 초기 렌더링 직전에 컴포넌트에 직접 접근할 수 있다.
+ 3. Updating
+ 컴포넌트에서 사용되는 반응형 속성들이 변경되거나 어떠한 이유로 재렌더링 발생 시 실행된다.
+ 4. updated
+ 데이터가 변경되어 가상 DOM이 재렌더링되고 패치된 후에 호출 된다.
+
+```
+
+- 컴포넌트 간에 데이터를 주고받을 때 단방향 바인딩과 양방향 바인딩 방식이 어떻게 다르고, 어떤 장단점을 가지고 있나요?
+
+```
+ * 단방향 바인딩
+ - 상위 구성 요소에서 하위 구성요소로 데이터를 전달하는 프로세스
+ - 부모 컴포넌트는 자식 컴포넌트에게 데이터를 prop으로 전달, 자식 컴포넌트는 데이터를 받아서 사용.
+ - 데이터가 읽기 전용이거나 하위 구성 요소가 데이터를
+ 표시하기만 하고 수정하지 않아도 되는 경우에 유용.
+
+ - 장점: 1.데이터 변화에 따른 성능 저하 없이 DOM 객체 갱신 가능
+ 2. 데이터 흐름이 단방향(부모 -> 하위 컴포넌트)라서,
+ 코드를 이해하기 쉽고 데이터 추적과 디버깅이 쉬움
+ - 단점: 변화를 감지하고 화면을 업데이트 하는 코드를 매번 작성 해야함.
+
+ * 양방향 바인딩
+ - 컨트롤러와 뷰 양쪽의 데이터 일치가 모두 가능한 것이 양방향
+ 데이터 바인딩이다.
+ - 데이터의 변화를 감지해 템플릿과 결합해 화면을 갱신, 화면의
+ 입력에 따라 데이터를 갱신하는 것이다.(HTML -> JS,JS -> HTML 양쪽 모두 가능)
+ - 양방향 데이터 바인딩은 데이터의 변경을 프레임워크에서 감지하고 있다가 데이터 변경 시점에 DOM 객체에 렌더링
+ 해주거나 페이내에서 모델의 변경을 감지해 JS 실행부에서 변경.
+
+ - 장점: 코드의 사용면에서 코드량을 크게 줄여줌
+ - 단점: 변화에 따라 DOM 객체 전체를 렌더링해주거나 데이터를
+ 바꿔주므로, 성능이 감소되는 경우가 있음.
+```
+
+- Vue.js 기반의 웹 어플리케이션을 위한 상태관리 라이브러리에는 어떤 것이 있을까요? 이러한 상태관리 툴을 사용하는 것에는 어떤 장단점이 있을까요?
+
+```
+ 1. Vuex : 애플리케이션 상태를 관리하기 위한 중앙 저장소를 제공하는 Vue.js용 상태 관리 라이브러리
+ 2. Redux : 원래 React용으로 개발되었지만, Vue.js와 함께 사용할 수도 있는 상태 관리 라이브러리
+ 3. MobX : 관찰 가능한 데이터 구조를 사용하여 상태의 변경
+ 사항을 자동으로 추적하고 그에 따라 구성 요소를 업데이트 하는
+ 상태 관리 라이브러리
+```
## Quest
-* Vue.js를 통해 메모장 시스템을 다시 한 번 만들어 보세요.
- * 어떤 컴포넌트가 필요한지 생각해 보세요.
- * 각 컴포넌트별로 해당하는 CSS와 자바스크립트를 어떤 식으로 붙여야 할까요?
- * Vue.js 시스템에 타입스크립트는 어떤 식으로 적용할 수 있을까요?
- * 컴포넌트간에 데이터를 주고받으려면 어떤 식으로 하는 것이 좋을까요?
- * `vue-cli`와 같은 Vue의 Boilterplating 기능을 이용하셔서 세팅하시면 됩니다.
+
+- Vue.js를 통해 메모장 시스템을 다시 한 번 만들어 보세요.
+ - 어떤 컴포넌트가 필요한지 생각해 보세요.
+ - 각 컴포넌트별로 해당하는 CSS와 자바스크립트를 어떤 식으로 붙여야 할까요?
+ - Vue.js 시스템에 타입스크립트는 어떤 식으로 적용할 수 있을까요?
+ - 컴포넌트간에 데이터를 주고받으려면 어떤 식으로 하는 것이 좋을까요?
+ - `vue-cli`와 같은 Vue의 Boilterplating 기능을 이용하셔서 세팅하시면 됩니다.
## Advanced
-* React와 Angular는 어떤 프레임워크이고 어떤 특징을 가지고 있을까요? Vue와는 어떤 점이 다를까요?
-* Web Component는 어떤 개념인가요? 이 개념이 Vue나 React를 대체하게 될까요?
-* Reactive Programming이란 무엇일까요?
+
+- React와 Angular는 어떤 프레임워크이고 어떤 특징을 가지고 있을까요? Vue와는 어떤 점이 다를까요?
+- Web Component는 어떤 개념인가요? 이 개념이 Vue나 React를 대체하게 될까요?
+- Reactive Programming이란 무엇일까요?
diff --git a/Quest17-F/README.md b/Quest17-F/README.md
index 7c3fcbac7..b1fa5f52b 100644
--- a/Quest17-F/README.md
+++ b/Quest17-F/README.md
@@ -1,31 +1,88 @@
# Quest 17-F. 번들링과 빌드 시스템
## Introduction
-* 이번 퀘스트에서는 현대적 웹 클라이언트 개발에 핵심적인 번들러와 빌드 시스템의 구조와 사용 방법에 대해 알아보겠습니다.
+
+- 이번 퀘스트에서는 현대적 웹 클라이언트 개발에 핵심적인 번들러와 빌드 시스템의 구조와 사용 방법에 대해 알아보겠습니다.
## Topics
-* Webpack
-* Bundling
- * Data URL
-* Transpiling
- * Source Map
-* Hot Module Replacement
+
+- Webpack
+- Bundling
+ - Data URL
+- Transpiling
+ - Source Map
+- Hot Module Replacement
## Resources
-* [Webpack](https://webpack.js.org/)
-* [Webpack 101: An introduction to Webpack](https://medium.com/hootsuite-engineering/webpack-101-an-introduction-to-webpack-3f59d21edeba)
+
+- [Webpack](https://webpack.js.org/)
+- [Webpack 101: An introduction to Webpack](https://medium.com/hootsuite-engineering/webpack-101-an-introduction-to-webpack-3f59d21edeba)
## Checklist
-* 여러 개로 나뉘어진 자바스크립트나 이미지, 컴포넌트 파일 등을 하나로 합치는 작업을 하는 것은 성능상에서 어떤 이점이 있을까요?
- * 이미지를 Data URL로 바꾸어 번들링하는 것은 어떤 장점과 단점이 있을까요?
-* Source Map이란 무엇인가요? Source Map을 생성하는 것은 어떤 장점이 있을까요?
-* Webpack의 필수적인 설정은 어떤 식으로 이루어져 있을까요?
- * Webpack의 플러그인과 모듈은 어떤 역할들을 하나요?
- * Webpack을 이용하여 HMR(Hot Module Replacement) 기능을 설정하려면 어떻게 해야 하나요?
+
+- 여러 개로 나뉘어진 자바스크립트나 이미지, 컴포넌트 파일 등을 하나로 합치는 작업을 하는 것은 성능상에서 어떤 이점이 있을까요?
+
+```
+ 1. 여러 JavaScript 파일을 하나로 결합하면 브라우저가 스크립트
+ 를 다운로드하기 위해 수행해야 하는 HTTP 요청 수 다운.
+ 2. 여러 이미지를 하나로 병합하면 요청 수가 줄어들고 페이지
+ 로드 시간도 개선될 수 있음.
+ 3. 여러 Vue 구성 요소를 하나로 병합하면 구성 요소를 로드하는데
+ 필요한 HTTP 요청수 줄어듬.
+ 4. 파일 병합은 웹 응용 프로그램의 개발 및 유지 관리를 단순화.
+```
+
+- 이미지를 Data URL로 바꾸어 번들링하는 것은 어떤 장점과 단점이 있을까요?
+
+```
+> 장점: 1. HTTP 요청 감소
+ 2. 간소화된 배포
+ 3. 이식성 향상
+ 단점: 1. 파일 크기 증가
+ 2. 캐싱 감소
+ 3. 제한된 브라우저 지원
+```
+
+- Source Map이란 무엇인가요? Source Map을 생성하는 것은 어떤 장점이 있을까요?
+ ```
+ > Source Map이란 배포용으로 빌드한 파일과 원본 파일을 서로
+ 연결시켜주는 기능.
+ > 보통 서버에 배포를 할 때 성능 최적화를 위해 html,css,js와
+ 같은 웹 자원들을 압축함.
+ > 장점: 1. 에러 디버깅을 빠르게 식별할 수 있다.
+ 2. 개발자가 축소되거나 트랜스파일된 코드로 작업하는
+ 대신 원본 소스 코드를 최적화 할 수 있어서 유지 관리
+ 하기 좋음.
+ 3. 원본 소스 코드를 비공개로 유지하면서 축소되거나
+ 트랜스파일된 코드에 대한 액세스를 계속 제공하면서
+ 코드 보안이 강화된다.
+ ```
+- Webpack의 필수적인 설정은 어떤 식으로 이루어져 있을까요?
+ ```
+ > Entry point: Web이 코드 번들링을 시작하는 시작점 지정.
+ Output: 번들 코드를 저장할 위치 지정.
+ Loaders: 파일이 번들에 추가되기 전에 파일을 사전 처리하는데 사용.
+ Plugins: 번들링 프로세스 중에 추가 작업을 수행하는데 사용
+ Mode: "개발"또는 "생산"중 Webpack이 실행되어야 하는 모드 지정.
+ ```
+ - Webpack의 플러그인과 모듈은 어떤 역할들을 하나요?
+ ```
+ > 플러그인은 번들된 결과물을 처리. 번들된 자바스크립트를
+ 난독화 한다거나 특정 텍스트를 추출하는 용도로 사용.
+ ```
+ - Webpack을 이용하여 HMR(Hot Module Replacement) 기능을 설정하려면 어떻게 해야 하나요?
+
+```
+> Webpack Dev Server에 대한 구성을 지정하는 devServer 옵션을
+ 포함하도록 Webpack 구성 파일을 수정한다. 이 옵션은 HMR을
+ 활성화하기 위해 true로 설정된 hot 속성을 포함시킨다.
+```
## Quest
-* 직전 퀘스트의 소스만 남기고, Vue의 Boilerplating 기능을 쓰지 않고 Webpack 관련한 설정을 원점에서 다시 시작해 보세요.
- * 필요한 번들링과 Source Map, HMR 등의 기능이 모두 잘 작동해야 합니다.
+
+- 직전 퀘스트의 소스만 남기고, Vue의 Boilerplating 기능을 쓰지 않고 Webpack 관련한 설정을 원점에서 다시 시작해 보세요.
+ - 필요한 번들링과 Source Map, HMR 등의 기능이 모두 잘 작동해야 합니다.
## Advanced
-* Webpack 이전과 이후에는 어떤 번들러가 있었을까요? 각각의 장단점은 무엇일까요?
+
+- Webpack 이전과 이후에는 어떤 번들러가 있었을까요? 각각의 장단점은 무엇일까요?
diff --git a/Quest18-F/README.md b/Quest18-F/README.md
index 13d4180a0..b08ebdf75 100644
--- a/Quest18-F/README.md
+++ b/Quest18-F/README.md
@@ -1,33 +1,74 @@
# Quest 18-F. 프로그레시브 웹앱
## Introduction
-* 이번 퀘스트에서는 2021년 현재 웹 프론트엔드의 많은 최신 기술 중 프로그레시브 웹앱에 관해 알아보겠습니다.
+
+- 이번 퀘스트에서는 2021년 현재 웹 프론트엔드의 많은 최신 기술 중 프로그레시브 웹앱에 관해 알아보겠습니다.
## Topics
-* Progressive Web App(PWA)
-* Service Worker
-* Cache & CacheStorage API
-* Web Manifest
+
+- Progressive Web App(PWA)
+- Service Worker
+- Cache & CacheStorage API
+- Web Manifest
## Resources
-* [MDN - Progressive web apps (PWAs)](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps)
-* [MDN - Progressive web app Introduction](https://developer.mozilla.org/ko/docs/Web/Progressive_web_apps/Introduction)
-* [MDN - Service Worker API](https://developer.mozilla.org/ko/docs/Web/API/Service_Worker_API)
-* [web.dev - Progressive Web Apps](https://web.dev/progressive-web-apps/)
+
+- [MDN - Progressive web apps (PWAs)](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps)
+- [MDN - Progressive web app Introduction](https://developer.mozilla.org/ko/docs/Web/Progressive_web_apps/Introduction)
+- [MDN - Service Worker API](https://developer.mozilla.org/ko/docs/Web/API/Service_Worker_API)
+- [web.dev - Progressive Web Apps](https://web.dev/progressive-web-apps/)
## Checklist
-* 웹 어플리케이션을 프로그레시브 웹앱 형태로 만들면 어떤 이점을 가질까요?
-* 서비스 워커란 무엇인가요? 웹 워커와의 차이는 무엇인가요?
-* PWA의 성능을 높이기 위한 방법론에는 어떤 것들이 있고, 어떤 식으로 적용할 수 있을까요?
+
+- 웹 어플리케이션을 프로그레시브 웹앱 형태로 만들면 어떤 이점을 가질까요?
+
+```
+ > PWA(Progrssiv Web App)은 최신 웹 기술을 사용하여 사용자
+ 에게 네이티브와 같은 경험을 제공하는 웹 에플리케이션.
+ > 이점: 1. 오프라인 액세스: 사용자는 인터넷에 연결되어 있지
+ 않아도 앱에 액세스 가능.
+ 2. 네이티브와 유사한 경험을 제공.
+ 3. Service Workers 및 WebAssembly와 같은 최신 웹
+ 기술을 사용하여 성능 및 로드 시간 개선
+ 4. 개발 비용 절감
+```
+
+- 서비스 워커란 무엇인가요? 웹 워커와의 차이는 무엇인가요?
+
+```
+> 서비스 워커는 웹 애플리케이션의 백그라운드에서 실행되는 웹
+워커의 일종으로 브라우저에서 생성한 네트워크 요청을 가로챈다.
+> 브라우저에 의해 등록되고 클라이언트 장치에 캐시되는
+ JavaScript 파일이므로 사용자가 오프라인일 때도 작동 가능.
+> 차이점: 목적과 애플리케이션과 상호 작용하는 방식.
+ - 서비스 워커는 백그라운드에서 실행되고 네트워크 요청과
+ 상호 작용하도록 설계 됨.
+ - 웹 워커는 복잡한 계산을 수행하고 기본 UI 스레드 차단을
+ 방지하기 위해 별도의 스레드에서 실행되도록 설계.
+```
+
+- PWA의 성능을 높이기 위한 방법론에는 어떤 것들이 있고, 어떤 식으로 적용할 수 있을까요?
+
+```
+> 이미지, CSS 및 Javascript 파일과 같이 자주 사용하는 데이터
+를 클라이언트의 캐시에 저장하는 캐싱 방법.
+> 콘텐츠를 한번에 모드 로드하지 않고 필요할 때만 콘텐츠를
+로드하는 레이지 로딩 방법.
+> 사용자 위치에서 가장 가까운 서버에서 사용자에게 콘텐츠를
+캐시하고 전달할 수 있는 서버 네트워크인 CDN 사용 방법.
+
+```
## Quest
-* 텍스트 에디터 프로그램을 PWA 형태로 만들어 보세요.
- * 필요한 에셋을 적절히 캐싱하되, 버전업이 되었을 때 캐싱을 해제할 수 있는 형태가 되어야 합니다.
- * 해당 PWA를 데스크탑에 인스톨 가능하도록 만들어 보세요.
- * 오프라인인 경우에는 임시저장 기능을 만들어, 온라인인 경우를 감지하여 자동으로 서버에 반영되도록 만들어 보세요.
+
+- 텍스트 에디터 프로그램을 PWA 형태로 만들어 보세요.
+ - 필요한 에셋을 적절히 캐싱하되, 버전업이 되었을 때 캐싱을 해제할 수 있는 형태가 되어야 합니다.
+ - 해당 PWA를 데스크탑에 인스톨 가능하도록 만들어 보세요.
+ - 오프라인인 경우에는 임시저장 기능을 만들어, 온라인인 경우를 감지하여 자동으로 서버에 반영되도록 만들어 보세요.
## Advanced
-* 본 퀘스트의 주제로 고려되었으나 분량상 선정되지 않은 주제들은 다음과 같습니다. 시간날 때 한 번 찾아 보세요!
- * Search Engine Optimization(SEO)
- * CSS-in-JS와 Styled Component
- * Server-Side Rendering(SSR)
+
+- 본 퀘스트의 주제로 고려되었으나 분량상 선정되지 않은 주제들은 다음과 같습니다. 시간날 때 한 번 찾아 보세요!
+ - Search Engine Optimization(SEO)
+ - CSS-in-JS와 Styled Component
+ - Server-Side Rendering(SSR)
diff --git a/Quest19-F/README.md b/Quest19-F/README.md
index a8a5a0fe8..8b6f65e28 100644
--- a/Quest19-F/README.md
+++ b/Quest19-F/README.md
@@ -1,29 +1,82 @@
# Quest 19-F. 웹 어셈블리의 기초
## Introduction
-* 이번 퀘스트에서는 2021년 현재 웹 프론트엔드의 많은 최신 기술 중 웹 어셈블리에 관해 알아보겠습니다.
+
+- 이번 퀘스트에서는 2021년 현재 웹 프론트엔드의 많은 최신 기술 중 웹 어셈블리에 관해 알아보겠습니다.
## Topics
-* Web Assembly
-* Rust
+
+- Web Assembly
+- Rust
## Resources
-* [MDN - 웹어셈블리의 컨셉](https://developer.mozilla.org/ko/docs/WebAssembly/Concepts)
-* [MDN - Rust to wasm](https://developer.mozilla.org/ko/docs/WebAssembly/Rust_to_wasm)
-* [Learn Rust](https://www.rust-lang.org/learn)
-* [Rust - sha2](https://docs.rs/sha2/0.9.5/sha2/)
+
+- [MDN - 웹어셈블리의 컨셉](https://developer.mozilla.org/ko/docs/WebAssembly/Concepts)
+- [MDN - Rust to wasm](https://developer.mozilla.org/ko/docs/WebAssembly/Rust_to_wasm)
+- [Learn Rust](https://www.rust-lang.org/learn)
+- [Rust - sha2](https://docs.rs/sha2/0.9.5/sha2/)
## Checklist
-* 웹 어셈블리란 어떤 기술인가요?
-* 웹 어셈블리 모듈을 웹 프론트엔드 상에서 실행시키려면 어떻게 해야 할까요?
-* Rust란 어떤 특징을 가진 프로그래밍 언어인가요?
-* 웹 어셈블리 모듈을 만드는 방법에는 어떤 것들이 있나요?
-* 웹 어셈블리가 할 수 없는 작업에는 무엇이 있을까요? 웹 어셈블리는 어떤 목적에 주로 쓰이게 될까요?
+
+- 웹 어셈블리란 어떤 기술인가요?
+
+```
+> 웹어셈블리는 최신 웹 브라우저에서 실행할 수 있는 새로운
+유형의 코드이며 새로운 기능과 성능 면에서 큰 이점 제공.
+> 직접 코드 작성 x , C, C++, RUST 등의 저급 소스언어를
+효과적으로 컴파일하도록 고안.
+```
+
+- 웹 어셈블리 모듈을 웹 프론트엔드 상에서 실행시키려면 어떻게 해야 할까요?
+
+```
+> WebAssembly 모듈을 실행하려면 모듈을 컴파일하고, 로드하고
+, 인스턴스화하고, 모듈에서 함수를 호출 해야함.
+```
+
+- Rust란 어떤 특징을 가진 프로그래밍 언어인가요?
+
+```
+> Rust는 안전, 성능 및 동시성에 중점을 두고 만들어진 시스템
+프로그래밍 언어.
+> C 및 C++와 같은 언어의 저수준 제어 및 성능을 제공하는
+동시에 안전하고 올바른 코드를 보다 쉽게 작성할 수 있는 최신 언어 기능 제공.
+```
+
+- 웹 어셈블리 모듈을 만드는 방법에는 어떤 것들이 있나요?
+
+```
+> 1. WebAssembly를 지원하는 프로그래밍 언어 사용.
+ 2. 기존 도구 또는 라이브러리 사용 (Rust 코드의 모듈)
+ 3. WebAssembly 코드 직접 작성 ( 접근 방식은 WebAssembly 명령어 세트에 대한 지식이 필요하며 프로그래밍 언어나 기존 도구를 사용하는 것보다 어려움.)
+```
+
+- 웹 어셈블리가 할 수 없는 작업에는 무엇이 있을까요? 웹 어셈블리는 어떤 목적에 주로 쓰이게 될까요?
+
+* 웹 어셈블리가 할 수 없는 작업
+
+```
+ > 1. 웹페이지의 DOM에 직접 액세스할 수 없음.
+ 2. 많은 브라우저 API에 액세스할 수 있지만, Web Audio API
+ 및 Web MIDI API와 같이 현재 지원되지 않는 일부 API 존재.
+ 3. 가비지 컬렉션이 내장되어 있지 않으므로 메모리 할당 및
+ 할당 해제 관리 해야함.
+```
+
+- 웹 어셈블리 목적
+
+```
+ > 1. 연산 집약적인 애플리케이션 실행에 이상적.
+ 2. 여러 장치에서 실행 할 수 있는 교차 플랫폼 응용
+ 프로그램을 만드는데 적합.
+```
## Quest
-* 텍스트 에디터 프로그램에서 각 탭의 내용의 SHA-256 해시를 실시간으로 계산하여 화면 아래에 표시해 보세요.
- * 해당 해시는 Rust로 작성된 웹 어셈블리 함수를 통해 계산되어야 합니다.
- * 순수 자바스크립트로 계산할 때와의 퍼포먼스 차이를 체크해 보세요. (퍼포먼스 차이를 알아보는 데에 어떤 전략들이 있을까요?)
+
+- 텍스트 에디터 프로그램에서 각 탭의 내용의 SHA-256 해시를 실시간으로 계산하여 화면 아래에 표시해 보세요.
+ - 해당 해시는 Rust로 작성된 웹 어셈블리 함수를 통해 계산되어야 합니다.
+ - 순수 자바스크립트로 계산할 때와의 퍼포먼스 차이를 체크해 보세요. (퍼포먼스 차이를 알아보는 데에 어떤 전략들이 있을까요?)
## Advanced
-* 웹 어셈블리 바이너리는 어떻게 구성되어 있을까요?
+
+- 웹 어셈블리 바이너리는 어떻게 구성되어 있을까요?
diff --git a/Quest20/README.md b/Quest20/README.md
index 62506ad53..778ec9156 100644
--- a/Quest20/README.md
+++ b/Quest20/README.md
@@ -1,13 +1,27 @@
# Quest 20. 세상 밖으로
## Introduction
-* 이제는 세상 밖으로 나갈 때입니다! 그 동안 퀘스트 수행하시느라 고생 많으셨습니다.
+
+- 이제는 세상 밖으로 나갈 때입니다! 그 동안 퀘스트 수행하시느라 고생 많으셨습니다.
## Checklist
-* 그 동안 웹 데브 커리큘럼을 진행하면서 어떤 것을 느끼고 배웠나요?
-* 웹 데브 커리큘럼을 진행하면서 더 개선되거나 추가되었으면 하는 점에는 어떤 것이 있었나요?
+
+- 그 동안 웹 데브 커리큘럼을 진행하면서 어떤 것을 느끼고 배웠나요?
+
+```
+> 아직 용어 정리도 잘 안되어있고, CS지식이 아직 많이
+ 부족한 것이 많다는 것을 느꼈다.
+
+```
+
+- 웹 데브 커리큘럼을 진행하면서 더 개선되거나 추가되었으면 하는 점에는 어떤 것이 있었나요?
+
+```
+> 없었다.
+```
## Quest
-* 권한을 부여받아 우리 회사의 모노리포를 로컬에 클론하고, 개발환경을 세팅해 보세요.
-* 백엔드 트랙의 경우, 그 동안 퀘스트를 진행하면서 AWS에 생성했던 리소스가 있다면 모두 삭제해 보세요.
-* 이제 동료들과 함께 일할 시간입니다!
+
+- 권한을 부여받아 우리 회사의 모노리포를 로컬에 클론하고, 개발환경을 세팅해 보세요.
+- 백엔드 트랙의 경우, 그 동안 퀘스트를 진행하면서 AWS에 생성했던 리소스가 있다면 모두 삭제해 보세요.
+- 이제 동료들과 함께 일할 시간입니다!