API/실습

61. [ JAVA ] API 리뷰 작성시 사진 추가 업로드 구현

천재단미 2025. 1. 12. 11:44
728x90
반응형

 

 

 

 

 

지난 시간 AWS S3 버킷을 생성진행하였습니다.

이번시간에는 리뷰 작성 시, 사진과 별점과 내용을 보내는 방법을 구현해 보겠습니다. 

 

57. [ JAVA ] AWS S3 버킷 생성 방법

 

57. [ JAVA ] AWS S3 버킷 생성 방법

AWS S3 란? AWS S3은 Amazon Simple Storage Service의 약자로, 객체 스토리지 서비스 중 하나입니다.데이터는 "버킷"이라는 리소스에 객체로 저장되며, 한 객체의 크기는 최대 5TB까지 가능하다고 합니다. 객

danmi1109.tistory.com

 

문제

 

3.1. 리뷰 작성

새로운 리뷰를 작성하는 API입니다.

  • URL: /api/v1/reviews/restaurant/{restaurantId}/menu/{menuId}
  • Method: POST
  • 설명:
    • 인증된 사용자만 리뷰를 작성할 수 있습니다.
    • 동일한 메뉴에 대해 한 사용자는 하나의 리뷰만 작성 가능합니다.
    • 리뷰 작성 시 해당 음식점의 평균 평점이 자동으로 갱신됩니다.
    • 음식점과 메뉴의 리뷰 카운트가 자동으로 증가합니다.
  • Request Header:
Authorization: Bearer {accessToken}

  • Request Body: Form-Data
- rating  (text) : 5
- content (text) : 이 음식 정말 맛있게 잘 먹었습니다~ 굿!
- image   (file) : 사진파일
  • Validation:
    • rating: 1-5 사이의 정수만 가능
    • content: 최소 10자 이상 작성
    • restaurantId: 유효한 음식점 ID
    • menuId: 해당 음식점의 유효한 메뉴 ID
  • Response:
  • 성공 201 문제있을경우 400

 

풀이

 

 

1. AWS 버킷생성 

 

2. intelliJ 세팅

 

1. pom.xml 파일  추가 

 

 

 

 

maven repository

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>software.amazon.awssdk</groupId>
				<artifactId>bom</artifactId>
				<version>2.25.60</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	
	<dependencies>

		<dependency>
			<groupId>software.amazon.awssdk</groupId>
			<artifactId>s3</artifactId>
		</dependency>
		
		...

 

 

2. application.yml 파일 추가 

application.yml 파일에 다음을 추가

AWS 에서 생성한 버킷 이름을 application.yml 파일에 동일하게 추가해줍니다. 

 

spring:
  profiles:
    active: dev

cloud:
  aws:
    credentials:
	    access-key: key
      secret-key: key
    s3:
      bucket: block-posting
      region: ap-northeast-2
      
      
      //base-url: <https://block-posting.s3.ap-northeast-2.amazonaws.com>

 

 

3. S3Config 클래스 생성

 

config 패키지 - S3Config 클래스 생성

 

 

@Configuration
public class S3Config {

    @Value("${cloud.aws.credentials.access-key}")
    private String accessKey;

    @Value("${cloud.aws.credentials.secret-key}")
    private String secretKey;

    @Value("${cloud.aws.s3.region}")
    private String region;

    @Bean
    public S3Client amazonS3Client() {
        AwsBasicCredentials awsCreds = AwsBasicCredentials.create(accessKey, secretKey);
        return S3Client.builder()
                .region(Region.of(region))
                .credentialsProvider(StaticCredentialsProvider.create(awsCreds))
                .build();
    }
}

 

4. UniqueFileNameGenerator 클래스 생성 

util 패키지  - UniqueFileNameGenerator 생성

 

public class UniqueFileNameGenerator {
    public static String generateUniqueFileName(long userId, String extension) {
        LocalDateTime now = LocalDateTime.now();
        String timestamp = now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
        return userId + "_" + timestamp + "_" + System.nanoTime() + extension;
    }
}

 

3.1. 리뷰 작성

새로운 리뷰를 작성하는 API입니다.

  • URL: /api/v1/reviews/restaurant/{restaurantId}/menu/{menuId}
  • Method: POST
  • 설명:
    • 인증된 사용자만 리뷰를 작성할 수 있습니다.
    • 동일한 메뉴에 대해 한 사용자는 하나의 리뷰만 작성 가능합니다.
    • 리뷰 작성 시 해당 음식점의 평균 평점이 자동으로 갱신됩니다.
    • 음식점과 메뉴의 리뷰 카운트가 자동으로 증가합니다.

 

 

 

 

Postman

 

 

 

 

 

위와같이 사진이 업로드 된것을 확인할수 있습니다. 

728x90
반응형
home top bottom
}