[SQL] inner join/ outer join/ left join/ right join
2023. 6. 16. 14:10
SQL
INNER JOIN => 교집합 select * from A inner join B on A.id = B.id select * froma A,B A.id = B.id 결과 => A 테이블과 B 테이블이 모두 가지고 있는 데이터만 검색! OUTER JOIN(FULL/LEFT/RIGHT) FULL OUTER JOIN => 합집합 (MySQL에는 없음 다만 LEFT JOIN과 RIGHT JOIN을 UNION으로 묶어 사용할 수는 있) LEFT OUTER JOIN => 왼쪽을 기준으로 JOIN select * from A LEFT OUTER JOIN B ON (A.id = B.id) 결과 => 왼쪽 테이블인 A의 모든 데이터 + A,B의 중복데이터 검색 A테이블의 한개의 레코드에 여러개의 B테이블 레코드가 일치..
[프로젝트]토스페이 연동하기 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..
백준7576 토마토
2023. 6. 11. 23:11
Algorithm
처음엔 dfs를 이용해 풀어보려고 했으나 실패했다. bfs를 이용해 익은 토마토가 들어있는(1) 좌표를 q에 넣어주고, 상하좌우에 있는 토마토 중 안익은(0) 토마토가 들어있는 좌표가 있으면 익은 토마토 일수에서 1을 더해준다 즉 depth가 1 깊어질 때마다 1을 추가해 주는 것이다. 이렇게 하면 일수를 계산 가능하다. 그 후 countDay메서드를 통해 가장 깊은 depth를 cnt에 담아주고 depth는 1에서 시작했는데 일수는 0에서부터 시작했으니 날짜를 계산할 때는 1을 빼준다. 최종적으로 checkTomato메서드를 통해 안익은 토마토가 있으면 -1을 출력하고 그렇지 않으면 모든 토마토가 있은것이므로 cnt를 출력한다. import java.io.BufferedReader; import jav..
[프로젝트]토스페이 연동하기 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..
토스페이 API 연동
2023. 6. 9. 17:13
Spring
https://docs.tosspayments.com/guides/payment/integration 토스페이먼츠 결제창 연동하기 | 토스페이먼츠 개발자센터 카드 결제창을 연동해보세요. docs.tosspayments.com 프론트가 사용자가 입력한 정보를 가지고 [결제하기] 버튼을 통해 백엔드의 결제 요청 API를 호출 백엔드가 해당 [요청 객체]를 가지고 검증 후 필요한 값들을 채워주고 DB에 결제 정보 저장 후 반환 프론트가 반환받은 값을 가지고 이어서 tossPayments.requestPayment('카드',{결제 정보 파라미터})를 통해 토스페이먼츠에 [결제창 호출]을 하게 함 결제창에서 구매자는 일련의 절차 후 최종적으로 결제 완료. 이 후, 토스페이먼츠는 결제의 성공 여부 및 관련 파라미터..
[프로젝트] 카테시안 곱 문제의 발생과 해결
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 애너테이션을 사용하여..
Spring batch
2023. 6. 5. 15:25
Spring
스프링 배치란? 대용량 레코드 처리에 필수적인 기능을 제공 로깅/추적 트랜잭션 관리 작업 처리 통계 작업 재시작 건너뛰기 리소스 관리 등 또한 최적화 및 파티셔닝 기술을 통해 대용량 및 고성능 배치 작업을 가능하게 하는 고급 기술 서비스 및 기능을 제공 🤔그렇다면 Spring Batch 와 Scheduler의 차이는 무엇일까? Spring Batch는 Batch Job을 관리하지만 Job을 구동하거나 실행시키는 기능은 지원하고 있지 않다. Spring에서 Batch Job을 실행시키기 위해서는 Quartz, Scheduler, Jenkins등 전용 Scheduler를 사용해야 한다. 🔎용어! Job 배치처리 과정을 하나의 단위로 만들어 놓은 객체 배치처리 과정에 있어 전체 계층 최상단에 위치 JobIns..
ehcache의 속성
2023. 6. 2. 18:54
Spring
💡ehcache의 주요 특징 Java의 대표적인 캐시 엔진 중의 하나로 경량의 빠른 캐시 엔진이다. 확장(scable) - 메모리 & 디스크 저장 지원, 멀티 CPU의 동시 접근에 튜닝 분산 지원 - 동기/비동기 복사, 피어(peer) 자동 발견 높은 품질 - Hibernate, Confluence, Spring 등에서 사용되고 있으며, Gaia 컴포넌트에서도 EHCache를 사용하여 캐시를 구현하였다. 💡설정 ehcache는 ehcache.xml파일을 설정 파일로 사용한다. 이 설정 파일은 캐시를 얼마만큼 보관할지, 얼마 동안 보관할지와 같은 캐시 정책을 정의하는 설정 파일이다. - defaultCache 태그 반드시 존재해야 하는 태그로서, 코드에서 캐시를 직접 생성할 때 사용되는 캐시의 기본 설정값..