[SpringBoot & JPA 프로젝트] 배포 후 실제 웹서비스 운영 단계로 나아가기
도메인을 구매하고 EC2 인스턴스를 통해 도메인에 프로젝트를 올려놓는 것 까지 완성된 후 실제로 서비스를 런칭하기 위한 3가지 단계가 있었다 1. 사업자 등록증발급 2. 토스페이먼츠 API > 전자
feelfreetothink.tistory.com
▲ 이전글 : [SpringBoot & JPA 프로젝트] 배포 후 실제 웹서비스 운영 단계로 나아가기
아 기다리고 오 기다리던
카드사 심사가 13일만에 완료되었습니다 😆
개발자 센터에 접속하시면 카드사심사 전에는 활성화되지 않던 라이브 탭이 활성화 되어있는 것을 확인 할 수 있습니다.
application.properties 에 키를 입력하고 controller 에서 주입을 받아서
결제 테스트를 진행해보았는데요
cannot retry due to server authentication, in streaming mode
에러가 발생합니다.
메세지로만 봐서는 키가 올바르지 않아 reject 된 것으로 추측되는데,
두세번 재확인 해봐도 올바르게 입력했습니다.
뭐가 문제일지 확인해보기로 합니다.
토스페이먼츠 홈페이지 우측 하단의 플로팅 아이콘을 클릭하면
Tosspayments 기술지원 디스코드의 초대장을 받을 수 있습니다.
디스코드에서 서치하여 저와 같은 오류가 발생한 사례를 찾았습니다.
역시 토스는 친절합니다.
토스에서 알려준 링크를 접속하여 제시된대로 해결을 시도해봤는데 결론적으로 같은에러가 발생했습니다.
코드를 다시 .. 찬찬히 살펴보니
${} 를 빼먹어서 제대로 주입이 되지 않네요 !
빨리 연동하고 싶은 마음에 너무 서두른 것 같습니다.
수정 후 다시 테스트를 진행했습니다.
테스트 결제가 성공했습니다
연동이 성공했으니 다음단계로 넘어가겠습니다.
▶ 결제 성공 TEST
1. 한개씩 구매하기
상품 한개씩 결제는 성공했지만
주문목록에서
한개 결제한 주문건의(주문번호 50번) 상품명이 목도리 외 1개로 표시되는 것을 확인 할 수 있습니다.
목도리 한개 주문했기 때문에 상품명은 '목도리' 로 출력되야 하는데 말이죠
상품명(orderName) 출력 로직을 다시 살펴봐야 할 것 같습니다
//사용자의 주문목록 조회
@Transactional
public List<OrderDto> selectOrderList(Long userId){
List<Order> orderList = orderRepository.findOrdersByUser_IdAndOrderStatus(userId, OrderStatus.ORDER);
List <OrderDto> orderDtoList = new ArrayList<>();
int itemQty = 0;
String orderName = "";
OrderDto orderDto = new OrderDto();
for(Order order : orderList){ //사용자의 주문갯수만큼
List<OrderItem> orderItemList = order.getOrderItems();
for(OrderItem orderItem : orderItemList){ //주문1개의 상품개수만큼
itemQty ++;
orderName = orderItem.getItem().getItemName();
}
if(itemQty>1){
itemQty -= 1;
orderName = orderName + " 외 " + itemQty +"개";
}
orderDto = OrderDto.builder()
.id(order.getId())
.orderName(orderName)
.totalPrice(order.getTotalPrice())
.regTime(order.getRegTime())
.build();
orderDtoList.add(orderDto);
}
return orderDtoList;
}
중첩 for 문을 사용한 부분이 잘못되었습니다.
다시보니 어처구니가 없습니다.
한 계정으로 한번씩만 결제 테스트를 진행하여 오류를 잡을 수 없었습니다.
한 계정으로 두변 결제를 진행하니 주문건수만큼 itemQty 변수가 증가되어 오류를 찾아냈습니다.
▷ 수정 후
@Transactional
public List<OrderDto> selectOrderList(Long userId){
List<Order> orderList = orderRepository.findOrdersByUser_IdAndOrderStatus(userId, OrderStatus.ORDER);
List <OrderDto> orderDtoList = new ArrayList<>();
String orderName = "";
OrderDto orderDto = new OrderDto();
for(Order order : orderList){ //사용자의 주문갯수만큼
List<OrderItem> orderItemList = orderItemRepository.findOrderItemByOrder_Id(order.getId());
log.info("size={}",orderItemList.size());
int itemQty = orderItemList.size()-1;
orderName = orderItemList.get(0).getItem().getItemName();
log.info("itemQty={}",itemQty);
log.info("orderName={}",orderName);
if(2<=orderItemList.size()){
orderName = orderName + " 외 " + itemQty +"개";
}
orderDto = OrderDto.builder()
.id(order.getId())
.orderName(orderName)
.totalPrice(order.getTotalPrice())
.regTime(order.getRegTime())
.build();
orderDtoList.add(orderDto);
}
return orderDtoList;
}
같은계정으로 여러번 주문했을 경우 상품명이 '주문건수' 로 조회되었던 오류가
'주문건 내 상품개수' 로 조회되도록 수정되었습니다.
해결 !
2. 상품 여러개 구매하기
장바구니에 상품 2개를 넣고
한번에 결제를 진행해보겠습니다.
결제 금액 200원. 결제성공입니다.
주문목록에서도 상품명이 의도한대로 출력됩니다.
결제 테스트를 성공했으니
이제 여러가지 실패 사례들을 발생시켜보는 테스트를 진행해봐야겠습니다.
▶ 결제 실패 TEST
1. 잔액부족
정상적으로 오류메세지와 오류코드가 출력되는 것을 확인할 수 있습니다.
또 어떤 오류케이스가 있을까요 분명 무궁무진할텐데 떠오르는게 없습니다.
떠오르면 테스트 진행해서 추가하도록 하겠습니다.
'프로젝트' 카테고리의 다른 글
[LOG] Logback 로그관리 (0) | 2022.10.22 |
---|---|
[SpringBoot & JPA 프로젝트] 카카오 전체 오류로 인해 서비스 이용불가 => 네이버 로그인 API 적용 (0) | 2022.10.17 |
[SpringBoot & JPA 프로젝트] 아쉬운점 & 보완할점 (2) | 2022.10.05 |
[SpringBoot & JPA 프로젝트] 사용자 / 판매자 카카오 로그인하기 (0) | 2022.09.29 |
[SpringBoot & JPA 프로젝트] 배포 후 실제 웹서비스 운영 단계로 나아가기 (0) | 2022.09.28 |