오랜만에 하소연 글 남겨봅니다 :)

 

기존에 문서 뷰어 애드온이라는 걸 배포한 적이 있는데요.

이 기능들 중 pdf, doc(x), ppt(x), xls(x) 뷰어를 링크 프리뷰 모듈에 포함시키려고 하고 있습니다.

다만 기존의 구글 웹뷰어가 너무 느리고 종종 로드에 실패하는 경우가 있어서 다른 자원들을 활용하고자 하는데요.

그 중에서 (pdf는 다른 라이브러리로 따로 렌더링하고) ms오피스 문서양식들은 MS에서 공식 지원하는 https://view.officeapps.live.com/op/embed.aspx?src=FILE_PATH를 통해 iframe 임베드를 하려고 합니다.

한 마디로 말해 파일을 본문 삽입시에 바로 임베드하는 방식인 거죠.

 

다만, 이게 살짝 이슈가 있더라구요.

파일의 실제 위치를 가리키는 uploaded_filename은 확장자가 없는 형태라서 해당 주소에서는 임베드를 거부하는 거죠.

그래서 결국에는 download_url로 임베드를 해야 하는데요.

문제는 document_srl이 없는 상태, 즉 새 글 작성 상태에서 파일 오류를 뿜는다는 거예요.

그래서 아예 포기를 할까 했는데, 신기한 건 문서를 등록하고 나면 (즉 document_srl이 있으면) 이게 이상하게 제대로 임베드가 되는 겁니다?!

이게 뭔가 싶어 계속 확인을 해봤는데도 정말 그렇더라구요.

실제로 글 등록 후 수정시에도 에디터 안에 임베드가 잘 되는 걸 확인했습니다.

 

근데, 가만 생각해보니 이게 document_srl 문제가 아닌 것 같더라구요.

왜 그.. 새 글 등록할 때 파일을 첨부하면 나중에 document_srl이 되는 upload_target_srl이 자동으로 만들어지잖아요?

그니까 document_srl이 없는 것 같지만 사실은 있는 것이죠.

그래서 생각을 해본 게 파일이 '대기' 상태면, 즉 isvalid 값이 'N'이어서 이 문제가 발생하는 게 아닐까 하는 결론에 도달했습니다.

실제로 파일을 첨부하고 문서 자체는 등록하지 않은 상태에서 db를 통해 isvalid 값을 'Y'('유효' 상태)로 바꿔주면 해당 파일이 문서 미등록 상태에서도 잘 임베드가 되더라구요.

그래서 현재 저는 php를 통해 파일의 download_url을 가져오기 전에 

FileController::getInstance()->setFilesValid($file_info->upload_target_srl, 'doc', $file_info->file_srl);

라고 해줘서 isvalid 값을 자동으로 'Y'로 바꾸게 했습니다.

이제 임베드 자체에 큰 문제가 없게 됐구요.

 

그런데...

또 가만히 생각해보니 이렇게 되면 해당 파일이 '대기'가 아니라 바로 '유효' 상태가 되는 거여서, 유저가 글을 등록하지 않고 페이지를 나가거나 하면 문서 대상도 없는 주제에 '유효'한 파일로 db에 기록이 남더라구요.

그럼 나중에 파일 관리에 문제가 생길 게 뻔하죠.

하....

그래서 문서 등록 이외의 방식으로 페이지를 나가면 isvalid 값을 다시 'N'으로 바꿔볼까 했는데, 그건 js 이벤트도 잘 잡아야 하고 별도로 쿼리도 만들어야 하는 등 작업량이 많아져서 좀 까마득해지더군요.

 

사실 이 과정에 오기까지 벌써 며칠이 지난 것 같은데요.

시국도 시국인지라 집중력이 떨어지기도 해서 이 난국을 어떻게 돌파해야 할지 먹먹하네요.

링크 프리뷰 모듈 캐싱 처리니 뭐니 해서 갈 길이 먼데 말이죠ㅜㅜ

윤삼

