[Nodejs] Image 파일 업로딩 방식 Refactoring, Url 에서 폴더 경로로 바꾸기

suhwani·2024년 1월 18일
0
post-thumbnail

문제 인식

  • Image 를 가져올 때 버퍼링이 걸린 것처럼 0.5초-1초정도 딜레이가 발생

기존 코드 방식

  • Img 태그를 사용해 사진을 띄우고, src 에 웹 Url 을 입력해 가져오는 방식
    아마도 url 을 통해 가져오면서 걸리는 시간이 딜레이로 느껴지는 것 같다

개선 방향

  • Image 파일을 프로젝트 폴더에 포함시켜 로딩 시간을 단축하도록 변경할 예정
  • 다만, 동적으로 Image 파일을 가져오는 구조라는 것을 고려해야 한다.

첫번째 시도 (실패)

require 사용하기

client - components, src, public, images

  • client 바로 아래에 images 폴더를 생성해 Image 파일들을 저장했다.
  • 동적으로 받아오기 위해서 require 을 사용했다.
    const result = await require('...')
  • 하지만 result 값이 제대로 읽히지 않았다. file 명이 제대로 오는 것로 봐서는 가져오는 것은 성공적인데, file 내용이 읽히지 않는 듯??

두번째 시도 (실패)

webpack 사용하기

  • webpack 을 사용하면 번들링, 에러, 코드 최적화를 도와준다고 한다.
  • webpack -> file-loader 를 사용해서 제대로 file 을 가져오려고 했다.
  • 하지만 실패.... 이유는 알 수 없지만..? ㅜㅜ

세번째 시도 (성공)

image 폴더 위치 변경 & import() 함수 사용하기

  • 자료를 찾다보니 React 프로젝트에서 Image 를 가져오는 방법은 2개
    1. public 폴더에 저장후 상대경로 사용
    2. src 폴더에 저장후 import 하기
  • 이 중 2번째 방법을 사용!! src/images 를 저장하고
    상대 경로 & import() 를 이용해 image 파일을 가져오는 방식을 사용했다.
const [importImageModule, storeImportImageModule] = useState(null);

useEffect(() => {
    const importImage = async () => {
      try {
        const ImageModule = await import(`../../images/${imageAllInfo[displayImageInfo[imageIdRef.current]].IMAGEURL}.jpeg`);
        storeImportImageModule(ImageModule.default);
      
      } catch (err) {
        console.log(err)
      }
    }
    impoortImage();
  }, [displayImageInfo, imageAllInfo, imageIdRef.current])
  • 중요한 점
    1. useState 로 관리해서 component 형태로 저장을 한다.
    2. store 함수를 return 해서 외부에서 사용하면 promise 객체가 도착하지 않아서 importImage() 내부에서 store 함수를 실행시켜야 제대로 저장이 된다.

후기

  • frontend 는 어렵다...
profile
Backend-Developer

0개의 댓글