[ Spring Boot ] TossPayment API 중복 거래 결제 방지하기 (멱등성 보장)
·
Spring Boot
개요이전의 프로젝트에서 결제 도메인을 담당했었고 토스페이먼츠를 구현하는데 시간이 부족해 핵심 구현만 빠르게 진행하고 그뒤에 보수를 하지못했다. 다른 사람들이 한걸보니까 중복결제가 안되도록 헤더의 결제의 고유 값을 포함해 전달해 통신의 문제가 생겼을경우가 api 요청이 올바르게 되지않은 경우에 중복결제가 되는것을 방지하도록 한걸 보았다. 오늘은 기존의 결제 로직과 결제 엔티티를 리팩터링하는 과정을 가져보도록한다. 멱등성이란?어떤 연산을 여러 번 수행해도 결과가 단 한 번 수행한것과 같은 성질을 의미한다.간단하게 하나의 api를 몇 번을 호출해도 항상 똑같은 결과가 나오는 것을 말하낟. 결제 시스템처럼 돈과 관련된 중요한 처리에서는 멱등성이 상당히 중요하다.개요에서 설명한 거 처럼 결제 버튼을 눌렀는데 네..
[ Spring Boot ] Elasticsearch 검색 기능 구현 ( 3 )
·
Spring Boot
추천 검색 기능 및 검색 고도화 기본적인것들은 전부 정상적으로 동작하는걸 봤다.엘라스틱 서치를 사용하면서 해보었던 추천 검색어 기능을 해볼건데 네이버네 구글처럼 사용자가 잘못된 명칭이나 오타로 입력해도원래 의도한 검색어를 찾아서 제안해주는 기능을 만들거다 검색기능을 만들 때 ElasticsearchRepository를 사용해 간단하게 구현하는 방법과 고급검색기능(자동완성, 추천 검색어, 집계 등)을 구현할때는 ElasticsearchClient를 사용하는 방법이있다. 나는 후자로 진행 ElasticsearchClient 란 무엇인가?ElasticsearchRepository를 이용해서 기본적인 CURD나 쿼리메서드 기반 검색은 가능하지만 자동완성 같은 고급 기능은 Repository 만으로는 한계가있다...
[ Spring Boot ] Elasticsearch 검색 기능 구현 ( 2 )
·
Spring Boot
Elasticsearch를 활용한 검색 기능 구현1. 의존성 추가springboot에서는 의존성으로 엘라스틱 서치를 쉽게 연동할 수 있다.jpa처럼 엘라스틱서치repository를 구현해 데이터를 저장하고 다룰 수 있게 해주는 라이브러리이다. implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch' 2. Elasticsearch 연결을 위한 Config 설정적용을 하고나면 간단한 기본 세팅을 해줘야한다package com.onnongwa.back_end.domain.config;import org.springframework.beans.factory.annotation.Value;import org.springfram..
[ Spring Boot ] Elasticsearch 검색 기능 구현 ( 1 )
·
Spring Boot
docker-compose.yml 작성elasticsearch을 도커 환경에서 동작 시킬거기 때문에 compose 파일을 하나 작성해준다. version: '3.8'services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.6.0 container_name: elasticsearch environment: - discovery.type=single-node - xpack.security.enabled=false ports: - "9200:9200" - "9300:9300" volumes: - esdata:/usr/share/elasticsearch/..
25.02.25 통합테스트 DB 환경 분리
·
Spring Boot
개요단위 테스트를 할 때는 상관없었는데 통합테스트를 진행하니 운영중인 DB의 데이터도 테스트에 포함되어 문제가 발생했다. 이를 개선하기위해 통합테스트 환경에서는 H2 데이터베이스를 사용하도록 DB 환경을 분리해보겠다. application-test.yml 파일 생성기존의 apllication.yml 과 똑같은 위치에 application-test.yml파일을 생성해준다. spring: datasource: driver-class-name: org.h2.Driver hikari.jdbc-url: jdbc:h2:mem:test_db; username: testdb password: jpa: hibernate: ddl-auto: create-drop show-sql..