Skip to content

Commit 4fd8280

Browse files
committed
DB접속 체크 기능 추가
1 parent 5421f05 commit 4fd8280

File tree

10 files changed

+1032
-39
lines changed

10 files changed

+1032
-39
lines changed

README.md

Lines changed: 145 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ SQL문을 이용하여 엑셀파일을 생성하는 솔류션 입니다.(NodeJs
2020

2121
### 새로운 CLI 명령어
2222

23-
v1.1부터 새로운 CLI 인터페이스가 추가되었습니다:
23+
v1.1부터 새로운 CLI 인터페이스가 추가되었고, v1.2부터 쿼리 정의 재사용 기능이 추가되었습니다:
2424

2525
```bash
2626
# 엑셀 파일 생성
@@ -52,11 +52,36 @@ npm run list-dbs
5252
npm run help
5353
```
5454

55+
### 🪟 윈도우 배치 파일 (v1.2)
56+
57+
윈도우 사용자를 위한 편리한 배치 파일들이 제공됩니다:
58+
59+
#### 메인 배치 파일
60+
```bash
61+
# 메인 메뉴 (모든 기능 통합)
62+
실행하기.bat
63+
sql2excel.bat
64+
65+
# 빠른 실행 배치 파일들
66+
export-xml.bat queries/my-queries.xml year=2024 dept=IT
67+
export-json.bat queries/my-queries.json year=2024 dept=IT
68+
validate.bat queries/my-queries.xml
69+
db-test.bat
70+
```
71+
72+
#### 주요 기능
73+
- **스마트 메뉴**: 인터랙티브한 메뉴 시스템
74+
- **파일 자동 감지**: XML/JSON 파일 자동 인식
75+
- **변수 지원**: 명령줄에서 변수 입력 가능
76+
- **오류 처리**: 친화적인 오류 메시지
77+
- **결과 확인**: 생성된 파일 폴더 자동 열기 옵션
78+
- **Node.js 검증**: Node.js 설치 여부 자동 확인
79+
5580
---
5681

5782
## 2. 쿼리 정의 파일 구조
5883

59-
### XML 예시 (`resources/queries-sample.xml`)
84+
### XML 예시 (쿼리 정의 재사용 포함)
6085
```xml
6186
<queries>
6287
<excel db="main" output="output/매출집계_2024.xlsx">
@@ -70,27 +95,48 @@ npm run help
7095
<fill color="FFFFCC"/>
7196
</body>
7297
</excel>
98+
99+
<!-- 재사용 가능한 쿼리 정의 -->
100+
<queryDefs>
101+
<queryDef name="common_orders" description="공통 주문 조회 쿼리">
102+
<![CDATA[
103+
SELECT OrderID, CustomerID, OrderDate, OrderStatus, TotalAmount
104+
FROM Orders
105+
WHERE OrderDate >= '${startDate}' AND OrderDate <= '${endDate}'
106+
]]>
107+
</queryDef>
108+
<queryDef name="common_customers" description="공통 고객 조회 쿼리">
109+
<![CDATA[
110+
SELECT CustomerID, CustomerName, Region, ContactName
111+
FROM Customers
112+
WHERE region IN (${regionList})
113+
]]>
114+
</queryDef>
115+
</queryDefs>
116+
73117
<vars>
74118
<var name="startDate">2024-01-01</var>
75119
<var name="endDate">2024-06-30</var>
76120
<var name="regionList">'서울','부산'</var>
77121
</vars>
78-
<sheet name="Orders" use="true" aggregateColumn="OrderStatus" maxRows="1000" db="sampleDB">
122+
123+
<!-- 쿼리 정의 참조 사용 -->
124+
<sheet name="Orders" use="true" queryRef="common_orders" aggregateColumn="OrderStatus" maxRows="1000" db="sampleDB"/>
125+
<sheet name="Customers" use="true" queryRef="common_customers" aggregateColumn="Region" maxRows="500" db="erpDB"/>
126+
127+
<!-- 직접 쿼리 사용 (기존 방식) -->
128+
<sheet name="OrderSummary" use="true" aggregateColumn="Status" db="sampleDB">
79129
<![CDATA[
80-
SELECT * FROM Orders
130+
SELECT OrderStatus as Status, COUNT(*) as Count, SUM(TotalAmount) as TotalAmount
131+
FROM Orders
81132
WHERE OrderDate >= '${startDate}' AND OrderDate <= '${endDate}'
82-
]]>
83-
</sheet>
84-
<sheet name="Customers" use="false" aggregateColumn="Region" maxRows="500" db="erpDB">
85-
<![CDATA[
86-
SELECT * FROM Customers
87-
WHERE region IN (${regionList})
133+
GROUP BY OrderStatus
88134
]]>
89135
</sheet>
90136
</queries>
91137
```
92138

93-
### JSON 예시 (`resources/queries-sample.json`)
139+
### JSON 예시 (쿼리 정의 재사용 포함)
94140
```json
95141
{
96142
"excel": {
@@ -106,6 +152,16 @@ npm run help
106152
"fill": { "color": "FFFFCC" }
107153
}
108154
},
155+
"queryDefs": {
156+
"common_orders": {
157+
"description": "공통 주문 조회 쿼리",
158+
"query": "SELECT OrderID, CustomerID, OrderDate, OrderStatus, TotalAmount FROM Orders WHERE OrderDate >= '${startDate}' AND OrderDate <= '${endDate}'"
159+
},
160+
"common_customers": {
161+
"description": "공통 고객 조회 쿼리",
162+
"query": "SELECT CustomerID, CustomerName, Region, ContactName FROM Customers WHERE region IN (${regionList})"
163+
}
164+
},
109165
"vars": {
110166
"startDate": "2024-01-01",
111167
"endDate": "2024-06-30",
@@ -115,23 +171,96 @@ npm run help
115171
{
116172
"name": "Orders",
117173
"use": true,
174+
"queryRef": "common_orders",
118175
"aggregateColumn": "OrderStatus",
119176
"maxRows": 1000,
120-
"db": "sampleDB",
121-
"query": "SELECT * FROM Orders WHERE OrderDate >= '${startDate}' AND OrderDate <= '${endDate}'"
177+
"db": "sampleDB"
122178
},
123179
{
124180
"name": "Customers",
125-
"use": false,
181+
"use": true,
182+
"queryRef": "common_customers",
126183
"aggregateColumn": "Region",
127184
"maxRows": 500,
128-
"db": "erpDB",
129-
"query": "SELECT * FROM Customers WHERE region IN (${regionList})"
185+
"db": "erpDB"
186+
},
187+
{
188+
"name": "OrderSummary",
189+
"use": true,
190+
"aggregateColumn": "Status",
191+
"db": "sampleDB",
192+
"query": "SELECT OrderStatus as Status, COUNT(*) as Count, SUM(TotalAmount) as TotalAmount FROM Orders WHERE OrderDate >= '${startDate}' AND OrderDate <= '${endDate}' GROUP BY OrderStatus"
193+
}
194+
]
195+
}
196+
```
197+
198+
### 🔄 쿼리 정의 재사용 기능 (v1.2)
199+
200+
쿼리 정의 기능을 사용하면 동일한 SQL을 여러 시트에서 재사용할 수 있습니다.
201+
202+
#### 주요 장점
203+
- **코드 재사용**: 동일한 쿼리를 여러 시트에서 사용 가능
204+
- **유지보수 효율성**: 한 곳에서 쿼리 수정 시 모든 참조 시트에 적용
205+
- **가독성 향상**: 복잡한 쿼리를 명명하여 의미를 명확히 표현
206+
- **일관성 보장**: 동일한 비즈니스 로직을 여러 곳에서 일관되게 사용
207+
208+
#### 사용 방법
209+
210+
**XML 형식:**
211+
```xml
212+
<!-- 1. 쿼리 정의 -->
213+
<queryDefs>
214+
<queryDef name="sales_by_region" description="지역별 매출 조회">
215+
<![CDATA[
216+
SELECT Region, SUM(Amount) as TotalSales, COUNT(*) as OrderCount
217+
FROM Orders o JOIN Customers c ON o.CustomerID = c.CustomerID
218+
WHERE OrderDate >= '${startDate}' AND OrderDate <= '${endDate}'
219+
GROUP BY Region
220+
]]>
221+
</queryDef>
222+
</queryDefs>
223+
224+
<!-- 2. 쿼리 참조 -->
225+
<sheet name="RegionSales" queryRef="sales_by_region" use="true" db="sampleDB"/>
226+
<sheet name="RegionSales_Copy" queryRef="sales_by_region" use="true" db="sampleDB"/>
227+
```
228+
229+
**JSON 형식:**
230+
```json
231+
{
232+
"queryDefs": {
233+
"sales_by_region": {
234+
"description": "지역별 매출 조회",
235+
"query": "SELECT Region, SUM(Amount) as TotalSales, COUNT(*) as OrderCount FROM Orders o JOIN Customers c ON o.CustomerID = c.CustomerID WHERE OrderDate >= '${startDate}' AND OrderDate <= '${endDate}' GROUP BY Region"
236+
}
237+
},
238+
"sheets": [
239+
{
240+
"name": "RegionSales",
241+
"queryRef": "sales_by_region",
242+
"use": true,
243+
"db": "sampleDB"
244+
},
245+
{
246+
"name": "RegionSales_Copy",
247+
"queryRef": "sales_by_region",
248+
"use": true,
249+
"db": "sampleDB"
130250
}
131251
]
132252
}
133253
```
134254

255+
#### 속성 설명
256+
257+
| 속성 | 설명 | 필수 | 예시 |
258+
|------|------|------|------|
259+
| `queryRef` | 참조할 쿼리 정의 이름 | 선택 | `"common_orders"` |
260+
| `query` | 직접 SQL 쿼리 (기존 방식) | 선택 | `"SELECT * FROM Orders"` |
261+
262+
**주의:** `queryRef``query` 중 하나만 사용해야 합니다. `queryRef`가 있으면 `query`는 무시됩니다.
263+
135264
---
136265

137266
## 3. 실행 방법

db-test.bat

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
@echo off
2+
chcp 65001 >nul
3+
4+
:: Quick database connection test batch file
5+
echo =========================================
6+
echo SQL2Excel DB 연결 테스트
7+
echo =========================================
8+
echo.
9+
10+
echo 설정된 데이터베이스 연결을 테스트하고 있습니다...
11+
echo.
12+
13+
node src/excel-cli.js list-dbs
14+
15+
if %errorlevel% equ 0 (
16+
echo.
17+
echo ✅ 데이터베이스 연결 테스트가 완료되었습니다.
18+
) else (
19+
echo.
20+
echo ❌ 데이터베이스 연결에 실패했습니다.
21+
echo config/dbinfo.json 파일의 연결 정보를 확인해주세요.
22+
)
23+
24+
echo.
25+
pause

export-json.bat

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
@echo off
2+
chcp 65001 >nul
3+
setlocal enabledelayedexpansion
4+
5+
:: Quick JSON export batch file
6+
echo =========================================
7+
echo SQL2Excel 빠른 JSON 실행
8+
echo =========================================
9+
echo.
10+
11+
:: Check if parameter provided
12+
if "%~1"=="" (
13+
echo 사용법: export-json.bat [JSON파일경로] [변수1=값1] [변수2=값2] ...
14+
echo.
15+
echo 예시:
16+
echo export-json.bat queries\my-queries.json
17+
echo export-json.bat queries\my-queries.json year=2024 dept=IT
18+
echo.
19+
echo 사용 가능한 JSON 파일들:
20+
if exist "queries\*.json" (
21+
for %%f in (queries\*.json) do echo - %%f
22+
) else (
23+
echo (JSON 파일이 없습니다)
24+
)
25+
echo.
26+
pause
27+
exit /b 1
28+
)
29+
30+
set json_file=%~1
31+
echo JSON 파일: %json_file%
32+
33+
:: Check if file exists
34+
if not exist "%json_file%" (
35+
echo ❌ 파일을 찾을 수 없습니다: %json_file%
36+
echo.
37+
pause
38+
exit /b 1
39+
)
40+
41+
:: Build variable parameters
42+
set var_params=
43+
shift
44+
:parse_vars
45+
if "%~1"=="" goto run_export
46+
set var_params=%var_params% --var "%~1"
47+
shift
48+
goto parse_vars
49+
50+
:run_export
51+
echo.
52+
echo 엑셀 파일을 생성하고 있습니다...
53+
echo.
54+
55+
if "%var_params%"=="" (
56+
node src/excel-cli.js export --query "%json_file%"
57+
) else (
58+
echo 사용된 변수: %var_params%
59+
echo.
60+
node src/excel-cli.js export --query "%json_file%" %var_params%
61+
)
62+
63+
if %errorlevel% equ 0 (
64+
echo.
65+
echo ✅ 엑셀 파일이 성공적으로 생성되었습니다.
66+
echo.
67+
echo 출력 폴더를 열겠습니까? (Y/N)
68+
set /p open_folder=
69+
if /i "!open_folder!"=="Y" (
70+
explorer output
71+
)
72+
) else (
73+
echo.
74+
echo ❌ 엑셀 파일 생성 중 오류가 발생했습니다.
75+
)
76+
77+
echo.
78+
pause

0 commit comments

Comments
 (0)