Dev입성기

15일차

Mon Groy 2024. 8. 2. 00:14

아티스트 계정 생성 테스트를 하는데

{
    "code": 500,
    "message": "could not execute statement [Column 'artist_profile_image_url' cannot be null] [/* insert for com.example.fantreehouse.domain.artist.entity.Artist */insert into artist (artist_group_id,artist_name,artist_profile_image_url,created_at,modified_at,subscriber_count,user_id) values (?,?,?,?,?,?,?)]; SQL [/* insert for com.example.fantreehouse.domain.artist.entity.Artist */insert into artist (artist_group_id,artist_name,artist_profile_image_url,created_at,modified_at,subscriber_count,user_id) values (?,?,?,?,?,?,?)]; constraint [null]",
    "httpStatus": "INTERNAL_SERVER_ERROR"
}

 

라는 에러 발생

아마 아티스트id 생성을 위해서 imageUrl을 null 로 받은게 문제인 것 같다

Artist 엔티티의 profilUrl은 nullable 로 되어있기때문에 null로 받아서 오류가 난 것이다

 

그렇게 설정하고나니

 

{
    "code": 500,
    "message": "could not execute statement [Field 'artist_profile_picture' doesn't have a default value] [/* insert for com.example.fantreehouse.domain.artist.entity.Artist */insert into artist (artist_group_id,artist_name,artist_profile_image_url,created_at,modified_at,subscriber_count,user_id) values (?,?,?,?,?,?,?)]",
    "httpStatus": "INTERNAL_SERVER_ERROR"
}

 

라는 에러가 났다

 

아무리 변수명을 수정해도 안 되서 DB를 Drop 하고 다시 실행하니 해결되었다

스키마가 안 맞는 경우 발생하는 에러라고 한다


테스트가 잘 되기 때문이 이 업로드 메서드들을 다른 패키지의 서비스단에도 집어넣어야 했다

그런데 한 컨트롤러에서 두 메서드가 서비스단의 한 메서드로 연결이 되는 부분이 있었다

하나는 이미지를 받지 않고, 하나는 이미지를 받는 경우여서 난감한 상황이다

 

차라리 한 컨트롤러의 한 메서드가

한 서비스단의 두 메서드로 나뉘어 연결되거나

 

컨트롤러의 각 메서드가 서비스단의 각 메서드로 연결되었다면

고민없이 추가했을텐데

그렇지 않아서 조금 막히는 중이다

 

여차저차해서 팀에 말하니 둘 다 사진을 안 넣는다고 한다

객체에는 Picture 라는 필드가 있는데 어떻게 된 건지 모르겠다


업로드기능 필요한 곳에 모두 집어넣고 테스트를 돌리는데

user 회원가입부터 막혔다

{
    "code": 500,
    "message": "The given id must not be null",
    "httpStatus": "INTERNAL_SERVER_ERROR"
}

 

Repository에 저장해야 id가 생성되는데 그렇지 않아서 발생한 오류였다


포스트맨에 Authorization 을 쉽게 설정할 수 있는 방법이 있다는게 떠올라서 찾아보았는데

내 포스트맨에는 Test 탭이 없다

따로 설정하는 건가 싶어서 열심히 찾아봤지만 없다

대체 왜..??


 

커뮤니티 피드가 생성이 되었다고는 나오는데 업로드한 사진이 DB에 담기지 않는 문제

 

드롭하고 디버깅 모드로 했는데 안되서 히스토리로 얼마나 바뀌었나 확인진행했으나 대실패

 

튜터님께가서 똑같이 드롭하고 디버깅 모드로 돌렸더니 된다...대체 왜..??


마저 업로드 테스트를 끝내고 푸시하기로 했다

 

그리고 조회보다 삭제를 먼저 구현하는게 맞다고 판단되어 삭제에 대해 추가 조사를 했다

 

