이전 편에서는 토스페이먼츠 결제 플로우를 작성했습니다.https://galong.tistory.com/34 이번 편에서는 결제 연동 구현한 것을 정리했습니다.이 방식이 옳은 방식은 아닐 수도 있으므로, 참고만 부탁드립니다!더 좋은 방식이 있으면 댓글도 부탁드립니다. 🙇♀️ 들어가며이번 글에서는 토스페이먼츠 결제 위젯을 활용해주문 → 결제 요청 → 결제 승인 → 결과 페이지 이동까지의 흐름을 정리했습니다.주문서 진입 시 Payment 객체를 미리 생성해 서버 기준 결제 정보를 저장해두고, 결제 위젯 성공 이후에는 preparing 단계를 거치게 했습니다.preparing 단계에서 파라미터로 받은 paymentKey와 amount 정보 등을 서버에 보내 검증했습니다.그리고 외부 toss api 호출을 하..
Spring Boot
반응형
1차 프로젝트 때 결제 파트를 담당했습니다.결제는 처음이라 우선 결제 플로우를 이해하는 것에 집중했습니다.이번 프로젝트에서는 PG사로 토스페이먼츠(Toss Payments)를 선택했고,공식 개발자 가이드가 상세하고 친절하게 설명이 잘 되어 있어서 구현 과정에서 많은 도움을 받을 수 있었습니다.https://docs.tosspayments.com/guides/v2/payment-widget/integration 결제 연동 과정에서 고민했던 부분은orderId와 amount 값을 언제 서버에 저장해야 할까?결제 요청 이전에 저장하는지결제 승인 이후에 저장하는지카드사 승인 이후 바로 successUrl로 이동하는 것이 맞을까?카드사 승인 완료 이후 무조건 successURL로 이동하게 되어있습니다.하지만 이 ..
DB Lock 이란?DB 락(Database Lock)은 데이터베이스에서 여러 트랜잭션이 동시에 같은 데이터에 접근할 때, 데이터의 무결성(일관성)을 보장하기 위해 사용되는 메커니즘이다. 쉽게 말해, 한 트랜잭션이 특정 데이터에 대해 작업을 하고 있을 때 다른 트랜잭션이 그 데이터에 접근하지 못하도록 잠그는 것이다. DB 동시성 문제, 어떻게 발생할까요?크게 3가지가 있다.Dirty Read (더티 리드)한 트랜잭션이 데이터를 수정 중일 때 다른 트랜잭션이 그 데이터를 읽는 상황이다. 만약 첫 번째 트랜잭션이 롤백된다면, 두 번째 트랜잭션은 잘못된 데이터를 읽은 것이 된다.예시 :트랜잭션 A가 고객의 은행 계좌 잔액을 수정하고 1000원을 더합니다. 잔액이 5000원에서 6000원으로 변경됩니다. 하지만..
자주 사용하는 어노테이션@NoArgsConstructor@AllArgsConstructor@RequiredArgsConstructor에 대해 정리했습니다.3개 모두 Lombok에서 제공하는 어노테이션이다.Lombok 생성자 관련 어노테이션의 주요 특징코드 간결성 + 가독성유지보수 용이성새 필드를 추가했을 때, 생성자 코드를 일일이 수정할 필요 없이 자동으로 반영된다.Lombok이 컴파일 시점에 자동으로 생성자 코드를 생성해주기 때문에 실수 가능성을 줄여준다.3. 불변 객체 설계에 용이@RequiredArgsConstructor는 final 필드 기반으로 생성자를 만들어주기 때문에, 불변 객체 설계에 적합하다.불변성을 유지하면서도 의존성 주입(DI) 시 깔끔하게 사용 가능하다. 1️⃣ @NoArgsCons..
장바구니 Service를 개발하다가 @Transactional의 readOnly 속성에 대해 궁금해졌다.현재 코드에서는 readOnly 속성을 사용하고 있다@Transactional(readOnly=true) 하는 이유는? 장점?@Override@Transactional(readOnly = true)public CartResponseDto getCart(UserAuth userAuth) { User user = userService.findByUser(userAuth); Cart cart = cartRepository.findByUserId(user.getId()) .orElseThrow(CartNotFoundException::new); return CartResponseD..
1주차 프로젝트를 하면서 현재, 주문 api 개발을 하고 있는데요!DTO를 설계하면서 @Builder에 대해 궁금해졌어요.DTO와 @Builder에 관해서 궁금했던 점과 그에 관련해서 정리해봅니다.들어가기에 앞서 DTO가 무엇일까 ? DTO란?Data Transfer Obejct의 줄임말. 즉, 데이터를 전달하기 위한 객체이다.계층 간 데이터 전달용 (Controller ↔ Service ↔ View)왜 사용할까?Entity 그대로 노출하면 위험하거나 불필요한 정보까지 외부로 나갈 수 있기 때문에요청이나 응답시 필요한 데이터만 따로 담아서 주고 받기 위해 사용된다.DTO을 RequestDto 와 ResponseDto로 구분짓기도 하는데API가 어떤 입력을 받을지 어떤 출력을 줄지 정의하면서 DTO 구조가..