docs: 2026-04-10 변경사항 README 업데이트
Some checks failed
Build and Push Images / build-backend (push) Has been cancelled
Some checks failed
Build and Push Images / build-backend (push) Has been cancelled
This commit is contained in:
85
README.md
85
README.md
@@ -82,14 +82,37 @@ nginx-portal/
|
|||||||
## ✨ 기능 설명
|
## ✨ 기능 설명
|
||||||
|
|
||||||
### 일반 사용자
|
### 일반 사용자
|
||||||
- 로그인 후 **본인에게 할당된 웹페이지 목록** 카드 형태로 확인
|
- 로그인 후 **MY Page List** 에서 본인에게 할당된 웹페이지를 카드 형태로 확인
|
||||||
|
- 카드의 Favicon 자동 표시 (없을 경우 기본 아이콘)
|
||||||
- 카드 클릭 시 **새 탭에서 해당 URL로 이동**
|
- 카드 클릭 시 **새 탭에서 해당 URL로 이동**
|
||||||
|
- **공지사항** 탭에서 관리자가 등록한 공지 확인 및 댓글 작성
|
||||||
|
- **관리자 요청** 탭에서 게시글 작성 및 답글 작성
|
||||||
|
- 로그인 비밀번호 표시/숨김 토글 버튼
|
||||||
|
- 로그인 실패 시 아이디 유지 (비밀번호만 초기화)
|
||||||
|
- **비밀번호 변경** 메뉴 (헤더에서 언제든 변경 가능)
|
||||||
|
- **최초 로그인 시 비밀번호 강제 변경** (변경 전까지 서비스 이용 불가)
|
||||||
|
- **비밀번호 5회 오류 시 계정 자동 잠금** → 관리자에게 잠금 해제 요청 필요
|
||||||
|
|
||||||
### 관리자
|
### 관리자
|
||||||
일반 사용자 기능 + 추가:
|
일반 사용자 기능 + 추가:
|
||||||
- **페이지 관리**: 웹페이지 추가 / 수정 / 삭제
|
- **페이지 관리**: 웹페이지 추가 / 수정 / 삭제
|
||||||
- **사용자 관리**: 계정 생성 / 삭제
|
- **사용자 관리**: 계정 생성 / 삭제
|
||||||
- **권한 설정**: 사용자별 접근 가능 페이지를 체크박스로 지정
|
- **권한 설정**: 사용자별 접근 가능 페이지를 체크박스로 지정
|
||||||
|
- **비밀번호 변경**: 특정 사용자의 비밀번호 직접 변경 (변경 후 해당 사용자 강제 변경 적용)
|
||||||
|
- **임시 비밀번호 발급**: 랜덤 임시 비밀번호 자동 생성 후 화면에 표시
|
||||||
|
- **계정 잠금 해제**: 잠긴 계정을 버튼 하나로 해제
|
||||||
|
- **사용자 상태 확인**: 정상 / 🔒잠김 / 초기PW / 변경요청 태그로 한눈에 확인
|
||||||
|
- **공지사항 작성**: 공지 탭에서 전체 사용자에게 공지 등록 / 삭제
|
||||||
|
|
||||||
|
### 게시판 (공지 / 관리자 요청)
|
||||||
|
|
||||||
|
| 구분 | 공지 | 관리자 요청 |
|
||||||
|
|------|------|------------|
|
||||||
|
| 글 작성 | 관리자만 가능 | 모든 사용자 가능 |
|
||||||
|
| 댓글/답글 | 모든 사용자 가능 | 모든 사용자 가능 |
|
||||||
|
| 글 삭제 | 관리자만 가능 | 본인 또는 관리자 |
|
||||||
|
| 댓글 삭제 | 본인 또는 관리자 | 본인 또는 관리자 |
|
||||||
|
| 목록 항목 | 번호, 제목, 작성자, 작성일(시간포함) | 번호, 제목, 작성자, 작성일(시간포함) |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -215,6 +238,7 @@ kubectl delete namespace web-portal
|
|||||||
|
|
||||||
## 🔐 운영 시 보안 설정
|
## 🔐 운영 시 보안 설정
|
||||||
|
|
||||||
|
### K8s Secret 변경
|
||||||
`k8s/03-secrets.yaml` 에서 반드시 변경:
|
`k8s/03-secrets.yaml` 에서 반드시 변경:
|
||||||
```yaml
|
```yaml
|
||||||
stringData:
|
stringData:
|
||||||
@@ -222,6 +246,27 @@ stringData:
|
|||||||
jwt-secret: "64자이상의랜덤문자열로변경"
|
jwt-secret: "64자이상의랜덤문자열로변경"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Nginx Rate Limiting (Brute Force 방어)
|
||||||
|
`frontend/nginx.conf` 상단에 추가:
|
||||||
|
```nginx
|
||||||
|
limit_req_zone $binary_remote_addr zone=login_limit:10m rate=5r/m;
|
||||||
|
```
|
||||||
|
로그인 location에 적용:
|
||||||
|
```nginx
|
||||||
|
location /api/auth/login {
|
||||||
|
limit_req zone=login_limit burst=3 nodelay;
|
||||||
|
limit_req_status 429;
|
||||||
|
proxy_pass http://backend-service.web-portal.svc.cluster.local:8000/api/auth/login;
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
같은 IP에서 분당 5회 초과 시 429 응답 반환. 계정 잠금(5회 실패)과 함께 이중으로 Brute Force를 방어합니다.
|
||||||
|
|
||||||
|
### 추가 보안 권고사항
|
||||||
|
- **Fail2ban**: Nginx 로그 감시 후 반복 실패 IP를 방화벽으로 자동 차단 (온프레미스 환경 권장)
|
||||||
|
- **CAPTCHA**: 로그인 3회 실패 시 Google reCAPTCHA 표시 (추가 개발 필요)
|
||||||
|
- **JWT 만료 시간 단축**: `main.py` 에서 `timedelta(hours=8)` → `timedelta(hours=2)` 변경 가능
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ❗ 트러블슈팅
|
## ❗ 트러블슈팅
|
||||||
@@ -433,3 +478,41 @@ hint: Updates were rejected because the tip of your current branch is behind
|
|||||||
git pull origin main --rebase
|
git pull origin main --rebase
|
||||||
git push origin main
|
git push origin main
|
||||||
```
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 11. git commit 시 Author identity unknown
|
||||||
|
**증상**
|
||||||
|
```
|
||||||
|
Author identity unknown
|
||||||
|
fatal: unable to auto-detect email address
|
||||||
|
```
|
||||||
|
**원인** Git 사용자 정보가 설정되지 않은 상태.
|
||||||
|
|
||||||
|
**해결**
|
||||||
|
```bash
|
||||||
|
git config --global user.email "계정@gitea.com"
|
||||||
|
git config --global user.name "계정명"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📅 변경 이력
|
||||||
|
|
||||||
|
### 2026-04-06 (초기 구축)
|
||||||
|
- Kubernetes 환경 구성 (Docker Desktop)
|
||||||
|
- FastAPI 백엔드 + Nginx 프론트엔드 + PostgreSQL 배포
|
||||||
|
- Gitea + ArgoCD GitOps 파이프라인 구성
|
||||||
|
- Gitea Container Registry 연동
|
||||||
|
|
||||||
|
### 2026-04-10 (기능 추가)
|
||||||
|
- **MY Page**: 탭명/목록 제목 영문 변경, URL 미표기, Favicon 자동 표시
|
||||||
|
- **비밀번호 보안 강화**
|
||||||
|
- 로그인 비밀번호 표시/숨김 토글 버튼
|
||||||
|
- 로그인 실패 시 아이디 유지 (비밀번호만 초기화)
|
||||||
|
- 최초 로그인 시 비밀번호 강제 변경
|
||||||
|
- 비밀번호 5회 오류 시 계정 자동 잠금
|
||||||
|
- 관리자의 사용자 비밀번호 변경 / 임시 비밀번호 발급 / 잠금 해제
|
||||||
|
- **공지사항 탭**: 관리자 작성 전용, 모든 사용자 댓글 가능
|
||||||
|
- **관리자 요청 탭**: 게시판 형태, 모든 사용자 작성/답글 가능
|
||||||
|
- **Nginx Rate Limiting**: 로그인 API 분당 5회 제한 (Brute Force 방어)
|
||||||
|
|||||||
Reference in New Issue
Block a user