본문 바로가기

Project

(16)
결제 시나리오 1. 결제 재시도 - Self-Invocation 문제 문제 상황결제 시나리오 1번 재시도 로직을 구현하던 중 @Transactional 이 적용된 메서드 안에서 @Retryable 이 적용된 메서드를 호출하는데 @Retryable 이 적용되지 않는 문제를 발견했습니다.[기대한 결과][실제 결과]실제 결과를 보면 예상과 달리 재시도 로직이 실행되지 않고 바로 예외가 터지는 모습을 보여줍니다.해결 과정위 문제를 해결하기 위해 총 7가지 테스트 케이스를 만들어 확인을 진행하였습니다.@Retryable 단독 케이스(Case 1~3)케이스 설명결과Case1@Retryable 이 적용된 메서드 단독 실행성공Case2같은 클래스 내부에서 일반 메서드가 @Retryable 메서드 호츌실패Case3일반 메서드에서 다른 클래스의 @Retryable 메서드 호출성공@Trans..
결제 시나리오 1. 결제 재시도 구현 배경결제 파트를 맡으면서 단순히 결제 연동을 구현하는 것보다 사용자의 편의성과 안정성을 높이는 것이 더 중요한 문제라는 것을 인지했다.결제는 돈과 직결되기 때문에 실패 시 적절한 대응이 필요했고 그래서 생각한 방안은 결제 시나리오 중 하나인 결제 재시도 구현이었습니다.결제 과정에서는 네트워크 장애, 일시적인 PG사 장애, API 연결 TimeOut 등 다양한 이유로 결제가 실패할 수 있는데 이때는 무조건 실패처리 하는 것이 아니라 재시도를 통해 결제가 성공할 수 있도록 보장하는 것이 사용자 경험 개선의 핵심 요소라고 생각했습니다.하지만 모든 실패 상황에서 무조건 재시도를 하면 불필요한 리소스 낭비와 서버 부하가 발생할 수 있다고 판단 하여 재시도가 필요한 경우와 불가능한 경우를 구분하여 적절한 조치를 취..
(Java / Spring) TossPayments PG 윗젯 Version2 연동 이 글을 쓰게 된 이유는 외부 API를 사용하여 결제하는 시스템을 제작하는 걸 처음해봐서 정리하는 겸 Version2 윗젯 연동 블로그 문서들이 별로 없었기 때문에 독자들의 고통을 줄이고자 작성하였습니다. 참고 문헌은 TossPayments 공식 개발 문서와 블로그를 참고했습니다.먼저 PG사 란?➡️ PG사는 가맹점과 수 많은 결제 기관(카드사, 은행 등) 사이에서 중간역할을 하여서 가맹점들이 별도로 각각의 결제수단을 관리할 필요가 없어 편리하게 결제 서비스를 이용할 수 있도록 돕는 시스템을 제공하는 곳이라고 생각하면 됩니다.토스 페이먼츠와 연동하기 전 결제 흐름을 먼저 보고 가는게 더욱 빠른 이해가 되므로 토스 페이먼츠는 어떤 식으로 결제 흐름이 흘러가는지 보고 가시죠.1️⃣ 구매자가 상점에서 물품을 ..
JPA를 활용한 일정 앱 프로젝트 트러블 슈팅 및 회고 1. 세션 키 불일치로 인한 오류회원가입 및 로그인 후 Set-Cookie에서 session_id를 받아 특정 유저 조회 요청 시 헤더에 쿠키와 함께 전달했음에도 500 Internal Server Error가 발생했다. 그래서 코드를 다시 찾아보니 doFilter() 메서드에서 세션의 키값을 잘못 사용하고 있었다.session.setAttribute()에서 설정한 키와 session.getAttribute()에서 참조하는 키가 달라 세션이 정상적으로 동작하지 않았음.그래서 세션 키를 상수(SessionConst.LOGIN_USER)로 선언하여 일관성을 유지했고 잘못된 키를 일치 시키니 정상적으로 작동 되었습니다. VIEW가 아닌 JSON 통신 기반 프로젝트를 진행하다 보니 문제를 육안으로 확인하기 어려..
일정 관리 앱 프로젝트 트러블 슈팅 및 회고 https://github.com/bottle1000/calender_app_project트러블 슈팅1. 요청 데이터와 DTO 필드값 매핑, DB 컬럼과 LowMapper 매핑문제 상황 :요청 데이터를 받는 DTO와 응답 데이터로 반환하는 DTO를 작성하면서, DTO와 엔티티 간의 필드 매핑이 복잡해졌습니다. 특히 요청 데이터의 필드와 DB 컬럼의 관계를 정확하게 매핑해야 하는데, 이를 실수로 잘못 연결하는 문제가 발생했습니다. 또, calender 테이블과 author 테이블 간에 외래 키 관계를 설정하면서 아이디 충돌 문제가 발생하여 에러가 계속 발생했습니다.오류 메시지 : (PreparedStatementCallback; Cannot add or update a child row: a foreign..
키오스크 프로젝트 마무리 및 회고(feat.의존성) 1. 튜터님에게 피드백 받은 메서드 파라미터에서의 의존성 낮추기// Kiosk 클래스view.printTotalPrice(cartManager);// View 클래스public void printCartList(CartManager cartManager) { System.out.println("[ Orders ]"); List cartItemList = cartManager.getCartItemList(); for (CartItem cartItem : cartItemList) { System.out.println(cartItem.getItemName() + " | W " + cartItem.getPrice() + " | " + cartIte..
키오스크 프로젝트 트러블 슈팅 및 회고 2024 / 11 / 21 ~ 2024/ 11 / 22필수 구현 과제 lv2if (choice > 0 && choice 고민 1) 키오스크에 들어가면 리스트에 저장되어 있는 음식들을 콘솔 창에 나열해 주는 것이였다.그래서 처음에 그냥 딱 든 생각이 "아 스위치문으로 하면 되겠다!" 각 음식들을 케이스 별로 나누고 잘못 선택시 default로 예외처리를 해줘야지 했다. 하지만 스위치문으로 작성하는데 스위치문이 가독성이 좋으건 분명하지만 내가 코드를 짜는데 있어서 계속 중복된 코드가 나오는 것이였다. 예전에 이런 말을 들은 적이 있다. 지금이야 중복코드가 있어도 리스트의 요소가 별로 없으니 지금은 괜찮겠지만 나중에 키오스크에 음식들이 100개, 1000개씩 들어오면 일일이 다 치고있을래?라는 말이 생각났다ㅠ..
Java 계산기 프로젝트 진행하며 회고 및 트러블 슈팅 작성 4번을 선택하면 print 내용이 출력되고 nextLine()에서 입력을 받은 값을 recheck변수에 넣어 endProgram 함수에서 최종 종료 확인을 받아야 하는데 바로 프로그램이 종료되는 이슈. nextLine입력안했는데 넘어간것처럼 보이는 이유scanner는 입력을 읽을 때 줄바꿈을 포함해서 모든 입력을 처리한다. 하지만 nextInt()나 nextDouble() 같은 메서드는 버퍼가 숫자만 읽고 줄바꿈 문자를 버퍼에 남겨놓는다! 그래서 다음 nextLine()이 호출되면 남아 있던 줄바꿈 문자를 읽어서 입력을 제대로 받지 못함.결국 빈 문자열을 반환하는 것.결국에는 내 코드에서는 첫번째 choice에서 숫자를 입력하니 아직 버퍼에는 줄바꿈 문자가 남아있었던 것이다.그래서 nextInt() 메서..