[SB 3기] 코드잇 중급 프로젝트 회고 : Monew

JHLee·2025년 9월 9일

코드잇 중급 프로젝트 회고 : Monew

고급 프로젝트을 앞두고, 그 전 진행했던 코드잇 중급 프로젝트를 정리해보려 한다..! 👀
초급 프로젝트에서는 기본기를 다지고 협업을 경험해보았다면, 이번에는 새로운 기술들을 도입하고 조금 더 깊은 개발 경험을 쌓을 수 있었다.
배우는 게 정말 많았고, 재밌게 몰입할 수 있었던 프로젝트였다!👍

🗂️ 프로젝트 개요

모뉴(MoNew)

모뉴는 다양한 뉴스 출처를 통합하여 관심사 기반으로 뉴스를 저장하는 뉴스 통합 관리 플랫폼입니다.
관심 있는 주제의 기사가 등록되면 실시간 알림을 받고, 댓글과 좋아요를 통해 다른 사용자와 의견을 나눌 수 있는 소셜 기능도 함께 제공됩니다.

✅ 주요 기능

  • 사용자 관리 (등록/조회/수정/삭제/로그인)
  • 관심사 키워드 관리 (등록/조회/수정/삭제/목록/구독)
  • 뉴스 기사 관리 (수집/조회/삭제/목록/백업 및 복구)
  • 댓글 관리 (등록/조회/수정/삭제/목록/좋아요)
  • 활동 내역 관리 (조회)
  • 알림 관리 (등록/조회/수정/삭제/목록)

📌 기술 요구 사항

  • 유효성 검사
  • 커스텀 예외 처리
  • 로그 관리
  • 테스트 주도 개발 (TDD)
  • CI/CD 파이프라인 구축

👩‍💻 나의 역할

1️⃣ 기능 개발

  • 댓글 도메인
    • 댓글 등록, 수정, 논리 삭제, 물리 삭제 기능
    • 정렬 및 커서 기반 페이지네이션 목록 조회 기능
    • 좋아요/좋아요 취소 기능
  • 알림 도메인
    • 좋아요 알림 등록 기능
    • 전체 알림 확인/개별 알림 확인 기능

2️⃣ 개발 외 역할

  • Jira ↔ Git 연동
    • Jira → Git : Jira 백로그 이슈를 GitHub Issue로 자동 등록 (수동 트리거버튼 활용)
    • Git → Jira : GitHub 이슈 close 시 Jira 이슈 자동 완료 처리
  • CI 파이프라인 구축 (GitHub Actions)
    • PR 생성 시 자동 테스트 및 커버리지 리포트 실행
    • PR 댓글에 테스트 커버리지 요약 자동 추가
  • CD 파이프라인 구축 (GitHub Actions)
    • Docker 이미지 ECR 빌드 -> AWS ECR 푸시
    • ECS 서비스 자동 배포 구현

🔗 깃허브 링크


📚 개발 환경 및 사용 스택

⚙️ Backend Stack
📦 Framework
├── Spring Boot 3.x          # 메인 애플리케이션 프레임워크
├── Spring Data JPA          # ORM 및 데이터 접근
├── Spring Batch             # 대용량 배치 처리
└── Gradle                   # 빌드 및 의존성 관리 도구


🗄️ Database
├── H2 Database             # 개발/테스트용 In-memory DB
├── PostgreSQL              # 운영 환경 RDBMS
└── MongoDB                 # 문서 지향 NoSQL DB

📚 Documentation
├── Swagger/OpenAPI 3.0     # API 문서 자동화
└── Notion                  # 프로젝트 문서 및 협업 기록
└── Jira                    # 일정 및 이슈 관리

🔧 Development Tools
├── IntelliJ IDEA           # 통합 개발 환경(IDE)
├── Git & GitHub            # 버전 관리 및 협업
├── Discord                 # 팀 커뮤니케이션
└── Postman                 # API 테스트 도구

🚀 Deployment & Monitoring
├── AWS                     # 클라우드 인프라
├── Docker                  # 컨테이너 기반 배포
├── Grafana                 # 모니터링 시각화
└── Prometheus              # 메트릭 수집 및 모니터링

🛠️ 트러블슈팅 사례

1) 댓글 목록 조회 - N+1 쿼리 문제

  • 문제: 댓글 조회 시 각 댓글마다 좋아요 여부를 확인하면서 N+1 문제가 발생
  • 해결: 댓글 ID를 한 번에 수집 → 좋아요 여부를 한 번의 쿼리로 조회 → 매핑 처리
  • 결과: 쿼리 수 N+12로 최적화

