대용량 파일을 DB에 저장해서 관리하면 어떨까요?

정지혁   
   조회 13320   추천 0    

하드웨어보다 소프트웨어쪽 질문이긴한데요. 많은 조언 부탁드립니다.

 

웹하드 회사의경우.. 파일이 아주 많을텐데요.

 

파일정보 내용은 특정 테이블에 저장되어 있을테고요.

 

아래답변중 파일관리에관해 퍼포먼스와 보안에 좋다고 생각하는 시스템순서를 알려주세요.

 

A. 암호화된 사용자 폴더명에 파일명을 암호화해서 저장
B. 암호화된 사용자 폴더명에 파일명을 암호화해서 분할압축 저장 (ex. 1기가짜리 파일일경우 100Mb씩 분할압축)
C. DB에 특정테이블에 파일이름을 암호화하여 바이너리로 저장
D. DB에 특정테이블에 파일이름을 암호화하여 분할압축하여 바이너리로 저장 (ex. 1기가짜리 파일일경우 100Mb씩 분할압축)

 

제 생각엔 A나 B와 같이 구성하면 해커에의해 파일경로가 노출될것 같습니다.
B와 D를 생각하는이유는 PHP특징상 2기가이상 대용량파일이 업로드 되지않기때문에 프로그램내부에서 어차피 분할해서 올리기때문에 생각한것입니다.
C와 D의경우 어디서듣기론 DB서버에 부하를 많이준다고하는데 다른DB서버와 별도로 파일전용DB서버를 구축하면 A와 B와 동일한 퍼포먼스를 줄것같은데 맞나요?

 

제 개인적인 생각엔 A=B=C=D 라고생각하는데 가능하다면 D와같은 구성을 하고싶습니다. 실제로 웹하드서비스 회사는 어떤씩으로 파일관리를하고 있나요?
많은 조언부탁 드리겠습니다.

짧은글 일수록 신중하게.
채영진 2011-02
웹하드서비스하고 있던거 아니셨나요?

POST로 2GB를 밀어본적이 없어서 모르겠지만
아래의 URL을 참고하셔서 테스트해보셔도 될 것 같습니다.
http://blog.naver.com/PostView.nhn?blogId=woodair&logNo=100090608241&redirect=Dlog&widgetTypeCall=true
조영민 2011-02
파일로 저장하는게 정석입니다.
김상진 2011-02
PHP가 2기가 이상 미지원이라면...B방법 추천합니다.

단, C, D방법은 절대로 비추합니다.!!!
이유...웹하드의 모든 파일을 가진 DB를 C,D방법으로 하면...DB백업이 상당히 힘들겁니다.
그리고, A,B 방법이 해커에게 취약하다는게....URL로 직접 접속하게 하시는건가요? 그게 아니라면
이미 OS가 뚫렸는데..무슨 의미가 있을까요?

저런 바이너리 파일은 그냥 파일시스템으로 밀어넣는게 현재로써는 가장 편합니다.
또다른 이유는 파일 입출력이 DB를 통해서 이루어지기때문에 속도가 극단적으로 느려집니다.
현존하는 RDBMS(MYSQL도 포함)은 TEXT문자 위주로 설계 된녀석이어서 나타나는 문제이며, 바이너리는...그냥 지원한다는거지 그걸 맹신해서 쓰는건 비추합니다.

예전 모 공공쪽에서 말씀하신데로 DB에(오라클)에 파일을 넣어서 관리하던 전자결재 시스템이 있었는데...
속도도 문제였고 백업도 상당히 머리아펐습니다.
하물려 웹하드는 전자결재보다 훨씬 파일이 크고 많을텐데...과연 DB가 버틸까요?
혹시 파일서버용 DBMS가 있다면 몰라도...아니라면 추천하지않습니다.

웹하드라면....실제 파일을 주고받을때는 전용 소켓프로그램을 쓸텐데...그럼 보안에 큰문제가 없지않나요?
다만, 소켓 프로그램 안에...사용자 정보나 뭐 이런거 넣어놔서...파일을 요청할때 서버쪽에서 파일을 보낼때 권한등을 확인하는 절차는 있어야겠죠
실제 소켓으로 데이터 보낼때...경로나 파일정보가 아닌...파일 메타정보만 요청하고...서버쪽 소켓 프로그램에서 이걸 가지고 DB에 접속해서 파일의 상세정보를 가져와서 조합하는 관계로 우려한 해킹에서도 자유로울수 있는거죠

A,B방법의 또다른 장점은...메타정보만 DB에 있고 파일서버를 여러대로 분리해서 네트워크 트래픽 분산도 되겠죠
유영근 2011-02
웹하드용도라면... 디비에는 유저정보와 파일정보만 들어 가고, 파일은 파일서버에 따로 저장하는걸로 알고 있습니다.(웹서버, 파일서버, 디비서버, 과금서버(?))
파일경로 노출이라는건 http로 노출인지요? http가 아니라 다른방법으로 뚫리게 되면 서버가 해킹당한거 아닌가요?
2기가이상 업로드가 불가능하다는건 액티브엑스나 외부프로그램 도움없이 php로 업로드나 다운로드를 할것인가요?
파일업로드 할때 파일명을 변경하고, 디비에 이전파일명과 변경된파일명을 넣어주는것도 좋은 방법입니다.
저는 A방식을 추천드립니다!
A와 B입니다.

웹 다운로드의 경우 다운로드 페이지를 통한 스트리밍 다운로드를 하기때문에 파일 경로가 노출될 일은 없습니다.

DB에 바이너리 데이터를 넣는 경우는 "단순 저장"이 아닌 바이너리 관런 쿼리를 통한 "데이터 추출"이 필요할 때 사용합니다.

사용자 폴더명이나 파일명도 "암호화"를 하지는 않습니다.
같은 이름 중복으로 인한 파일의 손실을 피하기 위해 "교체"를 하는 것입니다.
원본 파일 이름은 따로 DB에 저장하여 사용합니다.
정지혁 2011-02
답변 감사합니다.
많은 도움 되었습니다.


QnA
제목Page 3927/5731
2014-05   5267562   정은준1
2015-12   1792543   백메가
2014-03   3710   정재호02
2016-08   5048   김건우
2024-07   1862   덴티한
2024-07   1914   국이
2014-03   4951   방o효o문
2018-11   4996   이규민
2024-08   1613   행복하세
2015-07   4087   전설속의미…
2012-02   6963   김건우
2015-07   6199   한효석
2012-02   6831   스카이
2014-03   4409   인초리
2022-12   1842   김준유
2024-08   2202   강프로
2016-08   4193   난다곰
2017-08   3305   김건우
2015-08   5451   전설속의미…
2023-01   2817   2CPU최주희
2014-03   6185   s김종화z
2021-05   3225   NaHS