Languages/Javascript

[Node.js] aws-sdk란? / GraphQLServer로 S3에 업로드하기

MOONCO 2021. 5. 1. 17:40

aws-sdk란?

aws에 파일을 쉽게 저장할 수 있게 해주는 Node.js 패키지

 

AWS에 파일을 저장하는 이유

서버에 파일을 저장하고 있으면, 서버를 재시작할때 백업되지 않은 파일이 지워질 수 도 있다

 

aws-sdk 설치하기

npm i aws-sdk

 

ws-sdk에서 aws s3 사용하기 (GraphQL 파일 업로드 기능 구현)

 

S3에 접근하기 위한 API 키 입력해주기

import AWS from "aws-sdk";

AWS.config.update({
  credentials: {
    accessKeyId: process.env.AWS_KEY,
    secretAccessKey: process.env.AWS_SECRET_KEY,
  },
});

 

파일업로드 기능 gql 쿼리 작성하기

// typeDefs.js 에 파일 업로드용 GraphQL 지정하기

import gql from 'apollo-server';

export default gql`
	
  type UploadResult {
    ok: Boolean!
    location: String
    error: String
  }
  
  type Mutation {
  	// Upload 형식으로, 파일을 받아온다
    editProfile( avatar: Upload! ): UploadResult
  }
  
`;


// resolvers.js 에 파일 업로드 기능 구현하기

export default {
  Mutation: editProfile: (_, { avatar }) => {
  
    //Upload 요소에서 파일이름, 파일 내용물(스트림) 만들기 위한 함수 불러옴
    const { filename, createReadStream } = await avatar;
    
    // 스트림 읽어오기 
    const readStream = createReadStream();
    
    // 저장할 파일이름 정하기 ( 중복된 이름 제거하기 위한 현재시간 추가 )
    const fileName = `${Date.now()}-${filename}`;
    
    // AWS S3에 파일 업로드 하기
    const { Location } = await new AWS.S3()
      .upload({
        //사용할 AWS S3 버킷 이름 적기
        Bucket: "richmalone",
        
        //사용할 파일 경로, 이름 지정하기 (저장하고 싶은 폴더, 파일 이름)
        Key: fileName,
        
        //파일 접근 권한 설정하기 ( public-read: 누구나 읽을 수 있음 )
        ACL: "public-read",
        
        //스트림 정보로, 파일 내용물 채우기
        Body: readStream,
      })
      // 콜백함수 사용 ( 추후 설명 )
      .promise();
      
  // 업로드 결과 출력
  return {
    ok: true,
    location: Location,
  }
}

 


altair로 테스트하기

 

altair란?

 

[GraphQL] Altair로 GraphQL Server 컨트롤하기

Altair 공식 홈페이지 / altair.sirmuel.design/ Altair GraphQL Client A beautiful feature-rich GraphQL Client IDE for all platforms. Enables you interact with any GraphQL server you are authorized t..

defineall.tistory.com

 

 

반응형