2) 댓글 논리 삭제 - @Where 필터링의 한계

  • 문제: 엔티티 단에서 @Whereis_deleted=false를 필터링 → 모든 조회에 일괄 적용되어 유연성 부족
  • 해결: @Where 제거 후 QueryDSL, JPA 메서드 기반으로 조건을 명시적으로 관리
  • 결과: 조회 조건을 상황에 맞게 제어 가능, Hibernate 의존도 감소

3) 데이터 시더 실행 - 낙관적 락 충돌

  • 문제: 동일한 엔티티(Article)를 반복 수정하면서 StaleObjectStateException 발생
  • 해결: Seeder 클래스 간 실행 순서를 명시적으로 보장하여 의존 관계에 맞게 순차 실행
  • 결과: 충돌 제거 및 안정적인 초기 데이터 세팅 확보

4) CD 파이프라인 - task-definition.json 인식 불가

  • 문제: GitHub Actions의 Job 간 독립 실행 환경 때문에 deploy Job에서 파일을 찾지 못함
  • 해결: deploy Job에도 checkout 단계 추가
  • 결과: CD 파이프라인 정상 동작 및 자동 배포 성공

5) JPQL - CURRENT_TIMESTAMP 타입 불일치

  • 문제: Instant 필드에 CURRENT_TIMESTAMP를 매핑하면서 H2에서 타입 오류 발생
  • 해결: Native Query로 수정하여 DB 환경에 관계없이 일관 처리
  • 결과: 테스트/운영 환경 모두에서 정상 동작
      

💡 프로젝트를 통해 배운 점

✅ 기술적 성과

  • Spring Boot, JPA, QueryDSL,Spring Batch, PostgreSQL, Docker, AWS 등 다양한 기술 스택 활용
  • QueryDSL 기반 커서 페이지네이션 도입
  • GitHub Actions 기반 CI/CD 구축 -> 빌드/배포 과정을 자동화하여 배포 시간 단축 및 안정적 배포 환경 확보
  • 로드밸런서(ALB) + 롤링 업데이트 기반 무중단 배포 경험
  • 댓글 서비스 테스트 커버리지 달성
    • 서비스 계층: 라인 98% / 브랜치 90%
    • 레포지토리 계층: 라인 100% / 브랜치 92%
  • 이벤트 리스너 기반 알림 처리 구현

🤝 비기술적 성과

  • Jira를 통한 스프린트/이슈 관리 → 팀 내 작업 가시성 확보
  • Git ↔ Jira 연동으로 워크플로우 자동화
  • 체크리스트 기반 PR 템플릿 + 피드백 반영 → 리뷰 효율성과 코드 품질 향상

📌 개선 계획

  • 댓글 물리 삭제 시 관리자 권한 검증 추가 (Spring Security)
  • 기사별 댓글 정렬 옵션 추가 (최신순 / 좋아요순) -> UX 개선

✍️ 마무리

이번 프로젝트는 여러모로 새롭게 경험해보는 게 많아서 재미있었다.😊

특히 테스트 주도 개발(TDD), CI/CD 자동화, 무중단 배포 같은 실무 기술들을 직접 경험해볼 수 있었는데, 이론으로만 접했을 때는 잘 와닿지 않던 개념들이 실제로 구현해보니 훨씬 이해가 잘됐다.💡 (TDD는 정말 쉽지 않은 녀석이었다...🥹)

새로운 툴도 다양하게 활용해봤다. 멘토님 추천으로 처음 도입한 Jira는 작업 흐름을 한눈에 파악할 수 있어서 협업에 유용했고, AI 코드 리뷰 툴인 CodeRabbit은 PR 요약, 수정 제안, 다이어그램 생성까지 자동으로 해줘서 코드 리뷰가 한결 편해졌다. 덕분에 코드 품질도 더 좋아졌다. (코드래빗 is God🧎‍♀️)

무엇보다도 기억에 남는 건 팀원들과의 협업이었다.🤝
이슈가 생겼을 때 다같이 고민하고 해결해 나가는 과정이 인상 깊었고, 새벽이나 주말에도 적극적으로 참여하는 팀원들을 보며 자극도 많이 받았다.🔥
서로 새로운 기술이나 지식을 적극적으로 공유하는 분위기 속에서 배우는 것도 많았고, 팀 분위기가 좋아서 프로젝트 기간 내내 즐겁게 개발할 수 있었다. 🙌 (1조 할머니 보쌈팀 최고...👍)

아쉬운 점이 있다면, 팀원들의 모든 코드 리뷰를 꼼꼼히 해보며 코드들을 전부 파악하고 싶었는데 그러지는 못한 것 같아 조금 아쉽다.

이제 고급 프로젝트를 앞두고 있는데, 중급 프로젝트의 경험을 바탕으로 더욱 수월하게 진행할 수 있을 것 같아 기대가 된다. 정말 많이 배우고 성장할 수 있었던 프로젝트였다!☺️

profile
개발자로 성장하기

0개의 댓글