Skip to content

Latest commit

 

History

History
252 lines (176 loc) · 6.39 KB

File metadata and controls

252 lines (176 loc) · 6.39 KB

🎯 개선사항 요약

✅ 완료된 작업

TASK 1: 다중 사용자 세션 지원 ✅

파일: MemberController.java

주요 변경사항:

로그인 (checkMembers 메서드)
- ❌ 제거: 기존 세션 invalidate 로직
- ✅ 추가: 새로운 세션 생성 (기존 세션 유지)
- 결과: 여러 사용자 동시 로그인 가능

로그아웃 (member_logout 메서드)
- ❌ 제거: 불필요한 새 세션 생성
- ✅ 개선: 현재 사용자의 세션만 제거
- 결과: 다른 사용자 세션에 영향 없음

핵심 코드 변경:

// 로그인: 기존 세션 강제 종료 제거
// 대신 새 세션만 생성
HttpSession newSession = request2.getSession(true);

// 로그아웃: 현재 사용자의 세션만 종료
if (session != null) {
    session.invalidate(); // 이 사용자의 세션만 제거
}

TASK 2: 파일 업로드 기능 개선 ✅

2-1. FileUploadService.java (새로 생성) ✨

파일: FileUploadService.java

기능:

  • ✅ 단일 파일 업로드
  • ✅ 다중 파일 업로드 (최대 2개)
  • ✅ 파일 크기 검증 (10MB 제한)
  • ✅ 파일 타입 검증 (화이트리스트)
  • ✅ 파일명 중복 감지 및 자동 이름 변경 (타임스탐프)
  • ✅ 상세한 에러 메시지

허용 파일 타입:

txt, pdf, doc, docx, xls, xlsx, ppt, pptx,
jpg, jpeg, png, gif, zip, rar

중복 파일명 처리:

원본:    document.pdf
중복:    document_20231213_143022_123.pdf  ← 타임스탐프 추가

2-2. FileUploadRequest.java (새로 생성) ✨

파일: FileUploadRequest.java

기능:

  • 사용자 이메일
  • 파일 1, 2 (최대 2개)
  • 파일 배열 반환 유틸리티 메서드

2-3. FileController.java (개선) 🔄

파일: FileController.java

새로운 엔드포인트:

POST /upload-files
- 최대 2개 파일 업로드
- 사용자별 디렉토리 생성
- FileUploadService 사용
- 에러 처리 및 에러 페이지 표시

기존 엔드포인트 (유지):

POST /upload-email
- 이메일 콘텐츠 텍스트 파일 저장

2-4. file_upload_error.html (새로 생성) ✨

파일: error_page/file_upload_error.html

기능:

  • 에러 타입 표시 (NO_FILE, VALIDATION_ERROR, UPLOAD_ERROR)
  • 상세 에러 메시지
  • 해결 방법 안내
  • 돌아가기/홈 버튼

2-5. file_upload_form.html (예제) ✨

파일: file_upload_form.html

기능:

  • 다중 파일 선택 UI
  • 파일 정보 표시 (크기 등)
  • 클라이언트 측 검증
  • 사용자 친화적 안내

📋 파일 변경 목록

✏️ 수정된 파일

  1. MemberController.java - 세션 처리 로직 수정
  2. FileController.java - 다중 파일 업로드 엔드포인트 추가

✨ 새로 생성된 파일

  1. FileUploadService.java - 파일 업로드 서비스
  2. FileUploadRequest.java - 파일 업로드 요청 모델
  3. error_page/file_upload_error.html - 에러 페이지
  4. file_upload_form.html - 업로드 예제 페이지
  5. FILE_UPLOAD_AND_SESSION_IMPROVEMENTS.md - 상세 문서

✅ 확인된 파일

  1. application.properties - 파일 업로드 설정 이미 존재
  2. pom.xml - Lombok 의존성 이미 포함

🚀 사용 방법

1. 다중 사용자 로그인

사용자 A (alice@example.com) 로그인
  ↓
사용자 B (bob@example.com) 로그인 (A 로그인 상태 유지)
  ↓
A, B 모두 동시에 접근 가능
  ↓
A 로그아웃 → B는 여전히 로그인

2. 파일 업로드

<form action="/upload-files" method="post" enctype="multipart/form-data">
  <input type="email" name="userEmail" required />
  <input type="file" name="file1" required />
  <input type="file" name="file2" />
  <button type="submit">업로드</button>
</form>

또는 제공된 예제 페이지: /file_upload_form.html


📊 구조 다이어그램

사용자 요청
    ↓
MemberController (로그인/로그아웃)
    ├─ checkMembers() → 새 세션 생성
    └─ member_logout() → 현재 사용자 세션만 제거

FileController (파일 업로드)
    └─ uploadMultipleFiles()
        ↓
    FileUploadService
        ├─ uploadFiles() → 다중 파일 처리
        ├─ validateFile() → 크기/타입 검증
        ├─ handleDuplicateFilename() → 자동 이름 변경
        └─ 에러 처리 → error_page/file_upload_error.html

🔐 보안 기능

세션 보안

  • UUID 기반 고유 세션 ID
  • 5분 세션 타임아웃
  • HTTPS 쿠키 안전 전송

파일 업로드 보안

  • 파일명 검증 (경로 조작 방지)
  • 파일 타입 화이트리스트
  • 파일 크기 제한
  • 사용자별 독립 디렉토리

✅ 테스트 완료 항목

  • 여러 사용자 동시 로그인
  • 각 사용자 로그아웃 시 다른 사용자 세션 유지
  • 1개 파일 업로드
  • 2개 파일 동시 업로드
  • 3개 파일 업로드 거부
  • 파일 크기 제한 작동
  • 허용되지 않는 파일 타입 거부
  • 중복 파일명 자동 이름 변경
  • 에러 페이지 표시
  • 사용자별 디렉토리 분리

📞 문제 해결

Q: 파일 업로드가 안 됩니다 A: 다음을 확인하세요

  • 파일 크기가 10MB 이하인가?
  • 허용된 파일 타입인가?
  • 최대 2개까지만 선택했나?

Q: 로그인 후 다른 사용자가 로그아웃됩니다 A: 업데이트된 MemberController가 적용되었는지 확인

  • 새 세션은 생성되나요? (invalidate() 제거)
  • 로그인 중복 테스트: 2명 동시 로그인 후 한 명만 로그아웃

📚 참고 자료


작성일: 2024년 12월 13일
상태: ✅ 완료 및 프로덕션 준비