usingDBX.Dotnet;varbuilder=WebApplication.CreateBuilder(args);builder.Services.AddSingleton<Database>(sp=>{vardb=Database.Open("api.db");db.ExecuteSql("CREATE TABLE IF NOT EXISTS users (id INTEGER, name TEXT, email TEXT)");returndb;});varapp=builder.Build();app.MapPost("/users",(Databasedb,Useruser)=>{varid=(int)DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();db.ExecuteSql($"INSERT INTO users VALUES ({id}, '{user.Name}', '{user.Email}')");returnResults.Ok(new{id,user.Name,user.Email});});app.MapGet("/users/{id}",(Databasedb,intid)=>{varresult=db.ExecuteSql($"SELECT * FROM users WHERE id = {id}");returnResults.Ok(result);});app.Run();publicrecordUser(stringName,stringEmail);
SignalR 실시간 채팅
usingMicrosoft.AspNetCore.SignalR;usingDBX.Dotnet;publicclassChatHub:Hub{privatereadonlyDatabase_db;publicChatHub(Databasedb){_db=db;}publicasyncTaskSendMessage(stringuser,stringmessage){varid=DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();_db.ExecuteSql($"INSERT INTO messages VALUES ({id}, '{user}', '{message}', {id})");awaitClients.All.SendAsync("ReceiveMessage",user,message);}}// Startup.csbuilder.Services.AddSingleton<Database>(sp=>{vardb=Database.Open("chat.db");db.ExecuteSql("CREATE TABLE IF NOT EXISTS messages (id INTEGER, user TEXT, message TEXT, timestamp INTEGER)");returndb;});builder.Services.AddSignalR();app.MapHub<ChatHub>("/chatHub");
백그라운드 서비스
publicclassDataProcessingService:BackgroundService{privatereadonlyDatabase_db;privatereadonlyILogger<DataProcessingService>_logger;publicDataProcessingService(Databasedb,ILogger<DataProcessingService>logger){_db=db;_logger=logger;}protectedoverrideasyncTaskExecuteAsync(CancellationTokenstoppingToken){while(!stoppingToken.IsCancellationRequested){try{// 데이터 처리varresult=_db.ExecuteSql("SELECT * FROM pending_jobs LIMIT 10");_logger.LogInformation($"Processed: {result}");awaitTask.Delay(TimeSpan.FromSeconds(10),stoppingToken);}catch(Exceptionex){_logger.LogError(ex,"Error processing data");}}}}// Program.csbuilder.Services.AddHostedService<DataProcessingService>();
메모리 캐시 통합
usingMicrosoft.Extensions.Caching.Memory;publicclassCachedRepository{privatereadonlyDatabase_db;privatereadonlyIMemoryCache_cache;publicCachedRepository(Databasedb,IMemoryCachecache){_db=db;_cache=cache;}publicstringGetUser(intid){return_cache.GetOrCreate($"user:{id}",entry=>{entry.AbsoluteExpirationRelativeToNow=TimeSpan.FromMinutes(5);return_db.ExecuteSql($"SELECT * FROM users WHERE id = {id}");});}}