15일차
아티스트 계정 생성 테스트를 하는데
라는 에러 발생
아마 아티스트id 생성을 위해서 imageUrl을 null 로 받은게 문제인 것 같다
Artist 엔티티의 profilUrl은 nullable 로 되어있기때문에 null로 받아서 오류가 난 것이다
그렇게 설정하고나니
라는 에러가 났다
아무리 변수명을 수정해도 안 되서 DB를 Drop 하고 다시 실행하니 해결되었다
스키마가 안 맞는 경우 발생하는 에러라고 한다
테스트가 잘 되기 때문이 이 업로드 메서드들을 다른 패키지의 서비스단에도 집어넣어야 했다
그런데 한 컨트롤러에서 두 메서드가 서비스단의 한 메서드로 연결이 되는 부분이 있었다
하나는 이미지를 받지 않고, 하나는 이미지를 받는 경우여서 난감한 상황이다
차라리 한 컨트롤러의 한 메서드가
한 서비스단의 두 메서드로 나뉘어 연결되거나
컨트롤러의 각 메서드가 서비스단의 각 메서드로 연결되었다면
고민없이 추가했을텐데
그렇지 않아서 조금 막히는 중이다
여차저차해서 팀에 말하니 둘 다 사진을 안 넣는다고 한다
객체에는 Picture 라는 필드가 있는데 어떻게 된 건지 모르겠다
업로드기능 필요한 곳에 모두 집어넣고 테스트를 돌리는데
user 회원가입부터 막혔다
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
https://tevelop.tistory.com/53
https://youksimgyu.github.io/spring/Spring_39/#google_vignette
https://leejincha.tistory.com/242