클린 아키텍처 백엔드 구조 검증 및 논의

오늘 아침 회의 후, 어제까지 구현했던 클린 아키텍처 백엔드 구조에 대한 검증을 했습니다. 특히 domains/entities domains/repositories 하위의 추상화된 인터페이스(Repository 인터페이스)가 올바르게 설계된 것을 확인했습니다. 이제 이 추상화를 바탕으로 실제 Use Case와 HTTP API 엔드포인트를 구현했습니다.

Use Case (비즈니스 로직) 정의 및 구현

핵심 비즈니스 규칙을 담당하는 Usecase 계층을 명확하게 정의하고, 각 Usecase가 데이터베이스에서 데이터를 가져와 비즈니스 규칙을 적용하여 알맞은 형태로 변환하여 반환하는 역할을 수행하도록 구현했습니다.

  • 구현된 Use Case 목록
    GetRoutinesUseCase : 특정 사용자의 루틴 목록을 가져오는 로직
    GetRoutineByIdUseCase : 특정 루틴 하나의 상세 정보를 조회하는 로직
    CompleteRoutineUseCase: 사용자가 루틴을 완료 처리하는 비즈니스 로직
    GetRoutineCompletionsUseCase: 특정 루틴의 완료를 조회하는 로직.

REST API 엔드포인트 구현 (Next.js App Router)

정의된 Use Case들을 이용하기 위하여 REST API 엔드포인트를 Next.js의 App Router 구조에 맞춰 구현했습니다. 각 API는 명확한 HTTP 상태 코드를 반환하며 오류 발생 시에는  한글 에러 메시지를 제공하도록 설계했습니다.

  • 구현된 API 목록
    루틴 관리
    POST /api/routines : 루틴 생성하기
    GET /api/routines : 모든 루틴 목록 보기(필터링 기능 포함)
    GET /api/routines/[routineId] : 특정 루틴 상세 정보 보기
    PATCH /api/routines/[routineId] : 루틴 정보 수정하기
    DELETE /api/routines/[routineId] : 루틴 삭제하기

    루틴 완료
    POST /api/routines/[routineId]/complete : 루틴 완료 기록하기
    GET /api/routines/[routineId]/completions: 특정 루틴의 완료 기록 조회하기

기술적 문제 해결 

개발 과정에서 기술적인 문제들을 해결하며 코드의 안정성을 높였습니다.

  • TypeScript 타입 이슈 해결 : Prisma의 null 타입 처리와 Next.js 15의 새로운 타입 요구사항에 맞춰 TypeScript 관련 오류들을 해결하며 타입 일관성을 확보했습니다.

클린 아키텍처 완성 및 테스트 준비

오늘 작업의 핵심은 이론적으로만 이해했던 클린 아키텍처를 실제로 동작하는 API로 구현했다는 점입니다.

  • 명확한 계층 분리
    API 레이어 : HTTP 요청/응답 처리만을 담당합니다.
    Use Case 레이어 : 순수한 비즈니스 로직만을 담당합니다.
    Repository 레이어 : 데이터 접근(Prisma 구현)만을 담당합니다.

  • 의존성 역전 원칙 준수 : 상위 레이어가 하위 레이어의 구체적인 구현(Prisma)에 의존하지 않고, 오직 인터페이스에만 의존하도록 설계하여 코드의 유연성과 테스트 용이성을 인지하며 설계했습니다.

정리

오늘 클린 아키텍처 기반으로 '루틴' 기능에 대한 백엔드와 API의 구현을 작업했습니다. 앞으로 다른 기능들을 개발할 때도 동일한 패턴을 적용한다면, 이를 기반으로 작업할 수 있습니다. 내일은 구현된 API들의 정확성 확인을 진행할 예정입니다. 이 과정을 통하여 프론트엔드 연동을 위한 백엔드 API를 최종적으로 구현하는 것에 노력을 하겠습니다.

728x90