if (objectListing.isTruncated()) { //삭제할 객체가 1000개를 넘길때 필요한 메서드
    objectListing = amazonS3Client.listNextBatchOfObjects(objectListing);
} else {
    break;
}

 

S3 의 delegeObject 메서드는 한 번에 삭제할 수 있는 최대 객체가 1000개라고 한다

따라서 삭제할 객체가 1000개가 넘을 때는 추가적으로 불러와야만 하는 것

그 때 필요한 메서드라고 한다

 

이건 어드민용으로 필요한 것으로 판단되어 일단 미뤄두기로 했다

 

저장된 객체가 1000개가 넘고 삭제할 객체는 그 이하라면 필요 없다고 한다


삭제테스트를 했는데, mysql 에서만 사라지고 S3에는 남아있었다

 

내가 만들었던 이름이

ABC/DEF/artist1/4/업로드테스트.png_ea084a3e-2247-4c78-a500-9537d831f0f1

라고 한다면 이것은 Dir 와 파일 이름 그 자체이다

이것이 S3에 키 로 등록이 되어있다

 



public DeleteObjectRequest(String bucketName, String key) {
    this.setBucketName(bucketName);
    this.setKey(key);
}

라고 설명에 나와있는데

 

//private final bucket = "abc"; 선언해 둠

//Dir 단건 삭제
public void deleteFileInBucket(String fileDir) {
    try {
        amazonS3Client.deleteObject(new DeleteObjectRequest(bucket, fileDir));
    } catch (Exception e) {
        throw new S3Exception(DELETE_ERROR);
    }
}

//Dir 다건 삭제
public void deleteFilesInBucket(List<String> filedDirs) {

    for (String fileDir : filedDirs) {
        try {
            amazonS3Client.deleteObject(new DeleteObjectRequest(bucket, fileDir));

        } catch (Exception e) {
            throw new S3Exception(DELETE_ERROR);
        }
    }
}

이렇게 작성해 두었다

이대로면 맞는건데 왜 안 지워지는 걸까?

 

 

여기에서 뭐가 잘못된 건지 모르겠다


발표를 앞두었기에 조회가 삭제보다 더 중요할 것이라는 팀장님의 말씀에

지우는 건 잠시 미뤄두고 다시 조회하는 방법을 찾아다녔다

 

Feed 조회에 성공하고 Artist 단건조회를 했는데, 무한조회루프에 걸려서 포스트맨에 출력이 6천을 꽉 채웠다

팀원의 도움을 받아서 보니까 ResponseDto 에 있는 artistGroup을 artistGroup타입으로 놓은 부분에서 부터 무한루프가 걸렸다

 

아니그런데 그렇게 수정하고 나니까 추가로 넣은 메서드가 무색하게

그 메서드를 지워도 url이  멀쩡하게 잘 조회된다

 

Feed도 확인해 보았다

단건은 잘 가지고 오는데 다건은 가져오질 못한다

 

통과리스트

- 아티스트 단건조회(프로필 조회)

- 아티스트 다건조회(프로필 조회)

- 아티스트 피드 단건조회

- 상품 단건 조회

- 유저 프로필 조회

- 아티스트그룹 단건조회

- 아티스트그룹 다건조회

- 상품 다건 조회

- 엔터 단건 조회 (엔터밖에 못함..왜?? 아, 어드민이 등록해주는 시스템이어서.. 근데 본인확인은 안 거치는 이유는?)

- Feed 단건 조회

- 커뮤피드 단건 조회

커뮤피드 전체 조회

 

- Feed 다건 조회

- 유저 다건 조회


다른 다건조회는 다 잘되길래 왜그런가 면밀히 살펴봤더니

 

Feed 다건조회에서 어에없게도

List<String> imageUrl = new ArrayList<>();

라고 초기화를 해놓고 있었다

 

정말 어이없었다

코드 잘 보자.....

 


그동안 쌓아뒀던 팀원들이 머지한 것들을 몰아서 받았다

