Skip to content

dionisos198/BackEnd

 
 

Repository files navigation

프로젝트 소개

💡 서비스 소개서

펫플레이트는 견주들이 필수 영양 요소에 대해 이해도가 부족하다는 문제점을 기반하여 기획되었다. 하지만 연구 결과에 따르면 사료는 반려견의 모든 필수 영양소를 충족하기 어렵고 영양과잉의 문제점도 있어 질병 유병률을 증가한다. 따라서 첫 째, 사용자가 반려견의 식사를 기록하면 이에 맞추어 반려견의 나이, 품종 및 체중에 따른 필수 영양소를 그램(g) 수로 시각화하여 사용자가 영양균형을 모니터링할 수 있게 한다; 둘째, 누락된 영양소를 확인한 후, 동일한 웹사이트로 더 맞춤형 된 보충제를 구매할 수 있는 마켓플레이스를 제공한다.

기여한 점

소셜 로그인

image

OAuth2 에 대한 개념 이해를 바탕으로
WebClient 를 이용하여 Rest api 형식으로 만든 소셜로그인과 스프링 시큐리티를 사용하여 만든 소셜 로그인 2가지 방식으로 모두 구현해보고
각 구현 방법의 내용을 정리한다.

회원 탈퇴 및 회원 정보 조회

image

회원 탈퇴

회원 탈퇴 및 소셜 로그인 연동 해제를 위하여

소셜 로그인시 쉽게 변경이 될 수 있는 social login 용 accessToken 은 redis 에, 네이버 기준 1년동안 변경이 안되는 refreshToken 은 rdbms mysql 에 저장하여 관리한다

회원 정보 조회

private User findUserByUsername(String username){
return userRepository.findByUsername(username).orElseThrow(()->new NotFoundException(
ErrorCode.USER_NOT_FOUND));
}

일부 비즈니스 로직 상 반복적으로 호출되는 username 을 통한 현재 로그인한 객체 꺼내오기

User createdMember = userRepository.findByUsername(SocialType.NAVER+socialInfoWithTokenDto.getId())
.orElseGet(()->{
User savedUser = User.builder()
.name(socialInfoWithTokenDto.getName())
.role(Role.GENERAL)
.socialType(SocialType.NAVER)
.email(socialInfoWithTokenDto.getEmail())
.socialLoginId(socialInfoWithTokenDto.getId())
.activated(false)
.isReceiveAd(false)
.password(UUID.randomUUID()+"password")
.phoneNumber(null)
.build();
return userRepository.save(savedUser);
});

로그인할 때마다 반복적으로 호출되는 username 을 통한 회원가입 여부 판단하기

에서 성능 개선이 필요하다고 판단, Users 의 칼럼 username 에 Index 를 적용하여 성능을 평균 100 ms 향상 시켰다(apache jmeter 사용,현재 soft delete 로 인한 unique 제약 조건 X)

부족 영양분 기반 영양제 추천 및 상세 정보 반환

image image

enum 타입으로 관리되는 영양소와 다대다 연관관계를 통하여 부족 영양분에 따른 추천 영양제를 반환하고
영영제의 관련 상세 페이지를 반환한다.

Route53 과 SubDomain 을 활용한 배포

Vercel 로 배포하는 프론트와 상호 소틍을 통해서 도메인을 적용하고,

비용 및 이후 원활한 쿠키 사용을 위해서 백앤드는 서브 도메인을 적용한다.

배포 링크

https://petplate.kr/

상황에 따라 해제될 수도 있다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%