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

대부분의 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 — 팀이 아키텍처 부패를 되돌릴 수 없게 되기 전에 식별하도록 돕습니다.