diff --git a/.env b/.env
index 3958664c25ea7dec0d286c76fdaa96d87af56610..1f5f0f141e9c1391bcd5b0325fbb516f0fa4bbfb 100644
--- a/.env
+++ b/.env
@@ -4,7 +4,7 @@ PORT=8080
 LOGTAIL_TOKEN=
 HTTP_TIMEOUT_SEC=2
 LOG_FLUSH_INTERVAL_MS=1000
-DB_STRING="host=database user=ocw password=ocw dbname=ocw-db port=5432 sslmode=disable TimeZone=Asia/Shanghai"
+DB_STRING="host=localhost user=ocw password=ocw dbname=ocw-db port=5433 sslmode=disable TimeZone=Asia/Shanghai"
 SMTP_USERNAME="noreply@ocw.id"
 SMTP_SERVER=localhost
 SMTP_PORT=1025
\ No newline at end of file
diff --git a/utils/app/app.go b/app/app.go
similarity index 100%
rename from utils/app/app.go
rename to app/app.go
diff --git a/app/di.go b/app/di.go
new file mode 100644
index 0000000000000000000000000000000000000000..30599e242f16527236fb6e4ee212a3a6818f0e22
--- /dev/null
+++ b/app/di.go
@@ -0,0 +1,9 @@
+package app
+
+import "github.com/google/wire"
+
+var AppSet = wire.NewSet(
+	// app
+	New,
+	wire.Bind(new(Server), new(*HttpServer)),
+)
diff --git a/utils/app/list.go b/app/list.go
similarity index 100%
rename from utils/app/list.go
rename to app/list.go
diff --git a/utils/app/server.go b/app/server.go
similarity index 100%
rename from utils/app/server.go
rename to app/server.go
diff --git a/utils/app/start.go b/app/start.go
similarity index 100%
rename from utils/app/start.go
rename to app/start.go
diff --git a/utils/app/type.go b/app/type.go
similarity index 100%
rename from utils/app/type.go
rename to app/type.go
diff --git a/utils/app/version.go b/app/version.go
similarity index 100%
rename from utils/app/version.go
rename to app/version.go
diff --git a/di.go b/di.go
index 66bbf655c71fb48a23bc81ddca3513bcfec22cc9..c563acb4b31c641fb0c9894e97c435504155ac7f 100644
--- a/di.go
+++ b/di.go
@@ -6,6 +6,7 @@ package main
 import (
 	"github.com/google/wire"
 
+	"gitlab.informatika.org/ocw/ocw-backend/app"
 	"gitlab.informatika.org/ocw/ocw-backend/handler"
 	"gitlab.informatika.org/ocw/ocw-backend/middleware"
 	"gitlab.informatika.org/ocw/ocw-backend/provider"
@@ -13,8 +14,6 @@ import (
 	"gitlab.informatika.org/ocw/ocw-backend/routes"
 	"gitlab.informatika.org/ocw/ocw-backend/service"
 	"gitlab.informatika.org/ocw/ocw-backend/utils"
-
-	"gitlab.informatika.org/ocw/ocw-backend/utils/app"
 )
 
 func CreateServer() (app.Server, error) {
@@ -26,6 +25,7 @@ func CreateServer() (app.Server, error) {
 		routes.RoutesSet,
 		service.ServiceSet,
 		provider.ProviderSet,
+		app.AppSet,
 	)
 
 	return nil, nil
diff --git a/utils/db/database.go b/provider/db/database.go
similarity index 100%
rename from utils/db/database.go
rename to provider/db/database.go
diff --git a/utils/db/type.go b/provider/db/type.go
similarity index 100%
rename from utils/db/type.go
rename to provider/db/type.go
diff --git a/provider/di.go b/provider/di.go
index f1ffaae3f3d010c4ea5a836222e0efdaab8b9c76..51e100b166816bee6b5d9c23147f9470831a1b9f 100644
--- a/provider/di.go
+++ b/provider/di.go
@@ -2,11 +2,12 @@ package provider
 
 import (
 	"github.com/google/wire"
+	"gitlab.informatika.org/ocw/ocw-backend/provider/db"
 	"gitlab.informatika.org/ocw/ocw-backend/provider/mail"
 	"gitlab.informatika.org/ocw/ocw-backend/provider/mail/smtp"
 )
 
-var ProviderSet = wire.NewSet(
+var ProviderTestSet = wire.NewSet(
 	// Provider
 	smtp.New,
 	mail.NewQueue,
@@ -14,3 +15,11 @@ var ProviderSet = wire.NewSet(
 	wire.Bind(new(mail.MailQueue), new(*mail.MailQueueImpl)),
 	wire.Bind(new(mail.MailProvider), new(*smtp.SmtpMailProvider)),
 )
+
+var ProviderSet = wire.NewSet(
+	ProviderTestSet,
+
+	// Database utility
+	wire.Bind(new(db.Database), new(*db.DatabaseImpl)),
+	db.NewPostgresEnv,
+)
diff --git a/repository/user/user.go b/repository/user/user.go
index f2919855b4b118e37a4afce174f83fceef2554dd..f68ccb7032f192d474a767cb485002437151260a 100644
--- a/repository/user/user.go
+++ b/repository/user/user.go
@@ -4,7 +4,7 @@ import (
 	"errors"
 
 	"gitlab.informatika.org/ocw/ocw-backend/model/domain/user"
-	"gitlab.informatika.org/ocw/ocw-backend/utils/db"
+	"gitlab.informatika.org/ocw/ocw-backend/provider/db"
 	"gorm.io/gorm"
 )
 
diff --git a/test/api.go b/test/api.go
index b67503d1f08ec5f0a09053ad8741a638a9a226bb..8baee7fe44bd603228bef4bdeb157a2fc1bd0e2c 100644
--- a/test/api.go
+++ b/test/api.go
@@ -1,8 +1,8 @@
 package test
 
 import (
+	"gitlab.informatika.org/ocw/ocw-backend/app"
 	"gitlab.informatika.org/ocw/ocw-backend/test/db"
-	"gitlab.informatika.org/ocw/ocw-backend/utils/app"
 )
 
 type ApiTestPack struct {
diff --git a/test/db/di.go b/test/db/di.go
index e1a84e965cb97818bb3645a349eded41c0734c2a..ab879dc84169872e372457076dc41d1f987744bd 100644
--- a/test/db/di.go
+++ b/test/db/di.go
@@ -2,7 +2,7 @@ package db
 
 import (
 	"github.com/google/wire"
-	"gitlab.informatika.org/ocw/ocw-backend/utils/db"
+	"gitlab.informatika.org/ocw/ocw-backend/provider/db"
 )
 
 var DbTestSet = wire.NewSet(
diff --git a/test/di.go b/test/di.go
index 46c16536d7737ad0f00d0cfc4cfb4f99f0b75e07..9ce05c76ea2a7f5f97645eb7bde26d66fdb121f0 100644
--- a/test/di.go
+++ b/test/di.go
@@ -6,6 +6,7 @@ package test
 import (
 	"github.com/google/wire"
 
+	"gitlab.informatika.org/ocw/ocw-backend/app"
 	"gitlab.informatika.org/ocw/ocw-backend/handler"
 	"gitlab.informatika.org/ocw/ocw-backend/middleware"
 	"gitlab.informatika.org/ocw/ocw-backend/provider"
@@ -30,7 +31,8 @@ func CreateServer(logger logger.Logger, envTest *env.Environment) (*ApiTestPack,
 		routes.RoutesSet,
 		service.ServiceTestSet,
 		db.DbTestSet,
-		provider.ProviderSet,
+		provider.ProviderTestSet,
+		app.AppSet,
 	)
 
 	return nil, nil
diff --git a/utils/di.go b/utils/di.go
index 83aae428e68d27093cd90e32c4c1e9dbce765c59..d6b65b8b8f725bf8c3da03f3ab776ef8aca15e90 100644
--- a/utils/di.go
+++ b/utils/di.go
@@ -2,9 +2,7 @@ package utils
 
 import (
 	"github.com/google/wire"
-	"gitlab.informatika.org/ocw/ocw-backend/utils/app"
 	"gitlab.informatika.org/ocw/ocw-backend/utils/base64"
-	"gitlab.informatika.org/ocw/ocw-backend/utils/db"
 	"gitlab.informatika.org/ocw/ocw-backend/utils/env"
 	"gitlab.informatika.org/ocw/ocw-backend/utils/httputil"
 	"gitlab.informatika.org/ocw/ocw-backend/utils/log"
@@ -42,10 +40,6 @@ var UtilSetTest = wire.NewSet(
 	// Token utility
 	wire.Struct(new(token.TokenUtilImpl), "*"),
 	wire.Bind(new(token.TokenUtil), new(*token.TokenUtilImpl)),
-
-	// app
-	app.New,
-	wire.Bind(new(app.Server), new(*app.HttpServer)),
 )
 
 var UtilSet = wire.NewSet(
@@ -53,8 +47,4 @@ var UtilSet = wire.NewSet(
 	env.New,
 
 	UtilSetTest,
-
-	// Database utility
-	wire.Bind(new(db.Database), new(*db.DatabaseImpl)),
-	db.NewPostgresEnv,
 )