CMS/프레임워크 | XE 1.x |
---|---|
개발 언어 | PHP 7.2 |
안녕하십니까. 좋은아빠되기입니다.
우여곡절 끝에...
이미지 캐시 서버를 구축하기로 마음을 거의 정했습니다.
물론 제가 할껀 아니구요. ㅎㅎㅎ
https://blog.lael.be/post/7605
위 글을 보면서 공부를 좀 하고 있습니다.
근데 한가지 궁금한것이
이미지 캐시 서버를
img.도메인.com으로 만들어 놓고 운영한다 치면요
원본 이미지는 도메인.com에 있잖아요.
이때 도메인.com의 원본을 수정하면
실시간으로...
img.도메인.com의 파일도 변경이 가능한가요?
라엘님 글을 보고 있는데 그런 기능에 대한 언급이 없네요..
실시간 변경이 가능하면 전문가분께 의뢰해 보고 싶네요.
일단 되는건지 알아야 해달라고 요청드릴수 있어서요.
조언 부탁 드립니다.
댓글 71
혹시나 하여 다시 여쭙자면
원본도메인.com/cbt/data/코드/코드날짜번호.gif?$time로 원본으로 주소로 접근해도 문제는 없는거죠?
앞서 말씀 하신것처럼 Nginx에서는 ?뒤는 무시하니깐...
지금 이미지 캐시 서버가 없는 상황에서도 위방식을 사용해도 아무런 문제가 없다는 거네요?
은 유지해서 업로드하고 규칙을 유지하는 거구요. 규칙이 필요한경우 아렇게 하잖아여. 회원번호의 이미지라는 것을 특정하기위해서 XE에서도 그렇게 했죠.
그런데 방문자들에게 똑같이 바뀐 새로운 파일 적용이 안되는 구조적 문제를 가지고 있던거고.
php이니 파일의 마지막수정시간은 쉽게 불러올 수 있으니 파일명규칙?수정시간 으로 해서 해결이 되는 겁니다.
이게 안되는 이유를 또 설명해 주셔야 갈어지지 않을 겁니다.
파일면 뒤에다가 적는 $mtime라는 정보는 파일명과는 무관하다네요.
저는 $mtime 정보가 파일명 뒤에 붙어서... 파일명으로 인식되는줄 알았습니다.
무지를 크게 드러네네요. ㅎㅎㅎ
조언 감사합니다.
처음부터 계속 이야기드린게 결국 이겁니다. 캐시갱신 불능상황을 만드신 것을 정상적인 상황으로 바꾸어 보시라고 그렇게 하면 어떠한 캐시서버, 바꾸지않으려는 강력한캐시유지시간을 설정한 브라우저에도 갱신을 시킬 수 있잖아요. 파일명이 바뀐것으로 판단해주겠다는 거죠. 이게 지금 필요하신 규칙이 유지되어야 하는 파일명에 흔하게 쓰는 방법입니다.
원하시는 캐시서버 운영도 불편없이 가능하구요.
결국 오래 걸리긴 했어도 소통이 되었습니다!
기진곰님과 웹지기님의 끈질긴 노력덕분에
겨우 이해 했습니다.
어제 밤늦게 오늘 아침 일찍부터
고견 주시고 이해 시켜 주셔서 감사합니다. ㅎㅎㅎ
가까이 계시면 술한잔 사드리고 싶네요. ㅎㅎㅎ
학생 봐가면서..
좀 쉽게 설명해주셨어야죠 ㅋㅋㅋ
그래도 돌아 돌아 왔지만 확실하게 좋은거 신기방기한거 하나 배웠습니다.
감사합니다.
제가 질문에서 많은걸 빼먹어서 그런지
우선 제 잘못부터 시인을 하고 사과 드리면서 글 적어 보겠습니다.
일단 이건...
XE용으로 이미지 캐시 서버를 구축하고자 하는건 아닙니다.
제가 날코딩한 프로그램용으로 구축하고자 합니다.
제가 날 코딩한 프로그램 자체에는 이미지 첨부 기능 자체가 없습니다.
그럼 이미지를 어떻게 사용하느냐....
이미지를 ftp로 특정 디렉토리에 업로드하고
그 디렉토리 경로만 DB에 저정해둡니다. 이때... 서버명은 생략되죠
DB에 저장된 일부 내용을 발췌 하자면
./cbt/data/코드명/코드명날짜번호.gif
이렇게 글자 형태로 상대주소 개념으로 이미지 경로만 저장해 둡니다.
실제로 화면에 이미지를 보여줄때는
제가 날코딩한 프로그램에서 DB에서 위 경로 저장된 데이터를 가져와서
<img src="www.도메인.com/cbt/data/코드명/코드명날짜번호.gif"> 이런 태그를 만들어서 화면에 뿌립니다.
한가지 특이한점이...
이 www.도메인.com을...
img.도메인.com으로 변경을 DB를 조작하는 아니고
날코딩 프로그램의 특정 함수를 이용해서 저 도메인들을 바꿔치기 할수 있게 구성해 놨습니다.
따라서 저는..
자체적으로 이미지 캐서 서버를 여러개 두면 제 특정 함수를 이용해서 이미지 캐시 서버를 라운드 로빈도 시킬수 있는 상태입니다.. 이정도면 제 프로그램의 특징은 이해 하셨으리라 생각합니다.
그럼 이제.. 제가 뭘 잘못 생각하고 있는지 짚어서주시면...
다시 한번 글을 신중하게 읽어보고 다시 여쭙겠습니다.
조언 부탁 드립니다.
제가 원하는건....
이미 파일 받아가서 브라우저 캐시된것은 논외로 하고...(파일명 규칙성 때문에....파일명 변경을 포기라서요.)
새로 방문하는 사용자들에게 바뀐게 바로 적용되서 보이게 하고 싶다는 뜻이었습니다.
댓글 어딘가에 제가 그런 의도를 남겼는데.. 댓글이 하도 많아서 놓치신듯 합니다. ㅎㅎ
파일명도 꼼수를 부리면 gif를 png로만 바꾸어도 다른 파일로 인식되는깐 급할때 브라우저 캐시 무력화를 위해서 사용하기도 합니다. 모든 설명을 다 드려야 하는데. 지면관계상 말씀 안드린게 혼란을 가중하네요..
확장자가 바뀌던 뭐가 바꾸면 어차피 캐시서버도 새로 캐시합니다. 브라우저와 똑같아요.
새로 방문한 사람은 어차피 보여지는 대로 보이는게ㅜ너무 당연한거 아닌가요?
파일을 업로드할때
.gif?날짜시간
타임스탬프를 붙이는 규칙으로 변경을 고려해 보세요. 브라우저,캐시서버 등에 전혀 문제가 없이 정상적인 상황로 되는거니까요.
저는 라엘님 방식이 아니라 이상적인 방식을 말씀드린 겁니다. ㅎㅎ 혼란을 드렸다면 죄송합니다.
캐시서버 운영에 PHP가 관여하면 서버 세팅은 물론 성능이나 보안 면에서도 신경써야 할 것이 한두 가지가 아닙니다. 작은 사이트라면 상관없겠지만, 테라 단위의 트래픽이 오가는 사이트라면 무척 불안해요. 라엘님 소스는 원리를 익히는 데는 도움이 되지만, 실수나 고의로 서버를 불안정하게 만들거나 해킹에 악용될 우려가 있기 때문에 저는 사용을 고려하지 않고 있습니다. 특히 디렉토리 구조가 캐시서버 쪽에 그대로 재현된다면 directory traversal 공격에 매우 취약해집니다. (img.도메인.com/../../../etc/passwd를 요청한다면 어떻게 될까요? ㅋㅋㅋ)
원본 서버에 www.좋은아빠.com/dir1/dir2/.../test.png 이미지가 존재할 때
www.좋은아빠.com 부분을 img.좋은아빠.com으로 수정만 해주면
이미지 서버는 자기가 알아서 자신의 하드디스크에 /dir1/dir2/.../디렉터리를 생성 후에 그곳에 원본서버의 test.png를 복사해와서 저장합니다.
무지함의 극치를 보여 드리네요..
Just do it!
그점 양해 부탁 드립니다.
그래도 많은 분들께서 적극적으로 도움 주셔서 많은 고민이 해결되었습니다.
감사합니다.