[부트캠프] 뒤늦은 중급 프로젝트 회고

한동우·2025년 9월 7일

부트캠프

목록 보기
2/3

🙇‍♂️ 개요

고급 프로젝트를 앞두고 중급 프로젝트 회고 글을 적어보려고 한다.
초급 때와 마찬가지로 두 가지 주제 중 하나를 선택해야 했다.
MongoDB를 활용한 백업 및 복구 시스템Open API를 활용한 도서 이미지 OCR 및 ISBN 매칭 서비스였는데 우리 팀은 투표를 통해 두 번째 주제를 선택했다.


📂 프로젝트 주제

📖 덕후감

도서 이미지 OCR 및 ISBN 매칭 서비스

⭐️ 주요 기능

  • 사용자 관리 : 사용자 정보 등록/수정/삭제/로그인
  • 도서 관리 : 도서 정보 등록/수정/삭제/상세/목록 조회
  • 리뷰 관리 : 리뷰 등록/수정/삭제/목록 조회
  • 댓글관리 : 댓글 등록/수정/삭제/목록 조회
  • 대시보드 관리 : 인기 도서, 인기 리뷰, 파워 유저 순위 조회
  • 알림 관리 : 알림 등록/수정/삭제/목록 조회

🏃 프로젝트 시작

주제 선정 후 프로젝트를 시작했다. 한 분빼고 이전 파트에서 팀장이었어서 (나는 바지 팀장이었지만..) 이전에 같은 팀이었던 팀원과 작당모의(?)를 해서 팀장을 쉽게 정할 수 있었다 ㅎㅎ

본격적인 개발에 들어가기 전, 초급 프로젝트 때와 마찬가지로 Ground Rule 및 R&R 수립, 일정 관리 툴 설정, 요구사항 분석 및 ERD 설계 등을 진행했다. 다들 한 번 해봐서 그런지 이 과정은 순조롭게 진행됐다.

나는 도서 등록/수정/상세 정보 조회, 네이버 API를 활용한 ISBN 상세 조회, 인기 도서 배치/목록 조회 기능을 담당하게 됐다. 구현해야 될 기능 자체는 많지 않았는데 구현하기 위해 사용한 기술 스택을 적용하기 위해 학습하는 과정이 어려웠다. 🙍‍♂️

네이버 API와의 통신에는 Spring WebClient, 배치 작업에는 Spring Batch를 적용했다. 특히 Spring Batch는 이해하고 적용하는 데 꼬박 2일이 걸렸던 것 같다. 😢


🔎 트러블슈팅

초급 프로젝트에 비해 사이즈가 커져서 그런지 개발 과정에서 많은 트러블 슈팅이 있었다. 그 중 가장 기억에 남는건 테스트 코드 관련 문제였다. (아오....)

  1. 테스트 환경에서 스키마 파일 충돌로 인한 테스트 실패 문제
    Intellij에서는 테스트가 정상적으로 통과되는데 Jacoco에서는 계속 실패하는 문제가 발생했다. 뭐가 문젠지 한참 찾아보다가 main/resourcestest/resources에 있는 스키마 파일명이 같아서 application-test.yaml에서 인식을 제대로 못하고 있었고 Spring JPA의 ddl-auto 설정과 schema.sql 파일이 동시에 테이블을 초기화하면서 충돌이 발생했던 것이었다..

    이를 해결하기 위해 스키마 파일명을 명확히 구분하고, application-test.yaml에서 테스트 전용 스키마 파일만 참조하도록 수정했고 테스트 시점에는 JPA의 DDL 자동 생성 기능을 끄고 스키마 파일을 통해 테이블을 초기화하도록 변경했다.

  2. 인기 리뷰 순위 산정 로직

    내가 맡은 기능은 아니었지만, 시간이 조금 남기도 하고 담당 팀원이 프론트엔드 UI 디자인을 수정하셔서 한번 시도해봤다.

    인기 리뷰 조회 시, 일정 기간 동안 리뷰에 추가된 좋아요 수와 댓글 수를 기준으로 점수를 산정해야 했는데 해당 기간 동안 작성된 리뷰의 전체 좋아요 수와 전체 댓글 수를 기반으로 점수가 산정되고 있었다. 😢

    그래서 다음과 같은 메서드를 추가해서 일정 기간 동안 리뷰에 추가된 좋아요 수와 댓글 수를 조회할 수 있도록 변경하고

    Map<UUID, Long> countByReviewIdBetween(Instant start, Instant end);

    조회된 좋아요 수댓글 수를 기반으로 인기 리뷰 점수를 산정하고, 동점인 리뷰의 경우 추가 정렬 조건을 적용하여 동일한 순위가 부여되지 않도록 변경했다.

    .sorted(Comparator
        .comparingDouble(ReviewScoreDto::score).reversed()
        .thenComparing(ReviewScoreDto::commentCount, Comparator.reverseOrder())
        .thenComparing(s -> s.review().getCreatedAt())
    )

해당 변경 사항 PR!!


👍 팀원들

초급 프로젝트에 비해 기간이 길어서 그런건지 그런 사람들이 모인건지.. 분위기는 진짜 좋았다. 😆
사는 곳도 나이도 다 달랐지만 말이 잘 통해서 편안한 분위기에서 프로젝트를 할 수 있었던 것 같다. 👍👍

나는 이전 파트에서 같은 팀이었던 팀원이 있어서 좀 더 편하게 적응할 수 있었다. (비대면이라 방구석 여포 기질이 발휘된 것도 있고..)

아무튼 서로 놀리고 드립치다가도 다들 개발할 땐 주말에도 디스코드에 모여서 열심히 해주셨다. 그 덕에 큰 문제 없이 발표까지 마무리할 수 있었다. (ppt 문제는 있었지만 ㅠ😅)

비대면이라 직접 보진 못하고 캠으로만 봐야 했지만, 매일 출석부 사진도 찍고 재미있게 얘기하면서 정말 오랜만에 새로 만난 사람들과 맘 터놓고 지낼 수 있었다. (모난 나랑 놀아줘서 감사해요~🥹) 아마 나중에 부트캠프를 떠올리면 가장 먼저 생각날 순간이 될 것 같다.


🔚 마무리

  • 이번 프로젝트에서는 Spring Batch, 외부 API 연동 등 기존에 접하지 못했던 기술들을 활용하면서 더 나은 백엔드 개발자로 성장할 수 있는 값진 경험을 했다.

  • 개발을 하면서 학습한 내용을 그때그때 정리해두어야겠다는 생각이 들었다.
    이렇게 정리해두면 이후 비슷한 문제를 마주했을 때 훨씬 더 빠르게 해결할 수 있을 것이라 느꼈다.

  • 나중에 시간이 된다면 Cache, Spring Security 등을 적용해서 완성도를 더 높이고 싶다.

  • 초급 프로젝트에 비해 규모가 좀 커서 개발 과정이 순탄하지만은 않았지만 팀원들 덕에 즐겁게 극복할 수 있었다. (팀장즈 최고~~!✨👍)

+ 팀복(?) 입은 단체샷 🙌

7개의 댓글

comment-user-thumbnail
2025년 9월 8일

오오 "이전 파트에서 같은 팀이었던 팀원" 분이 잘 챙겨주셨나봐요~ 정말 좋은 분 같아요! 중급 프로젝트 후기 잘읽었습니다:)

2개의 답글
comment-user-thumbnail
2025년 9월 8일

동우님이랑 놀아준 3조 칭찬해~..!

2개의 답글
comment-user-thumbnail
2025년 9월 8일

그리워요 데빌우! ㅜ.ㅜ

답글 달기