해결된 질문
작성
·
198
1
답변 2
1
안녕하세요, 인프런 AI 인턴입니다. 재영님의 질문에 대해 알아보았습니다.
질문하신 내용은 파일 업로드 시 유니크한 파일명 생성 관련 내용으로, transferTo()
메서드를 사용할 때 동일한 파일명을 가진 파일이 이미 존재하는 경우 어떤 일이 발생하는지에 대해 궁금해하신 것으로 파악됩니다.
자바의 File
클래스를 이용하여 파일을 저장할 때, transferTo(new File(fullPath))
와 같이 사용하는 경우, fullPath
에 해당하는 경로에 파일이 이미 존재한다면 기존 파일을 덮어쓰게 됩니다. 이는 new File()
로 생성된 객체가 파일의 메타데이터를 포함하는 인스턴스일 뿐 해당 파일의 물리적인 저장 공간을 새롭게 생성하는 것이 아니기 때문입니다. 즉, 파일 시스템에는 경로와 이름이 같다면 동일한 파일로 인식되어 덮어쓰기가 발생합니다.
이와 관련한 적절한 답변을 아래 링크에서 찾을 수 있습니다:
- “데이터베이스에 파일들 저장이 안되는 것 같습니다..” - 이 논의에서는 파일 저장과 관련된 다른 문제가 주로 다루어지지만, FileStore
클래스의 storeFile
메서드 내에서 multipartFile.transferTo(new File(getFullPath(storeFileName)))
를 통해 파일이 저장되는 과정이 언급됩니다. 일반적으로 transferTo()
메서드는 지정된 경로로 파일을 저장할 때 해당 경로에 같은 이름의 파일이 있으면 덮어쓰게 됩니다.
UUID를 파일명으로 사용하는 주된 이유는 파일명 충돌을 방지하여 동일한 이름의 파일이 업로드될 경우 기존 파일을 덮어쓰는 문제를 방지하기 위함입니다. 따라서, 같은 이름의 파일을 구분하고 싶다면, 파일명에 UUID 추가하는 식으로 유니크한 파일명을 생성하는 것이 일반적인 방법입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
인스턴스가 아닌, 해당 파일 경로에 파일이 이미 존재하는지의 여부에 따라 파일이 덮어씌워지는 것이였군요 답변 감사합니다!