총 6개의 포스트로 이루어지며 아래 글목록을 보시면 확인이 가능합니다.
개요
MS SQL 은 SmartApp 토큰 정보를 저장하기 위한 용도 입니다.
간단하게 사용자 이메일과 Token 정보만 저장해서 사용합니다.
InfluxDB 는 제품별 온도 및 습도 데이터를 일정 시간 간격으로 저장하기 위한 용도입니다.
다음 포스트를 참고하시면 구축 과정을 확인할 수 있습니다.
MS SQL
소스 코드 내려 받기
다음 Github 에서 소스 코드를 다운로드해서 Visual Studio 에서 솔루션을 열어줍니다.
소스 코드 수정
Migrations 폴더와 내부 파일들은 모두 삭제합니다.

appsettings.json 파일에서 데이터베이스 연결 정보를 수정합니다.
{{Host}}, {{Port}}, {{User}}, {{Password}}, {{Database}}
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"DefaultConnection": "Data Source={{Host}},{{Port}};User ID={{User}};Password={{Password}};Initial Catalog={{Database}};Integrated Security=False;MultipleActiveResultSets=True;TrustServerCertificate=True"
}
}
ProductAppInfo.cs 파일에서 초기 사용자 이메일 주소를 수정합니다.
namespace Api.Environments;
public static class ProductAppInfo {
public const string AppName = "SmartThingsData";
public const string DeveloperName = "Jaeyong Park";
public const string AdminEmail = "[email protected]";
internal const string SwaggerRoute = "/Swagger";
internal static readonly TimeSpan DelaySmartThingsTokenRefresh = TimeSpan.FromHours(1);
internal static readonly TimeSpan DelaySmartThingsDataCollect = TimeSpan.FromMinutes(1);
}
데이터베이스 생성
패키지 관리자 콘솔에서 데이터베이스를 생성하겠습니다.
Ctrl + Q 키를 입력해서 기능 검색을 활성화 한 다음 패키지 관리자 콘솔을 검색해서 실행해 줍니다.

Add-Migration Init 입력 후 Enter 키를 누르면 다음과 같이 스크립트가 실행이 됩니다.
PM> Add-Migration Init
Build started...
Build succeeded.
To undo this action, use Remove-Migration.
update-databse 입력 후 Enter 키를 누르면 다음과 같이 스크립트가 실행이 됩니다.
PM> update-database
Build started...
Build succeeded.
Acquiring an exclusive lock for migration application. See https://aka.ms/efcore-docs-migrations-lock for more information if this takes too long.
Applying migration '20250428020819_Init'.
Done.
데이터베이스를 확인해 보면 지정된 데이터베이스에 Member 테이블이 생성된 것을 확인할 수 있습니다.

사용자 추가
Visual studio 에서 F5 를 눌러서 프로젝트를 실행한 다음 데이터베이스에서 Member 테이블을 조회해보면
ProductAppInfo 에서 지정한 이메일 주소로 사용자가 추가된 것을 확인할 수 있습니다.

Program.cs 파일에서 DB Initilize 부분에서 기본 사용자를 생성하는 코드를 확인할 수 있습니다.
using Api.Database;
using Microsoft.EntityFrameworkCore;
namespace Api
{
public class Program
{
public static async Task Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
var dbConStr = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found.");
// Add services to the container.
#region DB DbContext
builder.Services.AddDbContext<MyDbContext>(options => options.UseSqlServer(dbConStr)
#if DEBUG
.EnableSensitiveDataLogging()
.EnableDetailedErrors()
#endif
, ServiceLifetime.Transient
, ServiceLifetime.Transient);
#if DEBUG
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
#endif
#endregion
builder.Services.AddControllers();
// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi
builder.Services.AddOpenApi();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.MapOpenApi();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
#region DB Initilize
using(var scope = app.Services.CreateScope()) {
var services = scope.ServiceProvider;
var context = services.GetRequiredService<MyDbContext>();
if(context.Database.IsSqlServer()) {
context.Database.Migrate();
}
await DbInitializer.Initialize(context);
}
#endregion
app.Run();
}
}
}
InfluxDB
InfluxDB UI 에 접속해서 데이터가 저장될 Bucket 을 생성하겠습니다.
Bucket 생성
좌측 메뉴에서 Load Data – Buckets 를 클릭해서 접속합니다.
Bucket 이릅을 지정하고 CREATE 버튼을 클릭해서 생성합니다.

Token 생성
App 과 연동하기 위한 Token 이 필요합니다.
이 토큰을 미리 생성하겠습니다.
좌측메뉴 Local Data – API Tokens 를 클릭해서 접속합니다.
GENERATE API TOKEN 을 선택해서 Custom API Token 을 클릭합니다.

좀 전에 생성한 Bucket 의 Read Write 권한을 선택한 다음 GENERATE 버튼을 클릭합니다.

그러면 다음과 같이 생성된 Token 을 확인할 수 있습니다.
다시 확인이 불가능 하므로 미리 복사해서 저장해 둡니다.

0 Comments