From bbd15cd6e31695cf343e91b08b73a65cfe522364 Mon Sep 17 00:00:00 2001 From: asjasj3964 Date: Thu, 10 Oct 2024 15:00:12 +0900 Subject: [PATCH 1/2] =?UTF-8?q?keyword:=203=EC=A3=BC=EC=B0=A8=20=ED=82=A4?= =?UTF-8?q?=EC=9B=8C=EB=93=9C=20=EC=9D=B8=EC=A6=9D,=20mission:=203?= =?UTF-8?q?=EC=A3=BC=EC=B0=A8=20=EB=AF=B8=EC=85=98=20=EC=9D=B8=EC=A6=9D=20?= =?UTF-8?q?(=EC=8A=A4=ED=84=B0=EB=94=94=20=EC=A0=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\354\213\244\354\212\2651-hello-world.png" | Bin 0 -> 17820 bytes .../\354\213\244\354\212\2652-nodemon.png" | Bin 0 -> 32130 bytes keyword/chapter03/keyword.md | 88 ++++++ mission/chapter03/mission.md | 262 ++++++++++++++++++ 4 files changed, 350 insertions(+) create mode 100644 "keyword/chapter03/images/\354\213\244\354\212\2651-hello-world.png" create mode 100644 "keyword/chapter03/images/\354\213\244\354\212\2652-nodemon.png" create mode 100644 keyword/chapter03/keyword.md create mode 100644 mission/chapter03/mission.md diff --git "a/keyword/chapter03/images/\354\213\244\354\212\2651-hello-world.png" "b/keyword/chapter03/images/\354\213\244\354\212\2651-hello-world.png" new file mode 100644 index 0000000000000000000000000000000000000000..1c8740de498593c8b29436fc359aa2cbea91b796 GIT binary patch literal 17820 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

9w;&9&fN4R;jsiOgjmgCC24xFRy4qY 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

%S;D{NaE=GB#k0ThHUELNX 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

iI;YR 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 πŸ’‘ **REST vs RESTful API**
+ > REST: 이둠적 원칙과 κ°€μ΄λ“œ 라인
+ RESTful API: REST 원칙 및 κ°€μ΄λ“œλΌμΈμ„ μ‹€μ œλ‘œ 적용(κ΅¬ν˜„)ν•œ API +3. **HTTP 응닡 μƒνƒœ μ½”λ“œ** + - 200: OK , μš”μ²­μ΄ μ„±κ³΅μ μœΌλ‘œ μ²˜λ¦¬λ˜μ—ˆλ‹€. + - 201: Created, μš”μ²­μ΄ μ„±κ³΅μ μœΌλ‘œ μ²˜λ¦¬λ˜μ—ˆμœΌλ©° μ„œλ²„μ—μ„œ μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€κ°€ μƒμ„±λ˜μ—ˆλ‹€. + - 400: Bad Request, ν΄λΌμ΄μ–ΈνŠΈκ°€ 보낸 μš”μ²­μ΄ 잘λͺ»λ˜μ—ˆκ±°λ‚˜ μ„œλ²„κ°€ μš”μ²­μ„ μ²˜λ¦¬ν•  수 없을 μ •λ„λ‘œ λ¬Έμ œκ°€ μžˆλ‹€. + - 401: Unauthorized, 인증이 ν•„μš”ν•œ λ¦¬μ†ŒμŠ€μ— λŒ€ν•΄ μΈμ¦λ˜μ§€ μ•Šμ€ μ‚¬μš©μžκ°€ μ ‘κ·Όν•˜μ˜€λ‹€. + - 404: Not Found, ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•œ λ¦¬μ†ŒμŠ€λ₯Ό μ„œλ²„μ—μ„œ 찾을 수 μ—†λ‹€. + - 500: Internal Server Error, μ„œλ²„ λ‚΄λΆ€μ—μ„œ μ˜ˆμƒμΉ˜ λͺ»ν•œ 였λ₯˜κ°€ λ°œμƒν•˜μ˜€λ‹€. +4. **Request Body (μš”μ²­ λ³Έλ¬Έ)** + - ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„λ‘œ 데이터λ₯Ό 전솑할 λ•Œ ν•΄λ‹Ή 데이터λ₯Ό ν¬ν•¨ν•˜λŠ” λΆ€λΆ„ + - 주둜 POST, PUT, PATCH λ©”μ„œλ“œμ—μ„œ μ‚¬μš©λ˜λ©° ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— μ „λ‹¬ν•˜κ³ μž ν•˜λŠ” 정보λ₯Ό λ‹΄κ³  μžˆλ‹€. + - ex. νšŒμ›κ°€μž… μš”μ²­ μ‹œ μ‚¬μš©μžμ˜ 정보(이름, μ „ν™”λ²ˆν˜Έ λ“±κ³Ό 같은 데이터)λ₯Ό μ„œλ²„λ‘œ 보내기 μœ„ν•΄ JSON ν˜•νƒœλ‘œ Request Body에 ν¬ν•¨ν•œλ‹€. + ```json + { + "name": "string", + "phoneNumber": "string", + "email": "string", + } + ``` +5. **Request Header (μš”μ²­ 헀더)** + - ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— μš”μ²­μ„ 보낼 λ•Œ μš”μ²­ μžμ²΄μ— λŒ€ν•œ 좔가적인 정보(ν΄λΌμ΄μ–ΈνŠΈ 정보, 인증 정보 λ“±κ³Ό 같은 메타데이터)λ₯Ό λ‹΄λŠ” λΆ€λΆ„ + - μ„œλ²„κ°€ 데이터λ₯Ό μ–΄λ–€ ν˜•μ‹μœΌλ‘œ λ°›μ•„μ•Ό 할지, μ‚¬μš©μžμ˜ 인증 μƒνƒœκ°€ 어떀지 등을 μ „λ‹¬ν•œλ‹€. + - μ£Όμš” 헀더 + - Content-Type + - ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„λ‘œ λ³΄λ‚΄λŠ” λ°μ΄ν„°μ˜ ν˜•μ‹ + - JSON ν˜•μ‹μœΌλ‘œ 데이터 전솑 μ‹œ β†’ application/json μ‚¬μš© + - HTML λ¬Έμ„œ 전솑 μ‹œ β†’ text/html μ‚¬μš© + - ex. νšŒμ›κ°€μž…(μ‚¬μš©μž 생성)을 ν•  경우 + ```json + POST /members + Content-Type: application/json + ``` + - Authorization + - μ„œλ²„μ— 인증 정보λ₯Ό μ „λ‹¬ν•˜λŠ” 헀더 + - 주둜 Bearer 토큰을 μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μž 인증을 μˆ˜ν–‰ν•œλ‹€. + - ex. OAuth 2.0μ—μ„œ Bearer 토큰을 톡해 μ—‘μ„ΈμŠ€ 토큰을 μ „λ‹¬ν•œλ‹€. + - ex. νŠΉμ • μ‚¬μš©μžμ˜ 정보λ₯Ό μ‘°νšŒν•  경우 + ```json + GET /members/1 + Authorization: Bearer adkjhlKgaAdJIHKJHKhkjKRTYvhkHFYHGFt... + ``` + - User-Agent + - μš”μ²­μ„ λ³΄λ‚΄λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ 정보(λΈŒλΌμš°μ €, OS λ“±) +6. **Access Token** + - μ‚¬μš©μžκ°€ 인증을 μ™„λ£Œν•œ ν›„, μ„œλ²„λ‘œλΆ€ν„° λ°œκΈ‰λ°›μ•„ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ 간에 μš”μ²­μ„ 보낼 λ•Œ μ‚¬μš©λ˜λŠ” μž„μ‹œμ μΈ 인증 정보 + - 이 토큰은 일정 μ‹œκ°„μ΄ μ§€λ‚˜λ©΄ 만료되며, μ„œλ²„λŠ” 이 토큰을 톡해 μ‚¬μš©μžμ˜ 신원을 ν™•μΈν•œλ‹€. + - ex. μ‚¬μš©μžκ°€ λ‘œκ·ΈμΈν•˜λ©΄ μ„œλ²„λ‘œλΆ€ν„° μ•‘μ„ΈμŠ€ 토큰을 λ°œκΈ‰λ°›λŠ”λ‹€. +7. **Bearer Token** + - μ•‘μ„ΈμŠ€ 토큰을 HTTP μš”μ²­μ˜ Authorization 헀더에 ν¬ν•¨ν•˜μ—¬ μ„œλ²„μ— μ „λ‹¬ν•˜λŠ” 방식 + - μ„œλ²„λŠ” 이 토큰을 톡해 μš”μ²­ν•œ μ‚¬μš©μžκ°€ 인증된 μƒνƒœμΈμ§€ ν™•μΈν•œλ‹€. + - ex. 둜그인 이후 μ‚¬μš©μžλŠ” API μš”μ²­μ„ ν•  λ•Œλ§ˆλ‹€ λ°œκΈ‰λ°›μ€ μ—‘μ„ΈμŠ€ 토큰을 Bearer λ°©μ‹μœΌλ‘œ 헀더에 μΆ”κ°€ν•΄ μ„œλ²„μ— μ „μ†‘ν•œλ‹€. +8. **Response Body (응닡 λ³Έλ¬Έ)** + - μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈλ‘œ 보낸 μš”μ²­μ„ μ²˜λ¦¬ν•œ ν›„, κ²°κ³Ό 데이터λ₯Ό λ‹΄μ•„ 응닡할 λ•Œ μ‚¬μš©ν•˜λŠ” λΆ€λΆ„ + - ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•œ λ¦¬μ†ŒμŠ€λ‚˜ 처리 κ²°κ³Όλ₯Ό Response Body에 ν¬ν•¨ν•˜μ—¬ 보낸닀. + - 주둜 JSON, XML, HTML ν˜•μ‹μ˜ 데이터λ₯Ό μ „μ†‘ν•©λ‹ˆλ‹€. + ```json + { + "message": "둜그인 성곡", + "token": "adkjhlKgaAdJIHKJHKhkjKRTYvhkHFYHGFt..." + } + ``` + - μ—¬κΈ°μ„œ λ°˜ν™˜λœ token은 μ‚¬μš©μžμ˜ 인증 μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ—‘μ„ΈμŠ€ 토큰이닀. +9. **Parameter(λ§€κ°œλ³€μˆ˜)** + - ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— μš”μ²­ν•  λ•Œ, 좔가적인 λ°μ΄ν„°λ‚˜ 필터링 정보λ₯Ό μ „λ‹¬ν•˜λŠ” 방법 + - Path Variable, Query String, Request Header, Request Body에 포함될 수 μžˆλ‹€. + - ex. νŠΉμ • μ‚¬μš©μžμ˜ ν”„λ‘œν•„μ„ μ‘°νšŒν•  경우 + ```json + GET /memberss/1/profile + ``` + - μ‚¬μš©μž ID인 1을 경둜 λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬ν•˜μ˜€λ‹€. + +### πŸ“¦Β μ‹€μŠ΅ +--- +1. localhost:3000 접속 ν™”λ©΄ + ![images/μ‹€μŠ΅1-hello-world.png](images/μ‹€μŠ΅1-hello-world.png) + - Express 곡식 예제λ₯Ό ES Module λ°©μ‹μœΌλ‘œ λ°”κΎΈμ–΄ μ‹€ν–‰ν•΄μ£Όμ—ˆλ‹€. +1. package.json의 scripts에 npm install --save-dev nodemon μΆ”κ°€ + ![images/μ‹€μŠ΅2-nodemon.png](images/μ‹€μŠ΅2-nodemon.png) + - ν”„λ‘œμ νŠΈλ₯Ό μˆ˜μ •ν•˜κ³  μ €μž₯ν•  λ•Œλ§ˆλ‹€ μ„œλ²„λ₯Ό μžλ™μœΌλ‘œ μž¬μ‹œμž‘ν•˜κ²Œ λ§Œλ“€μ–΄ μ£Όμ—ˆλ‹€. \ No newline at end of file diff --git a/mission/chapter03/mission.md b/mission/chapter03/mission.md new file mode 100644 index 0000000..7f340fe --- /dev/null +++ b/mission/chapter03/mission.md @@ -0,0 +1,262 @@ +### πŸ”₯ λ―Έμ…˜ +--- +**ν™ˆ ν™”λ©΄** +1. μ‚¬μš©μžμ˜ λ―Έμ…˜ 진행 ν˜„ν™© 및 도전 κ°€λŠ₯ν•œ λ―Έμ…˜ λͺ©λ‘μ„ μ‘°νšŒν•œλ‹€. + 1. **API Endpoint** + - GET /member/{member-id}/missions + 2. **Request Body** + - ν•„μš” X + - GET μš”μ²­μ΄ λ¦¬μ†ŒμŠ€ 쑰회λ₯Ό μœ„ν•œ HTTP λ©”μ†Œλ“œμ΄κΈ° λ•Œλ¬Έ + 3. **Request Header** + - Authorization: Bearer Token (μ‚¬μš©μžκ°€ 인증된 μƒνƒœμž„μ„ λ‚˜νƒ€λƒ„) + 4. **Query String** + - GET /member/{member-id}/missions?sort=created_at + 5. **Path variable** + - member-id (μ‚¬μš©μž ID) + 6. **Response Body** + ```json + { + "isSuccess": true, + "code": "string", + "message": "string", + "result": { + "memberLocation": "string", + "completedMissionTotal": 0, + "missions": [ + { + "missionId": 0, + "missionName": "string", + "restaurantName": "string", + "description": "string", + "points": 500, + "remainingDays": 30, + "status": 1 + } + ] + } + } + ``` + +**마이 νŽ˜μ΄μ§€ 리뷰 μž‘μ„±** +1. 마이 νŽ˜μ΄μ§€μ—μ„œ β€œμž‘μ„±ν•œ 리뷰”λ₯Ό 클릭해 λ‚΄κ°€ μž‘μ„±ν•œ 리뷰λ₯Ό μ‘°νšŒν•œλ‹€. + 1. **API Endpoint** + - GET /members/{member-id}/my-page/reviews + 2. **Request Body** + - ν•„μš” X + 3. **Request Header** + - Authorization: Bearer Token + 4. **Query String** + - GET /members/{member-id}/my-page/reviews?page=1&limit=10&sort=created_at + - page=1: 첫 번째 νŽ˜μ΄μ§€μ˜ 리뷰 쑰회 + - limit=10: ν•œ λ²ˆμ— 10개의 리뷰 쑰회 + - sort=created_at: 리뷰 μž‘μ„± λ‚ μ§œ 순으둜 μ •λ ¬ + 5. **Path variable** + - member-id (μ‚¬μš©μž ID) + 6. **Response Body** + ```json + { + "isSuccess": true, + "code": "string", + "message": "string", + "result": { + "reataurantName": "string", + "reviewTotal": 0, + "reviews": [ + { + "reviewId": 1, + "rating": 0.0, + "memberName": "string", + "content": "string", + "createdAt": "2024-10-09" + "reviewImages": [ + { + "reviewImageId": 1, + "reviewImageUrl": "string" + } + ], + "reviewReplys": [ + { + "reviewReplyId": 1, + "reviewReplyContent": "string", + "reviewReplyCreatedAt": "2024-10-09T00:00:00" + } + ] + } + ] + } + } + ``` + +2. νŠΉμ • 식당에 리뷰λ₯Ό 남긴닀. + 1. **API Endpoint** + - POST /members/{member-id}/restaurants/{restaurant-id}/reviews + 2. **Request Body** + ```json + { + "rating": 0.0, + "content": "string", + "status": 1 + } + ``` + 3. **Request Header** + - Authorization: Bearer Token + 4. **Query String** + - ν•„μš” X + 5. **Path variable** + - member-id(μ‚¬μš©μž ID), restaurant-id(식당 ID) + 6. **Response Body** + ```json + { + "isSuccess": true, + "code": "string", + "message": "string", + "result": { + "reviewId": 1 + } + } + ``` + +**λ―Έμ…˜ λͺ©λ‘ 쑰회 (진행 쀑, 진행 μ™„λ£Œ)** +1. 진행 μ™„λ£Œν•œ λ―Έμ…˜ λͺ©λ‘μ„ μ‘°νšŒν•œλ‹€. + 1. **API Endpoint** + - GET /members/{member-id}/completed-missions + 2. **Request Body** + - ν•„μš” X + 3. **Request Header** + - Authorization: Bearer Token + 4. **Query String** + - GET /members/{member-id}/completed-missions?sort=created_at + 5. **Path variable** + - member-id(μ‚¬μš©μž ID) + 6. **Response Body** + ```json + { + "isSuccess": true, + "code": "string", + "message": "string", + "result": [ + "restaurantName": "string", + "completedMission": { + "completedMissionId": 1, + "introduction": "string", + "points": 500 + } + ] + } + ``` + +2. 진행 쀑인 λ―Έμ…˜ λͺ©λ‘μ„ μ‘°νšŒν•œλ‹€. + 1. **API Endpoint** + - GET /members/{member-id}/missions-in-progress + 2. **Request Body** + - ν•„μš” X + 3. **Request Header** + - Authorization: Bearer Token + 4. **Query String** + - GET /members/{member-id}/missions-in-progress?sort=created_at + 5. **Path variable** + - member-id(μ‚¬μš©μž ID) + 6. **Response Body** + ```json + { + "isSuccess": true, + "code": "string", + "message": "string", + "result": [ + "restaurantName": "string", + "completedMission": { + "completedMissionId": 1, + "introduction": "string", + "points": 500 + } + ] + } + ``` + +**λ―Έμ…˜ 성곡 λˆ„λ₯΄κΈ°** +1. λ―Έμ…˜ μˆ˜ν–‰ ν›„ 성곡 μš”μ²­ λ²„νŠΌ 눌러 ν•΄λ‹Ή μ‹λ‹Ήμ˜ 사μž₯λ‹˜μ˜ ꡬ뢄 번호λ₯Ό μ‘°νšŒν•œλ‹€. + 1. **API Endpoint** + - GET /members/{member-id}/missions-progress/{mission-id}/request-success + 2. **Request Body** + - ν•„μš” X + 3. **Request Header** + - Authorization: Bearer Token + 4. **Query String** + - ν•„μš” X + 5. **Path variable** + - member-id(μ‚¬μš©μž ID), mission-id(λ―Έμ…˜ ID) + 6. **Response Body** + ```json + { + "isSuccess": true, + "code": "string", + "message": "string", + "result": { + "ownerId": 1 + } + } + ``` + +2. 성곡 μš”μ²­ ν›„ λ―Έμ…˜μ΄ μ™„λ£Œλ˜λ©΄ λ―Έμ…˜ μ™„λ£Œ λ²„νŠΌ λˆ„λ₯΄κΈ° + 1. **API Endpoint** + - PATCH /members/{member-id}/missions-progress/{mission-id}/request-success/completed + 2. **Request Body** + ```json + { + "status": 2 + } + ``` + 3. **Request Header** + - Authorization: Bearer Token + 4. **Query String** + - ν•„μš” X + 5. **Path variable** + - member-id(μ‚¬μš©μž ID), mission-id(λ―Έμ…˜ ID) + 6. **Response Body** + ```json + { + "isSuccess": true, + "code": "string", + "message": "string", + "result": { + "points": 500 + } + } + ``` + +**νšŒμ› κ°€μž… ν•˜κΈ°(μ†Œμ…œ 둜그인 κ³ λ € X)** +1. **API Endpoint** + - POST /members +2. **Request Body** + ```json + { + "name": "string", + "nickname": "string", + "gender": 0, + "birth": "string", + "location": "string", + "email": "string", + "phone_number": "string" + "foodKind": [ + "string" + ] + } + ``` +3. **Request Header** + - Content-Type: application/json +4. **Query String** + - ν•„μš” X +5. **Path variable** + - ν•„μš” X +6. **Response Body** + ```json + { + "isSuccess": true, + "code": "string", + "message": "string", + "result": { + "memberId": 1, + "accessToken": "string" + } + } + ``` \ No newline at end of file From b4df736710973627a5ac7f8f073af9491805e31d Mon Sep 17 00:00:00 2001 From: asjasj3964 Date: Fri, 11 Oct 2024 23:06:16 +0900 Subject: [PATCH 2/2] =?UTF-8?q?workbook:=203=EC=A3=BC=EC=B0=A8=20=EC=9B=8C?= =?UTF-8?q?=ED=81=AC=EB=B6=81=20=EC=9D=B8=EC=A6=9D=20(=EC=8A=A4=ED=84=B0?= =?UTF-8?q?=EB=94=94=20=ED=9B=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...354\240\234\355\203\220\354\203\211-1.png" | Bin 0 -> 8445 bytes ...354\240\234\355\203\220\354\203\211-2.png" | Bin 0 -> 2039 bytes ...0\354\240\234\355\225\264\352\262\260.png" | Bin 0 -> 1332 bytes ...\355\214\205-\354\227\220\353\237\254.png" | Bin 0 -> 33382 bytes keyword/chapter03/keyword.md | 13 +++++++++- mission/chapter03/mission.md | 23 +++++++++++++++--- 6 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 "keyword/chapter03/images/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205-\353\254\270\354\240\234\355\203\220\354\203\211-1.png" create mode 100644 "keyword/chapter03/images/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205-\353\254\270\354\240\234\355\203\220\354\203\211-2.png" create mode 100644 "keyword/chapter03/images/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205-\353\254\270\354\240\234\355\225\264\352\262\260.png" create mode 100644 "keyword/chapter03/images/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205-\354\227\220\353\237\254.png" diff --git "a/keyword/chapter03/images/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205-\353\254\270\354\240\234\355\203\220\354\203\211-1.png" "b/keyword/chapter03/images/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205-\353\254\270\354\240\234\355\203\220\354\203\211-1.png" new file mode 100644 index 0000000000000000000000000000000000000000..eb726969fa1c3b111efbaf827815767d9647ec77 GIT binary patch literal 8445 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�)*1>s4w1d!r&j|#V#)2CFuF6eP)_uKaW4WU86%MW z%K)F56Js8)LyFS}`9}rIvh(93=Qe)J{)PqVY zjps{GIgtTl7CSY!Th6QVff|->^ZDH8=KLLvt!YiCo}r;jJ0>}za+92qn@UG1x&D^2 zR$=pQp|jl?({^UxHJN5}2ooDBmc_<&R2GLxbmqNoKwl!79gG#n%m|+uquZj%)g!uG zGu1uPpf1gq;@$44HlubXX7f+16kMrsR@@6BJ)UJFX(hE(9M7|ArNx@IztlBfKX{tM zMm?;LTbg9szItZHm$QohxI19**2Pz~`(^<4d)^s>oQyM(^CxwkdoL!=d9tBmp|(Hn zN=TpiT`rsyKta{5whx<3bJ8A8_7*)6D)?H8OUpB;`si<{uwf8*IxeerXLB-S; zma1a4B>|a{BGz$7;{TNRxiB2Aa9gA(tTdSOxQ@P#QPx5k=;3W_#t(>GV@>2&}g~_Mb)rwAgU^Pug^mH*L2E kuX_V5^?zE`MfY9Vg@vhz<@+~fM9msF+PffGcG$$f0M1{-%>V!Z literal 0 HcmV?d00001 diff --git "a/keyword/chapter03/images/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205-\353\254\270\354\240\234\355\225\264\352\262\260.png" "b/keyword/chapter03/images/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205-\353\254\270\354\240\234\355\225\264\352\262\260.png" new file mode 100644 index 0000000000000000000000000000000000000000..96e9f223b38bdd4db8dc0831dd445e17bb0e2467 GIT binary patch literal 1332 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 DTB`(L literal 0 HcmV?d00001 diff --git a/keyword/chapter03/keyword.md b/keyword/chapter03/keyword.md index 5cd5eec..cb775c2 100644 --- a/keyword/chapter03/keyword.md +++ b/keyword/chapter03/keyword.md @@ -85,4 +85,15 @@ - Express 곡식 예제λ₯Ό ES Module λ°©μ‹μœΌλ‘œ λ°”κΎΈμ–΄ μ‹€ν–‰ν•΄μ£Όμ—ˆλ‹€. 1. package.json의 scripts에 npm install --save-dev nodemon μΆ”κ°€ ![images/μ‹€μŠ΅2-nodemon.png](images/μ‹€μŠ΅2-nodemon.png) - - ν”„λ‘œμ νŠΈλ₯Ό μˆ˜μ •ν•˜κ³  μ €μž₯ν•  λ•Œλ§ˆλ‹€ μ„œλ²„λ₯Ό μžλ™μœΌλ‘œ μž¬μ‹œμž‘ν•˜κ²Œ λ§Œλ“€μ–΄ μ£Όμ—ˆλ‹€. \ No newline at end of file + - ν”„λ‘œμ νŠΈλ₯Ό μˆ˜μ •ν•˜κ³  μ €μž₯ν•  λ•Œλ§ˆλ‹€ μ„œλ²„λ₯Ό μžλ™μœΌλ‘œ μž¬μ‹œμž‘ν•˜κ²Œ λ§Œλ“€μ–΄ μ£Όμ—ˆλ‹€. + +**⚑ μž‘μ€ νŠΈλŸ¬λΈ” μŠˆνŒ…** +1. **이슈**
+ ν”„λ‘œμ νŠΈ 쀑 기쑴에 μ„€μΉ˜ν•΄λ‘” node, npm 버전이 각각 20.16.0, 10.8.3인 κ±Έ ν™•μΈν•œ ν›„ μ›Œν¬λΆμ— λͺ…μ‹œλœ λŒ€λ‘œ β€œnpm install express@^5.0.0-0”을 μž…λ ₯ν•΄ express@^5.0.0-0을 μ„€μΉ˜ν•˜λ € ν–ˆλŠ”λ° 사진과 같은 μ—λŸ¬κ°€ λ°œμƒν•˜λ©° μ„€μΉ˜μ— μ‹€νŒ¨ν–ˆλ‹€. + ![images/νŠΈλŸ¬λΈ”μŠˆνŒ…-μ—λŸ¬.png](images/νŠΈλŸ¬λΈ”μŠˆνŒ…-μ—λŸ¬.png) +2. **문제 & ν•΄κ²°** + ![images/νŠΈλŸ¬λΈ”μŠˆνŒ…-λ¬Έμ œνƒμƒ‰-1.png](images/νŠΈλŸ¬λΈ”μŠˆνŒ…-λ¬Έμ œνƒμƒ‰-1.png) + 검색을 ν•΄λ³΄μ•˜λ”λ‹ˆ ν•œ μ‚¬μ΄νŠΈμ—μ„œ express@5.xλŠ” 아직 정식 릴리슀된 게 μ•„λ‹ˆμ–΄μ„œ ν•΄λ‹Ή μ—λŸ¬κ°€ λ°œμƒν•œ κ²ƒμ΄λΌλŠ” 글을 λ³΄μ•˜μ§€λ§Œ npm ν™ˆνŽ˜μ΄μ§€μ—μ„œ 5.x 버전이 정식 릴리즈 된 것을 ν™•μΈν•˜μ˜€λ‹€. + ![images/νŠΈλŸ¬λΈ”μŠˆνŒ…-λ¬Έμ œνƒμƒ‰-2.png](images/νŠΈλŸ¬λΈ”μŠˆνŒ…-λ¬Έμ œνƒμƒ‰-2.png) + ![images/νŠΈλŸ¬λΈ”μŠˆνŒ…-λ¬Έμ œν•΄κ²°.png](images/νŠΈλŸ¬λΈ”μŠˆνŒ…-λ¬Έμ œν•΄κ²°.png) + κ·Έλž˜μ„œ express@^5.0.0-0이 μ•„λ‹Œ express@5.0.0(npm ν™ˆνŽ˜μ΄μ§€μ— λ‚˜μ™€μžˆμ—ˆμŒ)을 μ„€μΉ˜ν•΄λ³΄μ•˜λ”λ‹ˆ μ„±κ³΅μ μœΌλ‘œ μ„€μΉ˜κ°€ λ˜μ—ˆλ‹€. 버전 끝에 β€œ-0”이 λΆ™λŠλƒμ˜ μ°¨μ΄μ—ˆκ³  μ°Ύμ•„λ³΄λ‹ˆ β€œ-0β€λŠ” ν”„λ¦¬λ¦΄λ¦¬μ¦ˆ(pre-release) νƒœκ·Έλ₯Ό λ‚˜νƒ€λ‚΄λ©° 일반적으둜 버전 뒀에 λΆ™λŠ” -0 νƒœκ·ΈλŠ” ν•΄λ‹Ή νŒ¨ν‚€μ§€κ°€ 아직 정식 λ¦΄λ¦¬μ¦ˆκ°€ μ•„λ‹Œ 개발 λ²„μ „μž„μ„ μ˜λ―Έν•œλ‹€κ³  ν•œλ‹€. 즉, express@5.0.0-0λŠ” 5.0.0 정식 버전이 λ‚˜μ˜€κΈ° 전에 배포된 ν…ŒμŠ€νŠΈ 버전인 것이닀. μ›Œν¬λΆμ΄ λ§Œλ“€μ–΄μ§ˆ λ‹Ήμ‹œμ—λŠ” 5.0.0이 ν”„λ¦¬λ¦΄λ¦¬μ¦ˆμ˜€λ‚˜ 보닀. diff --git a/mission/chapter03/mission.md b/mission/chapter03/mission.md index 7f340fe..b4ee437 100644 --- a/mission/chapter03/mission.md +++ b/mission/chapter03/mission.md @@ -164,8 +164,8 @@ "message": "string", "result": [ "restaurantName": "string", - "completedMission": { - "completedMissionId": 1, + "ongoingMission": { + "ongoingMissionId": 1, "introduction": "string", "points": 500 } @@ -259,4 +259,21 @@ "accessToken": "string" } } - ``` \ No newline at end of file + ``` + +**μŠ€ν„°λ”” ν›„ 더 κ³΅λΆ€ν•œ λ‚΄μš©** +1. Access token을 Bearer둜 κ°μ‹Έμ„œ λ³΄λ‚΄λŠ” 이유 + - κ°„λ‹¨ν•˜κ³  μ•ˆμ „ν•œ 전솑 방식 + - Bearer 토큰은 HTTP μš”μ²­μ˜ Authorization 헀더에 ν¬ν•¨λ˜μ–΄ μ„œλ²„λ‘œ μ „λ‹¬λ˜λŠ”λ° μ΄λŠ” λ³„λ„μ˜ λ³΅μž‘ν•œ 인증 κ³Όμ • 없이 토큰을 μ†Œμ§€ν•œ μ‚¬λžŒλ§Œμ΄ λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•œλ‹€. + - ex. Authorization: Bearer + - OAuth 2.0 ν‘œμ€€ μ€€μˆ˜ + - OAuth 2.0 ν‘œμ€€μ€ Bearer 토큰을 μ‚¬μš©ν•˜μ—¬ μ•‘μ„ΈμŠ€ κΆŒν•œμ„ λΆ€μ—¬ν•˜κ³  이λ₯Ό 톡해 μ„œλ²„λŠ” ν•΄λ‹Ή ν† ν°μ˜ μœ νš¨μ„±μ„ 확인할 수 μžˆλ‹€. + - λ³΄μ•ˆ κ°•ν™” 및 μœ νš¨μ„± 검증 + - Bearer 방식은 주둜 SSL/TLS와 같은 μ•ˆμ „ν•œ 톡신 ν”„λ‘œν† μ½œκ³Ό ν•¨κ»˜ μ‚¬μš©λ˜μ–΄ 토큰이 μ€‘κ°„μ—μ„œ λ„μ²­λ˜λŠ” μœ„ν—˜μ„ λ°©μ§€ν•œλ‹€. + - 인증 κ°„μ†Œν™” + - ν΄λΌμ΄μ–ΈνŠΈλŠ” λ³„λ„μ˜ μ‚¬μš©μž 인증 정보λ₯Ό 맀번 μž…λ ₯ν•  ν•„μš” 없이 μ„œλ²„μ— Bearer 토큰을 μ „μ†‘ν•˜κΈ°λ§Œ ν•˜λ©΄ λœλ‹€. μ„œλ²„λŠ” ν•΄λ‹Ή ν† ν°μ˜ μœ νš¨μ„±λ§Œ ν™•μΈν•˜λ©΄ κ·Έ ν΄λΌμ΄μ–ΈνŠΈμ˜ 신원을 ν™•μΈν•œ κ²ƒμœΌλ‘œ κ°„μ£Όν•œλ‹€. +2. λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ idλ₯Ό AUTO_INCREMENT(κ³ μœ ν•œ 숫자 μ‹λ³„μž(ID)λ₯Ό μžλ™μœΌλ‘œ 생성)둜 μ„€μ •ν–ˆμ„ 경우, Request Body에 id ν•„λ“œλ₯Ό λ„£μ–΄ 값을 지정해주어야 λ˜λŠ”μ§€ + - Request Body에 id 포함 μ—¬λΆ€ + - **ν¬ν•¨ν•˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€**. λ°μ΄ν„°λ² μ΄μŠ€κ°€ μƒˆλ‘œμš΄ λ ˆμ½”λ“œκ°€ 생성될 λ•Œλ§ˆλ‹€ μžλ™μœΌλ‘œ κ³ μœ ν•œ idλ₯Ό λΆ€μ—¬ν•˜κΈ° λ•Œλ¬Έμ— ν΄λΌμ΄μ–ΈνŠΈκ°€ 직접 idλ₯Ό 지정할 ν•„μš”κ°€ μ—†λ‹€. + - Response Body에 id 포함 μ—¬λΆ€ + - **ν¬ν•¨ν•˜λŠ” 것이 μ’‹λ‹€**. μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€κ°€ μƒμ„±λœ ν›„, μ„œλ²„λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ— μ˜ν•΄ μƒμ„±λœ idλ₯Ό μ‘λ‹΅μœΌλ‘œ λ°˜ν™˜ν•˜λŠ” 것이 μΌλ°˜μ μ΄λ‹€. ν΄λΌμ΄μ–ΈνŠΈκ°€ μƒμ„±λœ λ¦¬μ†ŒμŠ€μ˜ idλ₯Ό ν™•μΈν•˜κ³  이후에 이λ₯Ό μ°Έμ‘°ν•˜κ±°λ‚˜ μ‚¬μš©ν•  수 μžˆλ„λ‘ 도와쀀닀. \ No newline at end of file