Skip to content

Commit 8cad456

Browse files
authored
Merge pull request #37 from Aqoom01/main
9, 10주차 - 현/김현호 워크북 과제 제출
2 parents 55f6b63 + 7f91f7c commit 8cad456

4 files changed

Lines changed: 332 additions & 0 deletions

File tree

week09/keyword/Keyword.md

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
- OAuth 2.0
2+
3+
### 📌 **정의**
4+
5+
OAuth 2.0은 **사용자의 비밀번호를 노출하지 않고도** 제3자 앱이 제한된 접근 권한을 얻도록 해주는 **인증·인가 프로토콜**이다.
6+
7+
예: Google 로그인, Naver 로그인, GitHub 로그인 등이 모두 OAuth 2.0 기반.
8+
9+
---
10+
11+
### 📌 **특징**
12+
13+
- **인가(Authorization) 중심 프로토콜** → 로그인/인증 자체는 OpenID Connect(OIDC)가 담당.
14+
- Access Token을 통해 권한 부여.
15+
- 다양한 인증 플로우 제공
16+
- Authorization Code Flow (가장 일반적)
17+
- Implicit Flow
18+
- Resource Owner Password Credentials Flow
19+
- Client Credentials Flow
20+
- 토큰 기반으로 작동 → 서버는 세션 유지 없이 인증 처리 가능.
21+
22+
---
23+
24+
### 📌 **장점**
25+
26+
- 비밀번호를 외부 앱과 공유하지 않아도 된다 → **보안 강화**
27+
- 다양한 플랫폼(웹, 모바일, 서버)에 유연하게 적용
28+
- 확장성 높음 (SNS 로그인, 서드파티 API 호출 등)
29+
30+
### 📌 **단점**
31+
32+
- 구현이 복잡함 (Redirect, Token Exchange 등)
33+
- 올바른 Flow를 선택하지 않으면 보안 취약 가능
34+
- Access Token 유출 시 위험
35+
- JWT
36+
37+
### 📌 **정의**
38+
39+
JWT는 JSON 형식의 데이터를 **서명(Signature)** 하여 안전하게 전송하기 위한 **토큰 기반 인증 기술**이다.
40+
41+
Access Token, ID Token 등에 주로 사용됨.
42+
43+
`HEADER.PAYLOAD.SIGNATURE` 구조로 이루어짐.
44+
45+
---
46+
47+
### 📌 **특징**
48+
49+
- 클라이언트에 저장되는 **Self-contained Token**
50+
- 서버가 세션 정보를 저장하지 않아도 됨(Stateless)
51+
- 보통 Base64URL 로 인코딩된 문자열 형태
52+
53+
---
54+
55+
### 📌 **장점**
56+
57+
- 서버 확장성(Stateless) → 세션 저장소 필요 없음
58+
- 다양한 플랫폼에서 쉽게 사용 가능
59+
- 서명(Signature) 검증으로 데이터 위변조 방지
60+
61+
### 📌 **단점**
62+
63+
- 토큰이 탈취되면 만료 전까지 계속 사용 가능
64+
- Payload 내용이 평문(Base64URL)이라 **암호화된 게 아님**
65+
66+
→ 민감 정보를 절대 넣으면 안 됨!
67+
68+
- 토큰 사이즈가 세션 ID보다 큼(대략 1KB+)
69+
- Bearer Token
70+
71+
### 📌 **정의**
72+
73+
“Bearer”는 **소유하고 있는 것만으로 인증됨**을 의미하는 토큰 타입이다.
74+
75+
즉, 토큰을 가진 사람은 누구든 요청을 보낼 수 있음.
76+
77+
---
78+
79+
### 📌 **특징**
80+
81+
- OAuth 2.0의 Access Token 대부분이 Bearer 방식
82+
- 별도 암호화나 인증 과정 없음 → **소유 = 권한**
83+
- HTTPS 환경에서 사용해야 안전함
84+
85+
---
86+
87+
### 📌 **장점**
88+
89+
- 단순하고 빠른 인증 방식
90+
- 다양한 API에서 표준처럼 사용됨
91+
92+
### 📌 **단점**
93+
94+
- 탈취되면 그대로 사용할 수 있어 위험도가 높음
95+
- 반드시 HTTPS 사용해야 함

