본문 바로가기

개발일지/TIL

[230804] [파이널] 프로젝트 진행 (3)

코드 리뷰

💬 각자 API를 작성하고 Pull Request를 날렸고 코드를 리뷰하는 시간을 가졌다. 자신의 코드에 매몰되지 않고 서로의 코드를 보면서 배울 수 있는 시간을 갖게 해 주기 때문이다. 그리고 보지 못한 내 코드의 문제점들도 알 수 있는 시간이다.

 

✔ 이미지 파일 검증

💢 아이디어를 업데이트할 때 이미지 파일이 처리된다. 이때 악성 파일(exe)이 들어올 수 있기 때문에 이미지가 맞는지 확인하는 코드가 필요하다는 피드백이 있었다. 

✅ ContentType을 통해 이미지인지 확인하는 코드를 작성했다.
       ➡ 파일에서 내용을 추출해서 어떤 포맷의 파일인지 확인할 수 있는 Apach Tika 이후에 적용해 볼 수 있겠다. 

private boolean validateImage(MultipartFile image) {
    List<String> imageExtensions = List.of("image/jpeg", "image/png", 
            "image/gif", "image/bmp", "image/tiff", "image/webp", "image/heif");

    return imageExtensions.contains(image.getContentType());
}​

 

✔ Controller 필수 값이 아닌 경우 required 처리

💢 MultipartFile 타입인 이미지는 클라이언트가 필수로 보내야 하는 데이터가 아니었다. 기본 required = true이기 때문에 문제가 될 수 있다는 피드백이 있었다.

✅ MultipartFile 타입인 이미지에 required = false 적용

 

@RequestPart(required = false) MultipartFile image​

 

✔ 테스트 코드에서 Service 객체를 중복으로 생성

💢 테스트 코드에서 Service 객체 중복을 제거하고 하나만 생성해야 한다고 피드백을 받았다.

💬 @Test 안에 있어야 Service에 들어가는 Mock들이 초기화가 되어서 중복이 되더라도 메서드에 사용을 했다. 피드백 이후 찾아보니 클래스 멤버 변수로 Mock과 함께 Service를 초기화하는 방법이 있었다.

✅ @InjectMocks을 사용하면 내가 만든 Mock들을 초기화하고 주입할 수 있다.

// 기존 코드
IdeaService ideaService = new IdeaService(ideaRepository, userRepository, s3Service);

// 수정 코드
@InjectMocks
IdeaService ideaService;

// 공통 코드
@Mock
IdeaRepository ideaRepository;
@Mock
UserRepository userRepository;
@Mock
S3Service s3Service;​