요즘 클라우드 플레어 비즈니스 플랜이 아닌 이상은 전부 CDG 나 LAX 등으로 연결되는듯 하더라구요

트래픽 절감을 위해 클라우드 플레어는 써야겠는데 속도는 느려서 환장할것 같고...

해결책을 찾다가 용량이 비교적 큰 첨부 이미지 파일만 클라우드플레어를 거쳐오고

HTML/JS/CSS 등은 클라우드 플레어를 안거쳐오게 처리하면 어떨까 하는 생각이 들었습니다.

 

 

원래 계획은... 본 사이트는 클라우드 플레어 경유를 풀어버리고

첨부파일만 외부 별도의 서버로 내보내고

외부 저장용 서버만 클라우드 플레어 적용을 해서 사용하려고 했는데...

이 애드온이 방치된지 오래된 탓인지...

작동을 안해서 다른 방법으로 비슷한 기능을 구현해봤습니다.

 

 

장점 :

1. 이미지 첨부파일만 클라우드 플레어 CDN을 경유하기 때문에 사이트 전체의 속도는 클라우드 플레어를 적용안한 상태로 빠르게 유지하면서 트래픽 절감을 기대할수 있다.

(본 사이트에는 클플이 안걸려있고, 첨부 이미지에만 클플이 걸려있으니 사이트는 빠르게 뜨고, 이미지 뜨는 속도만 조금 느려집니다.)

2. 서브도메인을 활용하므로 도메인을 하나 더 사야될 필요가 없다.

 

단점 : 이 방법으로 적용할경우 야매.. 스러운 방법이라 어떤 예상치 못한 문제가 발생될지 알수 없음..

아직까지는 별 문제가 발생하지는 않았습니다.

 

원리 : 첨부파일 (이미지) 등록시 본문에 삽입되는 이미지주소가 기존에는 http://도메인/files/attach/~ 형식인데

이것을 http://image.도메인/files/attach/~ 형식으로 변환하여 글등록을 해주므로 사람들이 글을 읽거나 할때에

첨부 이미지는 도메인.com (클플 미적용)이 아닌 image.도메인.com (클플 적용)을 통하여 출력된다.

 

적용법 :

1. 클라우드 플레어 에서 서브도메인을 추가한다. 이름은 자유롭게 (ex : image 등)

2. 해당 서브도메인을 사용할수 있도록 서버 혹은 호스팅에서 세팅 (서브도메인 추가)

3. /common/js/plugins/jquery.fileupload/js/ 의 main.js & main_min.js 파일을 열어서 104~108번 째을

