본문 바로가기
Sparta 내일배움캠프 Java 5기/[최종 프로젝트] 커뮤니티 서비스 Team Project ✓ 2024. 7. 23.

(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도 역시 동일하게 적용