Sparta 내일배움캠프 Java 5기/[최종 프로젝트] 커뮤니티 서비스 Team Project ✓
(24.07.22) 코드 리뷰 게시글 생성 기능 구현
코드 리뷰 CodeReivews 게시글 생성 기능
- 코드 자체를 JSON 형태로 DB에 저장을 하는 것은 관계 데이터를 확인하는 MySQL DB의 성격과 맞지 않다고 판단
- 너무 과도하게 길어지는 코드일 경우, DB에 저장 시, 다수의 코드 리뷰를 조회/수정 에 있어서 많은 성능을 요구할 것이라고 생각 -> 따로 S3 구성
- 하지만, 개발 단계이기 때문에 MinIO 사용
- 환경을 만들어 놓을 경우 다른 추가 기능이 발생했을 경우 이미지 등 미디어 파일, 코드 파일 그대로 저장해서 사용할 수 있다고 판단
@Transactional
public CodeReviewsResponseDto createCodeReview(CodeReviewsRequestDto codeReviewsRequestDto,
Users user) {
...
String categories = "#" + Arrays.stream(codeReviewsRequestDto.getCode().split("#"))
.map(s -> s.replace(" ", "").toLowerCase())
.filter(s -> !s.isEmpty())
.collect(Collectors.joining("#"));
CodeReviews codeReview = CodeReviews.builder()
.title(codeReviewsRequestDto.getTitle())
.category(categories)
.contents(codeReviewsRequestDto.getContents())
.status(Status.ACTIVE)
.build();
codeReviewsRepository.save(codeReview);
String code = codeReviewsRequestDto.getCode();
if (code != null && !code.isEmpty()) {
try {
String filename = "codereviews-code/code-" + codeReview.getId() + ".txt";
ByteArrayInputStream inputStream = new ByteArrayInputStream(code.getBytes(
StandardCharsets.UTF_8));
minioClient.putObject(
PutObjectArgs.builder()
.bucket("project-dev-bucket")
.object(filename)
.stream(inputStream, inputStream.available(), -1)
.contentType("text/plain")
.build()
);
codeReview.updateCode(filename);
} catch (Exception e) {
throw new RuntimeException("파일 업로드 오류가 발생했습니다.");
}
}
return new CodeReviewsResponseDto(codeReview, foundUser);
}
}
- 블로그에 기재한 MinIO 활용 로직을 그대로 구현을 해서 사용
- 기타 주입, Client Bean 등록을 위한 Config도 역시 동일하게 적용
'Sparta 내일배움캠프 Java 5기 > [최종 프로젝트] 커뮤니티 서비스 Team Project ✓' 카테고리의 다른 글
(24.07.26) CI/CD 파이프 라인 구상 및 테스트 코드 점검 (0) | 2024.07.26 |
---|---|
(24.07.26) 코드 리뷰 기능(게시글, 댓글, 좋아요) 테스트 코드 작성 (0) | 2024.07.26 |
(24.07.24) 코드 리뷰 게시글 조회 & 카테고리 검색 기능 구현 (1) | 2024.07.24 |
(24.07.23) 코드 리뷰 게시글 수정/삭제 기능 구현 + 코드 리뷰 댓글 생성/수정/삭제 기능 구현 + 댓글 좋아요 추가/삭제 기능 구현 (2) | 2024.07.24 |
(24.07.19) Project S.A. 작성 (0) | 2024.07.19 |