y10kgost
1k
2016-03-24 11:43:00
9
2620

파일 업로드시 파일명 랜덤으로 하는이유?


파일 업로드시 파일명 랜덤으로 하는이유가 뭔가요?


첨부 파일명 자체를, 게시물의 id 로 하고, 추가된 파일이면, id_1 , id_2 이런식으로 하는 방법도 있는데

왜 파일명을 랜덤으로하고, 파일에 관한 table을 따로 만드는건가요?


0
0
  • 답변 9

  • sadpupil12
    359
    2016-03-24 11:51:02

    저도 그런 생각이 들었었는데...파일이 하나면 상관이 없을거 같은데...

    한사람이 파일 3개를 올리면..

    사람 테이블에 같은 내용이 파일명만 달리해서 중복된 내용이 생기기 때문에

    정규화 입장에서볼때 맞지 않는다고 합니다...불필요하게 커지는거죠..

    뭐 n:1 m:n 이거까지는 저도 잘 몰라서..밑에분이 설명해 주지 않을까요??



    0
  • moonv11
    143
    2016-03-24 11:59:28

    랜덤으로 하는 이유는 중복을 방지하기 위해서 입니다.

    A라는 사람이 '내사진.jpg' 를 올렸는데 B라는 사람도 '내사진.jpg' 를 업로드하면 나중에 올린 파일로

    덮어씌워지겠죠. 또는 '내사진(2).jpg'라는 명으로 될 수도 있구요.

    OS 마다 다른 것으로 알고 있는데 정확히는 모르겠네요.

    아무튼 이런 문제를 방지하고자 랜덤 스트링을 파일명으로 사용합니다.

    물론 랜덤하다고 해도 디렉토리 하나에 계속 파일을 쌓으면 언젠가는 중복이 발생할 수 있으니

    날짜별, 주제별, 업무별로 파일 디렉토리 경로 구성을 해줘서 중복 가능성을 0에 가깝게 합니다.


    파일에 관한 table 을 만드는 이유는 당연히 동일 성격의 데이터를 관리하기 위해서 입니다.

    DB 설계를 하는데 파일 업로드와 관련된 Table 마다 파일정보와 관련한 컬럼이 있다면 안되겠죠.

    DB 정규화 측면에서 생각하시면 됩니다.


    1:n, m:n 과 같이 연관관계가 발생하는 경우는 mapping 테이블을 따로 구성해주면 됩니다.

    0
  • 최깔짝
    22
    2016-03-24 12:26:14

    보안상의 이유도 있습니다.


    공격자가 업로드된 파일의 이름을 알지 못하도록 하기 위함이지요.


    웹쉘을 업로드할경우 파일명을 예측하지 못하도록 하기 위함의 이유도 있습니다.

    3
  • 돈까스
    3k
    2016-03-24 12:27:32

    말씀하신대로 id_1, id_2 로 파일명을 만드셔도 되요.

    아니면 그냥 업로드 파일  seq를 만들어서 순차적으로 부여해도 되고요.

    오히려 단순 랜덤으로 만들면 문제가 되죠. 동일한 값이 나올 확률이 있으니까.

    파일명이란 것을 PK 라고 생각하시면, DB 테이블에서 PK를 어떻게 만들면 좋을지 생각해보세요.

    랜덤으로 만드는 것이 좋을까요?

    0
  • 돈까스
    3k
    2016-03-24 12:34:49

    최깔짝 님이 말씀하신 보안상의 이유가 가장 합리적으로 보이네요.

    랜덤한 값이 추가되지 않고서는 파일명이 예측가능하네요.

    그걸 생각못하고 리플을 달았는데, 그 말씀이 맞는 것 같습니다.

    하지만 그런 부분에 대해서 해결이 가능하면 무조건 파일명을 랜덤하게 저장할 필요는 없다고 생각합니다.

    0
  • 개나소나고생
    5k
    2016-03-24 12:54:09

    보안상의 이유가 적절할듯 합니다.

    0
  • Courage
    2k
    2016-03-24 13:08:07

    저도 보안상의의이유로 서버에 저장되는 파일은 랜덤으로 하고 확장자는 제거 합니다.

    최소한의 보안이라도 적용하려고 했죠.

    0
  • 욥욥욥
    905
    2016-03-24 13:47:13

    위에 나온 내용 외에 파일명 인코딩, 길이 등 자잘하게 신경써야할게 많아지실거에요

    파일 구조가 공통이기 때문에 통합 관리하고 해당 파일 ID 를 참조하시는걸 추천합니다.

    랜덤 값은 UUID 를 알아보시기 바랍니다.

    UUID 위키

    1
  • jstark.org
    188
    2016-03-25 00:51:48

    중복방지와 보안의 이유가 가장 큰것 같습니다.

    파일명을 랜덤으로 하고 확장자 제거하고 리눅스나 유닉스의 경우 첨부파일 등록 후 실행 권한을 제거하는것까지 추가하면 더 좋을것 같아요.

    그리고 나중에 해당 파일을 다운로드하거나 읽기 위해선 그 파일의 원래 정보를 알아야하기 때문에 DB에 따로 저장을 합니다.

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.