목차
1. 프로젝트 생성
2. 버킷생성
3. 사용자계정 생성
4. json 키 생성
5. 스프링부트 프로젝트에 설정
6. 코드 구현
7. 동작 및 확인
프로젝트 생성
먼저 구글 클라우드 플랫폼으로 접속하셔서 다음과 같이 진행합니다.
프로젝트 이름을 입력하시고 만들기 클릭!
그럼 맨처음 클릭했던 프로젝트 선택을 누르시면 다음과 같이 생성된 것을 확인하실 수 있습니다.
버킷생성
버킷에 관한 문서
https://cloud.google.com/storage/docs/buckets?hl=ko
버킷 이란?
버킷은 데이터를 담는 기본 컨테이너입니다. Cloud Storage에 저장하는 모든 컨테이너가 버킷에 포함되어야 합니다. 버킷을 사용하여 데이터를 구성하고 데이터 액세스를 제어할 수 있지만 디렉터리와 폴더와 달리 버킷을 중첩할 수 없습니다.
- 프로젝트 또는 위치에 포함할 수 있는 버킷 수에는 제한이 없습니다.
- 하지만 버킷을 만들거나 삭제할 수 있는 비율에 제한이 있습니다.
- 버킷을 만들 때는 여기에 전역적으로 고유한 이름 및 버킷 및 해당 콘텐츠가 저장되는 지리적 위치를 지정합니다.
- 기존 버킷의 이름 또는 위치는 변경할 수 없습니다. 대신 원하는 이름으로 또는 원하는 위치에 새 버킷을 만들고 이전 버킷의 콘텐츠를 새 버킷으로 옮길 수 있습니다. 단계별 안내는 버킷 이동 및 이름 바꾸기를 참조하세요.
- 가격 책정(예: 데이터 스토리지, 데이터 처리, 네트워크 이그레스 비용)은 버킷 위치 및 객체의 스토리지 클래스와 같은 요소에 따라 달라집니다. 자세한 내용은 Cloud Storage 가격 책정을 참조하세요.
- Identity and Access Management(IAM)를 사용하여 개별 버킷에 대한 액세스를 제어할 수 있습니다.
메인에서 왼쪽 대각선 햄버거를 누르시면 다음과 같이 나오는데
스크롤을 아래로 내리시면 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());
}
}
실행 및 결과
포스트맨으로 파일 전송
에러 없이 진행되었다면
파일이 들어온걸 확인 하실 수 있습니다.
'Spring Boot' 카테고리의 다른 글
Spring Boot + Spring Security 로 JWT 로그인 방식 구현 (1) | 2023.12.06 |
---|---|
Spring Security + Spring Boot / Rest API Login 구현 (3) | 2023.11.20 |
스프링 시큐리티 적용하기 (0) | 2023.11.05 |
controller 호출 전 Request body 값 읽기 (0) | 2023.10.29 |
[Spring Boot] build.gradle 이란? (0) | 2023.05.02 |