client-api-config.yml에서 productId 타입을 string → number로 변경했으나,
프론트엔드에서 productId가 여전히 "1" (String)으로 전달되어 서버의 Long 타입과 불일치 발생.
shop.html의 onclick 핸들러에서 따옴표로 감싸져 있어 숫자가 문자열로 변환됨.
// ❌ 문제 코드
onclick="updateQuantity('${product.id}', 1)" // String으로 전달
// ✅ 수정 코드
onclick="updateQuantity(${product.id}, 1)" // Number로 전달
shop.html 3곳 수정:
1. onclick 따옴표 제거
2. updateQuantity() 함수 === → ==
3. updateCartSummary() 함수 === → ==
로그인은 정상이나 /api/users/me 호출 시 500 에러 발생.
Authorization: Bearer {token} 헤더는 정상적으로 전달되고 있었음.
서버 내부 로직 오류. Docker 로그 확인 필요.
# Docker 컨테이너 로그 확인
docker logs -f {스프링컨테이너명}
로그에서 Exception 스택트레이스 확인 후 원인 파악.
브라우저 주소창에서 직접 /api/users/me 접근 시 403 Forbidden 발생.
브라우저 주소창으로 직접 접근 시 Authorization: Bearer {token} 헤더가 전달되지 않아
Spring Security가 인가 실패 처리.
정상적인 동작. 브라우저 주소창 직접 접근이 아닌,
프론트엔드 코드에서 JWT 토큰을 헤더에 담아 API 호출해야 함.
{
"code": "INVALID_INPUT",
"message": "잘못된 입력값입니다.",
"data": { "orderItems": "주문 상품은 1개 이상이어야 합니다." }
}
프론트엔드에서 items로 보내는데, 서버 DTO의 필드명은 orderItems였음.
@JsonProperty("items")로 매핑은 되어 있었으나,
실제 요청 페이로드에서 productId가 "1" (String)으로 전달되어
@NotEmpty 검증 실패.
shop.html onclick 따옴표 제거로 productId를 Number로 전달.
// ❌ 수정 전
onclick="updateQuantity('${product.id}', 1)"
// ✅ 수정 후
onclick="updateQuantity(${product.id}, 1)"
응답 DTO의 상태값이 Enum 타입인데, 프론트엔드에서 String 타입으로 받아야 함.
방법 1. application.yml 전역 설정
spring:
jackson:
serialization:
write-enums-using-to-string: true
방법 2. Enum 클래스에 어노테이션 추가
@JsonFormat(shape = JsonFormat.Shape.STRING)
public enum OrderStatus {
PENDING, PAID, CANCELLED
}
결제창은 정상적으로 열리나 결제 승인 시 아래 에러 발생.
결제 승인 과정에서 문제가 발생하였습니다: 해지가맹점
AWS Parameter Store의 PORTONE_CHANNEL_KG 값이
PortOne 콘솔의 실제 활성 채널키(A3SV2)와 불일치하거나,
KG이니시스 테스트 MID(INIpayTest) 자체가 만료/제한된 상태.
PORTONE_CHANNEL_KG 값을 A3SV2 채널키로 변경application-local.yml이 .gitignore에 등록되어 있음에도
이전에 커밋되어 GitHub에 민감 정보(DB 비밀번호, JWT 시크릿, PortOne API 키 등)가 노출됨.
Step 1. GitHub 노출 여부 확인
git log --all --full-history -- "**/application-local.yml"
Step 2. Git 추적에서 제거
git rm --cached src/main/resources/application-local.yml
git commit -m "remove sensitive config file"
Step 3. .env 파일로 전환
// build.gradle
implementation 'me.paulschwarz:spring-dotenv:4.0.0'
# .env
PORTONE_API_SECRET=your-secret
JWT_SECRET=your-jwt-secret
# .gitignore에 추가
.env
"ODN-" + LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE)
+ "-" + UUID.randomUUID().toString().replace("-", "").substring(0, 10).toUpperCase()
ODN-20260319-A1B2C3D4E5
ODN-20260319-F6G7H8I9J0
ODN-20260319-K1L2M3N4O5
.replace("_", "") → UUID는 -(하이픈)를 사용하므로 사실상 효과 없는 코드.
-를 제거하려면 .replace("-", "")로 수정 필요.