프로젝트 목록
로딩 중...
📁 클릭 또는 파일 드래그
여러 장 선택 가능
준비됨
레이어 목록
2024 도로대장 작성 지침
사용 설명서
1. CAD 데이터 관리 (PC 프로그램)
PC 프로그램을 통해 CAD 데이터를 관리하고 웹과 연동하기 위한 데이터를 준비하는 과정입니다.
1-1. 데이터베이스 모드 선택
[CAD 관리] 탭 상단에서 작업 환경을 선택합니다.
- ◉ Supabase (권장): 클라우드 DB와 R2 저장소를 사용합니다. 웹 캐드뷰어 및 사진 관리와 완벽하게 연동됩니다.
- ○ PostgreSQL: PC에 설치된 로컬 데이터베이스를 사용합니다. 오프라인 작업이나 QGIS 연동에 특화되어 있습니다.
1-2. Supabase/R2 모드 작업 흐름 (웹 연동)
- 프로젝트 생성: [프로젝트 생성] 버튼으로 새 프로젝트를 만듭니다.
- 원본 DXF 업로드: 생성된 프로젝트를 선택하고 [DB 업로드] 버튼을 클릭하여 원본
.dxf파일을 선택합니다. 이 파일은 R2 클라우드 저장소에 원본으로 보관됩니다. - 웹 변환기 실행: 하단의 [파일변환] Colab 열기 버튼을 클릭하여 웹 기반 변환 페이지로 이동합니다.
- Colab에서 변환:
- 작업할 프로젝트를 선택하고 [DXF 불러오기]를 클릭합니다.
- 좌표계, 변환할 레이어, 출력 형식(PMTiles 필수), 캐시 정책을 선택합니다.
- [변환 실행] 버튼을 누르면 웹 캐드뷰어용 데이터(PMTiles, GeoJSON 등)가 생성되어 R2에 업로드되고 정보가 Supabase DB에 기록됩니다.
1-3. PostgreSQL 모드 작업 흐름 (로컬/QGIS)
- 리습(LISP)으로 JSON 추출: AutoCAD에서 리습(
Export_Json.lsp)을 로드하고,ODB또는LDB명령어로.json파일을 추출합니다. (기존 방식과 동일) - JSON 업로드: PC 프로그램에서 프로젝트 선택 후 [DB 업로드] 버튼을 눌러 추출된
.json파일을 업로드합니다. 데이터는 로컬 PostgreSQL에 저장됩니다.
1-4. 캐시 설정
하단의 [캐시 설정] 버튼을 통해 R2 스토리지에 업로드되는 파일의 캐시 기간을 설정할 수 있습니다. 캐시를 사용하면 웹에서의 로딩 속도가 빨라지고 서버 요청 횟수가 줄어듭니다.
- 캐시 안함: 파일을 수정하고 즉시 웹에서 확인해야 할 때 사용합니다. (예: 테스트 중인 사진)
- 1일 ~ 1년: 파일 내용이 자주 바뀌지 않을 때 사용합니다. (예: 확정된 도면)
- 참고: 캐시 기간이 남았더라도 파일을 수정 후 덮어쓰기 했다면, Cloudflare 대시보드에서 직접 Purge(캐시 비우기)를 해야 웹에서 즉시 변경 내용이 보입니다.
2. 웹 앱 사용법
PC 프로그램에서 준비된 데이터를 웹 브라우저에서 확인하고 관리하는 방법입니다.
2-1. 사진 관리 및 업로드
- [사진 관리] 탭에서 프로젝트 목록을 확인합니다.
- 원하는 프로젝트 우측의 [📷] 버튼을 클릭하여 사진 관리 화면으로 이동합니다.
- [📤 추가] 버튼을 누르면 파일 업로드 화면으로 전환됩니다. 파일을 선택하거나 드래그 앤 드롭하여 업로드할 수 있습니다. 업로드된 사진은 R2 스토리지에 저장됩니다.
- 사진 썸네일을 클릭하면 큰 이미지로 볼 수 있습니다.
2-2. 캐드뷰어
- [캐드뷰어] 탭으로 이동합니다.
- 드롭다운 메뉴에서 프로젝트를 선택하면, Colab에서 변환된 PMTiles 도면이 배경 지도 위에 렌더링됩니다.
- 화면 좌측의 레이어 목록 패널에서 각 레이어의 색상을 변경하거나, 체크박스를 통해 켜고 끌 수 있습니다.
3. 초기 설정 가이드 (PostgreSQL)
PC 프로그램의 로컬 DB 모드(PostgreSQL)를 사용하기 위한 초기 설정 과정입니다. Supabase 모드만 사용 시에는 필요하지 않습니다.
1단계: PostgreSQL 설치 (기본 DB 엔진)
- PostgreSQL 공식 다운로드 페이지에 접속하여 Download the installer를 클릭하고 최신 버전(16.x 또는 17.x)을 다운로드합니다.
- 설치 파일을 실행하고 [Next]를 계속 누릅니다.
- 비밀번호 설정 (중요): Superuser (postgres) password 입력창이 나오면 비밀번호를 입력하고 반드시 기억해 두세요. (예: admin1234)
※ 이 비밀번호는 나중에 프로그램 연결 설정에 사용됩니다. - Port는 기본값 5432를 유지합니다.
- 설치 마지막 화면에서 "Launch Stack Builder at exit?" 체크박스를 반드시 체크하고 [Finish]를 누릅니다. (PostGIS 설치를 위해 필요)
2단계: PostGIS 설치 (좌표/CAD 데이터용 필수 확장팩)
- Stack Builder가 실행되면 방금 설치한 PostgreSQL 서버(예: PostgreSQL 16 on port 5432)를 선택하고 [Next]를 누릅니다.
- Spatial Extensions 항목을 펼치고 PostGIS [버전] Bundle을 체크합니다.
- [Next]를 눌러 다운로드 및 설치를 진행합니다.
- PostGIS 설치 창이 뜨면 기본 설정대로 [Next] > [I Agree] > [Next]... > [Close] 하여 완료합니다.
- 질문 창("Would you like to register...")이 뜨면 "Yes"를 눌러 환경 변수나 이미지 드라이버를 등록하세요.
3단계: 데이터베이스 생성 (pgAdmin 사용)
- 윈도우 시작 메뉴에서 pgAdmin 4를 실행하고 접속합니다.
- 왼쪽 탐색기(Browser)에서
Servers>PostgreSQL [버전]을 더블 클릭하고, 설치할 때 정한 비밀번호를 입력합니다. Databases항목에서 마우스 우클릭 > Create > Database... 선택.- Database 이름에
(예:postgres)라고 입력하고 [Save]를 누릅니다.
※ 프로그램 기본 설정과 일치해야 합니다.
4단계: 테이블 생성 (SQL 실행)
프로그램이 사용할 테이블 구조를 생성합니다. 아래 과정을 정확히 따라주세요.
- pgAdmin 왼쪽 메뉴에서 방금 만든
postgres를 클릭하여 선택합니다. - 상단 메뉴의 Tools > Query Tool (아이콘: DB에 재생 버튼 모양)을 클릭합니다.
- 나타나는 입력창에 아래 SQL 코드를 전체 복사/붙여넣기 합니다.
- 상단의 ▶ (재생 버튼/Execute)을 눌러 실행합니다. ("CREATE TABLE" 등의 메시지가 뜨면 성공)
-- ==================================================
-- [아신테크 프로그램용 DB 초기화 스크립트]
-- ==================================================
-- 1. PostGIS 확장 기능 활성화 (CAD 좌표 처리에 필수)
CREATE EXTENSION IF NOT EXISTS postgis;
-- 2. 일반 프로젝트 테이블 (사진 관리용)
CREATE TABLE IF NOT EXISTS projects (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
folder_id TEXT UNIQUE NOT NULL, -- 구글 드라이브 폴더 ID
project_name TEXT,
status TEXT DEFAULT 'Active',
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 3. 사진 파일 테이블
CREATE TABLE IF NOT EXISTS photos (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
project_folder_id TEXT REFERENCES projects(folder_id) ON DELETE CASCADE,
file_id TEXT UNIQUE NOT NULL,
file_name TEXT,
file_url TEXT,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 4. CAD 프로젝트 테이블
CREATE TABLE IF NOT EXISTS cad_projects (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name TEXT NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 5. CAD 객체 테이블 (도면 데이터 저장)
CREATE TABLE IF NOT EXISTS cad_objects (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
project_id BIGINT REFERENCES cad_projects(id) ON DELETE CASCADE,
handle TEXT,
layer TEXT,
block_name TEXT,
text_content TEXT,
x_coord FLOAT,
y_coord FLOAT,
rotation FLOAT,
geom GEOMETRY(POINT, 4326), -- 좌표 데이터 (WGS84)
created_at TIMESTAMPTZ DEFAULT NOW(),
-- 중복 방지 (같은 프로젝트 내 같은 핸들)
CONSTRAINT uq_cad_objects_handle UNIQUE (project_id, handle)
);
-- 조회 속도 향상을 위한 인덱스
CREATE INDEX IF NOT EXISTS idx_cad_objects_geom ON cad_objects USING GIST (geom);
CREATE INDEX IF NOT EXISTS idx_cad_objects_project_id ON cad_objects (project_id);
-- 6. SVG 라이브러리 테이블 (블록 미리보기 기능용)
CREATE TABLE IF NOT EXISTS svg_library (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
file_id TEXT UNIQUE NOT NULL,
block_name TEXT,
file_url TEXT,
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- 7. CAD 파일 메타데이터 테이블 (JSON/PMTiles 관리용)
CREATE TABLE IF NOT EXISTS cad_files (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
project_id BIGINT REFERENCES cad_projects(id) ON DELETE CASCADE,
file_type TEXT NOT NULL, -- 'json' or 'pmtiles'
file_path TEXT NOT NULL,
file_size BIGINT,
updated_at TIMESTAMPTZ DEFAULT NOW(),
CONSTRAINT uq_cad_files_type UNIQUE (project_id, file_type)
);
-- RLS(Row Level Security) 비활성화 (권한 문제 방지)
ALTER TABLE cad_files DISABLE ROW LEVEL SECURITY;
-- 8. Storage 버킷 생성 및 권한 설정 (필수)
-- PMTiles 렌더링을 위해 버킷은 Public으로 설정하고, 파일에 대한 공개 읽기 권한 정책을 추가해야 합니다.
INSERT INTO storage.buckets (id, name, public)
VALUES ('cad_layers', 'cad_layers', true)
ON CONFLICT (id) DO NOTHING;
-- 기존 정책이 있다면 삭제 후 새로 생성하는 것을 권장합니다.
CREATE POLICY "Public read access for cad_layers"
ON storage.objects FOR SELECT
USING ( bucket_id = 'cad_layers' );
5단계: 프로그램 연결 설정 (db_config.json)
PC 프로그램(exe)이 설치된 폴더에 db_config.json 파일을 생성하거나 수정하여 접속 정보를 입력해야 합니다.
- 파일 위치: 프로그램 실행 파일(.exe)과 같은 폴더
- 파일 이름:
db_config.json - 내용: 아래 내용을 복사하여 메모장에 붙여넣고,
password부분만 1단계에서 설정한 비밀번호로 수정하여 저장하세요.
{
"host": "localhost",
"port": "5432",
"database": "postgres",
"user": "postgres",
"password": "여기에_설치할때_정한_비밀번호_입력"
}
※ 주의: "password"의 값은 반드시 따옴표("") 안에 입력해야 합니다.