const express = require('express');
const path = require('path');
const { DBSQLClient } = require('@databricks/sql');
const app = express();
const port = process.env.DATABRICKS_APP_PORT || 3000;
// React 빌드 결과물 서빙
app.use(express.static(path.join(__dirname, 'build')));
app.use(express.json());
// API 엔드포인트
app.get('/api/data', async (req, res) => {
try {
const client = new DBSQLClient();
const connection = await client.connect({
authType: 'databricks-oauth',
host: process.env.DATABRICKS_HOST,
path: `/sql/1.0/warehouses/${process.env.DATABRICKS_WAREHOUSE_ID}`,
oauthClientId: process.env.DATABRICKS_CLIENT_ID,
oauthClientSecret: process.env.DATABRICKS_CLIENT_SECRET,
});
const session = await connection.openSession();
const result = await session.executeStatement(
'SELECT * FROM catalog.schema.table LIMIT 100'
);
const rows = await result.fetchAll();
await result.close();
await session.close();
await connection.close();
res.json({ data: rows });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// SPA fallback
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'build', 'index.html'));
});
app.listen(port, '0.0.0.0', () => {
console.log(`Server running on port ${port}`);
});