profile
아무래도 중급 초반 수준의 코딩 오타쿠인 것 같습니다.
  • Lv9
    파일내용을 출력하는 컨트롤러 하나를 만들고, 그걸 임베딩 URL로 사용하면 안되는걸까요?

    ex) /embed/file/$file_srl.$ext 접속 -> embedFileController::printFile($file_srl) 실행 -> 파일 내용 fread 후 print

    코어가 일반적인 케이스에서 막강한 기능을 제공하지만, 조금 예외케이스를 건들면 코어가 걸림돌이 되는지라..
    저같으면 모듈에 파일 내용을 읽어서 출력하는 페이지를 하나 만들어서 그거로 임베딩을 시도해볼 것 같아요
  • Lv9 Lv19
    오, 제 능력으로 될지 모르겠지만 고민 좀 해보겠습니다. 가급적이면 손이 덜 가면 좋겠어요;;;
  • Lv9
    여전히 보이지 않는 곳에서 라이믹스를 위해 시간을 태우고 계시는군요!
    수고에 늘 감사합니다!
  • Lv9 Lv19
    아참, 예전에 말씀하시지 않았나요? pages 파일.
    암튼 그것도 알아봤는데 여전히 관련된 라이브러리 같은 건 없더라구요.
    구글 드라이브에 올려놓은 뒤 거기서 iframe으로 가져오는 방법이 있긴 한데 손이 무지하게 많이 가는 작업ㅜ
  • Lv19 Lv9
    우왕,.. 대체 윤삼님은 어떤 세월을 살아오셨길래,...
    저 같은 사람의 이야기를 아직도 기억하고 계신 것인가요.....
    참,.... 고개가 숙여지네요 ( - - ) ( _ _ )

    쓰는 사람이 극?소수인데,.. 거기에 소중한 시간과 노력을 투입하셔야겠습니까 ㅎ
    다른 곳에 많이 쓰이는 곳에 투자해주세요 ㅎㅎㅎ ^^
  • Lv9 Lv19
    마음의 짐 같아서요ㅋㅋㅋㅋ
    나중에 도전 과제 중 하나예요.
    이러다가는 제가 먼저 죽을 것 같지만요ㅋㅋㅋㅋㅋ
  • Lv19 ? Lv8
    도파민이 지켜줄겁니다. ^^ 농담이구요..쉬엄쉬엄 하세요..
  • ? Lv8 Lv19
    그럼요. 쉬엄쉬엄해야죠. 요즘은 조금만 있어도 눈이 풀려서 오래 하지도 못해요 ㅡㅜ
  • Lv19 Lv9
    아이고야, ㅎㅎ 저의 하소연이 마음의 짐이 되어버렸네요 ㅋㅋㅋㅋㅋ
    요즘은 페이지스 잘 안쓰니 ㅋㅋㅋ 마음의 짐 폐기해주세요 ㅋㅋㅋㅋ
  • Lv4
    윤삼님 늘 수고 많으십니다.
    요즘 머리는 이것도 해야되고 저것도 해야되고 복잡한데,
    마음은 그냥 허망해서 손에 일이 잘 잡히지 않네요ㅠㅠㅠ
    해서 이참에 좀 한숨 돌리려고 합니다...
  • Lv4 Lv19
    연말이기도 하니까요.
    저는 어디서 쇼크를 먹었었는지ㅎㅎ 오한이 와서 몇 일 힘들기도 했어요.
    몸부터 아끼자구요!
  • Lv7
    uploaded_filename을 바로 노출시키면 권한이나 포인트 관련 처리를 무시하고 접근할 수 있는 문제가 발생할 여지가 있을 듯 싶네요.

    제일 간단하고 손이 덜 가지만, 원하지 않으실수도 있는 해결법은 작성 시점에는 iframe의 placeholder만 노출시키고, 조회 시점에만 보여주는 방향이 아닐까 싶습니다ㅋㅋ
  • Lv7 Lv19
    어으으, 제일 원하지 않는 해결법인데요ㅋㅋㅋㅋ
    안 그래도 uploaded_filename 대신 download_url로 임베드하려고 하기는 하는데 이것도 파일 다운로드 카운트가 자꾸 올라가서 신경이 쓰이더라구요.
    다행히 ms쪽에서 파일 캐시를 하는 것인지, 아니면 중복 다운로드는 카운트가 안 되는 것인지 무한히 증가하지는 않지만요.
  • Lv19 Lv37
    위에서 다른 분이 제안해 주신 것처럼, 일반적인 파일 다운로드 경로를 거치지 않고 파일을 MS에 뿌려주는 용도로 주소를 하나 따로 뽑는다면 모두 해결할 수 있을 것 같습니다.

    일반 다운로드 경로를 사용하실 경우, 다운로드시 포인트 차감 설정이 되어 있는 사이트라면 굉장히 난감한 상황이 일어날 수 있거든요.

    작성 시점에 억지로 iframe을 넣더라도 수정하려고 하면 CK에디터에서 빨간색 X자가 그려진 박스로 대체해 버립니다. 에디터 안에서 눈에 보이는 모양을 완벽하게 맞추는 것은 어차피 불가능하고, 코어에서도 그런 거 신경 안 쓰고 언제라도 바꿔버릴 수 있으니, 기능이 안정적으로 작동하도록 하는 데 초점을 맞춰 보세요.^^
  • Lv37 Lv19
    앗, 눈웃음에 배어 있는 압박감ㄷㄷㄷ
    노력해보겠습니다;;;