Coding History/Team Project

팀플 소셜(구글)로그인 구현중. (완료)

BlackBirdIT 2024. 10. 6. 01:11

개인 프로젝트에서 구현했던 로그인과 회원가입 로직을 죄다 끌어와서 팀프로젝트에서 사용할 수 있게 하나하나 다 수정을 했다. 기존 스포티파이 로직 삭제나, 비번 관련 로직 삭제, 그리고 엔티티가 db와 매칭되게 수정 정도가 할 일이였고 그렇게 크게 오래 걸리지는 않았다. (사실 아직 될지 안될지는 모른다.)

그리고 서버를 키니까

역시 뭐 한번에 될리가 없지.

이 에러는 Hibernate와 MySQL 간의 데이터 타입 매핑 문제로 발생하는 것으로 보이는데, 
구체적으로 scale has no meaning for SQL floating point types라는 오류는 
DECIMAL 또는 FLOAT 타입을 사용할 때 scale을 지정했을 때 발생할 수 있어. SQL의 FLOAT나 DOUBLE 타입은
소수점 이하 자릿수를 강제로 지정할 수 없기 때문에, scale을 지정하는 것은 무의미하다고 Hibernate가 에러를 발생시켜.

라는 GPT 답변을 받고 DB측의 타입 수정을 했다.

DECIMAL(10, 7) 위도 경도를 표현하기 위한 여기서 오류가 발생한거라 죄다 DOUBLE로 고쳐줬다.

이건 해결 됐고 다음 오류 발생

오 오류가 좀 신기하네, 내 프로젝트에서는 문제 없이 잘 돌아갔는데 지금 logout 핸들러에서 OAuth2AuthorizedClientRepository생성자를 주입받아서 사용중인데, 이걸 시큐리티에 등록하지 않아서 오류가 나는 것 같다. 지금 프로젝트에서는 왜 오류가 발생하지? 근데 이유 같은거 찾을 시간 없으니까 빨리 그냥 해결이나 봐보자.

일단 해결 되었고, 서버 키고 또 오류가 나서 확인해보니까 Google OAuth2 클라이언트 등록을 아직 하지 않았다.

이제 이거 하러 가야지.

프로젝트 생성부터..

이후 OAuth2 동의 화면 설정부터한다.

OAuth 2.0 클라이언트 ID 생성하고..

발급 완료!

이제 properties에 등록하자

# Google OAuth2 Client
spring.security.oauth2.client.registration.google.client-id=비밀
spring.security.oauth2.client.registration.google.client-secret=이것도 비밀
spring.security.oauth2.client.registration.google.scope=profile, email
spring.security.oauth2.client.registration.google.redirect-uri={baseUrl}/login/oauth2/code/google
spring.security.oauth2.client.registration.google.authorization-grant-type=authorization_code
spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/auth
spring.security.oauth2.client.provider.google.token-uri=https://oauth2.googleapis.com/token
spring.security.oauth2.client.provider.google.user-info-uri=https://openidconnect.googleapis.com/v1/userinfo
spring.security.oauth2.client.provider.google.user-name-attribute=sub

등록 했고, 그럼 뭐다? 이제 또 .evn으로 저거 환경변수 처리 해야지.

spring.security.oauth2.client.registration.google.client-id=${GOOGLE_CLIENT_ID}
spring.security.oauth2.client.registration.google.client-secret=${GOOGLE_CLIENT_SECRET}

굳 이제 서버도 잘 켜진다.

login 페이지로 접근하려는데, 저번과 또 같은 문제다.

나는 진짜 이걸 이해를 할 수가 없다.. 여튼 해결 해야지 어떡하겠어.

아하. 이번엔 매핑 문제였다. 바로 해결 완료!! 잇힝

현재의 로그인 페이지고 클릭하니까 엑세스 차단됨이라고 뜨네.

승인 url 추가 해야지.

음 추가하고도 엑세스 오류가 생겨서 확인해보니까 환경변수를 제대로 불러오지 못하고 있었다.

이거 한번써봐야지~

EnvFile 플러그인이라고 하는데 환경변수 값을 불러오는데 도움을 준다고 한다.

설치하고 껐다키니까 파일 아이콘이 약간 바뀌어있네.

일단 아직도 안된다 터미널에서 확인해보니까.

빈 값이 나온다.

pull하는 과정에서 읽기권한 이슈가 다시 발생한건가? 싶어서 일단은 한번 확인해보자.

읽기 권한문제는 해결해서

이런 결과가 나왔고 보니까. 서버 실행 클래스에서 이제 dotenv를 로드해줘야한다. 이게 빠졌어서 읽지 못했던것.

생각해보니까 firebase.js 에서도 dotenv를 로드 시켜줬었다. java에서는 추가해줬던 적이 없어서 로드가 안됐던 것.

StarInfoWebApplication클래스에서 dotenv로 환경변수 값을 전달해주자.

@SpringBootApplication
public class StarInfoWebApplication {

    public static void main(String[] args) {
        // .env 파일 로드
        Dotenv dotenv = Dotenv.configure().ignoreIfMalformed().ignoreIfMissing().load();

        // .env 파일에서 환경 변수 설정
        System.setProperty("GOOGLE_CLIENT_ID", dotenv.get("GOOGLE_CLIENT_ID"));
        System.setProperty("GOOGLE_CLIENT_SECRET", dotenv.get("GOOGLE_CLIENT_SECRET"));

        // Spring Boot 애플리케이션 실행
        SpringApplication.run(StarInfoWebApplication.class, args);
    }
}

따란~ 이까지는 왔다. 이제 환경변수 값을 잘 전달한다.

이제 로그인이 진짜 되는가 확인하면 되는데,

로그인도 잘 되고 DB에도 회원으로 정상등록 되었다.

JPA가 쿼리를 쏘는 로직 로그다. 잘 됐다. 굳 이제 구글 로그인 구현 완료.

다음 목표는 이제 우리가 사용해야할 API 죄다 끌어와보기다.