[프로젝트]토스페이 연동하기 2
2023. 6. 12. 15:30
Spring
yataproject의 토스 페이먼트API 연동로직 중 결제취소와 결제 내역 조회를 살펴볼 것이다. 📌결제 취소 먼저 결제를 취소하려면 결제 승인 시 발급받은 paymentKey와 cancelReason이 필요하다. 또, 성공/실패 시와 같이 헤더에 시크릿 키를 인코딩하여 보내야한다. Controller @PostMapping("/toss/cancel/point") public ResponseEntity tossPaymentCancelPoint( @AuthenticationPrincipal User principal, @RequestParam String paymentKey, @RequestParam String cancelReason ) { return ResponseEntity.ok().body(ne..
[프로젝트]토스페이 연동하기 1
2023. 6. 9. 20:44
카테고리 없음
yataProject에서 포인트 충전 방식을 도입하기로 결정하였고, 토스페이를 연동하기로 하였다. 토스페이 동작 과정은 다음과 같다. https://develoyummer.tistory.com/93 토스페이 API 연동 https://docs.tosspayments.com/guides/payment/integration 토스페이먼츠 결제창 연동하기 | 토스페이먼츠 개발자센터 카드 결제창을 연동해보세요. docs.tosspayments.com 프론트가 사용자가 입력한 정보를 가지고 [ develoyummer.tistory.com 연동에 앞서 , 토스페이먼츠에 가입 후, 개발자용 테스트상점에서 API 키를 받을 수 있다. 📌설정 appliaction.yml에 정보들을 적어준 후, TossPaymentConf..
[프로젝트] 카테시안 곱 문제의 발생과 해결
2023. 6. 7. 19:52
Spring
N+1 문제를 해결하기 위해서 fetchJoin을 사용하여 해결해 주는 과정에서 yata와 연결된 yatamember 중 수락된 yatamember를 계산해서 보여줄 필요가 있었는데 수가 비정상적으로 많게 나오는 문제가 발생하였다. @OneToMany의 경우 카테시안 곱 문제나 여러개의 fetchJoin을 사용할 경우 발생하는 MultipleBagFetchException을 고려해줘야한다. 카테시안 곱 발생가능한 모든 경우의 수의 행이 조회되는 것 즉, N 개의 행을 갖진 테이블과 M개의 행을 가진 테이블의 카타시안 곱은 N * M이 되는 것 한번의 쿼리로 yataMember를 조회할 때 관련되어 있는 yata까지 한번에 조회할 수 있다. fetchType이 Lazy로 설정되어있어도 fetchJoin이 ..
[프로젝트] Spring batch의 적용
2023. 6. 6. 17:10
Spring
yata project에서 기한이 만료된 게시글을 일정 시간마다 한번에 처리해 줄 필요가 있었고, spring batch기능을 통해 일괄처리해주기로 결정하였다. 🔎스프링 배치(Spring Batch) 대량의 데이터를 처리하기 위한 일괄 처리(Batch Processing) 프레임워크 일괄 처리는 주기적으로 실행되며, 대부분의 작업은 큰 데이터 세트를 읽어 처리하고, 가공하여 결과를 저장하는 작업이다. 스프링 배치는 이러한 일괄 처리 작업을 효율적이고 안정적으로 처리하기 위한 다양한 기능과 구성 요소를 제공한다. 🔎스케줄링(Scheduling) 정해진 일정 또는 주기에 따라 작업을 실행하는 기능 주로 주기적으로 실행되는 반복 작업에 사용된다. 스프링 프레임워크에서는 @Scheduled 애너테이션을 사용하여..
[프로젝트] 2차 캐시의 적용/ 1차캐시와 2차캐시 차이
2023. 6. 1. 19:20
Spring
yata 프로젝트를 진행하며, 프로젝트 내 테이블과 연관관계가 많아지면서 데이터를 조회/검증 하는 데 많은 쿼리가 나가게 되었다. 또, 이러한 쿼리들이 많아지면서 데이터 베이스 서버의 네트워크 트래픽 증가의 문제가 있었습니다. 따라서 2차캐시를 도입하였다. 1차캐시와 2차캐시 네트워크를 통해 DB에 접근하는 시간 비용은 애플리케이션 서버에서 내부 메모리에 접근하는 비용보다 훨씬 비싸다. 따라서 조회한 데이터를 메모리에 캐시해서 DB접근횟수를 줄이는 것이 효율적이다. 영속성 컨텍스트 내부에는 엔티티를 보관하는 저장소가 있는데 이것을 1차캐시라 한다. 그러나 일반적 웹 애플리케이션 환경은 트랜잭션을 시작하고 종료할 때까지만 1차 캐시가 유효하다. 따라서 애플리케이션 전체로 보면 DB접근 횟수를 획기적으로 줄..
QueryDsl이란? 사용법+ 프젝 코드에 적용하기
2023. 5. 31. 19:45
Spring
QueryDsl이란? 정적 타입(컴파일 시 타입에 대한 정보를 결정)을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해 주는 오픈소스 프레임워크 왜쓰는가? JPA를 사용하다 보면 기본 기능으로 해결되지 않는 경우에는 네이티브 쿼리를 사용하게 된다. 그런데 네이티브 쿼리는 문자열을 이어 붙이기 떄문에 오타가 발생하기 쉽고 가독성이 떨어지는 단점이 있다. Querydsl을 사용하면 자동 완성과 같은 IDE의 기능을 사용할 수 있고, 컴파일 시점에 타입이나 문법 오류를 확인할 수 있다. 또한 동적 쿼리도 쉽게 사용할 수 있어서 편리하다. 물론 경우에 따라서 적용 필요성이 다를 수 있기 때문에 프로젝트의 특성에 따라서 적절하게 선택하자 😎장점 문자가 아닌 코드로 쿼리를 작성할 수 있어 컴파일 시점에 문법 오..
[프로젝트] N+1 문제와 QueryDsl
2023. 5. 31. 17:03
Spring
🔎문제 상황 yata프로젝트 중, 1:N 관계가 맺어져 있는 리뷰 전체조회, 게시글 전체조회 시 일대다 관계로 매핑된 테이블의 조회 쿼리까지 함께 날아가는 N+1문제가 발생하였다. 🔎원인 N+1 자체가 발생하는 이유는 한쪽 테이블만 조회하고 연결된 다른 테이블은 따로 조회하기 때문이다. 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수(n) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오게 된다. 왜 이런 문제가 생기냐면,,, jpaRepository에 정의한 인터페이스 메서드를 실행하면 JPA는 메서드 이름을 분석해서 JPQL을 생성하여 실행하게 된다. JPQL은 SQL을 추상화한 객체지향 쿼리 언어로서 특정 SQL에 종속되지 않고 엔티티 객체와 필드 이름을 가지고 쿼리를 한다..
java- IEEE 754 부동 소수점 방식
2023. 2. 2. 11:34
Java
자바에서 소수의 계산시에 값이 3.02 + 1.06 = 4.08 이렇게 정확하게 떨어지지 않고 3.0800003 이런식으로 나오는 경우가 있다. 이는 자바의 소수점 계산방식 때문이다. 각종 프로그래밍 언어에서는 소수를 표현할 때 IEEE 754 부동 소수점 방식으로 소수를 표현하게 되는데, java에서도 이 방식으로 소수를 계산한다. 🔎부동소수점(floating point) 방식 실수를 컴퓨터상에서 근사하여 표현할 때 소수점의 위치를 고정하지 않고 위치를 나타내는 수를 따로 적는 방식 유효숫자를 나타내는 가수와 소수점의 위치를 풀이하는 지수로 나누어 표현 컴퓨터에서는 고정 소수점 방식보다 넓은 범위의 수를 나타낼 수 있어 많이 이용되지만, 근삿값으로 표현되며, 비교적 연산 속도가 느리다. 고정소수점과는 ..