C# 아키텍처 마스터리 — ASP.NET Core의 아키텍처 냄새 (5부)

발행: (2025년 12월 24일 오전 05:50 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

C# 아키텍처 마스터리 — ASP.NET Core에서의 아키텍처 냄새 (파트 5)

대부분의 ASP.NET Core 프로젝트는 컴파일되고 많은 경우 동작하지만, 내부에서는 아키텍처 냄새 때문에 부패할 수 있습니다. 이러한 패턴은 초기에는 생산적으로 보이지만 나중에 재앙이 됩니다. 이번 파트에서는 실제 ASP.NET Core 시스템에서 가장 흔히 보이는 세 가지 냄새를 살펴봅니다:

  • 뚱뚱한 컨트롤러(Fat Controllers)
  • 갓 서비스(God Services)
  • DbContext 누수(DbContext Leaks)

이는 단순한 스타일 문제가 아니라 확장성 및 정확성 문제입니다.

1. 아키텍처 냄새가 실제로 무엇인지

아키텍처 냄새는 시스템이 변경, 테스트 또는 확장을 거부하게 될 구조적 경고 신호입니다.

왜 냄새가 위험한가

  • 처음에는 “합리적”으로 보입니다.
  • 코드 리뷰를 통과하기도 합니다.
  • 조용히 성장합니다.

클린 아키텍처는 냄새가 퍼지기 전에 제거하는 것에 크게 초점을 둡니다.

2. 뚱뚱한 컨트롤러 — 가장 흔한 냄새

냄새

비즈니스 규칙을 포함하거나 워크플로를 조정하거나 데이터베이스에 직접 접근하는 컨트롤러. 또한 검증, 매핑, 로직을 수행합니다.

// ❌ Fat controller
[HttpPost]
public async Task Create(OrderDto dto)
{
    if (dto.Total `.
}

해결책

  • 비즈니스 로직을 전용 서비스로 이동합니다.
  • 컨트롤러는 얇게 유지: 입력을 받고, 서비스를 호출하고, 결과를 반환합니다.
  • DTO와 매핑 라이브러리(예: AutoMapper)를 컨트롤러 밖에서 사용합니다.

7. 냄새 감지 체크리스트 (코드 리뷰 시 사용)

다음 질문을 해보세요:

  • 이 컨트롤러에 로직이 포함되어 있나요?
  • 어떤 서비스가 “너무 중요해 보이나요”?
  • DbContext가 인프라스트럭처 밖에 노출되어 있나요?
  • 비즈니스 규칙이 EF 기능에 의존하고 있나요?
  • ASP.NET Core 없이도 테스트가 가능할까요?

답이 라면, 냄새를 발견한 것입니다.

8. 냄새는 아키텍처 부채다

일반적인 기술 부채와 달리, 냄새는:

  • 시간이 지날수록 복합적으로 쌓입니다.
  • 코드베이스의 다른 부분으로 퍼집니다.
  • 새로운 코드를 오염시킵니다.

초기에 무시하면 나중에 큰 고통을 보장합니다.

9. 클린 아키텍처는 대부분 제거에 관한 것이다

훌륭한 아키텍처는 레이어를 추가하는 것이 아니라 잘못된 위치에서 책임을 제거하는 것입니다:

  • 얇은 컨트롤러.
  • 집중된 서비스.
  • 격리된 인프라스트럭처.

마무리 생각

당신의 ASP.NET Core 앱에 다음 중 하나라도 있다면:

  • 뚱뚱한 컨트롤러
  • 갓 서비스
  • DbContext 누수

오늘은 동작할지 몰라도 내일은 당신과 싸울 것입니다. 이러한 냄새를 일찍 인식하는 것은 시니어 엔지니어링 성숙도의 가장 강력한 신호 중 하나입니다.

작성자: Cristian Sifuentes — 팀이 아키텍처 부패를 되돌릴 수 없게 되기 전에 식별하도록 돕습니다.

Back to Blog

관련 글

더 보기 »