Kim VamPa

[Spring][쇼핑몰 프로젝트][29] 상품 이미지 수정 - 7(배치 프로그램 적용 4) 본문

스프링 프레임워크/쇼핑몰 프로젝트

[Spring][쇼핑몰 프로젝트][29] 상품 이미지 수정 - 7(배치 프로그램 적용 4)

Kim VamPa 2021. 7. 29. 10:00
728x90
반응형
프로젝트 Github : https://github.com/sjinjin7/Blog_Project
프로젝트 포스팅 색인(index) : https://kimvampa.tistory.com/188

 

목표

DB에 정보가 존재하지 않는 이미지 파일 삭제 작업 구현

 저번 포스팅에 이어서 DB 저장되지 않은 이미지 파일 삭제 구현을 진행합니다.

 

순서

1. 코드 테스트(삭제 대상 파일 분류)

2. 코드 테스트(분류된 파일 삭제)

3. 테스트

 

 

 

 

1. 코드 테스트(삭제 대상 파일 분류)

앞선 포스팅에서 작성한 코드를 통해 얻어낸 'DB 파일 리스트'와 '디렉토리 파일 리스트'를 서로 비교하여 삭제되어야 할 파일의 리스트를 분류해보겠습니다.

 

 File 객체를 요소로 가지는 List 타입인 removeFileList 변수를 선언하고, 디렉토리 파일 리스트인 targeFile 배열 객체를 활용하여 List 타입으로 변환된 객체를 생성 후 대입해줍니다.

 

		List<File> removeFileList = new ArrayList<File>(Arrays.asList(targetFile));

 

※ 배열 객체를 리스트 객체로 변경하기 위해 다음의 아래의 코드를 사용하였습니다.

ArrayList 리스트변수명 = new ArrayList<>(Arrays.asList(배열변수명));

 

 

 removeFileList에 담겨져 있는 데이터들은 디렉토리에 저장되어져 있는 파일이 모두 담겨져 있는데 , targetFile과 checkFilePath 와의 비교를 통해 동일한 데이터를 가지는 있는 File 객체 요소를 제거함으로써 DB에 정보가 저장되지 않은 이미지 File 객체만 남길 것입니다.

 

 이중 for문을 사용한 아래의 코드를 통해서 removeFileList에 checkFilePath(DB 이미지 리스트)에 존재하지 않는 이미지 File 객체만 남기고 나머지 File객체 요소가 제거되도록 작성하였습니다. targetFile과 checkFilePath 의 각 요소들과의 비교를 위해서 targetFile의 요소인 File 객체를 toPath() 메서드를 호출하여 Path 객체로 변환 후 비교를 하였습니다.

 

		List<File> removeFileList = new ArrayList<File>(Arrays.asList(targetFile));
        
		for(File file : targetFile){
			checkFilePath.forEach(checkFile ->{
				if(file.toPath().equals(checkFile)) 
					removeFileList.remove(file);	
			});
		}

 

 

 의도대로 removeFileList 에 제거되어야 할 이미지 리스트만 담겼는지 확인하기 위해서 console창에 출력해주는 코드를 작성해주었습니다. 

 

		List<File> removeFileList = new ArrayList<File>(Arrays.asList(targetFile));
		
		System.out.println("removeFileList(필터 전) : ");		
		removeFileList.forEach(file -> {
			System.out.println(file);
		});		
		System.out.println("========================================");		
		
		for(File file : targetFile){
			checkFilePath.forEach(checkFile ->{
				if(file.toPath().equals(checkFile)) 
					removeFileList.remove(file);	
			});
		}
		
		System.out.println("removeFileList(필터 후) : ");
		removeFileList.forEach(file -> {
			System.out.println(file);
		});
		System.out.println("========================================");

 

 Junit을 통해 해당 코드들을 실행시켜 확인을 합니다.

 

그림 1-1

 

 

2. 코드 테스트(분류된 파일 삭제)

 삭제되어야 할 File 객체를 얻었기 때문에 이젠 File클래스의 delete() 메서드를 호출하여 해당 파일이 삭제되도록 해주기만 하면 됩니다. 

 

		for(File file : removeFileList) {
			file.delete();
		}

 

 삭제되는 파일을 확인하기 위해 console창에 표시해주는 코드를 추가해주었습니다.

 

		/* 파일 삭제 */
		for(File file : removeFileList) {
			System.out.println("삭제 : " + file);
			file.delete();
		}

 

그림 2-1

 

 

3. 테스트

작성한 코드가 의도한 대로 도작하는지 확인하기 위해 Junit을 통해 코드를 실행시켜보겠습니다. 실행하기 전 디렉토리에 저장된 파일들을 확인합니다.

 

그림 3-1

 

 

 Junit을 통해 코드 실행 후 결과입니다.

 

그림 3-1

 

그림 3-2

 

 

REFERENCE

  • 코드로배우는 스프링 웹 프로젝트(남가람북스)
  •  

 

 

 

DATE

  • 2020.07.29

 

728x90
반응형
Comments