달력

112021  이전 다음

  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  
  •  
  •  
  •  

'Time'에 해당되는 글 2건

  1. 2013.12.28 time server
  2. 2008.01.09 임시 파일 삭제시 주의할 점. (9)

time server

2013. 12. 28. 12:44

#time sync

0 2 * * * /usr/sbin/ntpdate -s time.bora.net


Posted by 케누 kenu허광남
TAG Time

댓글을 달아 주세요

웹에 이미지 파일 업로드를 하고 썸네일을 만든 후 원본 파일을 지우는 코드입니다.
        // 임시디렉토리에 파일 저장
        File file = saveToTemp(request);
        // 파일 리사이징
        Thumbnailer tt = new Thumbnailer(file.getPath(),
                getServletContext().getRealPath(request.getContextPath())
                + "/profile/"+ id + ".jpg",
                77, 77);
        tt.createThumbnail();
        boolean delete = file.delete();

작업을 하는 중에 이미지가 삭제되지 않는 현상이 간헐적으로 나타났습니다. 디버깅하기 가장 힘든 상황이죠. 됐다 안됐다 하는 경우 원인이 무엇인지 밝혀내기 어려우니까요.
이상한 일은 디버깅 모드로 작업시에는 전혀 그런 현상이 일어나지 않았습니다.
탐색기에서 삭제하려고 해도 파일을 톰캣이 잡고 있는지 삭제가 안 되었습니다.
톰캣을 내리고 삭제를 해야 지워졌습니다.

boolean으로 반환되는 delete를 출력해보면 false인 경우가 그러했습니다. 지우지 못했으니까 false가 나오겠죠.
결과적으로 썸네일을 만들고 file이 완전히 덜 풀린 상태에서 delete() 시도를 하기 때문이 아닌가 추론해볼 수 있었습니다. 때문에 다음과 같은 시간지연코드를 삽입해서 풀었습니다.

        tt.createThumbnail();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e1) {
        }
        boolean delete = file.delete();

결과는 성공적이었습니다.

Posted by 케누 kenu허광남

댓글을 달아 주세요

  1. 보람  댓글주소 수정/삭제 댓글쓰기 2008.01.09 12:40

    ... 정말 경험말고는 나올 수 없는 내용이네요. 내용 감사합니다. 됐다 안됐다 간헐적으로 나오는 버그를 가장 싫어합니다 T^T

  2. pollinipill  댓글주소 수정/삭제 댓글쓰기 2008.01.09 13:31

    무작정 sleep을 거는 것은 왠지 -나쁘게 말해서 - 샛복 코딩인 거 같습니다. Thread.sleep(1000); 이 적당한 건지 Thread.sleep(500); 이 적당한 건지, 또는 1000을 준다고 해도 화일을 지울 수 있다는 프로그래밍적인 보증이 있는 것인지가 미묘하네요.

    file.delete()하기 전에, 해당파일을 canWrite할 수 있는지 아닌지를 while루프안에 집어넣어서 체크한 후 지워주는 게 어떨까요?

    • 케누 kenu허광남  댓글주소 수정/삭제 2008.01.09 17:51 신고

      while 루프 안에 넣었다가 무한 걸릴까봐요. ^^;
      프로필 사진 업로드 처리인데, 호출빈도가 낮은 부분이라 1초면 넉넉할 것이라 추정했습니다.
      이미지 전문 사이트라면 다르게 구현하는 것이 맞죠.
      ㅎㅎ 감사합니다.

  3. 너부리  댓글주소 수정/삭제 댓글쓰기 2008.01.09 14:27

    1초의 지연지간도 사실상 시스템 관점에서 보면 상당히 긴 시간인지라 저는 임시파일 삭제를 전담하는 Thread로 넘깁니다.

  4. 권남  댓글주소 수정/삭제 댓글쓰기 2008.01.09 20:31

    근데.. 썸네일 만드는 라이브러리는 뭘 쓰셨나요?
    저는 Java2D랑 JAI 모두 시도해 봤지만, 조금만 불량한 이미지를 만나면 제대로 작동을 안해서.. --; 결국은 ImageMagick을 사용하게 되었습니다...
    순수 Java 라이브러리로 해결하셨나요?

    • 알 수 없는 사용자  댓글주소 수정/삭제 2008.01.10 03:27

      똑같은 이유로 ImageMagick을 써야할 일이 생겼고, 하지만 자바호출로만 구현해야할 일이 생겨 JMagick을 쓰고 있는데요, 이게 버젼에 따라 버그가 있고, 세큐리티 문제가 심심찮게 보고 되고 있어요. 하지만, 사용자 화상 업로드 같은 게 아니면 JMagick쓰면 웬만큼 다 해결될 겁니다.

    • 케누 kenu허광남  댓글주소 수정/삭제 2008.01.10 07:38 신고

      권남//자바 기본 클래스를 사용했어요. ^^
      pollinipill// 좋은 정보들 감사합니다.