PCI DSS 규정 완벽 가이드 - 결제 시스템 개발자가 꼭 알아야 할 보안 요구사항
결제 시스템을 개발하거나 운영한다면 PCI DSS(Payment Card Industry Data Security Standard) 규정 준수는 선택이 아닌 필수예요. 카드 정보 유출 사고는 기업에 막대한 손실을 가져올 수 있기 때문에, 이 보안 표준을 정확히 이해하고 적용해야 합니다.
PCI DSS란 무엇인가요?
PCI DSS는 카드사(Visa, Mastercard 등)들이 공동으로 제정한 카드 정보 보안 표준이에요. 신용카드 데이터를 저장, 처리, 전송하는 모든 조직이 준수해야 하는 보안 요구사항을 정의하고 있죠.
2004년 처음 제정된 이후 지속적으로 업데이트되고 있으며, 현재 PCI DSS 4.0 버전이 최신이에요. 이 규정은 6개의 목표와 12개의 요구사항으로 구성되어 있습니다.
준수 수준은 연간 거래량에 따라 4단계로 나뉘어요. 레벨 1(600만 건 이상)은 가장 엄격한 감사가 필요하고, 레벨 4(2만 건 미만)는 상대적으로 간소한 자가 평가로 충분합니다.
핵심 보안 요구사항 12가지
PCI DSS의 12가지 요구사항은 크게 6개 목표로 그룹화돼요.
안전한 네트워크 구축 및 유지: 방화벽 설치와 기본 설정 변경, 시스템 암호 및 보안 매개변수의 기본값 사용 금지가 포함됩니다.
카드 소유자 데이터 보호: 저장된 카드 데이터 보호와 전송 시 암호화가 핵심이에요. 특히 PAN(Primary Account Number)은 반드시 암호화해서 저장해야 하며, CVV/CVC는 절대 저장하면 안 됩니다.
취약점 관리: 정기적인 보안 업데이트와 백신 프로그램 유지, 보안 시스템 및 애플리케이션 개발이 필요해요.
강력한 접근 제어: 카드 데이터 접근을 업무상 필요한 사람만으로 제한하고, 시스템 접근 시 고유 ID 할당, 물리적 접근 제한을 구현해야 합니다.
정기적인 모니터링 및 테스트: 네트워크 리소스 및 카드 데이터 접근에 대한 모든 활동을 추적·모니터링하고, 보안 시스템을 정기적으로 테스트해야 해요.
정보 보안 정책 유지: 모든 직원을 대상으로 한 정보 보안 정책을 문서화하고 유지해야 합니다.
실무에서의 PCI DSS 적용
실제 개발 시에는 카드 정보를 직접 다루지 않는 방식을 우선 고려해야 해요. 토큰화(Tokenization)나 PG사의 결제 모듈을 활용하면 PCI DSS 준수 범위를 크게 줄일 수 있습니다.
// 안전하지 않은 방식 (절대 금지)
const cardData = {
cardNumber: '1234-5678-9012-3456',
cvv: '123',
expiry: '12/25'
};
await saveToDatabase(cardData);
// 안전한 방식 (토큰화)
const paymentResult = await pgService.requestToken({
amount: 10000,
orderName: '상품명'
});
await saveToDatabase({
orderId: 'ORD123',
token: paymentResult.token // 실제 카드번호 아님
});
카드 데이터 전송 시에는 반드시 TLS 1.2 이상을 사용해야 해요.
# Python에서 안전한 HTTPS 통신
import requests
response = requests.post(
'https://api.payment-gateway.com/pay',
json={'token': payment_token, 'amount': 10000},
verify=True, # SSL 인증서 검증
timeout=30
)
로깅 시에도 카드 정보가 노출되지 않도록 주의해야 합니다. 카드번호는 최대 앞 6자리와 뒤 4자리만 표시하고 나머지는 마스킹하는 것이 원칙이에요.
PCI DSS 준수를 위한 주의사항
카드 데이터 저장 최소화가 가장 중요해요. CVV/CVC, PIN, 마그네틱 스트라이프 데이터는 어떤 경우에도 저장하면 안 됩니다. 카드번호(PAN)도 업무상 꼭 필요한 경우가 아니면 저장하지 않는 것이 좋아요.
개발 및 테스트 환경에서 실제 카드 데이터를 사용하는 것도 금지돼요. 테스트용 가짜 카드번호를 사용하거나, 프로덕션 데이터를 익명화해서 사용해야 합니다.
정기적인 보안 스캔과 침투 테스트도 필수예요. 외부 ASV(Approved Scanning Vendor)를 통한 분기별 취약점 스캔을 수행해야 하며, 연 1회 이상 침투 테스트를 실시해야 합니다.
결론
PCI DSS 규정은 복잡해 보이지만, 핵심은 "카드 데이터를 최대한 다루지 말고, 다뤄야 한다면 철저히 보호하라"는 것이에요. 토큰화와 같은 기술을 활용하면 준수 범위를 크게 줄일 수 있고, PG사의 검증된 솔루션을 사용하는 것도 좋은 방법입니다. 무엇보다 보안은 한 번 구축하고 끝나는 게 아니라 지속적으로 관리해야 한다는 점을 기억하세요.