Program.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using Application;
  2. using Application.Abstractions.Chat;
  3. using Application.Abstractions.Crypto;
  4. using Infrastructure;
  5. using SharedKernel;
  6. using System.Reflection;
  7. using Web.Api;
  8. using Web.Api.Extensions;
  9. using Web.Api.Hubs;
  10. using Web.Api.Services;
  11. var builder = WebApplication.CreateBuilder(args);
  12. var settings = builder.Configuration.Get<AppSettings>()!;
  13. Console.Title = settings.App.Name;
  14. Console.WriteLine($"ENV={builder.Environment.EnvironmentName}");
  15. Console.WriteLine($"현재 시간: {DateTime.Now} / {TimeZoneInfo.Local.Id}");
  16. builder.Services.Configure<AppSettings>(builder.Configuration);
  17. builder.Services
  18. .AddApplication()
  19. .AddPresentation()
  20. .AddApiInfrastructure(builder.Configuration);
  21. // CORS
  22. builder.Services.AddCors(options =>
  23. {
  24. options.AddPolicy(settings.CorsPolicy.Name, policy =>
  25. {
  26. policy
  27. .WithOrigins(settings.CorsPolicy.AllowedOrigins.ToArray())
  28. .AllowAnyHeader()
  29. .AllowAnyMethod()
  30. .AllowCredentials()
  31. .SetPreflightMaxAge(TimeSpan.FromSeconds(settings.CorsPolicy.PreflightMaxAgeSeconds));
  32. });
  33. });
  34. // SignalR
  35. builder.Services.AddSignalR();
  36. builder.Services.AddSingleton<ICryptoHubService, CryptoHubService>();
  37. // Chat
  38. builder.Services.AddSingleton<IChatHubService, ChatHubService>();
  39. builder.Services.AddHostedService<KickSubscriberService>();
  40. // Endpoints
  41. builder.Services.AddEndpoints(Assembly.GetExecutingAssembly());
  42. builder.Logging.AddConsole();
  43. /**
  44. * =======================================================================================================================================================
  45. */
  46. var app = builder.Build();
  47. /**
  48. * =======================================================================================================================================================
  49. */
  50. if (app.Environment.IsDevelopment())
  51. {
  52. app.UseSwagger();
  53. app.UseSwaggerUI();
  54. }
  55. // 상태 확인
  56. app.MapHealthChecks("/health");
  57. app.UseExceptionHandler();
  58. app.UseCors(settings.CorsPolicy.Name);
  59. app.UseStaticFiles();
  60. app.UseAuthentication();
  61. app.UseAuthorization();
  62. app.MapEndpoints();
  63. app.MapHub<CryptoHub>("/hubs/crypto");
  64. app.MapHub<ChatHub>("/hubs/chat");
  65. app.Run();