← 문서 포털

호스트 구성 · 역할

주소를 몇 개 만들고, 각각 무엇을 하며, 무엇을 받아야 하는지

발주사 전달용 · 2026-08-12 기준 (코드·nginx 설정·DNS 조회 실측)

1. 한눈에 — 주소 3종 × 운영/테스트

모든 주소 앞에 npwp- 를 붙입니다(발주사 확정). 테스트는 npwp-t 입니다.
서버를 주소마다 나누지 않습니다 — WEB 서버의 nginx 하나가 주소를 보고 갈라 줍니다.

주소운영테스트하는 일지금 DNS
apinpwp-api.nestpay.co.krnpwp-tapi.nestpay.co.kr 회원앱·매장앱이 부르는 API. 발주사가 보내는 결과 통지(웹훅)도 여기로 받습니다. 없음 — 생성 필요
pgnpwp-pg.nestpay.co.krnpwp-tpg.nestpay.co.kr 외부 쇼핑몰(매장 서버)이 붙는 결제 연동 전용 입구. 없음 — 생성 필요
adminnpwp-admin.nestpay.co.krnpwp-tadmin.nestpay.co.kr 운영자가 쓰는 관리자 화면과 그 화면이 부르는 API. 없음 — 생성 필요
www보류 — 기존 사이트 사용 여부 확인 중 회사·앱 소개 페이지. 기존 www.nestpay.co.kr 을 그대로 쓰실 수 있어 결정을 기다립니다. 새로 만들 경우 npwp-www·npwp-twww 2개가 추가됩니다. 기존 사이트 있음
2026-08-12 DNS 조회 결과 — 실제로 등록되어 있는 것은 nestpay.co.kr(112.175.152.168) · www(112.175.152.168) · api(112.175.152.167) · tapi(211.47.2.151) 입니다. npwp- 로 시작하는 주소는 하나도 없습니다. 위 표의 6개를 새로 만들어야 하며, 만들기 전에는 앱도 매장 연동도 관리자 화면도 외부에서 접속할 수 없습니다.
왜 npwp- 를 붙이나요api.nestpay.co.kr·tapi.nestpay.co.kr 는 발주사의 기존 결제 시스템이 이미 쓰고 있습니다. 접두사를 붙이면 이름이 겹치지 않아, 같은 도메인 안에서 우리 서비스의 주소임을 이름만 보고 구분할 수 있습니다. 이 규칙은 발주사 요구사항이며 필수입니다.

2. 왜 주소를 나누나요

주소마다 들어올 수 있는 사람과 열리는 문이 다르기 때문입니다. 하나로 합치면 외부 쇼핑몰이 관리자 기능에 닿을 수 있게 되고, 실수 하나가 사고로 이어집니다.

