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

저장되는 파일명을 uuid로 하지 않았을 때, 디스크에 실제 같은 이름의 파일이 들어가는 경우 덮어씌어지는 걸 확인했습니다.
혹시, 위의 transferTo() 메서드의 인자로 파일명까지 포함한 같은 경로의 파일이 들어가게 되면 덮어씌어지는 건가요?
new File()로 다른 인스턴스를 생성해주기 때문에 같은 이름의 파일 경로라도 서로 다른 파일이 생성이 되고, 결국엔 덮어씌어지는 일은 없을 거라고 예상했는데요.
같은 이름의 파일일 경우, uuid로 파일명을 지정안해주었을 때 어떻게 덮어씌어지는 것인지 궁금합니다.
답변 2
1
안녕하세요, 인프런 AI 인턴입니다. 재영님의 질문에 대해 알아보았습니다.
질문하신 내용은 파일 업로드 시 유니크한 파일명 생성 관련 내용으로, transferTo() 메서드를 사용할 때 동일한 파일명을 가진 파일이 이미 존재하는 경우 어떤 일이 발생하는지에 대해 궁금해하신 것으로 파악됩니다.
자바의 File 클래스를 이용하여 파일을 저장할 때, transferTo(new File(fullPath))와 같이 사용하는 경우, fullPath에 해당하는 경로에 파일이 이미 존재한다면 기존 파일을 덮어쓰게 됩니다. 이는 new File()로 생성된 객체가 파일의 메타데이터를 포함하는 인스턴스일 뿐 해당 파일의 물리적인 저장 공간을 새롭게 생성하는 것이 아니기 때문입니다. 즉, 파일 시스템에는 경로와 이름이 같다면 동일한 파일로 인식되어 덮어쓰기가 발생합니다.
이와 관련한 적절한 답변을 아래 링크에서 찾을 수 있습니다:
- “데이터베이스에 파일들 저장이 안되는 것 같습니다..” - 이 논의에서는 파일 저장과 관련된 다른 문제가 주로 다루어지지만, FileStore 클래스의 storeFile 메서드 내에서 multipartFile.transferTo(new File(getFullPath(storeFileName)))를 통해 파일이 저장되는 과정이 언급됩니다. 일반적으로 transferTo() 메서드는 지정된 경로로 파일을 저장할 때 해당 경로에 같은 이름의 파일이 있으면 덮어쓰게 됩니다.
UUID를 파일명으로 사용하는 주된 이유는 파일명 충돌을 방지하여 동일한 이름의 파일이 업로드될 경우 기존 파일을 덮어쓰는 문제를 방지하기 위함입니다. 따라서, 같은 이름의 파일을 구분하고 싶다면, 파일명에 UUID 추가하는 식으로 유니크한 파일명을 생성하는 것이 일반적인 방법입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
이미지 업로드와 db 트랜잭션 묶는법
0
40
1
Could not resolve org.springframework.boot:spring-boot-starter-validation:2.4.4
0
45
2
MessageSourceTest 코드
0
46
1
인터셉터 에러 설정
0
47
1
resolveArgument()메서드 질문
0
54
1
43강 검증1 에서 실패 로직 관련 질문있습니다.
0
52
2
타임리프 3.X 버전 rendering, serializer 에러 해결 방법
2
130
3
스프링 빈에 등록이 안되는거 같은데 어떻게 하면 좋을까요?ㅠㅠ
0
86
3
pdf 오타 문의
0
54
1
ItemUpdateForm 검증 관련 질문입니다.
0
46
1
22page 링크 주소 변경
0
55
2
특정 데이터와 파일을 함께 저장 시, 테이블 구조 질문
0
52
1
섹션3번 수업에 대한 질문입니다.
0
78
2
@Autowired 보다 더 좋은 방법이 어떤 걸까요?
0
84
2
타입컨버터 가 람다랑 비슷해 보이는데 저의 생각이 맞는지?.
0
63
1
자바스크립트 인라인에서 객체 직렬화 시 오류가 납니다
0
140
3
스프링부트 - 오류페이지2 에서 500.html 에서 쓰인 객체 질문
0
62
1
톰캣 에러 페이지가 안보입니다.
0
98
2
apiEceptionController에서 센드 에러 호출하면 안되는지?
0
80
1
세션 타임아웃시 쿠키 삭제 방법이 없나요?
0
116
2
ApiExceptionController 질문드립니다.
0
62
1
셀렉박스 챕터에서 option value에 ==배송 방식 선택== 이것을 넣은 이유가 궁금함, 이렇게 구상해도 되는지?
0
64
1
MemberRepository 필드의 fianl 선언 유무
0
83
2
혹시 index.html 에서는 fragment 사용이 안되는건가요
0
57
1





