Skip to content

[FORUM] 과제 제출 #2

@woals2840

Description

@woals2840

피쳐 리스트업

  1. 인기안건조회
    • 제목
    • 추천수
    • 공개범위
    • 작성자 학과
    • 남은날짜
  2. 안건목록조회
    • 제목
    • 추천수
    • 공개범위
    • 작성자 학과
    • 남은날짜
    • 추천여부
  3. 투표대상 안건조회
    • 제목
    • 작성자 학과
    • 남은날짜
    • 추천여부
  4. 안건등록
    • 제목
    • 내용
    • 공개범위
    • 유저ID
  5. 추천하기
    • 유저 ID
    • 안건 ID
  6. 투표하기
    • 유저 ID
    • 안건 ID
    • 찬반여부
  7. 안건상세조회
    • 제목
    • 공개범위
    • 작성자학과
    • 설명
    • 찬성수(nullable)
    • 반대수(nullable)

고민한 점

이슈 조회 기능은 단순해 보였지만, 실제 구현 단계에서 여러 조건을 동시에 처리해야 하는 복합 구조라는 문제가 있었다. 정렬 기준(추천순/최신순), 공개 범위(ALL/COLLEGE/DEPARTMENT), 사용자 정보(단과대·학과), 그리고 항상 적용되는 isPassed 필터링까지 모두 결합되면서 OR/AND 조건이 함께 필요한 상황이 자주 발생했다. 이를 Spring Data JPA의 메서드 네이밍만으로 처리하려면 메서드 수가 기하급수적으로 늘어나고, 코드 중복 또한 피할 수 없었다.

이 문제를 해결하기 위해 QueryDSL을 도입했다. QueryDSL은 조건을 동적으로 조립할 수 있어, 공개 범위별 OR 조건, 사용자 정보 기반 필터링, 정렬 분기 등을 하나의 메서드 내에서 명확하게 표현할 수 있었다. 그 결과, 복잡한 조회 로직을 깔끔하게 정리하고, 서비스 레이어와 쿼리 레이어의 책임을 명확히 분리할 수 있었다.

QueryDSL 사용은 선택이 아니라 유지보수성과 확장성을 확보하기 위한 필연적인 결정이었다.

공수분담

곽재민: 인기안건조회, 안건목록조회, 투표안건상세조회
정원준: 투표 대상 목록 안건조회, 안건등록, 추천, 투표

설계도 작성

ERD

Image

API 명세서

https://hail-parakeet-909.notion.site/API-2b25be1381ee81c2b8f3e9707a7ccbd7?source=copy_link

아키텍쳐

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions