OPEN API : 지도, 검색 정보 등의 일부 데이터를 외부에 오픈해서 사용하도록 하는 프로그래밍 기술. 제3의 서비스 창출이 가능하게 된 Web2.0 프로그래밍 트렌드. 국내 Naver, 다음이 OpenAPI 주도.

Google File System : 전세계 웹검색 정보 등의 대용량 파일 처리를 위한 구글의 파일 분산 저장 시스템. 하루에 PC급 서버 10만대에서 20,000 테라바이트를 처리할 수 있는 병렬 컴퓨팅 설계 기법.

Google BigTable : 구글 파일 시스템을 응용한 대용량 분산 데이터베이스 시스템. 데이터베이스의 머신을 병렬화하여 확장성과 가용성 그리고 퍼포먼스를 무한히 늘려갈 수 있음.
웹에 이미지 파일 업로드를 하고 썸네일을 만든 후 원본 파일을 지우는 코드입니다.
        // 임시디렉토리에 파일 저장
        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();

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

+ Recent posts