반응형
우리 서비스는 쇼핑몰을 통한 회원 가입 및 로그인, 그리고 소셜 계정을 통한 회원 가입 및 로그인을 지원한다. (카카오, 네이버, 구글)이 글을 포스팅하는 이유는 소셜 로그인을 뒤 늦게 적용하게 되었는데 소셜 로그인을 적용하고 난뒤에기존 쇼핑몰 회원과 소셜 계정을 통해 가입한 회원을 관리하는데 문제가 발생하게 되어서 그 문제점을 해결한 방법에 대해 포스팅하고자 한다.문제 발생 상황⛔ 문제점1. 소셜 로그인 구글 이메일이 a@, 나머지 이메일은 b@일 때 쇼핑몰을 통해 회원가입한 유저의 이메일이 b@ 일 경우 이메일 중복 문제가 발생해 이메일이 같은 경우 b@이메일 유저의 세션을 사용하는 문제.2. 소셜 로그인은 보안상 비밀번호를 받아올 수 없기 때문에 소셜 로그인한 회원은 비밀번호 찾기가 불가. 이러한 ..
내 프로젝트에서는 사용자별로 사이드바에 찜 수, 장바구니 수들을 카운트 쿼리로 반환된 데이터 수를 view에 뿌려주는데,이 사이드바는 여러 페이지에서 노출되어 페이지 이동마다 카운트 쿼리를 자주 호출하고 있었다.그렇기 때문에 매번 카운트 쿼리를 호출하지 않고 해당 데이터를 캐시 처리하여 카운트 수가 변경되지 않을 경우에 Redis 캐시에서 해당 데이터 수를 반환하도록 하여 DB의 부담을 줄이도록 하였다. 레디스에 대해 알고 싶다면 아래 포스팅에서 설명한다. [Redis] 레디스란? 특징, 활용예시, 비교 정리레디스란? Redis는 Remote Disctionary Server의 약자로 키(Key) : 값(Value) 해시 맵과 같은 구조를 가진 NoSQL 데이터베이스이다. MySQL, Oracle같은 일..
레디스란?Redis는 Remote Disctionary Server의 약자로 키(Key) : 값(Value) 해시 맵과 같은 구조를 가진 NoSQL 데이터베이스이다.MySQL, Oracle같은 일반 DB와 다르게 하드 디스크(SSD, HDD)에서 데이터를 처리 하는 것이 아니라, Redis는 In-Memory(인메모리) 기반의 DB로 메인 메모리(DRAM)에서 데이터를 처리하기 때문에 작업 속도가 월등히 빠르다.또한 Key-Value 형식으로 데이터가 저장되기 때문에 보다 빠르게 데이터에 접근할 수 있다.(평균 작업속도가 1 ms 보다 작다고 한다.) DRAM과 SSD, HDD의 비교 메모리 계층 구조는 다음과 같이 여러 계층이 있지만 인메모리DB와 일반 DB를 비교하기 위해 2가지에 대해서만 비교 하고..
결제 취소 기능에 대해 포스팅하기 앞서 iamport를 사용하기 위한 준비과정 및 결제 기능 구현하는 방법에 대해서는 아래 포스팅에 설명되어 있다. [Spring] 아임포트(import)로 결제 기능 구현하기 (클라이언트 + 서버 코드 포함) import 란? 아임포트는 쇼핑몰 서버를 대신해서 쇼핑몰에서 사용자가 상품을 구매하려 할 때 실제 결제 요청 받는 역할을 하고 이 요청을 받아서 PG(결제 대행 업체)에 요청을 해준다. 그리고 결제 hstory0208.tistory.com 결제 취소 기능 구현 상품을 결제했으면 당연히 취소도 가능해야한다. 그렇기 때문에 결제 취소 로직을 추가하였다. 아래에서 설명하는 iamport에 결제 취소 요청을 보내는 코드를 구현하면 결제 완료된 상품에 대한 상품에 대한 결..
결제 시스템으로 iamport api를 사용하기 위해 IamportClient 객체를 apikey로 생성하는데 이 apikey를 application.properties에 작성하고 @Value 어노테이션으로 키 값을 받아오는데 해당 필드에 키값이 채워지지 않는 문제가 발생했다. @Controller @RequiredArgsConstructor public class OrderController { private final OrderService orderService; @Value("${imp.api.key}") private String apiKey; @Value("${imp.api.secretkey}") private String secretKey; private IamportClient iampor..