## 소스맵 노출 차단 (공개 이슈 )
배포본에 .map 이 포함돼 원본 TS/TSX 전문(sourcesContent, 한글 주석 포함)이
그대로 노출됐다. 생성·서빙·저장소 유입 3계층을 모두 막는다.
- 빌드 config 15곳(코어 3 + _bundled 12): sourcemap 하드코딩 제거.
G7_BUILD_SOURCEMAP 판정식으로 교체 — 미설정(로컬 npm run build)이면 생성해
개발 디버깅 경험을 보존하고, 0 이면 미생성.
- Build{Core,Module,Plugin,Template}Command: 죽어 있던 --production 플래그 복구.
$productionMode 를 콘솔 문자열에만 쓰고 npm 프로세스에 env 를 넘기지 않아
산출물이 개발 빌드와 동일했다. runNpmCommand 에 $env 를 추가해 주입
(--watch 에는 미주입). Symfony Process 는 부모 환경에 병합하므로 PATH 유실 없음.
- Allowed{Module,Plugin}FileType / {Module,Plugin}Service::getMimeType:
허용 확장자 map 제거 — 익명 200 서빙 차단(템플릿은 원래 미허용, 3종 정책 일치).
- ExtensionBundleService: CSS 번들의 /*# sourceMappingURL=... */ strip 추가.
CSS 는 블록 주석이라 JS 의 //# 패턴으로는 검출되지 않던 구멍.
- 추적 .map 13개 삭제 + .gitignore 전역 *.map 규칙(경로 한정 시 새 확장에서 누락).
실측: 산출 JS 의 sourceMappingURL 13 → 0, 추적 .map 13 → 0,
확장 디렉토리 npm run build 는 여전히 map 생성(개발 경험 회귀 없음).
## 관리자 환경설정 탭 지연 로딩
코어/이커머스/게시판 환경설정 화면이 진입 즉시 전 탭의 데이터소스를 한꺼번에
호출했다. 각 데이터소스에 활성 탭 조건(if)을 걸어 해당 탭에서만 fetch 하도록
변경하고, 결제 플러그인 3종의 테스트모드 상태 조회도 주문설정 탭으로 한정.
## 동반 결함 수정 (무관 결함 — 재발 방지 목적으로 같은 세션 처리)
- 나이스페이먼츠: 체크아웃 캐시 프리페치가 라우트를 가리지 않아 플러그인 번들이
로드되는 모든 페이지(홈/게시판/로그인)에서 주문서를 조회 → 비회원 매번 422.
형제 플러그인(kginicis)의 기존 가드 패턴을 적용해 체크아웃 경로로 한정.
- admin smoke 8건: 대부분 구현이 아니라 테스트 결함이었다 — URL 오타(단수 board),
존재하지 않는 권한키, 앱 로케일이 en 인데 한국어 라벨 로케이터, DataGrid 버튼을
먼저 잡던 휴리스틱 로케이터. 레이아웃에는 sticky className / 안정 id 를 부여.
- PHPDoc ↔ Pint 충돌 3건: 설명 없는 @param 은 no_superfluous_phpdoc_tags 가
삭제해 audit phpdoc-public-method 와 무한 충돌. 한국어 설명을 붙여 양쪽 충족
(리스너 3종의 설명 누락 메서드도 전수 보강).
- Log::spy 500 3건: spy 가 Log::channel('activity') 를 null 로 만들고
logActivity 가 null->info 로 \Error → 같은 줄 catch(\Exception) 은 못 잡아
통과. 운영에선 채널이 항상 로거이므로 제품 무결 → 테스트에 activity 채널
보존 헬퍼 추가.
- NhnKcpApiServiceTest 5건: 스텁이 Unix 바이너리만 만들어 Windows 분기
(pp_cli_exe.exe)에서만 실패. #!/bin/sh 는 Windows 실행 불가 → 파일 내 기존
컨벤션대로 skip 가드.
## 테스트
- 소스맵 범위 130 passed (신규: BuildCommandSourcemapEnv, NoSourcemapArtifacts,
ExtensionBundleService CSS strip, Allowed*FileType 반전, 자산 서빙 거부)
- 결제 3플러그인 505 passed / 0 failed (skipped 9 = Windows 전용 CLI, 사유 명시)
- 나이스페이먼츠 프론트 38 passed (가드 제거 시 red 실증 후 복원)
- E2E: production-sourcemap-exposure.spec.ts 6건 + 시나리오 매니페스트
버전: sirsoft-admin_basic 1.0.2 → 1.0.3, sirsoft-board 1.0.1 → 1.0.2
(각 manifest/package/lock/composer 동기화). 코어 7.0.4 는 미출시 누적.
11 KiB
11 KiB
Changelog
이 프로젝트의 모든 주요 변경사항을 기록합니다. 형식은 Keep a Changelog를 따르며, Semantic Versioning을 준수합니다.
[Unreleased]
Fixed
- 플러그인이 활성화되어 있으면 홈, 게시판, 로그인 등 결제와 무관한 모든 페이지에서 주문서 조회 요청이 한 번씩 불필요하게 발생하던 문제를 수정했습니다. 장바구니가 없는 비회원에게는 이 요청이 매번 실패해 브라우저 오류로 기록됐습니다. 이제 결제 페이지에서만 요청합니다.
Security
- SignData 발급 요청에 주문번호+IP 단위 rate limit과 구매자 이메일/전화번호 대조를 추가해 공개 서명 엔드포인트의 주문번호/금액 프로빙 가능성을 줄였습니다.
- 콜백 URL 생성 시 요청 헤더 대신
config('app.url')을 기준으로 절대 URL을 만들도록 고정해 프록시 환경 오동작과 헤더 기반 리다이렉트 변조 위험을 줄였습니다. - 카드 승인 콜백과 결제창 닫힘 통보 처리에 주문/결제 행잠금 후 재검증을 추가해 동시 콜백에서 마일리지, 재고, 결제 상태가 중복 반영되지 않도록 보강했습니다.
- 에스크로 배송등록 시 결제된 에스크로 거래의 저장 TID와만 바인딩하고, 결제 당시 MID와 테스트/운영 모드로 API 컨텍스트를 복원하도록 수정했습니다.
- 가상계좌 입금통보가 결제 당시 저장된 TID, MID, 계좌번호, 금액, 입금대기 상태와 일치할 때만 결제완료 처리되도록 교차검증을 강화했습니다.
- 관리자 금융 API에 주문 조회/수정 권한을 세분화해 낮은 권한의 관리자 계정이 환불·에스크로 등 자금 이동 작업을 호출하지 못하도록 보강했습니다.
- 가상계좌 입금자명과 전체 계좌번호가 애플리케이션 로그에 남지 않도록 민감정보 기록을 줄였습니다.
Fixed
- 나이스페이먼츠 가상계좌 발급 후 뒤늦게 PC 결제창 닫힘 보고가 들어와도 입금대기 주문이 결제실패/취소로 덮이지 않도록 보강했습니다.
- 이미 부분취소된 나이스페이먼츠 거래의 남은 잔액을 다시 취소할 때 PG 취소 요청이 전액취소로 잘못 전달되어 실패하던 문제를 수정했습니다.
- 비회원 나이스페이먼츠 주문완료/주문상세에서 매출전표 조회가 인증 사용자 전용 라우트에 막히지 않도록 게스트 주문 토큰과 결제 성공 후 임시 영수증 쿠키 접근을 지원했습니다.
- 나이스페이먼츠 인증 단계 실패(
AuthResultCode != 0000)는 실제 PG 승인 전이므로 주문/결제/주문옵션을 취소 상태로 바꾸지 않고 체크아웃 재시도가 가능하도록 수정했습니다. - 다통화 주문의 환율 스냅샷이 누락되거나 0인 경우 SignData, 결제 승인 콜백, 결제창 닫힘 보고에서 예외가 일반 승인 오류로 뭉개지지 않도록 결제 통화 설정 오류로 명시 처리했습니다.
- 나이스페이먼츠 간편결제 주문이 주문완료, 마이페이지 주문상세, 관리자 주문목록/상세에서 실제 간편결제 수단 대신
신용카드로만 표시되던 문제를 수정했습니다. - 관리자 주문목록과 주문상세 레이아웃이 리뉴얼되거나 플러그인 업데이트 과정에서 나이스페이먼츠 테스트결제 배지, 테스트 모드 안내, 결제 조회/결제 정보 패널이 누락될 수 있던 문제를 수정했습니다.
- 운영 모드에서 live MID가 비어 있으면
SR같은 잘못된 MID로 결제창을 만들지 않고 서명 요청 단계에서 실패하도록 보강했습니다. - 환불 요청 시 현재 설정값이 아니라 결제 당시 MID와 테스트/운영 모드로 나이스페이먼츠 API 서명 컨텍스트를 복원하도록 수정했습니다.
- 관리자 가상계좌 환불이 PG 취소만 호출하고 주문/결제/환불 장부를 갱신하지 않던 문제를 수정했습니다.
- 결제완료 커밋 후 후속 처리 예외가 발생한 경우 이미 결제완료 상태인 거래에 망취소를 보내지 않도록 보상 처리 가드를 추가했습니다.
- 이커머스 주문설정 화면에서 나이스페이먼츠 플러그인이 테스트 모드일 때 운영 전환 경고와 설정 이동 버튼을 표시하도록 보강했습니다.
[1.0.0-beta.4] - 2026-06-03
Added
- 레이아웃 편집기에서 이 플러그인의 설정 화면을 테스트 모드/운영 모드 상태로 전환해 미리볼 수 있도록 했습니다.
- 레이아웃 편집기 데이터 소스 목록에서 이 확장이 제공하는 데이터 소스가 친화 명칭으로 표시되고, 어느 확장이 제공했는지 출처가 함께 표시됩니다.
Fixed
- 이커머스 관리자 주문설정 결제수단 목록에서 나이스페이먼츠 간편결제 항목이 브랜드 텍스트 배지로 표시되도록 보강했습니다.
- 이커머스 관리자 주문설정 결제수단 목록에 나이스페이먼츠 간편결제 항목이 노출되지 않던 문제를 수정했습니다.
- 체크아웃에서 나이스페이먼츠 간편결제 일부 항목이 다른 PG 간편결제 보정 로직에 잘못 잡혀 아이콘/문구가 뒤섞여 표시되던 문제를 수정했습니다.
- 체크아웃의 나이스페이먼츠 간편결제 항목이 NHN KCP 간편결제처럼 브랜드 아이콘과 제목/설명 텍스트가 함께 보이도록 표시를 보강했습니다.
- 활성 관리자 테마에 최신 시맨틱 CSS가 없어도 플러그인 설정 화면의 여백, 카드 경계, 하단 저장 영역이 깨지지 않도록 보강했습니다.
- 나이스페이먼츠 PC 결제창을 사용자가 닫거나 인증 단계 취소 콜백이 들어온 경우 임시 주문이
pending_order/ready상태로 남지 않고 결제실패/취소 상태로 기록되도록 보강했습니다. - 비회원 체크아웃에서 나이스페이먼츠 결제창 호출 직전 SignData 생성 요청이 인증 미들웨어에 막혀 401로 실패하던 문제를 수정했습니다.
- 나이스페이먼츠 승인 실패, 금액 불일치, 결제창 닫기 흐름에서 결제 레코드가
failed상태로 남도록 정합성을 보강했습니다. - 실제 PG 승인 이력이 없는 나이스페이먼츠 결제실패 주문은 동일 주문으로 재시도할 수 있도록 SignData 발급 단계에서 안전하게 결제대기 상태로 복구하도록 보강했습니다.
- 간편결제 fallback 경로에서도 쿠폰/마일리지 반영 후 실결제 금액을 PG 요청 금액으로 사용하도록 수정했습니다.
Changed
- 환경설정 / 주문 화면 결제 / 마이페이지 영수증 영역 외형을 sirsoft-admin_basic 표준 시맨틱과 정합 — 다른 화면과 같은 결로 통일.
- 관리자 화면 좌우 정렬 컨테이너(섹션 헤더 · 액션바 · 카드 상단부 등) 외형을 표준 시맨틱(.flex-between)으로 정리 — 시각 변경 없음, 향후 톤 조정이 한 곳에서 가능.
- 플러그인 환경설정 화면의 폼 라벨 / 보조 설명 / 에러 메시지 시각 시맨틱을 sirsoft-admin_basic 표준 시맨틱과 정합 — 다른 관리자 화면과 같은 결로 통일.
- 플러그인 환경설정 화면 곳곳의 텍스트 톤 (보조 설명 · 라벨 · 본문 · 강조 · 작은 보조) 시각 시맨틱을 관리자 표준 시맨틱과 정합 — 같은 결의 글자 톤이 한 곳에서 일괄 조정 가능.
- 플러그인 환경설정 화면의 세로 정렬 컨테이너 / 입력 박스를 sirsoft-admin_basic 표준 시맨틱 (.row-stack / .input) 과 정합 — 입력 행 사이에 옅은 회색 구분선(1px) 이 자동 적용되어 행 묶음 가독성이 개선되고, 입력 박스 외형이 일관 표시되도록 정리.
[1.0.0-beta.3] - 2026-05-20
Security
- 결제 승인/가상계좌 통보 응답 저장을 blacklist 제거 방식에서 whitelist 저장 방식으로 변경 — PG 응답에 새 민감 필드가 추가되어도 메타에 자동 저장되지 않도록 강화했습니다.
[1.0.0-beta.2] - 2026-05-20
Added
- PG 측 결제 취소가 확인된 시점에 활동 로그가 별도로 기록되도록 보강 — 운영자가 PG 응답 시각 / 취소 TID 등 사후 추적에 활용 가능.
- 마이페이지 주문 상세에 가상계좌 입금 안내 표시 — 결제수단이 가상계좌인 주문은 은행/계좌번호/예금주/입금 금액/입금 기한이 함께 노출되어 사용자가 입금 정보를 다시 확인할 수 있습니다.
Changed
- 플러그인 환경설정 화면의 하단 저장 버튼이 스크롤 중에도 화면에 고정되도록 개선.
- 모바일 결제창에서 사용자가 취소하거나 인증이 실패한 경우 "결제 처리 중 오류가 발생했습니다" 같은 강한 에러 메시지 없이 체크아웃 화면으로 조용히 복귀하도록 변경 — 인증 단계는 실제 결제 승인 전이라 사용자가 다시 시도하면 되는 상황이므로 불필요한 경고 노출을 제거.
Fixed
- 체크아웃에서 신용카드 외 결제수단(가상계좌/계좌이체/휴대폰)을 선택해도 PG 결제창이 열리지 않고 곧바로 주문 완료로 이동하던 문제 수정.
Security
- 결제 콜백 중복 처리 방어 추가 — 동일 거래번호로 카드 결제 콜백이 두 번 도착해도 결제완료/마일리지 적립 등이 중복 실행되지 않도록 멱등 응답 처리
- 인증 콜백의 짧은 시간 내 중복 시도 방어 추가 — 동일 인증 토큰이 60초 안에 두 번 수신되면 재시도(replay) 의심으로 차단
- 결제 승인 실패 시 자동 취소 보강 — PG 측에 잔존할 수 있는 미완료 승인을 즉시 망취소로 해제하여 사용자 환불 누락 방지
[1.0.0-beta.1] - 2026-04-22
Changed
- 플러그인 식별자를
sirsoft-pay-nicepayments에서sirsoft-pay_nicepayments로 변경 — G7 코어가 권장하는vendor-name2-part 명명 규칙에 맞추기 위함 - 사용자 노출 에러/환불 메시지를 한국어/영어 다국어로 분리 — 운영 언어에 따라 자동 노출
- PG 프로바이더 표시명을 다국어 키로 분리 — 활성 언어팩으로 자동 보강되어 다른 PG 플러그인과 동일한 컨벤션으로 정렬
Added
- 오픈 베타 릴리즈
sirsoft-pay_nicepayments.payment.before_cancel/after_cancel액션 훅 — 외부 소비자가 결제 취소 지점에 본인인증 등 확장 로직을 붙일 수 있도록 확장점 제공- 가상계좌 입금통보 IP 화이트리스트 검증 강화 — 공식 발송 IP 외 요청은 라우트 진입 단계에서 차단
- PG 도메인 전용 예외 도입 — 외부 소비자가 나이스페이먼츠 도메인 오류만 선택적으로 처리할 수 있도록 개선
- 다크 모드 지원 보강 — 결제 설정 폼 입력 필드의 포커스 링이 다크 모드에서도 정상 표시