week09/mission/Mission.md

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
## 해야할 미션
2+
3+
1. 기존에 사용자의 정보를 하드 코딩 부분 수정
4+
2. 자기 자신의 정보를 수정하는 API 제작
5+
3. 기존 API에 JWT 인증 적용
6+
7+
---
8+
9+
## 1. 사용자 정보 하드코딩 부분 수정
10+
11+
### 기존
12+
13+
- `Bearer access-token-for-user-{id}` 로 access-token 설정 중
14+
- 해당 access-token에 대해 id를 가져오는 로직 보유 중
15+
16+
### 수정
17+
18+
- access-token을 자체적인 토큰 방식말고 jwt를 사용하여 sign진행
19+
20+
### 결과
21+
22+
- isLogin 미들웨어 추가
23+
24+
<img width="446" height="47" alt="1" src="https://github.com/user-attachments/assets/d97607d1-d7f5-489b-b85e-6f9eb8d4cbfd" />
25+
26+
- 작성자에 대한 올바른 응답
27+
28+
<img width="518" height="395" alt="2" src="https://github.com/user-attachments/assets/b019750d-7467-43a4-88b4-73b9c35e4c1f" />
29+
30+
---
31+
32+
## 2. 자기 자신의 정보 수정 API 제작
33+
34+
### 추가
35+
36+
- Method: `POST`
37+
- EndPoint: `/mypage/edit`
38+
- Request Body
39+
40+
```json
41+
{
42+
"name": "string",
43+
"gender": 0 // 0이면 남자, 1이면 여자
44+
"birth": "2025-11-25",
45+
"address": "string",
46+
"subaddr": "string"
47+
}
48+
```
49+
50+
- Response Body
51+
52+
```json
53+
{
54+
"success": true,
55+
"code": 200,
56+
"message": "사용자 정보가 수정되었습니다",
57+
"data": {
58+
"userId": 1
59+
}
60+
}
61+
```
62+
63+
64+
### 결과
65+
66+
<img width="787" height="632" alt="3" src="https://github.com/user-attachments/assets/919ab4f1-3f35-42bd-a9c1-e8c2683e0ca0" />
67+
68+
---
69+
70+
## 3. 기존 API들에 JWT 인증 적용
71+
72+
### 기존
73+
74+
- `Bearer access-token-for-user-{id}` 로 access-token 설정 중
75+
76+
### 수정
77+
78+
- access-token을 자체적인 토큰 방식말고 jwt를 사용하여 인증받을 수 있도록 수정
79+
80+
### 결과
81+
82+
- isLogin 미들웨어를 통해 인증
83+
84+
<img width="600" height="164" alt="4" src="https://github.com/user-attachments/assets/0064cadf-45a8-41ac-8877-42921faa6dde" />

