Spring Boot로 API를 제작 중인데, 저장된 이미지를 제공해주는 부분에서 막혔습니다

조회수 618회

최근 spring-boot를 이용해 백엔드를 작성해보는 실습을 해보는 중입니다. url을 입력하면 json형태의 데이터를 제공하는 모양새입니다.

아직 완전 초기라서 따로 연결한 DB는 없구요, 제가 하고싶은 부분은 url을 입력하면 제 프로젝트의 images폴더 안의 특정 이미지를 띄워주는 일입니다. 최종적으로 이미지나, 받아온 데이터를 가공한 View를 클라이언트에게 보여주는 일은 프론트엔드에서 할 텐데, 이를 고려해서 이미지를 넘겨주는 일을 하고 싶은 거에요.

질문을 올리기 전에 어느정도 검색을 해서 따라해보았습니다.

..../restaurants/img1 이라는 url을 입력하면 src/main/resources/images폴더 안의 clock.jpg를 넘겨주려고 해보았는데, 아래는 제가 검색해서 작성했던 메서드와 그 테스트코드입니다.

@RequestMapping(value = "/restaurants/img1", method = RequestMethod.GET,
            produces = MediaType.IMAGE_JPEG_VALUE)
    public @ResponseBody byte[] img() throws IOException {

        InputStream in = InputStream.class.getResourceAsStream("/images/clock.jpg");
        byte[] result = IOUtils.toByteArray(in);

        return result;

    }
@Test
    public void getimg() throws Exception {
        mvc.perform(get("/restaurants/img1"))
                .andExpect(status().isOk());
    }

테스트는 통과가 되었는데, 실제로 heroku에 배포해서 url을 입력해보면 아래와 같은 결과가 나옵니다..

이미지

테스트 코드의

mvc.perform(get("/restaurants/img1"))
                .andExpect(status().isOk());

이 부분이 status가 200인지 테스트 하는 줄로 알고있는데, 이 테스트는 통과하면서 실제로 실행해보면 status가 500이라고....

어디서부터 꼬인건지 뭘 잘못하고 있는건지 감을 못 잡겠어요..

  • 테스트를 통과했다는게 이상하긴 하지만 이걸 무시하고 봐보면, 요청 처리 중 어디선가 에러가 났고 에러가 났을 때 보여줄 에러페이지가 설정되어 있지 않아서 발생하는 현상입니다. `img()` 메서드에 브레이크 걸어서 테스트 해보세요. 편집요청빌런 2019.7.18 10:06
  • @처제의일기
    답변 감사합니다. 지금은 저 실습은 저 상태에서 중단 상태로 있고 학교 생활에 집중하고 있어요ㅠㅠ 종강하면 참고해서 다시 열심히 해보겠습니다!
    김현우 2019.11.2 01:28

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)