카카오, 구글 API를 활용해서 로그인 기능 구현에 문제

김준태·2023년 5월 28일
0

오류

목록 보기
5/7
post-thumbnail

문제 내용

  • 구글 API를 활용해서 소셜로그인 기능을 구현을 했다.
    @Column(unique = true)
    private String username;
    private String password;
    private String name;
    @Column(unique = true)
    private String nickName;
    @Column(unique = true)
    private String email;
    @Builder.Default
    private String role = "user";
    private String providerTypeCode;
//MemberService
Member member = Member
                .builder()
                .providerTypeCode(providerTypeCode)
                .username(username)
                .password(password)
                .name(name)
                .nickName(nickName)
                .email(email)
                .build();
  • 에러내용
    • 에러내용
      There was an unexpected error (type=Internal Server Error, status=500).
      could not execute statement; SQL [n/a]; constraint [member.UK_mbmcqelty0fbrvxp1q58dn57t]
      org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [member.UK_mbmcqelty0fbrvxp1q58dn57t]
  • 이런 에러가 발생했다.

  • GPT에게 문의 한 답변

    해당 에러는 내부 서버 오류(Internal Server Error)로, 데이터 무결성(Data Integrity) 제약조건 위반으로 인해 SQL 문장을 실행할 수 없음을 나타냅니다. 보다 구체적으로는 "member.UK_mbmcqelty0fbrvxp1q58dn57t" 제약조건이 위반되었음을 알려줍니다.
    이 에러는 주로 데이터베이스 시스템에서 발생하는데, 일반적으로 테이블에 대해 고유한(unique) 제약조건이 설정되어 있는 경우, 그 제약조건을 위반하는 데이터를 삽입하려고 할 때 발생할 수 있습니다.

  • 그래서 혹시 뭐가 문제인지 하나씩 빼고 실행을 해보니 nickName, email에서 문제가 발생했다. 아마 원인이 @Column(unique = true) 를 설정해줘서 join()"" 값을 넣어서 저장해서 원인이 발생한듯 했다.

문제 해결 방법

  1. 우선 첫번째 방법으로는 nickName, email@Column(unique = true) 값을 제거 해주면 정상 작동하였다.
  • 하지만 이번 프로젝트에서는 nickName, email 값이 유니크해야 하므로 이방법은 패스 하게 되었다.
  1. 두번째 방법으로는 join()메소드에 ""값을 넣어주는 것이 아닌 null을 넣어주는 방법으로 해결하였다.

문제에 대한 궁금증

  • 이러한 에러가 발생한 이유가 뭘까 ?

    • email, nickName의 값을 unique로 설정해주었지만 소셜로그인을 하게 되면 전부다 ""로 저장되기 때문에 같은 값을 저장해서 원인이 발생했다.
  • 이렇게 해결하는게 최선의 방법일까 ?

    • 추후 업데이트 예정

0개의 댓글