파워빌더 9 ➔ 2025 마이그레이션: SQL Anywhere 9 한글 깨짐(상형문자) 완벽 해결 가이드
레거시 파워빌더 9(PB 9) 시스템을 최신 파워빌더 2025(PB 2025) 로 마이그레이션하면서 구형 데이터베이스인 SQL Anywhere 9 (ASA 9)를 그대로 연동하려다 보면, 거의 100% 확률로 '한글 데이터가 한자나 상형문자로 깨져 나오는 현상'을 맞닥뜨리게 됩니다.
아무리 구글링을 해도 나오지 않던 이 악명 높은 문제를 며칠간의 삽질 끝에 완벽하게 해결한 4가지 핵심 원인과 정석 솔루션을 정리하여 공유합니다.
🚨 왜 파워빌더 9에서는 잘 되던 한글이 2025에서는 깨질까?
PB 9은 ANSI(단순 바이트) 툴이라 DB에서 던져주는 바이트를 그대로 윈도우 OS가 해석해 한글로 그렸습니다. 하지만 PB 2025는 Unicode(UTF-16) 툴이기 때문에, ODBC 드라이버에게 무조건 유니코드 번역을 강제합니다. 이때 구형 DB 엔진이 제대로 된 번역 사전을 갖추지 못했거나 통신 설정이 어긋나면 한글 바이트가 서유럽어로 오역되어 쪼개지는 대참사가 발생합니다.
🔍 한글 깨짐 & 접속 에러를 유발하는 4가지 흑막
1. 번역 사전 (charsets 폴더) 누락
고객사 PC 등에 무설치(Portable)로 배포할 때, 보통 엔진 파일이 있는 win32 폴더만 가져가는 경우가 많습니다. 하지만
SQL Anywhere 9 설치 경로에 있는 charsets 폴더가 없으면 드라이버는 CP949를 유니코드로 번역할 능력을
상실합니다. 이 폴더가 없으면 드라이버가 무조건 영문 기준으로 번역해 버리므로 한글이 상형문자로 변합니다.
2. "읽기 전용" 파일 권한 락 (Windows 11)
Windows 11 환경에서는 보안이 엄격해져서, 백그라운드 엔진이 .db 파일과 .log 파일을 움켜쥐려 할 때 파일에 '읽기 전용'
속성이 걸려있으면 "아이디가 틀렸다" 거나 "Access Denied"라는 엉뚱한 에러를 뱉어내며 정상 접속을 튕겨냅니다. 압축파일이나 파일서버에서 복사해 온 DB
파일이라면 반드시 윈도우 우클릭 설정에서 읽기 전용을 해제해야 합니다.
3. 오염된 데이터베이스 (무방비 최초 접속)
파워빌더가 깨진 상형문자 상태로 읽어들인 뒤, 어떤 이유로든(내부 로그 저장, 실수로 갱신 등) 저장이 발생하면 그 즉시 깨진 글자가 DB 원본에 덮어씌워집니다. 이후에 설정을 고쳐도 이미 원본 데이터가 '상형문자화' 되어버리기 때문에 영영 복구되지 않습니다.
4. 환경변수 PATH와 타 버전(예: ASA 12) DLL 충돌
과거에 상위 버전인 ASA 12 클라이언트 등을 깔아본 적이 있다면 윈도우 PATH 환경변수에 12버전이 등록되어 있습니다. 이때 9버전 배치나 엔진을 돌리면 12버전 통신
DLL을 땡겨 쓰는 DLL 지옥(Hell) 현상이 발생해 이상한 에러가 납니다.
💯 가장 완벽하고 안전한 해결 프로세스 (정석)
✅ Phase 1: 파일 권한 및 폴더 세팅
- 개발 PC에 있는
\SQL Anywhere 9\charsets폴더를 통째로 복사해서, 배포할 폴더 안의win32폴더와 나란히 놓습니다. - 옮겨진
lkpis.db와lkpis.log파일을 마우스 우클릭하여 [읽기 전용] 체크를 모두 해제합니다. - (중요) 그 어떤 툴이나 파워빌더 2025로도 아직 이 DB 파일을 열지 마세요! (최초 오염 방지)
✅ Phase 2: 안전한 ODBC DSN 자동화 스크립트 작성
Windows 11의 권한 상승 이슈와 PowerShell 무한 로딩, 그리고 PATH 꼬임 현상을 한 방에 해결하는 배치(.bat) 스크립트 코드를 만듭니다. (이 코드 하나면 DLL 수동 등록 및 환경변수가 완벽히 세팅됩니다.)
@echo off
:: [1] 관리자 권한 자동 획득
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
echo 관리자 권한이 필요합니다...
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
)
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
:: [2] 배포 폴더를 윈도우 작업 디렉터리로 100% 확정
CD /D "%~dp0"
set "BASE_DIR=%~dp0"
if "%BASE_DIR:~-1%"=="\" set "BASE_DIR=%BASE_DIR:~0,-1%"
:: [3] 한글 방패 셋팅 (CharSet=cp949 강제 주입)
set "DSN_NAME=lkpis"
set "DSN_REG=HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ODBC\ODBC.INI\%DSN_NAME%"
reg add "%DSN_REG%" /v "CharSet" /t REG_SZ /d "cp949" /f >nul
reg add "%DSN_REG%" /v "TranslationOption" /t REG_SZ /d "cp949" /f >nul
:: (이외 드라이버 드라이버 등록 코드는 각자 환경에 맞게 추가)
:: [4] PATH 환경변수 VBScript로 안전하게 후열 추가 (1024자 제한 및 PowerShell 에러 회피)
set "ASA_PATH=%BASE_DIR%\win32"
echo Set WshShell = WScript.CreateObject("WScript.Shell") > "%temp%\addpath.vbs"
echo Set objEnv = WshShell.Environment("System") >> "%temp%\addpath.vbs"
echo strPath = objEnv("PATH") >> "%temp%\addpath.vbs"
echo If InStr(1, strPath, "%ASA_PATH%", 1) = 0 Then >> "%temp%\addpath.vbs"
echo objEnv("PATH") = strPath ^& ";" ^& "%ASA_PATH%" >> "%temp%\addpath.vbs"
echo End If >> "%temp%\addpath.vbs"
cscript //nologo "%temp%\addpath.vbs"
del "%temp%\addpath.vbs"
echo 셋팅 완료!
pause
✅ Phase 3: 순정 백업 DB로 최종 연동 시도
- 관리자 권한의 위의 배치 파일을 실행시켜서 ODBC단에서
CharSet=cp949쉴드를 먼저 완벽하게 구축합니다. - 파워빌더 등에 한 번도 물리지 않은 순수한 원본 백업 DB(.db)를 폴더에 덮어씌웁니다.
- 이제 파워빌더 2025를 켜서
lkpisDSN을 통해 접속하고 테이블을 조회해 봅니다.
🎉 마무리
ODBC에서 cp949 방어막을 쳐둔 상태에서 순정 DB로 최초 연결을 맺는 것. 이것이 지긋지긋한 파워빌더 유니코드 마이그레이션(한글 깨짐 현상)을 완벽하게 끝내는 마스터키였습니다. 이 글이 저와 같은 증상으로 고통받는 많은 개발자분들께 생명줄이 되기를 바랍니다!
'IT 개발 로그' 카테고리의 다른 글
| [트러블슈팅] Windows 11에서 Informix Client SDK 설치 오류 및 32비트 앱 호환성 완벽 정리 (0) | 2026.08.20 |
|---|---|
| 개발자를 위한 3분 클라우드 상식:도커, 쿠버네티스, OpenShift의 차이와 협업 가이드 (0) | 2026.08.19 |
| 💡 파워빌더 파워클라이언트(PowerClient) 배포: OpenShift 통합 환경 마이그레이션 안내서 (0) | 2026.08.19 |
| Windows 11 환경에서 레거시 ODBC DSN 저장 불가 현상 해결기 (0) | 2026.08.18 |
| Google Cloud Data Agent Kit & Antigravity 완벽 가이드: Gemini 구독자를 위한 최적의 개발 전략 (1) | 2026.08.15 |

