부트캠프

49일차 TIL

ohs020105 2025. 1. 10. 21:14

3-Layer Architecture를 적용한 프로젝트 구조 설

 
 

📌 들어가며

 
 

최근 진행한 프로젝트에서 코드의 유지보수성과 확장성을 높이기 위해 3-Layer Architecture를 적용했다. 이번 포스팅에서는 각 계층별 구현 내용과 그로 인해 얻은 이점들을 공유하고자 한다.

 
 

🎯 3계층 구조란?

 
 

프로젝트를 Controller, Service, Repository 3개의 계층으로 나누어 각각의 역할과 책임을 분리하는 아키텍처 패턴이다.

 
 

💡 각 계층별 구현 내용

 
 

1. Controller 계층

class ReviewController {
  createReview = async (req, res, next) => {
    const { orderId, content } = req.body;
    const userId = req.user.id;
    // Service 계층으로 비즈니스 로직 위임
  }
}

 

Controller 계층의 역할

 
 

 

  • HTTP 요청/응답 처리를 담당했

 

 

 

  • 요청 데이터 추출을 수행했다

 

 

 

  • 응답 형식을 결정했다

 

 

 

  • 에러 처리 미들웨어와 연동했다

 

 
 

이렇게 구현한 이유

 
 

 

  • HTTP 통신 관련 로직을 한 곳에서 관리하여 일관성을 확보할 수 있었다

 

 

 

  • 요청/응답 형식 변경 시 Controller만 수정하면 되어 유지보수가 용이했다

 

 

 

  • 비즈니스 로직과 분리되어 테스트가 쉬워졌다

 

 
 

2. Service 계층

class ReviewService {
  createReview = async ({ userId, orderId, content }) => {
    // 주문 존재 여부 확인
    // 리뷰 중복 검사
    // 권한 확인
    // 데이터 검증
  }
}

 

Service 계층의 역할

 
 

 

  • 즈니스 로직 처리를 담당했다

 

 

 

  • 데이터 유효성 검증을 수행했

 

 

 

  • 트랜잭션을 관리했다

 

 

 

  • 러 처리를 담당했다

 

 
 

렇게 구현한 이유

 
 

 

  • 비즈니스 규칙을 한 곳에서 관리하여 일관성을 유지할 수 있었다

 

 

 

  • 복잡한 비즈니스 로직을 응집도 있게 관리할 수 있었다

 

 

 

  • Repository 계층과 분리되어 데이터베이스 독립성을 확보할 수 있었

 

 
 

3. Repository 계층

class ReviewRepository {
  findReviewById = async (reviewId) => {
    return this.prisma.review.findUnique({
      where: { id: Number(reviewId) }
    });
  }
}

 

Repository 계층의 역할

 
 

 

  • 데이터베이스 작업을 전담했다

 

 

 

  • 데이터 CRUD 작업을 수행했다

 

 

 

  • 쿼리 최적화를 담당했다

 

 
 

이렇게 구현한 이유

 
 

 

  • 데이터 접근 로직을 한 곳에서 관리하여 일관성을 확보할 수 있었다

 

 

 

  • ORM 변경 시 Repository만 수정하면 되어 유지보수가 용이했다

 

 

 

  • 쿼리 최적화와 캐싱을 중앙에서 관리할 수 있었다

 

 
 

🎁 얻은 이점

1. 코드 품질 향상

 

 

  • 각 계층의 책임이 명확해져 코드 가독성이 증가했다

 

 

 

  • 유지보수가 용이해졌다

 

 

 

  • 테스트 작성이 쉬워졌다

 

 
 

2. 확장성 확보

 

  • 새로운 기능 추가가 용이해졌다

 

 

 

  • 기존 코드 수정 없이 기능 확장이 가능해졌다

 

 

 

  • 다른 개발자와의 협업이 수월해졌다

 

 
 

3. 재사용성 증가

 

  • 비즈니스 로직을 재사용할 수 있게 되었다

 

 

 

  • 데이터 접근 로직을 재사용할 수 있게 되었다

 

 

 

  • 통 기능의 중복 구현을 방지할 수 있게 되었다

 

 
 

🔨 향후 개선 사항

 
01. DI(Dependency Injection) 패턴을 적용할 예정이다
 
02. 테스트 코드를 작성할 예정이다
 
03. 로깅 시스템을 구축할 예정이다
 
04. 캐싱 전략을 수립할 예정이다

 

 
 

📝 마치며

 

3-Layer Architecture를 적용함으로써 코드의 구조가 더욱 체계적으로 개선되었고, 유지보수성과 확장성이 크게 향상되었다. 앞으로도 더 나은 구조를 위해 지속적인 리팩토링을 진행할 예정이다.

 
 

참고 자료

 
 

 

  • Clean Architecture

 

 

 

  • Node.js Best Practices

 

 

 

  • Prisma Documentation

 

'부트캠프' 카테고리의 다른 글

50일차 TIL  (0) 2025.01.13
WIL  (0) 2025.01.10
48일차 TIL  (0) 2025.01.09
47일차 TIL (Today I Learned  (0) 2025.01.08
46일차 TIL (Today I Learned)  (0) 2025.01.07