week10/keyword/Keyword.md

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
- CI/CD
2+
3+
### 📌 **정의**
4+
5+
CI/CD는 **지속적 통합(Continuous Integration)**, **지속적 배포(Continuous Delivery/Deployment)** 를 의미하는
6+
7+
**자동화된 소프트웨어 개발 및 배포 프로세스**이다.
8+
9+
코드 변경이 발생하면 자동으로 **빌드 → 테스트 → 배포**까지 진행되는 구조를 따른다.
10+
11+
---
12+
13+
### 📌 **특징**
14+
15+
- **자동 파이프라인 기반**
16+
- Git 이벤트(push, PR, release 등)를 트리거로 실행 가능
17+
- 빌드/테스트 실패 시 즉각 피드백
18+
- Stateless 테스트 환경에서 실행되는 것이 선호됨
19+
20+
---
21+
22+
### 📌 **장점**
23+
24+
- 반복 작업 자동화 → **생산성 향상**
25+
- 오류를 **초기 단계에서 발견**
26+
- 팀 협업 표준화
27+
- 배포 안정성 증가
28+
29+
### 📌 **단점**
30+
31+
- 처음 구축이 복잡하다
32+
- 테스트/배포 시나리오 부실 시 의미 감소
33+
- 인프라 비용 및 실행 시간 고려 필요
34+
35+
---
36+
37+
### 📌 **사용 예시**
38+
39+
- main 브랜치에 push → 자동 서버 배포
40+
- Pull Request 병합 전 → 자동 빌드 & 테스트 실행
41+
- 배포 실패 시 → 이전 버전으로 자동 롤백
42+
- GitHub Actions
43+
44+
### 📌 **정의**
45+
46+
GitHub에서 제공하는 **워크플로우 자동 실행 플랫폼**이며,
47+
48+
CI/CD 파이프라인 도구로 가장 많이 활용되는 서비스 중 하나이다.
49+
50+
`.github/workflows/*.yml` 파일에 동작을 정의하여 실행한다.
51+
52+
---
53+
54+
### 📌 **특징**
55+
56+
- **Runner 환경 제공 (기본: Ubuntu)**
57+
- Git 이벤트 기반 트리거 (push, PR, cron 등)
58+
- `GITHUB_TOKEN` 기반 권한 모델 사용
59+
- Marketplace에 재사용 가능한 Action 다수
60+
61+
---
62+
63+
### 📌 **장점**
64+
65+
- GitHub 내부에서 실행 → **연동 간편**
66+
- 코드 품질 검사 규칙 강제 가능
67+
- 참조할 레퍼런스가 매우 풍부함
68+
- 서버 직접 접근 없이 자동 실행·배포 가능
69+
70+
### 📌 **단점**
71+
72+
- 워크플로우 복잡 시 디버깅이 어렵다
73+
- Free tier Runner 성능 제한 존재
74+
- **토큰 권한 부족 → 실행 실패의 주요 원인**
75+
- Reverse Proxy
76+
77+
### 📌 **정의**
78+
79+
외부 클라이언트의 요청을 **프록시 서버가 대신 받아 내부 서버로 전달해주는 중계 방식**이다.
80+
81+
내부 서버는 노출되지 않고 **프록시 1개만 외부에 공개**된다.
82+
83+
대표: NGINX, Caddy, Traefik 등
84+
85+
---
86+
87+
### 📌 **특징**
88+
89+
- 외부에서는 **프록시만 접근**
90+
- 내부에 여러 대의 애플리케이션 서버 연결 가능
91+
- LB(로드밸런싱), 캐싱, 헤더 조작, 접근 제어 가능
92+
- HTTPS 인증서 중앙 관리 가능
93+
94+
---
95+
96+
### 📌 **장점**
97+
98+
- 내부 서버 은닉 → **보안 강화**
99+
- 확장(Scale-out) 구조에 매우 적합
100+
- 경로/도메인 기반 라우팅 가능
101+
- HTTPS 인증서와 Redirect 설정을 중앙에서 처리
102+
103+
### 📌 **단점**
104+
105+
- Reverse Proxy 장애 시 전체 영향
106+
- 설정 파일 관리가 필요
107+
- 네트워크 계층이 1개 추가되어 latency 증가 가능 (매우 미세)
108+
- HTTPS
109+
110+
### 📌 **정의**
111+
112+
**HTTP + SSL/TLS 보안 레이어를 결합한 암호화된 통신 프로토콜**이다.
113+
114+
서버–클라이언트 간 데이터가 **암호화되어 안전하게 전달**된다.
115+
116+
---
117+
118+
### 📌 **특징**
119+
120+
- 표준 포트 = **443**
121+
- 인증서 필요 (대표: Let’s Encrypt 무료 인증서)
122+
- Authorization 토큰(Bearer/JWT) 탈취 방지의 **필수 전제조건**
123+
- 브라우저에서 **🔒 안전 잠금 표시 제공**
124+
125+
---
126+
127+
### 📌 **장점**
128+
129+
- 데이터 도청/변조 방지 (MITM 방지)
130+
- 토큰 기반 인증 보안 강화
131+
- 사용자와 서버 간 신뢰 인증 제공
132+
133+
### 📌 **단점**
134+
135+
- 인증서 자동 갱신이 필요
136+
- Handshake 추가됨 (하지만 HTTP/2~3에서는 오히려 빠를 수 있음)

week10/mission/Mission.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
1. GitHub Actions와 AWS EC2를 이용하여 직접 CI/CD 배포 해보기!
2+
- 완료
3+
2. EC2를 이용해 배포한 현재 상태에서 Google 로그인이 동작하지 않는 이유를 확인하고 수정해보기.
4+
- 동작하지 않는 이유
5+
6+
<img width="608" height="247" alt="01" src="https://github.com/user-attachments/assets/bc52bac8-27ba-4f57-8ac6-c852bc422802" />
7+
8+
- 다만, 현재 서버는 내가 지정한 퍼블릭IP에서 진행 중이니 동작 X
9+
- 수정 방안 1)
10+
11+
<img width="545" height="142" alt="02" src="https://github.com/user-attachments/assets/b59cef21-d067-418d-a6ad-38596e6285d0" />
12+
13+
- google 설정 상 불가능
14+
- 수정 방안 2)
15+
- 퍼블릭 IP를 도메인을 통해 감싸서 진행
16+
17+
- 유료…..

0 commit comments

Comments
 (0)