Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

ASP.NET WebAPI는 web.config에서 구성할 수 없다? 코드 기반 구성 방법 완벽 정리

web.config 파일로 Web API를 구성할 수 있을까?

결론부터 말하면 아니요, Web API는 web.config 파일에서 직접 구성할 수 없습니다.

Web API는 코드 기반(Code-based) 구성 방식만을 지원합니다. 즉, WCF와 달리 web.config나 XML 설정 파일을 통해 동작을 제어할 수 없으며, 모든 구성은 애플리케이션 시작 시 코드를 통해 이루어집니다.

대신 개발자는 코드를 통해 Web API 호스팅 인프라와 각종 컴포넌트의 동작을 자유롭게 사용자 지정할 수 있습니다. 주요 구성 대상은 다음과 같습니다.

  • Routes – 라우팅 규칙 정의
  • Formatters – 요청/응답 데이터 포맷 처리
  • Filters – 공통 관심사(Cross-cutting Concerns) 처리
  • Dependency Resolver – 의존성 해결
  • Message Handlers – HTTP 메시지 파이프라인 처리
  • ParameterBindingRules – 매개변수 바인딩 규칙
  • Properties – 전역 속성 저장소
  • Services – 내부 서비스 교체 및 확장

각 항목에 대해 조금 더 자세히 살펴보겠습니다.

1. Routes (라우팅)

컨트롤러의 public 메서드는 액션(Action) 메서드, 또는 줄여서 '액션'이라고 부릅니다.

Web API 프레임워크가 요청을 받으면, 라우팅 테이블(Routing Table)을 참조해 해당 요청을 어떤 액션으로 전달할지 결정합니다. 라우팅은 일반적으로 다음과 같이 정의합니다.

routes.MapHttpRoute(
    name: "API Default",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

위 예제에서 {controller}{id}는 URI 세그먼트를 나타내며, id는 선택적(Optional) 매개변수로 설정되어 있습니다.

2. Formatters (포매터)

ASP.NET Core MVC는 입력(Input) 포매터와 출력(Output) 포매터를 통해 Web API에서의 데이터 교환을 지원합니다.

  • 입력 포매터: 모델 바인딩(Model Binding) 과정에서 요청 본문을 객체로 변환하는 데 사용됩니다.
  • 출력 포매터: 응답 데이터를 JSON, XML 등 클라이언트가 요청한 형식으로 직렬화하는 데 사용됩니다.

기본 제공 포매터가 지원하지 않는 콘텐츠 타입(Content Type)이 필요하다면, 커스텀 포매터를 작성하여 손쉽게 확장할 수 있습니다.

3. Filters (필터)

필터는 로깅, 예외 처리, 성능 측정, 인증(Authentication), 권한 부여(Authorization) 같은 교차 관심사(Cross-cutting Concerns)를 구현하는 데 활용됩니다. 여러 액션에 공통적으로 적용되어야 하는 로직을 필터로 분리하면 코드 중복을 크게 줄일 수 있습니다.

4. Dependency Resolver (종속성 확인자)

Web API는 의존성 주입(Dependency Injection)을 위해 IDependencyResolver 인터페이스를 정의하고 있습니다. 이를 통해 Autofac, Unity 등 외부 IoC 컨테이너와 통합하여 컨트롤러 및 서비스의 종속성을 해결할 수 있습니다.

5. Message Handlers (메시지 핸들러)

메시지 핸들러는 들어오는 HTTP 요청이 HttpControllerDispatcher에 도달하기 전에 요청을 검사, 수정 또는 거부할 수 있는 파이프라인 단계입니다. 커스텀 헤더 검증, 인증 토큰 확인 등 전역적인 HTTP 수준 처리에 유용합니다.

6. ParameterBindingRules (매개변수 바인딩 규칙)

Web API가 컨트롤러의 메서드를 호출할 때는 해당 메서드의 매개변수에 값을 할당해야 하는데, 이 과정을 바인딩(Binding)이라고 합니다. ParameterBindingRules를 사용하면 특정 타입이나 조건에 따라 매개변수가 바인딩되는 방식을 사용자 지정할 수 있습니다.

마무리

이처럼 ASP.NET Web API는 web.config 기반의 선언적 구성 대신, 코드 중심의 유연한 구성 방식을 채택하고 있습니다. 덕분에 형식 안전성(Type Safety)과 컴파일 타임 검증의 이점을 누릴 수 있으며, 라우팅부터 포매터, 필터까지 애플리케이션의 거의 모든 동작을 프로그래밍 방식으로 세밀하게 제어할 수 있습니다.