diff --git a/week09/keyword/Keyword.md b/week09/keyword/Keyword.md new file mode 100644 index 0000000..3658598 --- /dev/null +++ b/week09/keyword/Keyword.md @@ -0,0 +1,95 @@ +- OAuth 2.0 + + ### πŸ“Œ **μ •μ˜** + + OAuth 2.0은 **μ‚¬μš©μžμ˜ λΉ„λ°€λ²ˆν˜Έλ₯Ό λ…ΈμΆœν•˜μ§€ μ•Šκ³ λ„** 제3자 앱이 μ œν•œλœ μ ‘κ·Ό κΆŒν•œμ„ 얻도둝 ν•΄μ£ΌλŠ” **인증·인가 ν”„λ‘œν† μ½œ**이닀. + + 예: Google 둜그인, Naver 둜그인, GitHub 둜그인 등이 λͺ¨λ‘ OAuth 2.0 기반. + + --- + + ### πŸ“Œ **νŠΉμ§•** + + - **인가(Authorization) 쀑심 ν”„λ‘œν† μ½œ** β†’ 둜그인/인증 μžμ²΄λŠ” OpenID Connect(OIDC)κ°€ λ‹΄λ‹Ή. + - Access Token을 톡해 κΆŒν•œ λΆ€μ—¬. + - λ‹€μ–‘ν•œ 인증 ν”Œλ‘œμš° 제곡 + - Authorization Code Flow (κ°€μž₯ 일반적) + - Implicit Flow + - Resource Owner Password Credentials Flow + - Client Credentials Flow + - 토큰 기반으둜 μž‘λ™ β†’ μ„œλ²„λŠ” μ„Έμ…˜ μœ μ§€ 없이 인증 처리 κ°€λŠ₯. + + --- + + ### πŸ“Œ **μž₯점** + + - λΉ„λ°€λ²ˆν˜Έλ₯Ό μ™ΈλΆ€ μ•±κ³Ό κ³΅μœ ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€ β†’ **λ³΄μ•ˆ κ°•ν™”** + - λ‹€μ–‘ν•œ ν”Œλž«νΌ(μ›Ή, λͺ¨λ°”일, μ„œλ²„)에 μœ μ—°ν•˜κ²Œ 적용 + - ν™•μž₯μ„± λ†’μŒ (SNS 둜그인, μ„œλ“œνŒŒν‹° API 호좜 λ“±) + + ### πŸ“Œ **단점** + + - κ΅¬ν˜„μ΄ λ³΅μž‘ν•¨ (Redirect, Token Exchange λ“±) + - μ˜¬λ°”λ₯Έ Flowλ₯Ό μ„ νƒν•˜μ§€ μ•ŠμœΌλ©΄ λ³΄μ•ˆ μ·¨μ•½ κ°€λŠ₯ + - Access Token 유좜 μ‹œ μœ„ν—˜ +- JWT + + ### πŸ“Œ **μ •μ˜** + + JWTλŠ” JSON ν˜•μ‹μ˜ 데이터λ₯Ό **μ„œλͺ…(Signature)** ν•˜μ—¬ μ•ˆμ „ν•˜κ²Œ μ „μ†‘ν•˜κΈ° μœ„ν•œ **토큰 기반 인증 기술**이닀. + + Access Token, ID Token 등에 주둜 μ‚¬μš©λ¨. + + `HEADER.PAYLOAD.SIGNATURE` ꡬ쑰둜 이루어짐. + + --- + + ### πŸ“Œ **νŠΉμ§•** + + - ν΄λΌμ΄μ–ΈνŠΈμ— μ €μž₯λ˜λŠ” **Self-contained Token** + - μ„œλ²„κ°€ μ„Έμ…˜ 정보λ₯Ό μ €μž₯ν•˜μ§€ μ•Šμ•„λ„ 됨(Stateless) + - 보톡 Base64URL 둜 μΈμ½”λ”©λœ λ¬Έμžμ—΄ ν˜•νƒœ + + --- + + ### πŸ“Œ **μž₯점** + + - μ„œλ²„ ν™•μž₯μ„±(Stateless) β†’ μ„Έμ…˜ μ €μž₯μ†Œ ν•„μš” μ—†μŒ + - λ‹€μ–‘ν•œ ν”Œλž«νΌμ—μ„œ μ‰½κ²Œ μ‚¬μš© κ°€λŠ₯ + - μ„œλͺ…(Signature) κ²€μ¦μœΌλ‘œ 데이터 μœ„λ³€μ‘° λ°©μ§€ + + ### πŸ“Œ **단점** + + - 토큰이 νƒˆμ·¨λ˜λ©΄ 만료 μ „κΉŒμ§€ 계속 μ‚¬μš© κ°€λŠ₯ + - Payload λ‚΄μš©μ΄ 평문(Base64URL)이라 **μ•”ν˜Έν™”λœ 게 μ•„λ‹˜** + + β†’ 민감 정보λ₯Ό μ ˆλŒ€ λ„£μœΌλ©΄ μ•ˆ 됨! + + - 토큰 μ‚¬μ΄μ¦ˆκ°€ μ„Έμ…˜ ID보닀 큼(λŒ€λž΅ 1KB+) +- Bearer Token + + ### πŸ“Œ **μ •μ˜** + + β€œBearerβ€λŠ” **μ†Œμœ ν•˜κ³  μžˆλŠ” κ²ƒλ§ŒμœΌλ‘œ 인증됨**을 μ˜λ―Έν•˜λŠ” 토큰 νƒ€μž…μ΄λ‹€. + + 즉, 토큰을 κ°€μ§„ μ‚¬λžŒμ€ λˆ„κ΅¬λ“  μš”μ²­μ„ 보낼 수 있음. + + --- + + ### πŸ“Œ **νŠΉμ§•** + + - OAuth 2.0의 Access Token λŒ€λΆ€λΆ„μ΄ Bearer 방식 + - 별도 μ•”ν˜Έν™”λ‚˜ 인증 κ³Όμ • μ—†μŒ β†’ **μ†Œμœ  = κΆŒν•œ** + - HTTPS ν™˜κ²½μ—μ„œ μ‚¬μš©ν•΄μ•Ό μ•ˆμ „ν•¨ + + --- + + ### πŸ“Œ **μž₯점** + + - λ‹¨μˆœν•˜κ³  λΉ λ₯Έ 인증 방식 + - λ‹€μ–‘ν•œ APIμ—μ„œ ν‘œμ€€μ²˜λŸΌ μ‚¬μš©λ¨ + + ### πŸ“Œ **단점** + + - νƒˆμ·¨λ˜λ©΄ κ·ΈλŒ€λ‘œ μ‚¬μš©ν•  수 μžˆμ–΄ μœ„ν—˜λ„κ°€ λ†’μŒ + - λ°˜λ“œμ‹œ 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..3738164 --- /dev/null +++ b/week09/mission/Mission.md @@ -0,0 +1,84 @@ +## ν•΄μ•Όν•  λ―Έμ…˜ + +1. 기쑴에 μ‚¬μš©μžμ˜ 정보λ₯Ό ν•˜λ“œ μ½”λ”© λΆ€λΆ„ μˆ˜μ • +2. 자기 μžμ‹ μ˜ 정보λ₯Ό μˆ˜μ •ν•˜λŠ” API μ œμž‘ +3. κΈ°μ‘΄ API에 JWT 인증 적용 + +--- + +## 1. μ‚¬μš©μž 정보 ν•˜λ“œμ½”λ”© λΆ€λΆ„ μˆ˜μ • + +### κΈ°μ‘΄ + +- `Bearer access-token-for-user-{id}` 둜 access-token μ„€μ • 쀑 +- ν•΄λ‹Ή access-token에 λŒ€ν•΄ idλ₯Ό κ°€μ Έμ˜€λŠ” 둜직 보유 쀑 + +### μˆ˜μ • + +- access-token을 자체적인 토큰 방식말고 jwtλ₯Ό μ‚¬μš©ν•˜μ—¬ signμ§„ν–‰ + +### κ²°κ³Ό + +- isLogin 미듀웨어 μΆ”κ°€ + +1 + +- μž‘μ„±μžμ— λŒ€ν•œ μ˜¬λ°”λ₯Έ 응닡 + +2 + +--- + +## 2. 자기 μžμ‹ μ˜ 정보 μˆ˜μ • API μ œμž‘ + +### μΆ”κ°€ + +- Method: `POST` +- EndPoint: `/mypage/edit` +- Request Body + + ```json + { + "name": "string", + "gender": 0 // 0이면 λ‚¨μž, 1이면 μ—¬μž + "birth": "2025-11-25", + "address": "string", + "subaddr": "string" + } + ``` + +- Response Body + + ```json + { + "success": true, + "code": 200, + "message": "μ‚¬μš©μž 정보가 μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€", + "data": { + "userId": 1 + } + } + ``` + + +### κ²°κ³Ό + +3 + +--- + +## 3. κΈ°μ‘΄ API듀에 JWT 인증 적용 + +### κΈ°μ‘΄ + +- `Bearer access-token-for-user-{id}` 둜 access-token μ„€μ • 쀑 + +### μˆ˜μ • + +- access-token을 자체적인 토큰 방식말고 jwtλ₯Ό μ‚¬μš©ν•˜μ—¬ 인증받을 수 μžˆλ„λ‘ μˆ˜μ • + +### κ²°κ³Ό + +- isLogin 미듀웨어λ₯Ό 톡해 인증 + +4 diff --git a/week10/keyword/Keyword.md b/week10/keyword/Keyword.md new file mode 100644 index 0000000..4a7dcda --- /dev/null +++ b/week10/keyword/Keyword.md @@ -0,0 +1,136 @@ +- CI/CD + + ### πŸ“Œ **μ •μ˜** + + CI/CDλŠ” **지속적 톡합(Continuous Integration)**, **지속적 배포(Continuous Delivery/Deployment)** λ₯Ό μ˜λ―Έν•˜λŠ” + + **μžλ™ν™”λœ μ†Œν”„νŠΈμ›¨μ–΄ 개발 및 배포 ν”„λ‘œμ„ΈμŠ€**이닀. + + μ½”λ“œ 변경이 λ°œμƒν•˜λ©΄ μžλ™μœΌλ‘œ **λΉŒλ“œ β†’ ν…ŒμŠ€νŠΈ β†’ 배포**κΉŒμ§€ μ§„ν–‰λ˜λŠ” ꡬ쑰λ₯Ό λ”°λ₯Έλ‹€. + + --- + + ### πŸ“Œ **νŠΉμ§•** + + - **μžλ™ νŒŒμ΄ν”„λΌμΈ 기반** + - Git 이벀트(push, PR, release λ“±)λ₯Ό 트리거둜 μ‹€ν–‰ κ°€λŠ₯ + - λΉŒλ“œ/ν…ŒμŠ€νŠΈ μ‹€νŒ¨ μ‹œ 즉각 ν”Όλ“œλ°± + - Stateless ν…ŒμŠ€νŠΈ ν™˜κ²½μ—μ„œ μ‹€ν–‰λ˜λŠ” 것이 μ„ ν˜Έλ¨ + + --- + + ### πŸ“Œ **μž₯점** + + - 반볡 μž‘μ—… μžλ™ν™” β†’ **생산성 ν–₯상** + - 였λ₯˜λ₯Ό **초기 λ‹¨κ³„μ—μ„œ 발견** + - νŒ€ ν˜‘μ—… ν‘œμ€€ν™” + - 배포 μ•ˆμ •μ„± 증가 + + ### πŸ“Œ **단점** + + - 처음 ꡬ좕이 λ³΅μž‘ν•˜λ‹€ + - ν…ŒμŠ€νŠΈ/배포 μ‹œλ‚˜λ¦¬μ˜€ λΆ€μ‹€ μ‹œ 의미 κ°μ†Œ + - 인프라 λΉ„μš© 및 μ‹€ν–‰ μ‹œκ°„ κ³ λ € ν•„μš” + + --- + + ### πŸ“Œ **μ‚¬μš© μ˜ˆμ‹œ** + + - main λΈŒλžœμΉ˜μ— push β†’ μžλ™ μ„œλ²„ 배포 + - Pull Request 병합 μ „ β†’ μžλ™ λΉŒλ“œ & ν…ŒμŠ€νŠΈ μ‹€ν–‰ + - 배포 μ‹€νŒ¨ μ‹œ β†’ 이전 λ²„μ „μœΌλ‘œ μžλ™ λ‘€λ°± +- GitHub Actions + + ### πŸ“Œ **μ •μ˜** + + GitHubμ—μ„œ μ œκ³΅ν•˜λŠ” **μ›Œν¬ν”Œλ‘œμš° μžλ™ μ‹€ν–‰ ν”Œλž«νΌ**이며, + + CI/CD νŒŒμ΄ν”„λΌμΈ λ„κ΅¬λ‘œ κ°€μž₯ 많이 ν™œμš©λ˜λŠ” μ„œλΉ„μŠ€ 쀑 ν•˜λ‚˜μ΄λ‹€. + + `.github/workflows/*.yml` νŒŒμΌμ— λ™μž‘μ„ μ •μ˜ν•˜μ—¬ μ‹€ν–‰ν•œλ‹€. + + --- + + ### πŸ“Œ **νŠΉμ§•** + + - **Runner ν™˜κ²½ 제곡 (κΈ°λ³Έ: Ubuntu)** + - Git 이벀트 기반 트리거 (push, PR, cron λ“±) + - `GITHUB_TOKEN` 기반 κΆŒν•œ λͺ¨λΈ μ‚¬μš© + - Marketplace에 μž¬μ‚¬μš© κ°€λŠ₯ν•œ Action λ‹€μˆ˜ + + --- + + ### πŸ“Œ **μž₯점** + + - GitHub λ‚΄λΆ€μ—μ„œ μ‹€ν–‰ β†’ **연동 κ°„νŽΈ** + - μ½”λ“œ ν’ˆμ§ˆ 검사 κ·œμΉ™ κ°•μ œ κ°€λŠ₯ + - μ°Έμ‘°ν•  λ ˆνΌλŸ°μŠ€κ°€ 맀우 풍뢀함 + - μ„œλ²„ 직접 μ ‘κ·Ό 없이 μžλ™ 싀행·배포 κ°€λŠ₯ + + ### πŸ“Œ **단점** + + - μ›Œν¬ν”Œλ‘œμš° 볡작 μ‹œ 디버깅이 μ–΄λ ΅λ‹€ + - Free tier Runner μ„±λŠ₯ μ œν•œ 쑴재 + - **토큰 κΆŒν•œ λΆ€μ‘± β†’ μ‹€ν–‰ μ‹€νŒ¨μ˜ μ£Όμš” 원인** +- Reverse Proxy + + ### πŸ“Œ **μ •μ˜** + + μ™ΈλΆ€ ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ **ν”„λ‘μ‹œ μ„œλ²„κ°€ λŒ€μ‹  λ°›μ•„ λ‚΄λΆ€ μ„œλ²„λ‘œ μ „λ‹¬ν•΄μ£ΌλŠ” 쀑계 방식**이닀. + + λ‚΄λΆ€ μ„œλ²„λŠ” λ…ΈμΆœλ˜μ§€ μ•Šκ³  **ν”„λ‘μ‹œ 1개만 외뢀에 곡개**λœλ‹€. + + λŒ€ν‘œ: NGINX, Caddy, Traefik λ“± + + --- + + ### πŸ“Œ **νŠΉμ§•** + + - μ™ΈλΆ€μ—μ„œλŠ” **ν”„λ‘μ‹œλ§Œ μ ‘κ·Ό** + - 내뢀에 μ—¬λŸ¬ λŒ€μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„ μ—°κ²° κ°€λŠ₯ + - LB(λ‘œλ“œλ°ΈλŸ°μ‹±), 캐싱, 헀더 μ‘°μž‘, μ ‘κ·Ό μ œμ–΄ κ°€λŠ₯ + - HTTPS μΈμ¦μ„œ 쀑앙 관리 κ°€λŠ₯ + + --- + + ### πŸ“Œ **μž₯점** + + - λ‚΄λΆ€ μ„œλ²„ 은닉 β†’ **λ³΄μ•ˆ κ°•ν™”** + - ν™•μž₯(Scale-out) ꡬ쑰에 맀우 적합 + - 경둜/도메인 기반 λΌμš°νŒ… κ°€λŠ₯ + - HTTPS μΈμ¦μ„œμ™€ Redirect 섀정을 μ€‘μ•™μ—μ„œ 처리 + + ### πŸ“Œ **단점** + + - Reverse Proxy μž₯μ•  μ‹œ 전체 영ν–₯ + - μ„€μ • 파일 관리가 ν•„μš” + - λ„€νŠΈμ›Œν¬ 계측이 1개 μΆ”κ°€λ˜μ–΄ latency 증가 κ°€λŠ₯ (맀우 λ―Έμ„Έ) +- HTTPS + + ### πŸ“Œ **μ •μ˜** + + **HTTP + SSL/TLS λ³΄μ•ˆ λ ˆμ΄μ–΄λ₯Ό κ²°ν•©ν•œ μ•”ν˜Έν™”λœ 톡신 ν”„λ‘œν† μ½œ**이닀. + + μ„œλ²„β€“ν΄λΌμ΄μ–ΈνŠΈ κ°„ 데이터가 **μ•”ν˜Έν™”λ˜μ–΄ μ•ˆμ „ν•˜κ²Œ 전달**λœλ‹€. + + --- + + ### πŸ“Œ **νŠΉμ§•** + + - ν‘œμ€€ 포트 = **443** + - μΈμ¦μ„œ ν•„μš” (λŒ€ν‘œ: Let’s Encrypt 무료 μΈμ¦μ„œ) + - Authorization 토큰(Bearer/JWT) νƒˆμ·¨ λ°©μ§€μ˜ **ν•„μˆ˜ μ „μ œμ‘°κ±΄** + - λΈŒλΌμš°μ €μ—μ„œ **πŸ”’ μ•ˆμ „ 잠금 ν‘œμ‹œ 제곡** + + --- + + ### πŸ“Œ **μž₯점** + + - 데이터 도청/λ³€μ‘° λ°©μ§€ (MITM λ°©μ§€) + - 토큰 기반 인증 λ³΄μ•ˆ κ°•ν™” + - μ‚¬μš©μžμ™€ μ„œλ²„ κ°„ μ‹ λ’° 인증 제곡 + + ### πŸ“Œ **단점** + + - μΈμ¦μ„œ μžλ™ 갱신이 ν•„μš” + - Handshake 좔가됨 (ν•˜μ§€λ§Œ HTTP/2~3μ—μ„œλŠ” 였히렀 λΉ λ₯Ό 수 있음) \ No newline at end of file diff --git a/week10/mission/Mission.md b/week10/mission/Mission.md new file mode 100644 index 0000000..f2d4bcb --- /dev/null +++ b/week10/mission/Mission.md @@ -0,0 +1,17 @@ +1. GitHub Actions와 AWS EC2λ₯Ό μ΄μš©ν•˜μ—¬ 직접 CI/CD 배포 해보기! + - μ™„λ£Œ +2. EC2λ₯Ό μ΄μš©ν•΄ λ°°ν¬ν•œ ν˜„μž¬ μƒνƒœμ—μ„œ Google 둜그인이 λ™μž‘ν•˜μ§€ μ•ŠλŠ” 이유λ₯Ό ν™•μΈν•˜κ³  μˆ˜μ •ν•΄λ³΄κΈ°. + - λ™μž‘ν•˜μ§€ μ•ŠλŠ” 이유 + + 01 + + - λ‹€λ§Œ, ν˜„μž¬ μ„œλ²„λŠ” λ‚΄κ°€ μ§€μ •ν•œ 퍼블릭IPμ—μ„œ μ§„ν–‰ μ€‘μ΄λ‹ˆ λ™μž‘ X + - μˆ˜μ • λ°©μ•ˆ 1) + + 02 + + - google μ„€μ • 상 λΆˆκ°€λŠ₯ + - μˆ˜μ • λ°©μ•ˆ 2) + - 퍼블릭 IPλ₯Ό 도메인을 톡해 κ°μ‹Έμ„œ μ§„ν–‰ + + - μœ λ£Œβ€¦..