AI 를 활용한 실무 SQL 생성 팁을 공유합니다
최근 진행하고 있는 HandStack 기반의 고객사의 업무 관리에 필요한 프로젝트에 AI 를 활용하는 개발 방법을 찾아가며 적용하는데 재미를 붙이고 있는데요. 개인적인 입장에서 AI 로 가능한 것과 불가능 하거나 어려운 일이 무엇인지 알아두면, 장점과 단점이 있지만 여러 모로 좋은 도구인 것은 맞는 듯합니다.
사용 중인 AI 서비스는 OpenAI ChatGPT 5, Claude Sonnet4, Google Gemini 2.5 를 대화 모드로 사용하기 위해, 아직은 불 안정하지만 Visual Studio 2022 도구에서 에이전트 모드로 사용하기 위해 GitHub Copilot 을 유료로 사용 중입니다. 가성비 측면에서 이보다 좋을 수 없더군요. (대인배 마이크로소프트 ^^)
그동안 개발에 필요한 검색을 하기 위해 구글을 주로 이용 하던 것을 Perplexity 로 유료로 사용 중이며, 응답 품질과 성능은 낮더라도 보안에 민감한 정보를 AI 로 처리하기 위해 로컬 PC 로 Ollama 를 이용한 gemma3:27b, gpt-oss:20b, qwen3-coder:30b 를 주로 사용 중입니다.
로컬 PC 사양은 데스크 탑에 14700K CPU, DDR5 64GB RAM, RTX 3090 24GB GPU, NVME PCIE 4 3TB 정도의 환경입니다.
LLM 성능을 끌어올리는 프롬프트 엔지니어링을 하려면 적절한 질문을 하기 전에 사전에 준비 해야 할 2 단계가 중요합니다. 잊지마세요. 이것은 AI 를 대화 모드나 에이전트 모드를 사용할 때 공통적으로 적용됩니다.
- 도메인 업무 지침
- 업무 데이터 정보
- 적절한 질문
그래서 도메인 업무 지침, 업무 데이터 정보 를 도메인의 최신 데이터로 자동으로 생성하기 위한 개발 도구를 자체 제작하는 데 노력을 해두면 좋 습니다. 거창하게 말고 Node.js, Python, C# 등 업무 조건에 따라 CLI 로 반복 작업을 어느정도 자동화 하게 동작하도록 만들어 두면 향후 MCP 를 개발할 때도 적은 비용으로 전환이 가능합니다.
실무적인 SQL 을 생성하기 위해 간단한 업무를 예로 들어 보겠습니다.
일반적으로 여러 사용자가 로그인 해야 하는 프로그램의 경우 사용자 별로 메뉴 정보가 관리 되어야 합니다. 데이터베이스 테이블을 다음과 같이 염두해 두고 실무 SQL 생성 팁을 SQL Server 를 기준으로 공유 하겠습니다. 물론 약간의 응용을 하게 되면 Oracle, PostgreSQL, MySQL 등 다른 관계형 데이터베이스나 NoSQL 에서도 적용할 수 있습니다.
- User
- Menu
- Role
- RoleUser
- RoleMenu
테이블 들의 스키마는 특정 데이터베이스가 아닌 범용적으로 표현하면 다음과 같습니다.
Menu
| 컬럼 ID | 데이터 타입 | 설명 |
|---|---|---|
| MenuID | TEXT | 메뉴 ID |
| MenuName | TEXT | 메뉴 명 |
| FolderYN | TEXT | 디렉토리 여부 |
| ViewYN | TEXT | 표시 여부 |
| Step | INTEGER | 단계 |
| ParentMenuID | TEXT | 상위 메뉴 ID |
| IconID | TEXT | 아이콘 ID |
| DirectoryID | TEXT | 디렉토리 ID |
| DirectoryName | TEXT | 디렉토리 명 |
| ItemID | TEXT | 파일 항목 ID |
| ItemName | TEXT | 파일 항목명 |
| SortingNo | INTEGER | 정렬 순서 |
| CreatedUserNo | TEXT | 작성자 ID |
| CreatedAt | TEXT | 작성 일시 |
Role
| 컬럼 ID | 데이터 타입 | 설명 |
|---|---|---|
| RoleID | TEXT | 권한 ID |
| RoleName | TEXT | 권한 명 |
| Comment | TEXT | 메모 |
| CreatedUserNo | TEXT | 작성자 ID |
| CreatedAt | TEXT | 작성 일시 |
RoleMenu
| 컬럼 ID | 데이터 타입 | 설명 |
|---|---|---|
| RoleID | TEXT | 권한 ID |
| MenuID | TEXT | 메뉴 ID |
| FnSearch | TEXT | 조회 기능 |
| FnSave | TEXT | 저장 기능 |
| FnDelete | TEXT | 삭제 기능 |
| FnPrint | TEXT | 인쇄 기능 |
| FnExport | TEXT | 내보내기 기능 |
| Comment | TEXT | 메모 |
| CreatedUserNo | TEXT | 작성자 ID |
| CreatedAt | TEXT | 작성 일시 |