diff --git a/week09/keyword/keyword.md b/week09/keyword/keyword.md new file mode 100644 index 0000000..0171c0d --- /dev/null +++ b/week09/keyword/keyword.md @@ -0,0 +1,23 @@ +- OAuth 2.0 + + **"권한 부여를 위한 프로토콜(약속)"** + + - **개념:** 사용자가 비밀번호를 직접 알려주지 않아도, 특정 애플리케이션이 사용자의 정보(구글, 카카오 등)에 접근할 수 있도록 권한을 위임해 주는 표준 프로토콜 +- JWT + + **"정보를 담은 토큰(티켓)의 형식"** + + - **개념:** 인증에 필요한 정보(유저 ID, 만료 시간 등)를 암호화된 JSON 문자열로 만든 **토큰의 표준 규격** + - **구조:** `aaaaa.bbbbb.ccccc` 처럼 점(.)으로 구분된 세 부분(헤더, 페이로드, 서명)으로 이루어져 있다. + - **장점:** 서버가 별도의 세션 저장소(메모리)를 뒤지지 않아도, **토큰 자체만 보면 "이 사람이 누구고, 위조되지 않았는지" 바로 알 수 있다.** +- Bearer Token + + **"토큰을 사용하는 방식(운반자)"** + + - **개념:** HTTP 통신을 할 때 토큰을 서버로 보내는 **규칙 중 하나** + - **의미:** "Bearer"는 "소지자"라는 뜻입니다. 즉, **"이 토큰을 가지고 있는(Bearer) 사람에게 권한을 줘라"**라는 의미 + - **사용법:** 주로 HTTP 헤더에 다음과 같이 담아서 보낸다. + + > Authorization: Bearer <여기에_JWT_토큰> + > + - **주의점:** 마치 현금이나 영화 표와 같다. 잃어버리면 **주운 사람이 주인 행세**를 할 수 있으므로 HTTPS 등을 통해 탈취되지 않게 관리해야 한다. \ No newline at end of file diff --git a/week09/mission/mission.md b/week09/mission/mission.md new file mode 100644 index 0000000..dbf698d --- /dev/null +++ b/week09/mission/mission.md @@ -0,0 +1,69 @@ +### 미션 1: 하드코딩 제거 + +**Before (기존):** + +```jsx +*// review.controller.js* +const userId = 1; *// 하드코딩// mission.controller.js* +const userId = 1; *// 하드코딩* +``` + +**After (개선):** + +```jsx +*// review.controller.js* +const userId = req.user.id; *// JWT에서 가져옴// mission.controller.js* +const userId = req.user.id; *// JWT에서 가져옴* +``` + +### 미션 2: 사용자 정보 수정 API 추가 + +**새 API 추가:** + +PATCH /api/v1/users/me + +**Request:** + +```json +{ + "nickname": "새닉네임", + "gender": "MALE", + "birth_date": "1995-05-15", + "address_main": "서울시 강남구" +} +``` + +**Response:** + +```json +{ + "resultType": "SUCCESS", + "error": null, + "success": { + "id": 1, + "email": "user@example.com", + "nickname": "새닉네임", + "gender": "MALE", + "birth_date": "1995-05-15", + "address_main": "서울시 강남구" + } +} +``` + +### 미션 3: JWT 인증 미들웨어 적용 (auth.config.js) + +**isLogin 미들웨어:** + +```json +const isLogin = passport.authenticate('jwt', { session: false }); +``` + +**보호된 API 목록:** +API인증 필요 +POST /api/v1/users/signup 로그인 불필요 +공개GET /api/v1/users/me 로그인 필요 +PATCH /api/v1/users/me 로그인 필요 +POST /api/v1/regions/:regionId/stores 로그인 필요 +POST /api/v1/stores/:storeId/reviews 로그인 필요 +POST /api/v1/stores/:storeId/missions 로그인 필요 +POST /api/v1/missions/:missionId/challenge 로그인 필요 \ No newline at end of file diff --git a/week10/keyword/keyword.md b/week10/keyword/keyword.md new file mode 100644 index 0000000..e83bb12 --- /dev/null +++ b/week10/keyword/keyword.md @@ -0,0 +1,38 @@ +- CI/CD + + **"코드 작성부터 배포까지의 과정을 자동화하는 것”** + + **CI (Continuous Integration):** + + - 여러 개발자가 작성한 코드를 자주(지속적으로) 합치고, 자동으로 테스트하여 에러를 미리 잡아내는 과정 + + **CD (Continuous Deployment/Delivery):** + + - 테스트를 통과한 코드를 실제 사용자가 쓰는 서버에 자동으로 배포하는 과정 + + **핵심:** 개발자가 수동으로 서버에 파일을 올리는 수고를 없애고, 실수를 방지 + +- GitHub Actions + + **"GitHub에서 제공하는 CI/CD 자동화 도구"** + + - **역할:** CI/CD를 실현시켜 주는 구체적인 도구(Tool) + - **특징:** GitHub 리포지토리(저장소)와 찰떡궁합입니다. `.yml` 파일을 만들어 "누군가 코드를 `push`하면, 자동으로 빌드하고 테스트해라"라고 명령을 내릴 수 있다. + - **비유:** 공장의 '자동 조립 로봇'과 같다. +- Reverse Proxy + + **"클라이언트와 서버 사이의 중계자"** + + - **개념:** 사용자가 웹사이트에 접속할 때, 요청을 가장 먼저 받아서 내부의 실제 서버(Backend)로 전달해 주는 서버입니다. (대표적인 예: Nginx, Apache) + + **왜 쓰는가?** + + - **보안:** 실제 서버의 IP를 숨길 수 있다. + - **부하 분산 (Load Balancing):** 사용자가 많을 때 여러 서버로 요청을 나눠준다. + - **HTTPS 처리:** 암호화/복호화 과정을 여기서 담당하여 뒷단의 서버 부담을 줄인다. +- HTTPS + + **"보안이 강화된 인터넷 통신 규약"** + + - **개념:** 기존의 HTTP에 SSL/TLS라는 자물쇠를 채운 것이다. + - **역할:** 사용자가 보내는 데이터(비밀번호 등)를 암호화하여 해커가 중간에서 가로채도 내용을 알 수 없게 만든다. \ No newline at end of file diff --git a/week10/mission/mission.md b/week10/mission/mission.md new file mode 100644 index 0000000..a99c749 --- /dev/null +++ b/week10/mission/mission.md @@ -0,0 +1,82 @@ +/.github/workflows/deploy-main.yml + +```jsx +name: deploy-main + +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Configure SSH + run: | + mkdir -p ~/.ssh + echo "$EC2_SSH_KEY" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + + cat >>~/.ssh/config <