주소누가 들어오나열려 있는 문그 밖의 경로
npwp-api우리 앱(회원·매장) · 발주사 서버 /app/** /store/** /webhooks/vendor/** /health /developer모두 404
npwp-pg외부 쇼핑몰 서버 /pg/** /health /developer모두 404
npwp-admin운영자(사내 IP) 관리자 화면(정적) · /api/** → 백엔드 /admin/** · /health · /developer모두 404

열지 않은 경로는 아예 없는 것처럼 응답합니다. 관리자 API 가 공개 주소로 새지 않게 하는 장치입니다.

관리자 화면은 정적 파일인데 왜 API 와 주소가 같나요?

같은 주소지만 응답하는 주체가 다릅니다. nginx 가 경로를 보고 갈라, 화면 파일은 자기가 직접 주고 /api/** 만 자바 서버로 넘깁니다. 주소를 나누면 브라우저가 서로 다른 출처로 보아 CORS 설정이 필요해지고, 관리자 토큰을 출처 너머로 실어 보내야 해서 위험이 커집니다. 같은 주소로 두면 그 문제가 아예 생기지 않습니다. 그래서 npwp-admin-api 같은 별도 주소는 만들지 않습니다.

3. 서버 구조 — L4 → WEB(공개망) → WAS(폐쇄망) → DB

발주사 확정 구조입니다. 바깥에서 닿는 것은 WEB 서버뿐이고, 업무 처리와 데이터는 폐쇄망 안에 있습니다.

[ 인터넷 · 외부 쇼핑몰 · 발주사 서버 ]
                 │
         ┌───────┴───────┐
         │ L4 로드밸런서 │   /health 로 각 WEB 서버 생사 확인
         └───────┬───────┘
     ┌───────────┴───────────┐        ← 공개망(DMZ)
 ┌───┴────┐             ┌────┴───┐
 │ WEB #1 │ ··· 동일 ···│ WEB #2 │    nginx — 주소(npwp-api·pg·admin)를 보고 갈라 줌
 └───┬────┘             └────┬───┘    관리자 화면 등 정적 파일도 여기서 직접 응답
     └───────────┬───────────┘
     ┌───────────┴───────────┐        ← 폐쇄망 (외부에서 직접 접속 불가)
 ┌───┴────┐             ┌────┴───┐
 │ WAS #1 │ ··· 동일 ···│ WAS #2 │    자바 API — 업무 처리
 │ 공유폴더│◀── 마운트 ──│        │    파일 실물은 WAS #1 의 폴더를 두 대가 함께 바라봄
 └───┬────┘             └────┬───┘
     └───────────┬───────────┘
             ┌───┴───┐
             │  DB   │   MariaDB (1대)
             └───────┘
파일 실물을 어디에 두나 — 오브젝트 스토리지(MinIO 등)를 쓸 수 없다고 하셔서, WAS #1 의 파일 폴더를 WAS #2 가 함께 마운트하는 방식으로 확정했습니다(2026-08-11 협의). 그래서 별도의 파일 보관용 주소(storages)는 만들지 않습니다.
다만 이 폴더가 연결되어 있지 않으면 서버가 아예 켜지지 않도록 해 두었습니다. 마운트가 빠진 채로 서비스가 열려 "방금 올린 서류가 사라지는" 사고를 막기 위한 것입니다.
WEB 서버가 2대라 확인이 필요한 것 — 관리자 화면 파일이 WEB 서버에 있으므로 두 대에 같은 파일이 올라가야 합니다. 한 대만 갱신하면 새로고침할 때마다 옛 화면과 새 화면이 번갈아 나옵니다. 두 대에 각각 올리실지(rsync 등), 공유 폴더를 함께 보실지 알려 주시면 그에 맞춰 배포 절차를 정리하겠습니다.

4. 개발자 문서 — 주소마다 그 주소의 API 만

각 주소의 /developer 하나로 들어갑니다. 그 주소에서 실제로 부를 수 있는 API 만 설명합니다 — 부를 수 없는 API 를 보여 주면 오히려 헷갈리기 때문입니다.

주소문서내용 · 공개 범위
npwp-pg…/developer
npwp-tpg…/developer
외부 쇼핑몰 연동 가이드
(8개 API)
결제 흐름 · HMAC 서명 · 웹훅 · 연동 테스트 4종 통과 조건 · AI 에이전트로 연동할 때 쓰는 프롬프트. 인터넷 공개
npwp-api…/developer
npwp-tapi…/developer
앱 API 가이드
(회원앱 71 · 매장앱 34)
서버 규격에서 자동 생성 — 코드가 바뀌면 문서도 함께 바뀝니다. 규격 원문(Swagger)은 사내 IP 전용
npwp-admin…/developer
npwp-tadmin…/developer
관리자 API 규격
(176개)
관리자 화면 우측 상단 [개발자 센터] 버튼으로도 열립니다. 사내 IP 전용

테스트 주소로 들어오면 문서 맨 위에 “테스트 서버” 띠가 뜨고, 문서 안의 기준 주소도 그 서버 기준으로 바뀝니다. 개발자가 운영·테스트를 헷갈려 열쇠를 잘못 쓰는 사고를 막기 위한 것입니다.

매장 개발자에게는 Swagger 를 드리지 않습니다. Swagger 의 “Try it out” 은 요청마다 필요한 HMAC 서명을 만들지 못해 여기서는 항상 실패합니다 — 눌러도 안 되는 버튼은 혼란만 줍니다. 대신 순서·서명 만드는 법·웹훅 처리까지 담은 가이드를 제공합니다.

5. 서버 상태 확인

모든 주소에 두 경로가 있습니다.

왜 나눴나요/health 가 WAS 까지 확인하면, WAS 두 대가 모두 죽었을 때 멀쩡한 WEB 까지 L4 가 빼 버려 “점검 중” 안내조차 띄우지 못하고 전면 중단됩니다. WAS 장애는 nginx 가 알아서 죽은 서버를 빼 줍니다.

6. 발주사에 요청드리는 것

#항목내용
1DNS A레코드 6개 운영 npwp-api · npwp-pg · npwp-admin / 테스트 npwp-tapi · npwp-tpg · npwp-tadmin. 모두 WEB 서버(L4) 를 가리키면 됩니다. 이것이 없으면 아무것도 접속되지 않습니다.
2WAS 서버 정보 WAS 2대의 내부 IP 와 8080 포트 개방(WEB → WAS 방향). WEB 서버 2대의 IP 도 알려 주셔야 합니다 — 그 IP 를 믿어야 실제 사용자 IP 를 판별할 수 있습니다.
3웹훅 발신 IP 발주사가 결과를 보낼 때 쓰는 IP(운영·테스트). 지금은 아무 곳에서도 못 보내게 막아 둔 상태라, IP 를 받아야 본인인증 결과와 출금 결과를 받을 수 있습니다. 받는 주소: https://npwp-api.nestpay.co.kr/webhooks/vendor/identity · …/webhooks/vendor/transfer (테스트는 npwp-tapi)
4입금 통지 양식 보내 주실 항목(JSON 필드)·서명 방식·재발송 정책. 받는 즉시 /webhooks/vendor/ 아래에 창구를 만들겠습니다. 양식을 모르면 만들 수 없어 대기 중입니다.
5SSL 인증서 보유하신 와일드카드 *.nestpay.co.kr 1장으로 위 6개 주소가 모두 커버됩니다 (전부 점 하나짜리 서브도메인이라 추가 발급이 필요 없습니다). 중간 CA 를 포함한 인증서와 개인키, 그리고 만료 시 갱신 절차.
6사내 접속 IP 관리자 화면과 내부 API 규격에 들어올 수 있는 사무실·VPN IP. 검수 담당자가 사외에서 규격을 보셔야 하면 그 IP 도 함께 주세요. 관리자 화면에서 직접 등록·변경하므로 코드 수정은 필요 없습니다.
7www 사용 여부 회사·앱 소개 페이지를 기존 www.nestpay.co.kr 로 유지하실지, 우리가 만든 것으로 교체하실지 알려 주세요. 교체 시 주소 2개가 추가됩니다.
8정적 파일 배포 방법 관리자 화면 파일을 WEB 2대에 어떻게 올릴지(각각 전송 / 공유 폴더). 두 대의 파일이 다르면 화면이 번갈아 나옵니다.
운영 시작 전 반드시 할 일 — 지금은 관리자 접속 허용 IP 가 0건이라 사설망 대역이 열려 있는 초기 상태입니다(설치 직후 잠기지 않도록 한 안전장치). 위 6번 IP 를 관리자 화면에 등록하면 그 순간부터 등록된 IP 만 들어올 수 있습니다. 지금 접속 중인 IP 를 포함해 등록하세요 — 포함하지 않으면 본인이 잠깁니다.