docs: 2026-04-10 변경사항 README 업데이트
Some checks failed
Build and Push Images / build-backend (push) Has been cancelled

This commit is contained in:
qorgh529
2026-04-10 20:05:08 +09:00
parent 68e9fc0a32
commit 08f345fad7

View File

@@ -82,14 +82,37 @@ nginx-portal/
## ✨ 기능 설명
### 일반 사용자
- 로그인 후 **본인에게 할당된 웹페이지 목록** 카드 형태로 확인
- 로그인 후 **MY Page List** 에서 본인에게 할당된 웹페이지 카드 형태로 확인
- 카드의 Favicon 자동 표시 (없을 경우 기본 아이콘)
- 카드 클릭 시 **새 탭에서 해당 URL로 이동**
- **공지사항** 탭에서 관리자가 등록한 공지 확인 및 댓글 작성
- **관리자 요청** 탭에서 게시글 작성 및 답글 작성
- 로그인 비밀번호 표시/숨김 토글 버튼
- 로그인 실패 시 아이디 유지 (비밀번호만 초기화)
- **비밀번호 변경** 메뉴 (헤더에서 언제든 변경 가능)
- **최초 로그인 시 비밀번호 강제 변경** (변경 전까지 서비스 이용 불가)
- **비밀번호 5회 오류 시 계정 자동 잠금** → 관리자에게 잠금 해제 요청 필요
### 관리자
일반 사용자 기능 + 추가:
- **페이지 관리**: 웹페이지 추가 / 수정 / 삭제
- **사용자 관리**: 계정 생성 / 삭제
- **권한 설정**: 사용자별 접근 가능 페이지를 체크박스로 지정
- **비밀번호 변경**: 특정 사용자의 비밀번호 직접 변경 (변경 후 해당 사용자 강제 변경 적용)
- **임시 비밀번호 발급**: 랜덤 임시 비밀번호 자동 생성 후 화면에 표시
- **계정 잠금 해제**: 잠긴 계정을 버튼 하나로 해제
- **사용자 상태 확인**: 정상 / 🔒잠김 / 초기PW / 변경요청 태그로 한눈에 확인
- **공지사항 작성**: 공지 탭에서 전체 사용자에게 공지 등록 / 삭제
### 게시판 (공지 / 관리자 요청)
| 구분 | 공지 | 관리자 요청 |
|------|------|------------|
| 글 작성 | 관리자만 가능 | 모든 사용자 가능 |
| 댓글/답글 | 모든 사용자 가능 | 모든 사용자 가능 |
| 글 삭제 | 관리자만 가능 | 본인 또는 관리자 |
| 댓글 삭제 | 본인 또는 관리자 | 본인 또는 관리자 |
| 목록 항목 | 번호, 제목, 작성자, 작성일(시간포함) | 번호, 제목, 작성자, 작성일(시간포함) |
---
@@ -215,6 +238,7 @@ kubectl delete namespace web-portal
## 🔐 운영 시 보안 설정
### K8s Secret 변경
`k8s/03-secrets.yaml` 에서 반드시 변경:
```yaml
stringData:
@@ -222,6 +246,27 @@ stringData:
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 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 방어)