인프런 커뮤니티 질문&답변

재영님의 프로필 이미지

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

예제로 구현하는 파일 업로드, 다운로드

uuid 파일명 생성에 관한 질문 드립니다.

해결된 질문

작성

·

198

1

저장되는 파일명을 uuid로 하지 않았을 때, 디스크에 실제 같은 이름의 파일이 들어가는 경우 덮어씌어지는 걸 확인했습니다.

 

혹시, 위의 transferTo() 메서드의 인자로 파일명까지 포함한 같은 경로의 파일이 들어가게 되면 덮어씌어지는 건가요?

 

new File()로 다른 인스턴스를 생성해주기 때문에 같은 이름의 파일 경로라도 서로 다른 파일이 생성이 되고, 결국엔 덮어씌어지는 일은 없을 거라고 예상했는데요.

 

같은 이름의 파일일 경우, uuid로 파일명을 지정안해주었을 때 어떻게 덮어씌어지는 것인지 궁금합니다.

답변 2

2

안녕하세요. 재영님, 공식 서포터즈 OMG입니다. 

AI 답변을 참고해주세요 🙂

감사합니다.

재영님의 프로필 이미지
재영
질문자

인스턴스가 아닌, 해당 파일 경로에 파일이 이미 존재하는지의 여부에 따라 파일이 덮어씌워지는 것이였군요 답변 감사합니다!

1

안녕하세요, 인프런 AI 인턴입니다. 재영님의 질문에 대해 알아보았습니다.

질문하신 내용은 파일 업로드 시 유니크한 파일명 생성 관련 내용으로, transferTo() 메서드를 사용할 때 동일한 파일명을 가진 파일이 이미 존재하는 경우 어떤 일이 발생하는지에 대해 궁금해하신 것으로 파악됩니다.

자바의 File 클래스를 이용하여 파일을 저장할 때, transferTo(new File(fullPath))와 같이 사용하는 경우, fullPath에 해당하는 경로에 파일이 이미 존재한다면 기존 파일을 덮어쓰게 됩니다. 이는 new File()로 생성된 객체가 파일의 메타데이터를 포함하는 인스턴스일 뿐 해당 파일의 물리적인 저장 공간을 새롭게 생성하는 것이 아니기 때문입니다. 즉, 파일 시스템에는 경로와 이름이 같다면 동일한 파일로 인식되어 덮어쓰기가 발생합니다.

이와 관련한 적절한 답변을 아래 링크에서 찾을 수 있습니다:
- “데이터베이스에 파일들 저장이 안되는 것 같습니다..” - 이 논의에서는 파일 저장과 관련된 다른 문제가 주로 다루어지지만, FileStore 클래스의 storeFile 메서드 내에서 multipartFile.transferTo(new File(getFullPath(storeFileName)))를 통해 파일이 저장되는 과정이 언급됩니다. 일반적으로 transferTo() 메서드는 지정된 경로로 파일을 저장할 때 해당 경로에 같은 이름의 파일이 있으면 덮어쓰게 됩니다.

UUID를 파일명으로 사용하는 주된 이유는 파일명 충돌을 방지하여 동일한 이름의 파일이 업로드될 경우 기존 파일을 덮어쓰는 문제를 방지하기 위함입니다. 따라서, 같은 이름의 파일을 구분하고 싶다면, 파일명에 UUID 추가하는 식으로 유니크한 파일명을 생성하는 것이 일반적인 방법입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

재영님의 프로필 이미지

작성한 질문수

질문하기