f(result.error == 0) {
if(/\.(jpe?g|png|gif)$/i.test(result.source_filename)) {
temp_code += '<img src="' + result.download_url + '" alt="' + result.source_filename + '" editor_component="image_link" data-file-srl="' + result.file_srl + '" />';
temp_code += "\r\n<p><br></p>\r\n";
}


 

아래와 같이 변경해준다.

f(result.error == 0) {
if(/\.(jpe?g|png|gif)$/i.test(result.source_filename)) {
temp_code += '<img src="//image.도메인.com' + result.download_url + '" alt="' + result.source_filename + '" editor_component="image_link" data-file-srl="' + result.file_srl + '" />';
temp_code += "\r\n<p><br></p>\r\n";
}

 

위의 과정을 거치게 되면 이후 등록되는 게시글의 첨부이미지 경로는 모두 http://image.도메인.com 으로 시작하게 됩니다.

 

만약 새로등록하는 게시글이 아닌 이전의 글들까지도 클플을 거치게 하려면

sql 명령어로 document 의 이미지경로를 모두 위에서 만든 클플용 경로로 변경해주면 되겠습니다.

 

 

  • Lv30
    // image. 으로 하는게 ssl 사용 미사용 모두 문제 없지 않을 까요? 애드온으로 나오면 수정없이 필요한 분들이 사용하기 쉽겠습니다. 트래픽 문제가 발생된다면 좋은 해결법이 될거 같네요.
  • Lv30

    그렇네요... 저의 경우에는 SSL 사용중이라 https:// 으로 설정해두었는데..
    생각해보니 레이아웃에서 js등은 // 으로 불러왔으면서... 왜 저거 수정할때는 절대경로로 해두었을까요... ㅋㅋㅋ

    본문에 경로 // 으로 수정하였습니다!

  • Lv12
    좋은 아이디어 같습니다.
  • ? Lv6
    좋은 아이디어 이십니다.
  • ?
    완전 좋네요!!!
  • ? Lv7
    sql 명령어로 어떻게하는건가요..!?
  • ? Lv7
    UPDATE xe_documents SET content=REPLACE(content, "도메인주소", "image.도메인주소")

    같은 형식으로 게시글 내용을 일괄적으로 변경해주시면 됩니다.

    phpmyadmin 접속후 xe_documents 테이블에서 SQL을 적용하시면 됩니다.


    위의 쿼리문을 작성후 테스트는 안해보았습니다.
    혹시 모르는 사고를 방지하기 위하여 디비백업후 혹은 테스트환경에서 테스트 해본후 적용하세요!
  • ? Lv7
    으어.. 한번도 해본도 본적도 없는거라 이거 예시라도있나요?
  • ? Lv7

    아래 페이지의 경우 mysql (maria db) 을 사용중이라면 기본적으로 설치되어 있을 겁니다.

    만약 주소를 모르시겠다면 호스팅 회사 관리자에게 물어보거나 호스팅 사이트 로그인후 DB관련된 메뉴가 있을겁니다.

    본인 서버이거나 서버 관리자가 따로 있는경우에는... 잘 알고 계실거구요

     

    GGGG.png

     

    1번 과정은 안하셔도 되나... 테이블 구조 파악 및 내용확인을 위해 해보시길 권장합니다.

     

    명령어는 예를들어 

    UPDATE xe_documents SET content=REPLACE(content, "http://test.com", "http://image.test.com")

     

    을 적용하신다면 전체 게시글의 내용중에 http://test.com 이 있다면 모두 http://image.test.com 으로 치환 합니다.

     

     

    구글에 mysql 쿼리 라고 치시면 자세히 나올겁니다.

     

     

  • ? Lv7
    오.. 제대로 바꼈습니다, 감사합니다.

    그런데 새로 올린 게시글의 이미지 주소는

    http://도메인.net//image.도메인.net/files/attach/images/244/895/447/d657b5d8d634680da86b82127fca66e8.jpg

    이런식인데 전에있던 바꾼 게시글의 이미지 주소는

    http://image.도메인.net/files/attach/images/244/885/001/d833cfaba823758682bd710bbad8c14d.png

    이런식이네요..

    둘다 작동은 하지만 보기는 별로네여.. ㅋㅋ
    그래도 감사합니다, 좋은팁이에요!
  • ? Lv7
    아.. 이미 팁을 적용하시고 글등록을 하신 시점이셨군요 ㅠㅠ...
    위의 명령어(쿼리문)에 WHERE 이라는 조건절을 붙이면 특정시간 이전에 작성한 게시글에만
    적용되는등의 방법 또한 가능합니다.

    지금 상태에서 쿼리문으로 마구 바꾸다간... 디비안의 데이터가 꼬일수도 있으니...
    새로 등록된 게시글이 몇개 안되고 정상작동한다면 그냥 쓰는는 수 밖에... 없어보이네요
  • ? Lv7
    아울러 팁이 잘 적용되었는지 확인하는 방법입니다.

    http://도메인.com/cdn-cgi/trace 로 접속해서 웹 페이지를 찾을수 없다고 나오면 클플 미적용
    http://image.도메인.com/cdn-cgi/trace 로 접속해서 클플 관련정보가 나온다면 클플이 적용되어 있는 상태입니다.
  • ? Lv7
    ...!?

    http://도메인.net//image.도메인.net/files/attach/images/244/895/447/d657b5d8d634680da86b82127fca66e8.jpg

    이렇게 뜨는건 정상적인거맞죠..?

    그럼 상관없어요! 이전 게시글도
    http://image.도메인.net/files/attach/images/244/885/001/d833cfaba823758682bd710bbad8c14d.png

    이렇게 뜨고 클플로 로딩되는거..? 같으니까요! 헤헤
  • ? Lv7

    http://도메인.net//image.도메인.net/cdn-cgi/trace

    헤헤 안된거같기도..헤헤..ㅠ

  • ? Lv7
    음...

    도메인.net가 빠지고 //image.도메인.net가 들어가야하는데..

    도메인.net//image.도메인.net로 되버리니 후..
  • ? Lv7

    팁 적용후에 몇개의 게시글이 팁이 적용된 상태로 작성되었고

    쿼리문 이용시에 위의 경우에 대한 처리를 안해주었기 때문에...

    팁 적용직후 부터 쿼리문 명령어 사용 직전 까지 등록된 게시글의 경우 주소가 이상하게 된겁니다 ㅠㅠ

     

    현재 상황으로 볼때

    [팁 적용 이전에 작성한 게시글]
    http://image.도메인.net/files/attach/images/이하주소

    [팁 적용 이후 쿼리문 작업 직전 까지 작성한 게시글]
    http://도메인.net//image.도메인.net/files/attach/images/이하주소

    [팁 적용 이후 쿼리문 작성까지 모두 완료된 지금 작성하는 게시글]
    http://image.도메인.net/files/attach/images/이하주소

    이렇게 된다면 정상입니다.

  • ? Lv7
    // 가아니라

    http:// 로 해야 정상적으로 되네요
    이렇게되면 ssl 사용시 자동으로 안바뀌는점이 있다만..어쩔수있나요.. 헤헤..
  • ? Lv7
    UPDATE xe_documents SET content=REPLACE(content, "http://도메인.net//image.도메인.net", "http://image.도메인.com")

    이와 같이 한번 더 쿼리문 작업하시면 모든 게시글의 이미지 주소가
    http://image.도메인.com 으로 시작하게 될겁니다.
  • ? Lv7
    사이트에 전체 SSL사용시 https:// 으로 적용해주셔야 됩니다.

    만약 전체 SSL을 사용중인데 이미지 경로만 http 일경우 보안경고 나타납니다.

    클라우드 플레어에 SSL기능 있습니다.

    image 서브도메인에 한해서만 클라우드 플레어 주황색 구름 켜시고

    SSL탭에서 FIXABLE 설정하시면 image.도메인 에 대해서만 클플적용+클플 보안서버 기능
    활성화 됩니다.
  • ? Lv7
    만약 전체 SSL 사용중이라면 쿼리문 다시 날려줘야 됩니다.

    위에 작성해드린 예시 쿼리문은 HTTP 기준입니다.

    HTTPS 사이트에 적용시 보안에러 나타납니다.


    라그릿님 사이트주소를 모르니... 확인이 불가능하네요

    혹시 막히는점 있으면 카톡 frenda 로 톡하나 보내주세요 ㅡ,ㅡ 도와드릴게요
  • ? Lv7

    헤헤 아니에요

    http 사이트라서 http로 다 적용하고 알려주신 팁대로

    /files/attach/images/    >>> http://image.도메인.nethttp://도메인.net/files/attach/images/ 으로 바꿔주고


    main.js 부분도 <img src="//image.도메인.net' 이렇게 적어버리면
    도메인.net//image.도메인.net 로 출력되기에

    <img src="http://image.도메인.net'
    으로 바꿔서 새로 등록하는 게시글도 정상적인 주소인
    image.도메인.net로 출력되었습니다

    제가 몰랐던 sql명령방법을 알려주셔서 감사합니다, 오늘도 여러가지 배우고가며 좋은팁 알아갑니다.

    다른사람들도 이 댓글보고 해결하길 바래요! ㅎㅎ

  • ? Lv7
    생각해보니 이거 썸네일도 이용가능하겠네요.. ㅎㅎ
  • ? Lv9
    질문합니다

    main.js & main_min.js 이거 둘다 수정하라고 하시는말씀인가요?


    main.js 파일은 수정하는게 있는데

    main_min.js 파일은 불러오면 좀 지져분하게 불러와져서 찾기가 힘드네요

    여기에도 있나요?
  • ? Lv9
    min.js 파일은 main.js 와 동일한 내용이지만 줄바꿈 및 띄어쓰기 등이 모두 삭제되어 있는 파일입니다. (용량 줄이기위해)

    컨트롤 F (찾기) 기능을 이용해서 찾아보시거나, 혹 어렵다면 main_min.js 파일은 그냥 이름을 바꾸거나 삭제해버리면 main.js 를 불러올겁니다.
  • ? Lv9
    이파일이 이미지 자동삽입이랑 연관된 파일 같은데 삭제해버려도 괜찮곘죠?
  • ? Lv9
    클라우드 플레어는 DNS에서 www & 도메인 은 구름을 끄고 image 서브도메인만 켜두면 되겠죠?
  • ? Lv9 ?
    네 그렇게 하니 이상없이 동작하더군요
  • ?

    대략 50% 이상 대역폭 절감효과가 있네요. 단점은 한국 cdn 으로 잡히지 않으니 느립니다.
    프로로 결제했는데, 글로벌 cdn(한국포함)을 원하면 엔터프라이즈로 결제하라고 합니다. 

    한달에 백만원이상 달라고 할까봐 겁나서 못물어 봤습니다.