본문 바로가기

Spring Boot

Spring boot 로 구글 클라우드 저장소(GCS) 에 파일 업로드 하기

목차

1. 프로젝트 생성

2. 버킷생성

3. 사용자계정 생성

4. json 키 생성

5. 스프링부트 프로젝트에 설정

6. 코드 구현

7. 동작 및 확인

 


 

프로젝트 생성

 

먼저 구글 클라우드 플랫폼으로 접속하셔서 다음과 같이 진행합니다.

 

 

 

 

 

프로젝트 이름을 입력하시고 만들기 클릭!

 

 

 

 

 

 

그럼 맨처음 클릭했던 프로젝트 선택을 누르시면 다음과 같이 생성된 것을 확인하실 수 있습니다.

 

 

 

 

 


 

버킷생성

버킷에 관한 문서

https://cloud.google.com/storage/docs/buckets?hl=ko

더보기

버킷 이란?

 

버킷은 데이터를 담는 기본 컨테이너입니다. Cloud Storage에 저장하는 모든 컨테이너가 버킷에 포함되어야 합니다. 버킷을 사용하여 데이터를 구성하고 데이터 액세스를 제어할 수 있지만 디렉터리와 폴더와 달리 버킷을 중첩할 수 없습니다.

 

 

메인에서 왼쪽 대각선 햄버거를 누르시면 다음과 같이 나오는데

 

스크롤을 아래로 내리시면 Cloud Storage 가 보입니다. 바로 클릭해줍니다.

 

 

 

 

 

 

 

Cloud Storage 로 들어왔습니다.

 

현재는 버킷이 하나도 없는 상태입니다..

 

여기서 +만들기 를 눌러줍니다.

 

 

 

 

 

 

 

 

만들기를 누르게 되면 아래과 같이 나오는데 차례대로 따라해 줍니다.

 

 

버킷 이름은 전역으로 고유합니다. 

 

 

 

 

 

만들기 를 누르시면 다음과 같은 창이 나오는데 확인을 눌러줍니다.

 

공개 액세스는 다음에 알아보도록 하겠습니다. ( 대충 파일을 공유해서 사용할 수 있게 설정하는 것임 )

 

 

 

 


 

서비스계정 생성

 

 

다시 햄버거를 눌러 IAM 및 관리자 에서

서비스 계정을 눌러줍니다.

 

 

 

 

 

 

현재 서비스 계정은 하나도 없습니다.

 

 

바로 + 서비스 계정 만들기를 눌러서 생성시켜줍니다. 

 

 

 

 

 

아래와 같이 진행합니다.

 

 

 

 

 

 

 

생성되었습니다.

 


JSON 키 생성

 

 

이제 해당 사용자를 클릭하여 상세정보에 들어옵니다.

 

이후 를 눌러 키추가를 진행합니다.

 

 

 

 

만들기를 누르시면 json 파일로 키가 다운로드 받아집니다.

 

다운 받으신 json 키를 고이 모셔둡니다.

 

 


스프링부트 프로젝트에 설정

 

 

프로젝트 구조

 

 

 

의존성 추가

 

    implementation group: 'org.springframework.cloud', name: 'spring-cloud-gcp-starter', version: '1.2.5.RELEASE'
    implementation group: 'org.springframework.cloud', name: 'spring-cloud-gcp-storage', version: '1.2.5.RELEASE'

 

 

 

프로퍼티 설정

 

아까 다운로드 받은 json 키에 프로젝트 명 들어있습니다.

 

버킷명은 이전에 만들어둔 저장소 이름입니다.

 

application.properties

spring.cloud.gcp.storage.project-id=프로젝트명
spring.cloud.gcp.storage.credentials.location=classpath:json키 이름.json
spring.cloud.gcp.storage.bucket=버킷명

 


코드 구현

 

클래스 파일들

 

@Data
public class GCSRequest {

    private String name;
    private MultipartFile file;

}

 

@Controller
@RequiredArgsConstructor
public class GCSController {

    private final GCSService gcsService;

    @PostMapping("/api/gcs/upload")
    public ResponseEntity<Void> objectUpload(GCSRequest gcsRequest) throws IOException {

        gcsService.uploadObject(gcsRequest);

        return new ResponseEntity<>(HttpStatus.OK);
    }

}

 

@Service
public class GCSService {

    @Value("${spring.cloud.gcp.storage.bucket}")
    private String bucketName;

    public void uploadObject(GCSRequest gcsRequest) throws IOException {

        String keyFileName = "gcs-storage-404412-e627d814e575.json";
        InputStream keyFile = ResourceUtils.getURL("classpath:" + keyFileName).openStream();

        Storage storage = StorageOptions.newBuilder()
                .setCredentials(GoogleCredentials.fromStream(keyFile))
                .build()
                .getService();

        BlobInfo blobInfo = BlobInfo.newBuilder(bucketName, gcsRequest.getFile().getOriginalFilename())
                .setContentType(gcsRequest.getFile().getContentType()).build();

        Blob blob = storage.create(blobInfo, gcsRequest.getFile().getInputStream());

    }

}

 


 

실행 및 결과

 

 

포스트맨으로 파일 전송

 

 

 

에러 없이 진행되었다면 

 

 

 

파일이 들어온걸 확인 하실 수 있습니다.