Skip to content

Commit 111b071

Browse files
committed
Infra: 운영환경 동기화
개발환경(application-dev.yml)에 맞게 운영환경(application-prod.yml) 변경 - AWS S3 관련 설정 추가
1 parent 6a7c513 commit 111b071

File tree

5 files changed

+50
-27
lines changed

5 files changed

+50
-27
lines changed

src/main/java/com/back/domain/file/controller/FileController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ public class FileController {
1919
private final FileService fileService;
2020

2121
@PostMapping
22-
public ResponseEntity<RsData<List<String>>> uploadFile(List<MultipartFile> multipartFiles) {
22+
public ResponseEntity<RsData<String>> uploadFile(MultipartFile multipartFile) {
2323
return ResponseEntity
2424
.status(HttpStatus.OK)
25-
.body(RsData.success("파일 업로드 성공", fileService.uploadFile(multipartFiles)));
25+
.body(RsData.success("파일 업로드 성공", fileService.uploadFile(multipartFile)));
2626
}
2727
}

src/main/java/com/back/domain/file/service/FileService.java

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import com.amazonaws.services.s3.model.CannedAccessControlList;
55
import com.amazonaws.services.s3.model.ObjectMetadata;
66
import com.amazonaws.services.s3.model.PutObjectRequest;
7+
import com.back.global.exception.CustomException;
8+
import com.back.global.exception.ErrorCode;
79
import lombok.RequiredArgsConstructor;
810
import org.springframework.beans.factory.annotation.Value;
911
import org.springframework.http.HttpStatus;
@@ -24,25 +26,25 @@ public class FileService {
2426

2527
private final AmazonS3 amazonS3;
2628

27-
public List<String> uploadFile(List<MultipartFile> multipartFiles) {
28-
List<String> fileNameList = new ArrayList<>();
29-
30-
multipartFiles.forEach(file -> {
31-
String fileName = file.getOriginalFilename();
32-
ObjectMetadata objectMetadata = new ObjectMetadata();
33-
objectMetadata.setContentLength(file.getSize());
34-
objectMetadata.setContentType(file.getContentType());
35-
36-
try (InputStream inputStream = file.getInputStream()) {
37-
amazonS3.putObject(new PutObjectRequest(bucket, fileName, inputStream, objectMetadata)
38-
.withCannedAcl(CannedAccessControlList.PublicRead));
39-
} catch (IOException e) {
40-
throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "파일 업로드에 실패했습니다.");
41-
}
42-
43-
fileNameList.add(fileName);
44-
});
45-
46-
return fileNameList;
29+
public String uploadFile(MultipartFile multipartFile) {
30+
if (multipartFile == null || multipartFile.isEmpty()) {
31+
return null;
32+
}
33+
34+
String fileName = multipartFile.getName();
35+
ObjectMetadata objectMetadata = new ObjectMetadata();
36+
objectMetadata.setContentLength(multipartFile.getSize());
37+
objectMetadata.setContentType(multipartFile.getContentType());
38+
39+
try(InputStream inputStream = multipartFile.getInputStream()){
40+
amazonS3.putObject(
41+
new PutObjectRequest(bucket, fileName, inputStream, objectMetadata
42+
)
43+
);
44+
} catch (IOException e){
45+
throw new CustomException(ErrorCode.FILE_UPLOAD_FAILED);
46+
}
47+
48+
return fileName;
4749
}
4850
}

src/main/java/com/back/global/config/S3Config.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,4 @@ public AmazonS3Client s3Client() {
2727
.withCredentials(new AWSStaticCredentialsProvider(awsCred))
2828
.build();
2929
}
30-
}
30+
}

src/main/java/com/back/global/exception/ErrorCode.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,16 @@ public enum ErrorCode {
121121
OAUTH2_ATTRIBUTE_MISSING(HttpStatus.UNAUTHORIZED, "AUTH_009", "소셜 계정에서 필요한 사용자 정보를 가져올 수 없습니다."),
122122
OAUTH2_AUTHENTICATION_FAILED(HttpStatus.UNAUTHORIZED, "AUTH_010", "소셜 로그인 인증에 실패했습니다."),
123123

124+
// ======================== 파일 업로드 관련 ========================
125+
FILE_UPLOAD_FAILED(HttpStatus.INTERNAL_SERVER_ERROR, "FILE_001", "파일 업로드에 실패했습니다."),
126+
127+
124128
// ======================== 토큰 관련 ========================
125129
INVALID_EMAIL_TOKEN(HttpStatus.UNAUTHORIZED, "TOKEN_001", "유효하지 않은 이메일 인증 토큰입니다."),
126130
ALREADY_VERIFIED(HttpStatus.CONFLICT, "TOKEN_002", "이미 인증된 계정입니다."),
127131
INVALID_PASSWORD_RESET_TOKEN(HttpStatus.UNAUTHORIZED, "TOKEN_003", "유효하지 않은 비밀번호 재설정 토큰입니다.");
128132

133+
129134
private final HttpStatus status;
130135
private final String code;
131136
private final String message;

src/main/resources/application-prod.yml

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
spring:
2+
config:
3+
import: optional:file:.env[.properties]
4+
25
datasource:
36
url: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE}?serverTimezone=Asia/Seoul&characterEncoding=UTF-8
47
driver-class-name: com.mysql.cj.jdbc.Driver
@@ -11,9 +14,6 @@ spring:
1114
port: 6379
1215
password: ${REDIS_PASSWORD}
1316

14-
config:
15-
import: optional:file:.env[.properties]
16-
1717
jpa:
1818
database-platform: org.hibernate.dialect.MySQLDialect
1919
hibernate:
@@ -111,4 +111,20 @@ studyroom:
111111
allow-screen-share: true
112112

113113
frontend:
114-
base-url: ${FRONTEND_BASE_URL}
114+
base-url: ${FRONTEND_BASE_URL}
115+
116+
# AWS S3
117+
cloud:
118+
aws:
119+
credentials:
120+
access-key: ${ACCESS_KEY}
121+
secret-key: ${SECRET_KEY}
122+
123+
region:
124+
static: ${REGION}
125+
126+
s3:
127+
bucket: ${BUCKET_NAME}
128+
129+
stack:
130+
auto: false

0 commit comments

Comments
 (0)