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

한지찬님의 프로필 이미지
한지찬

작성한 질문수

모든 개발자를 위한 HTTP 웹 기본 지식

HTTP API 설계 예시

PUT으로 파일 덮어쓰는 것에 대한 질문이 있습니다.

작성

·

30

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
HTTP API 설계 예시 강의를 들으면서 든 궁금증이 있습니다.

스토어 방식으로 URI를 설계하면,

/files/{fileName} -> PUT

이런식으로 파일을 클라이언트가 덮어 씌워주는 것으로 이해했습니다.

 

그런데, D드라이브의 file 이라는 디렉토리에 파일이 저장된다고 했을때, fileName은 유저가 설정한 파일이 아니라 UUID를 붙여서 새롭게 파일명을 만들어 저장한다고 MVC 2편 강의에서 배웠습니다.

 

그러면 fileName으로 덮어 씌우는것이 사실상 불가능 한것이 아닌가요??

 

왜냐하면, UUID를 실제 생성할때마다 다르게 생성되는데...

 

처음에 image.png를 업로드 했을때, 123-123.png라고 저장되어도 다음에 image.png를 업로드 했을때, 123-124.png로 파일명이 만들어지면 123-123.png가 덮어씌워지는 것이 아니라, 123-124.png라는 새로운 파일이 생성될것 같습니다.

 

 

혹시 제가 잘못 이해한 부분이 있다면 알려주세요ㅠ

 

 

답변 2

0

안녕하세요. 한지찬님, 공식 서포터즈 y2gcoder입니다.

말씀하신 대로의 상황에서는 본질적으로 실제 파일 자체는 매번 다른 파일로서 파일 저장소에 저장되는 것이 맞습니다. 다만 보여주셨던 API 요청 URL에 따라 논리적인 측면에서 말씀을 드려 보겠습니다!

HTTP API 설계 예시 강의를 들으면서 든 궁금증이 있습니다.

스토어 방식으로 URI를 설계하면,

/files/{fileName} -> PUT

이런식으로 파일을 클라이언트가 덮어 씌워주는 것으로 이해했습니다.

PUT /files/{fileName} 으로 저장한다면 /files/a.png 라는 url로 파일을 저장할 때마다 서버의 저장소에는

  • 사용자 가 업로드한 파일명: a.png / a.png

  • 실제 저장소에 업로드된 파일명: 1.png / 2.png

와 같은 식으로 파일이 저장될 것입니다.

그러면 GET /files/a.png 를 통해 파일을 불러온다면 서버의 구현 방식에 따라서 다를 수 있으나 일반적으로는 후에 업로드한 a.png(실제 저장소에 업로드한 파일명: 2.png) 가 불러와질 가능성이 높습니다.

(아니면 PUT 방식에 맞게 같은 파일명이라면 이전에 a.png라는 이름으로 사용자가 업로드했던 파일은 지우고 새 파일을 저장하는 방식으로 할 수도 있습니다. )

저희에게 친숙한 AWS S3 저장소에 파일을 업로드할 때도 이러한 방식으로 되어있습니다. 같은 파일명으로 파일을 업로드하면 파일명으로 해당 파일을 조회하면 가장 최근에 업로드한 파일을 보여주게 설계되어있습니다. 그리고 파일 버저닝 기능을 사용 중이라면, 같은 이름의 여러 파일을 저장하고 있다가 원하는 버전파일을 내려받을 수도 있습니다. 이 버저닝 기능을 한지찬님께서 질문해주셨던 것처럼 내부에서는 파일명을 다르게 해서 저장하는 방식을 기반으로 만들 수 있지 않을까 생각해봤습니다.

 

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 한지찬님.

질문해주신 내용에 대해 유사한 질문과 답변들을 찾아보았습니다. 파일 덮어쓰기와 UUID 적용에 관한 종류의 문제는 다음 게시물에서 잘 다루고 있습니다:

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

    • 이 질문에서는 UUID를 사용하여 파일명을 생성함으로써 파일 덮어쓰기 문제를 방지하는 방법을 다루고 있습니다. UUID를 사용하면 같은 이름의 파일이 중복되지 않기 때문에 덮어씌워지는 문제가 발생하지 않습니다.
    • 관련 이미지 URL: 이미지
  2. “컬렉션과 스토어 질문드립니다.”

    • 이 질문에서는 협력 컬렉션과 스토어 개념의 차이를 다루고 있으며, 클라이언트와 서버 간의 역할 분담이 어떻게 이루어지는지 설명하고 있습니다. 클라이언트가 리소스의 URI를 알고 있으며, 정의는 파일 저장 시 관리 방식의 차이를 이해하는 데 도움이 됩니다.
    • 질문자가 스토어와 컬렉션의 개념 혼동 부분을 정리해주신 답변입니다.

파일명이 UUID로 생성되는 이유는, 동일한 이름의 파일이 업로드될 때 덮어쓰기를 방지하기 위함입니다. 해당 로직을 통해 파일의 물리적 이름이 서로 달라져 덮어씌워지지 않도록 설계되어 있습니다. 따라서 PUT 메서드로 파일을 업로드하고 덮어쓰기 문제를 방지하는 것이 가능합니다.

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

한지찬님의 프로필 이미지
한지찬

작성한 질문수

질문하기