king 3522fc2119 feat(cafe24): 일괄수정 — 상세페이지 <style> 블록 통일
87개 상품의 상세설명 맨 위 <style> 을 정해진 내용으로 바꾸는 화면을 추가했다.

    <style>
    	div {
    		text-align: center;
    	}
    </style>

그냥 덮어쓰지 않고 검사 → 선택 → 적용 2단계로 만들었다. 상품 131번의 style 안에는
"비디오 태그 모바일 반응형 스타일" 같은 CSS 가 들어 있어서, 무엇이 지워지는지 보지
않고 87건을 일괄 실행하면 필요한 규칙이 조용히 사라진다. 검사 결과 표에 지금 들어
있는 CSS 를 그대로 보여주고, 변경이 필요한 상품만 자동 선택한다(이미 같은 내용이면
「이미 동일」로 제외).

맨 앞 <style> 블록 하나만 바꾼다. 아래쪽에 <style> 이 더 있으면 건드리지 않고
「블록 2개 · 주의」로 표시해 사람이 판단하게 한다 — 일괄 작업이 남의 CSS 를 조용히
지우는 것이 가장 위험하다. 블록이 없는 상품은 맨 앞에 넣는다.

상품 1건당 1요청으로 쪼갰다. 87건을 한 요청으로 묶으면 1분 가까이 걸려 프록시
타임아웃에 걸리고, 동시에 던지면 카페24 호출 제한(429)에 걸린다. 브라우저가 순차
호출하며 진행률을 보여주고, 한 건 실패가 나머지를 막지 않으며 어디까지 됐는지
화면에 남는다.

적용 순서는 단건 편집과 같은 원칙을 지킨다: 카페24 현재값 재조회 → BACKUP 버전 →
교체 → PUT → MANUAL 버전 + 감사로그(action=bulk_style). 검사 때 읽은 값을 재사용하지
않고 쓰기 직전에 다시 읽는다. PC/모바일 분리 상품은 모바일도 함께 바꾼다.

검증: 유닛테스트 51개 통과(신규 6개 — 앞 블록만 교체하고 뒤 블록 보존, 없을 때 삽입,
멱등, 포맷 후 탭 유지, 여러 줄 원문 정확히 절단). 실제 데이터로 미리보기 로직 확인:
비디오 CSS 가 "지워질 내용"에 잡히고, 이미 동일한 상품은 will_change=False,
style 없는 상품은 삽입 대상으로 판정. 라우트 13개 등록, 템플릿 렌더 확인.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 14:12:24 +09:00

DBX 메인 페이지

Google Workspace 계정으로 로그인한 뒤 허용된 사용자만 업무 메뉴에 접근하는 FastAPI 웹앱입니다.
Nginx Proxy Manager(NPM) 뒤에서 Docker 컨테이너로 실행하는 구성을 기준으로 작성했습니다.

접속 허용 계정

허용 목록은 app/main.pyALLOWED_EMAILS에서 서버 측으로 검사합니다.


Google OAuth 설정

Google Cloud Console에서 OAuth 클라이언트를 만들고 아래 값을 등록합니다.

항목
승인된 JavaScript 원본 https://dbx.no1king.freeddns.org
승인된 리디렉션 URI (운영) https://dbx.no1king.freeddns.org/auth/google
승인된 리디렉션 URI (로컬) http://localhost:8080/auth/google

Google 로그인 화면에서 hd=dbxcorp.co.kr 힌트를 보내지만,
실제 접근 제한은 서버에서 이메일 도메인과 허용 계정 목록으로 다시 검사합니다.


환경 변수

변수 설명
GOOGLE_CLIENT_ID Google OAuth 클라이언트 ID
GOOGLE_CLIENT_SECRET Google OAuth 클라이언트 보안 비밀
SESSION_SECRET_KEY 세션 쿠키 서명용 랜덤 문자열
SESSION_COOKIE_SECURE HTTPS 환경 true / 로컬 HTTP false
PUBLIC_BASE_URL 외부 접속 주소 (예: https://dbx.no1king.freeddns.org)
CS_ORDER_URL CS 발주 업무 버튼 이동 주소
CUSTOMER_ORDER_LIST_URL 고객 주문리스트 프로그램 버튼 이동 주소

로컬 Docker 테스트

# 1. 환경 변수 파일 준비
copy .env.local.example .env.local
# .env.local 을 열어 Google OAuth 키 등 실제 값으로 수정

# 2. 이미지 빌드 및 컨테이너 실행
docker compose -f docker-compose.local.yml up --build

# 3. 브라우저에서 확인
# http://localhost:8080

Google 로컬 OAuth 주의
Google Cloud Console → OAuth 클라이언트 → 승인된 리디렉션 URI에
http://localhost:8080/auth/google 를 반드시 추가해야 합니다.


서버 배포 (Ubuntu + NPM)

NPM은 dbx.no1king.freeddns.orghttp://192.168.0.194:80 으로 이미 설정되어 있습니다.

# 서버에서 실행

# 1. 저장소 클론
git clone https://gitea.no1king.freeddns.org/king/dbx-main.git
cd dbx-main

# 2. 환경 변수 파일 준비
cp .env.example .env
# .env 를 열어 실제 값으로 수정
nano .env

# 3. 이미지 빌드 및 백그라운드 실행
docker compose up --build -d

# 4. 로그 확인
docker compose logs -f

업데이트 배포

git pull
docker compose up --build -d

컨테이너 관리

docker compose ps          # 상태 확인
docker compose down        # 중지
docker compose restart web # 재시작

폰트

app/static/fonts/ 에 Pretendard 폰트가 포함되어 있습니다.

파일 굵기
Pretendard-Thin.ttf 100 (얇음)
Pretendard-Regular.ttf 400 (기본)
Pretendard-Bold.ttf 700 (굵음)
S
Description
DBX 메인페이지
Readme 19 MiB
Languages
Python 48.6%
HTML 25.1%
CSS 15.1%
PLpgSQL 5.2%
JavaScript 4.7%
Other 1.2%