membership 회원 관리
✅ 1. 회원 가입 / 탈퇴
✅ 2. 로그인 / 로그아웃
✅ 3. 인증(Authentication)
✅ 4. 인가(Authorization)
✅ 5. 회원 정보 조회 / 수정
✅ 6. 소셜 로그인 (선택)
✅ 7. 사용자 상태 관리
✅ 8. 보안 관련 기능
✅ 9. 사용자 Activity 로그 (선택)
✅ 10. 기타 연동 기능
🛡️ 1. 인증(Authentication)
🔐 1-1. 비밀번호 관리
- 암호화 저장:
bcrypt
또는 argon2
사용
- 절대 평문 저장 ❌
- 비밀번호 정책:
- 최소 8자 이상, 대소문자+숫자+특수문자 조합
- 반복 문자 제한, 과거 비밀번호 재사용 금지 등
🔑 1-2. 로그인 방식
- ID/PW 로그인
- 로그인 시도 횟수 제한 (예: 5회 실패 시 잠금)
- 지연 응답 방식으로 brute-force 방지
- OAuth2 지원 (Google, Kakao 등)
- 소셜 토큰 검증 후 자체 유저 등록 or 로그인 처리
📱 1-3. 2FA (2차 인증, 선택)
- OTP (예: Google Authenticator)
- SMS 또는 Email 기반 1회용 코드 인증
🛡️ 2. 인가(Authorization)
👤 2-1. Role/Permission 기반 접근 제어
- 예:
USER
, ADMIN
, SUSPENDED
- Spring Security에서
@PreAuthorize("hasRole('ADMIN')")
등으로 제한
📦 2-2. 서비스 간 인가 처리 (MSA 환경)
- 내부 서비스 간 통신 시
internal-token
혹은 mTLS
사용
- Gateway에서 인증하고 내부 요청은
X-USER-ID
header로 전달
🛡️ 3. 세션 & 토큰 관리
🪪 3-1. JWT (Access / Refresh Token)
- Access Token:
- 수명 짧게 (예: 15분~30분)
- 요청 시 헤더에
Authorization: Bearer <token>
- Refresh Token:
- 수명 길게 (예: 2주~1달)
- DB 저장 + Redis 저장 (보안 고려)
💥 3-2. 토큰 탈취 방지
- HTTP-only, Secure cookie로 전달 (특히 Refresh Token)
- IP / User-Agent 조합 검사
- Logout 시 Refresh Token 강제 삭제
🛡️ 4. 공격 방어
🧠 4-1. CSRF 방지
- REST API일 경우 CSRF 필요 없음 (stateless)
- 만약 세션/폼기반이라면 CSRF 토큰 사용
🕵️ 4-2. XSS / SQL Injection 방지
- 입력값 검증 (서버측 Validation + Frontend도 가능하면 적용)
- ORM 사용 (JPA, MyBatis 등에서 PreparedStatement 사용)
- Content-Security-Policy 설정
🔄 4-3. Rate Limiting
- 로그인 / 인증 API에는 초당 호출 수 제한
- Redis + Spring Cloud Gateway Filter로 구현 가능
🛡️ 5. 로깅 & 감사(Audit)
- 로그인/로그아웃 시도 로그
- 비밀번호 변경, 탈퇴, 권한 변경 등 중요한 이벤트 로그 기록
- 별도
Audit Log Service
구성 가능
- 로그 내 개인정보 마스킹 필수 (예: 이메일 →
j***@gmail.com
)
🛡️ 6. 암호화 & 데이터 보호
- 비밀번호 외에도 중요한 개인정보(휴대폰, 이메일)는 AES 등으로 암호화 저장 가능
- 민감한 데이터 전송 시 SSL/TLS 적용
- S3나 외부 저장소에 파일 업로드 시에도 서버단 암호화 고려
🛡️ 7. 계정 보호 기능
- 로그인 시 타 기기에서 로그인 여부 표시
- 최근 접속 기록 조회
- 계정 정지 기능 (
SUSPENDED
, BLOCKED
등 상태값)
🛡️ 8. 기타 고려사항
- 탈퇴 후 데이터 관리: 법적 보관 vs 즉시 삭제
- 비밀번호 찾기/재설정: 메일/SMS 통한 링크 방식, 링크는 일정 시간 내 만료
- IP 기반 접근 제어 (특정 관리자 기능은 사내망 IP만 허용)
✅ 정리: 보안 기능 체크리스트 예시
항목 | 구현 여부 | 메모 |
---|
비밀번호 암호화 저장 (bcrypt) | ✅ | |
JWT Access/Refresh 구분 | ✅ | |
로그인 시도 제한 | ✅ | |
2차 인증 | ⬜️ | 선택 사항 |
토큰 저장 시 IP/User-Agent 검사 | ⬜️ | 추천 |
관리자 권한 분리 | ✅ | |
감사 로그 기록 | ✅ | 로그 마스킹 포함 |
Rate Limiting 적용 | ⬜️ | Redis 추천 |
민감정보 암호화 저장 | ⬜️ | AES256 고려 |
CSRF/XSS 대응 | ✅ | |