**모두의 플리(MOPL)**는 전 세계의 다양한 미디어 콘텐츠 데이터를 기반으로, 사용자가 자신만의 취향을 담은 플레이리스트를 큐레이션하고 이에 대한 깊이 있는 평점과 리뷰를 체계적으로 관리할 수 있도록 지원하는 글로벌 콘텐츠 평점 및 큐레이션 플랫폼이다.
본 플랫폼은 파편화된 개인의 콘텐츠 소비 경험이 단순한 기록에 그치지 않고, 사용자 간의 즉각적인 상호작용을 통해 고도화된 콘텐츠 커뮤니트로 확장되는 것을 핵심 가치로 삼았다.
특히 대규모 동시 접속 및 트래픽 폭주 상황을 대비하기 위해 초기 아키텍처 설계부터 시스템의 가용성과 확장성에 집중했다. 수만 명의 사용자가 동시에 콘텐츠에 반응하고 메시지를 주고받는 환경에서 지연이나 데이터 유실이 발생하지 않도록, 분산 캐시(Redis), 메시지 브로커(kafka), 실시간 양방향 통신(WebSocket/SSE) 기반의 인프라를 구축하여 데이터 정합성과 실시간성이 보장되는 견고한 시스템을 완성하는 데 주안점을 두었다.
| 코드 포맷터 설정 [/idea.codeStyles] [checkStyle] | 프로젝트 기반 코드 포맷터 설정 • 프로젝트 전반에 네이퍼 코드 스타일 적용 | | --- | --- | | CI / CD 구축 [/.github/workflows\ | CI 환경 구축 • ci.yml, deploy.java • 각각 dev / relase 브랜치에 push 할 시, GitHub Actions 워크플로우가 자동으로 트리거되도록 연동
자동 배포 스크립트 연동 • 브랜치별 푸시 이벤트 발생 시 빌드 및 테스트 자동화 후, 타겟 서버로의 배포 프로세스가 유기적으로 실행되도록 구성 | | 전역 설정 파일 [/config] | • JpaAuditingConfig.java • 엔티티의 생성 시점과 수정 시점을 자동으로 기록하기 위한 설정 파일 구현
• CacheConfig.java • 캐시 활성화를 위한 설정 파일 구현
• ClockConfig.java • 시간에 의존하는 비즈니스 로직의 유연한 단위 테스트를 위해 Clock 객체를 스프링 빈으로 등록하는 설정 파일 구현
• MapStructConfig.java • 모든 Mapper 인터페이스가 공통으로 상속받아 사용할 기본 매핑 정책 설정 파일 구현
• MDCLoggingFilter.java • 모든 HTTP 요청에 대해 고유한 로그 이름표를 부여하는 필터 파일 구현
• QueryDslConfig.java • 프로젝트 전역에서 의존성을 주입받아 동적 쿼리를 작성할 수 있도록 설정 파일 구현
• AsyncConfig.java
• 애플리케이션 응답 속도 향상을 위해 특정 로직을 비동기적으로 처리하는 스레드 풀 설정 파일 구현- |
| 대화
[/conversation] | 대화 데이터 영속성을 위한 핵심 엔티티 설계
• /entity/ConversationEntity.java
• /entity/ConversationParticipantEntity.java
• 사용자와 대화방 간의 다대다 관계를 해소하기 위한 중간 매핑 엔티티 설계 및 지연 로딩(LAZY) 적용
**대화 API 컨트롤러 설계 ****• /controller/ConversationController.java • RESTful 기반의 대화 리소스 관리 API 구축
대화 서비스 및 비즈니스 로직 구현 • /service/ConversationService.java • 대화 객체의 생명주기 및 조회 최적화 로직 구현
QueryDSL 기반 동적 쿼리 검색 로직 구현 • /repository/qdsl/ConversationQdslRepository.java • 검색어(닉네임, 메시지 내용)에 따른 동적 필터링 구현 • 생성 시간과 식별자를 결합한 Tie-breaking 복합 커서 페이지네이션 구축하여 동점자 발생 시 데이터 누락 방지
대화 동기화 이벤트 처리 • /event/ConversationCreatedEvent.java • 대화방 생성 시 ElasticSearch 인덱싱 및 Redis 동기화를 위한 애플리케이션 로컬 이벤트 비동기 발행
클라이언트 요청 / 응답 DTO 설계 • /dto/request, /dto/response • 대화 생성 및 목록 조회 요청 객체 캡슐화 및 기본값 처리 • MapStruct를 활용하여 엔티티와 DTO 간의 변환 로직 추상화 및 평탄화
**실시간 통신 컨트롤러 및 메트릭 수집
**** • @MessageMapping을 활용한 웹소켓 메시지 수신 및 @Valid 기반 페이로드 검증
• 메시지 브로드캐스트 성공/실패 여부 및 소요 시간을 측정하여 프로덕션 관측성(Observability) 확보 |
| DM
[/directmessage] | **DM API 컨트롤러 설계
****• /controller/DirectMessageController.java
• RESTful 기반의 대화 리소스 관리 API 구축
DM 서비스 및 비즈니스 로직 구현 • /service/DirectMessageService.java • DM 객체의 생명주기 및 조회 최적화 로직 구현
DM 동기화 이벤트 처리 • /event/DirectMessageCreatedEvent.java • /event/DirectMessageReadEvent.java • DM 생성 / 읽음 시, Redis 동기화를 위한 애플리케이션 로컬 이벤트 비동기 발행
클라이언트 요청 / 응답 DTO 설계 • /dto/request, /dto/response • DM 생성 및 목록 조회 요청 객체 캡슐화 및 기본값 처리 • MapStruct를 활용하여 엔티티와 DTO 간의 변환 로직 추상화 및 평탄화 | | 팔로우 [/follow] | **팔로우 API 컨트롤러 설계 ****• /controller/FollowController.java • RESTful 기반의 대화 리소스 관리 API 구축
팔로우 서비스 및 비즈니스 로직 구현 • /service/FollowService.java • 팔로우 객체의 생명주기 및 조회 최적화 로직 구현
팔로우 동기화 이벤트 처리 • /event/FollowCreatedEvent.java • /event/FollowDeletedEvent.java • 팔로우 생성 / 삭제 시, Redis 동기화를 위한 애플리케이션 로컬 이벤트 비동기 발행
클라이언트 요청 / 응답 DTO 설계
• /dto/request, /dto/response
• 팔로우 생성 요청 객체 캡슐화 및 기본값 처리
• MapStruct를 활용하여 엔티티와 DTO 간의 변환 로직 추상화 및 평탄화 |
| 테스트 코드 작성
[/test/conversation]
[/test/directemssage]
[/test/follow] | **컨트롤러 계층 단위 테스트
****• @WebMvcTest 및 Security Context 모킹을 통한 HTTP 상태 코드(200, 201, 400, 403, 404) 전수 검증
• 잘못된 파라미터(음수 limit, 잘못된 커서 등) 입력 시 커스텀 예외 반환 여부 검증
**서비스 계층 단위 테스트
****• 엣지 케이스 및 예외 처리 흐름 (권한 없음, 존재하지 않는 리소스, 중복 데이터 생성 등) 심층 검증
• ApplicationEventPublisher 모킹을 통해 비동기 이벤트가 적절한 인자값과 함께 1회 정확히 발행되는지 검증
• Redis Cache Hit/Miss 상황을 분리하여 캐시 백필(Backfill) 로직 정상 동작 확인 |
| QA | 팔로우 DTO ID 누락 해결
◦ /follow/mapper/FollowMapper.java
◦ Mapper 내 @Mapping 애너테이션 추가
◦ 관련 노션 페이지
‣ Follow DTO 내 ID 누락
DM 읽음 처리 생성 일괄 처리 ◦ /directmessage/service/DirectMessageService.java ◦ 마지막으로 수신한 메시지를 기준으로 이전 메시지의 읽음 처리를 생성하는 일괄 쿼리문 작성 ◦ 관련 노션 페이지 ‣ DM 일괄 읽음 처리
대화 DTO 내 필드명 오타 수정 ◦ /conversation/dto/response/ConversationDto.java ◦ 대화 DTO 내 오타 수정 ****◦ 관련 노션 페이지 ‣ DM 읽음 처리 생성 API 미호출 ◦ 마지막 메시지 누락 |
| PR 리뷰 작성 | • PR 리뷰 작성 Github 라운드로빈 정책에 의해 리뷰어로 선정될 때마다 팀원의 PR 리뷰 작성 | | --- | --- | | 문서화 작업 | • 노션 팀 페이지 정리 ◦ 노션 팀 페이지에 기재된 모든 문서를 가독성 있게 정리 ◦ Codeit Sprint 10기 고급 프로젝트 4팀 | | 기타 | • 초기 프로젝트 회의록 작성 [6/18] 프로젝트 초기 회의 [6/22] ERD & Github 초기 설정 |
PR 링크
| PR 요쳥 | • ‣ • ‣ | | --- | --- | | PR 리뷰 | • ‣ • ‣ |