## 프로젝트 개요
웹 애플리케이션에서 파일 업로드 시 형식 및 크기 검증을 타입 시스템으로 보장하는 안전한 처리 방안을 구현합니다. 서버와 클라이언트 모두에서 재사용 가능한 인터페이스를 제공하여 실시간 유효성 검사를 수행합니다.
## 주요 기능
- 파일 형식(MIME 타입) 체크
- 최대 크기 제한 처리
- 예외 상황에 대한 명시적 에러 코드 반환
- 확장 가능한 인터페이스 설계
## 사용 방법
1. `FileUploadHandler` 클래스를 생성하여 파일 객체 전달
2. `validate()` 메서드로 형식/크기 검증 수행
3. 유효성 실패 시 `FileValidationError` 타입으로 에러 코드 반환
4. `handleUpload()` 메서드로 실제 업로드 로직 연결
## 확장 가능성
- 새로운 파일 형식 지원을 위한 `FileType` enum 추가
- 클라우드 스토리지 연동 시 `uploadToCloud()` 메서드 구현
- 비동기 처리를 통한 대규모 파일 처리 최적화
🔷 타입 안전 파일 업로드 처리기 구현
TypeScript 예제
중급
난이도
예제
타입
10/13
등록일
타입 안전 파일 업로드 처리기 구현
중급태그
코드 예제
// 파일 업로드 처리 인터페이스
interface FileMetadata {
name: string;
size: number;
type: string; // MIME 타입
}
// 에러 코드 정의
type FileErrorCode =
| 'INVALID_TYPE'
| 'EXCEEDS_SIZE_LIMIT';
// 파일 검증 오류 타입
type FileValidationError = {
code: FileErrorCode;
message: string;
};
// 파일 처리 핸들러 클래스
class FileUploadHandler {
private maxSize: number = 10 * 1024 * 1024; // 10MB
constructor(private allowedTypes: string[]) {}
validate(file: File): FileValidationError | null {
try {
if (!this.allowedTypes.includes(file.type)) {
return {
code: 'INVALID_TYPE',
message: `허용되지 않는 파일 형식 (${file.type})`,
};
}
if (file.size > this.maxSize) {
return {
code: 'EXCEEDS_SIZE_LIMIT',
message: `최대 크기 제한 초과 (${file.size} bytes)`,
};
}
return null; // 유효 파일인 경우 null 반환
} catch (error) {
console.error('파일 검증 중 오류:', error);
throw new Error('파일 검증 실패');
}
}
handleUpload(file: File): void {
const validationError = this.validate(file);
if (validationError) {
throw new Error(validationError.message);
}
// 실제 업로드 로직 구현
console.log(`업로드 중: ${file.name} (${file.size} bytes)`);
}
}
// 사용 예시
const handler = new FileUploadHandler(['image/*', 'application/pdf']);
try {
const file = new File(['test'], 'test.txt');
handler.handleUpload(file);
} catch (error) {
console.error('업로드 실패:', error.message);
}
등록일: 2025년 10월 13일 04:59
언어 정보
언어
TypeScript
카테고리
Web
인기도
#7
학습 팁
코드를 직접 실행해보세요
변수를 바꿔가며 실험해보세요
오류가 나도 포기하지 마세요
다른 예제도 찾아보세요