[프로젝트] Spring AOP로 로그 구현
2023. 6. 29. 20:03
Spring
yata project에서는 실행 결과가 나오는 모든 시점 controller/service코드의 실행 전/후에 로그를 남기도록 구현하였다. LogAspect Class 전체코드 @Aspect //이 클래스가 Aspect클래스임을 명시 @Slf4j @Profile("local") @Component //스프링 빈으로 등록 public class LogAspect { @Pointcut("execution(* com.yata.backend..*(..))") public void all() { } @Pointcut("execution(* com.yata.backend..*Controller.*(..))") public void controller() { } @Pointcut("execution(* com.ya..
[프로젝트] Custom Annotation으로 알림 기능 Spring AOP 적용
2023. 6. 29. 15:20
Spring
yata project에서는 알림 기능을 만들며, Spring AOP를 통해 기능분리를 하였고, 유지보수성, 확정성을 위해 Spring Annotation을 활용하여 적용하였다. Custon Annotation이란? (현재 비공개 포스팅) 1.Custom Annotation 정의 Annontation을 정의할 때는 @interface를 붙여 작성한다. 📌적용된 메타에너테이션 @Target -> NeedNotify를 메서드 단위에 붙여 사용 @Retention -> NeedNotify의 기능이 런타임시까지 유지 메타 에너테이션이란? (현재 비공개 포스팅) 2. NotifyAspect 정의 부가 기능 (Advice) + 적용할 위치 (Pointcut) @Aspect @Slf4j @Component @Enab..
[프로젝트]반경 내 위치의 게시글 검색(GIS)
2023. 6. 27. 20:09
Spring
카풀 서비스에서 나와 출발지와 도착지가 비슷한 게시글들을 검색하는 기능이 있으면 편리할 것이다. 따라서 yata 프로젝트에서도 공간데이터를 이용하여, 출발지, 도착지를 입력하면 반경 내 위치의 게시글을 검색해 올 수 있는 API를 구현하기로 하였다. 먼저 하버사인 공식을 이용해 두 지점 사이의 최단거리를 계산하고, 그 최단 거리 반경의 minimum bounding polygon을 생성하여 바운더리 내에 있는 게시글을 가져올 수 있도록 하였다. 해당 기능을 만들기 위해서는 위도,경도,방위각,라디안값에 대한 개념지식이 필요하다. ⭐위도적도를 기준으로 북/남쪽으로 얼마나 떨어져있는 지 나타내는 위치적도가 0°가 되며, 북쪽으로 올라가면 북위 90°, 남쪽으로 내려가면 남위 90°⭐경도그리니치 천문대를 기준..
[프로젝트]토스페이 연동하기 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..
토스페이 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 태그 반드시 존재해야 하는 태그로서, 코드에서 캐시를 직접 생성할 때 사용되는 캐시의 기본 설정값..