수동머지는 필수코스였는데

중간에 고비가 있었지만

일부 수동머지 후에

팀원들의 원래상태코드를 참고하여

내가 짠 코드와 맞춰서 받아

무사히 끝마쳤다


https://innovation123.tistory.com/197

 

[Spring / S3] SpringBoot 프로젝트 - S3 이미지 업로드

이전 글에서 S3 bucket과 IAM을 생성하고 SpringBoot project에서 S3 접근에 사용할 accessKey와 secretKey를 얻는 것까지 다뤘다. 2024.01.21 - [DevOps] - [AWS/S3] Spring boot project 이미지 업로드를 위해 S3 버켓 만들기 [

innovation123.tistory.com

 

https://inpa.tistory.com/entry/POSTMAN-%F0%9F%92%BD-%ED%8F%AC%EC%8A%A4%ED%8A%B8%EB%A7%A8-%EC%82%AC%EC%9A%A9%EB%B2%95-API-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%9E%90%EB%8F%99%ED%99%94-%EA%B3%A0%EA%B8%89-%ED%99%9C%EC%9A%A9%EA%B9%8C%EC%A7%80

 

💽 POSTMAN 사용법 - API 테스트 자동화 고급 활용까지

포스트맨 (POSTMAN) POSTMAN은 API를 개발, 테스트, 공유 및 문서화하는 데 사용되는 API 클라이언트 이다. 엔드 포인트 URL을 입력하는 테스트에 사용되며 서버로 요청을 보내고 서버에서 응답을 받아 a

inpa.tistory.com

 

https://berom.tistory.com/438

 

Postman Token 값 자동 갱신

Intro. Token 복사하기가, 귀찮다 🐥 카카오 테크 캠퍼스 - 2단계 5주차 강의 요약 후 Postman 테스트를 하는데, 로그인 할 때마다 Token을 복사하는게 너무 귀찮았다 이런거 이미 만들어져 있을거 같은

berom.tistory.com

 

https://tevelop.tistory.com/53

 

2023/1/1 포스트맨에 토큰값 세팅하기

팀 프로젝트를 하는데 일일이 매번 요청마다 토큰을 바꿔주는게 귀찮아서 알아본 포스트맨 토큰 세팅 1. environments-> variable에 token을 적어준다. 2. 로그인 api에 Tests에 다음과 같이 적어준다. pm.envi

tevelop.tistory.com

 

https://youksimgyu.github.io/spring/Spring_39/#google_vignette

 

Spring 파일 업로드2

파일 업로드 2

youksimgyu.github.io

 

 

https://velog.io/@rnqhstlr2297/AWS-S3%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%B2%98%EB%A6%AC%EC%A0%80%EC%9E%A5%EC%A1%B0%ED%9A%8C%EC%82%AD%EC%A0%9C

 

AWS S3를 이용한 이미지 처리(저장,조회,삭제,다운로드)

AWS S3를 이용한 파일 업로드 ,삭제 ,조회, 다운로드 기능 구현

velog.io

 

https://leejincha.tistory.com/242

 

[02] S3로 이미지 업로드 / 조회 / 삭제 구현하기

사전 세팅 먼저 AWS에서 S3 버킷을 만들고 IAM에서 사용자를 만들어 access key와 secret ket를 발급받는 작업이 필요하다. 참고 링크 : https://jojoldu.tistory.com/300 SpringBoot & AWS S3 연동하기 안녕하세요? 이번

leejincha.tistory.com

 

https://github.com/BonSik-Koo/Funtion-pratice/blob/master/src/main/java/project/AMS/awsS3/s3/S3Service.java

 

Funtion-pratice/src/main/java/project/AMS/awsS3/s3/S3Service.java at master · BonSik-Koo/Funtion-pratice

Contribute to BonSik-Koo/Funtion-pratice development by creating an account on GitHub.

github.com