프로젝트/잇타

백엔드 소셜로그인 구현 - 최대한 간략하게

SeoburiFaust 2022. 11. 12. 15:46

맡고있는 프로젝트에서 소셜로그인을 구현해야하는데 구글링을 해서 따라하려고 해봤더니 전부다 너무 복잡해 보였다.

 

그리고 따라한다고 쳐도 제대로 이해하지 못하면 후에 기능을 추가해야하거나 버전을 바꿔서 실행할 때 문제가 발생할 것 같았다.

 

그래서 최대한 최소한의 코딩으로 소셜로그인만 어떻게 구현할 수 없을까라는 생각으로 한 번 알아봤다.

 

이해 하기 쉽게 거꾸로 controller부터 가보자

 

IndexController

자. model에다가 member에서 꺼내온 name, email, picture을 넣어줬다. 

 

그리고 이 member라는 것을 httpsession에서 getattrubute를 통해 가져온 것을 확인할 수 있다.

 

그렇다면 이 httpsession이라는 것은 무엇일까?(링크: https://muengx2.tistory.com/55)

 

정리하자면, was(web application server)의 메모리에 object형태로 저장하는 기능을 하는 것이다.

 

우리는 httpsession을 통해서 api client와 server간에 소통을 할 수 있다. server쪽에서 setattribute를 해놓으면 session을 통해 client가 getattribute를 통해 object를 꺼내 쓸 수 있는 것이다.

 

그렇다면 서버쪽에서 어떻게 httpsession에 값을 저장해놨는 지 한 번 보자.

CustomOAuth2UserService

뭔가 복잡해보인다. 대충 요약해보자

 

아래쪽에 보면 httpsession에 setAttribute로 member를 넣어준 것을 확인할 수 있다.

이 member는 어디서 왔을까? 바로 윗줄에서 attribute를 저장해서 member에 담아놨다.

그리고 attribute는 oAuth2user.getAttributes()에서 온 것을 확인할 수 있다.

getAttribute를 찾아봤더니

OAuth2user는 DefaultOAuth2UserService()에서 가져온 정보인데 

DefaultOAuth2UserService를 통해서 userRequest값을 가져올 수 있다고 한다.

 

바로 아래에 saveOrupdate function이 있다. 

여기서는 memberRepository에서 이메일로 회원정보를 찾고 없으면 attribute로 가져온 정보를 저장하고 있으면 그 정보를 반환해준다.

 

sessionMember는 member정보를 client와 주고 받을 때 사용하는 객체다.

SessionMember

뒤에 붙은 serializable은 직렬화인데 자세한 내용은 다음 링크를 참고하자

link : https://devlog-wjdrbs96.tistory.com/268

대충 요약하면 우리가 만든 클래스가 파일에 읽거나 쓸 수 있도록 하거나, 다른 서버로 보내거나 받을 수 있도록 하려면 반드시 이 인터페이스를 구현해야 한다고 한다.

 

oauth2config를 한번 알아보자

SecurityFilterChain을 사용했다.

구글을 뒤져보면 보통 SecurityFilterChain 말고,

WebsecurityConfigureAdapter를 extend해서 사용하는 경우가 많은데 구버전식이라고 한다. spring 2.7.5에서 저걸로 했을 때 안되길래 찾아보니까 그렇다고 한다.

 

첫 줄 csrf().disable().headers().frameOptions().disable()은 h2.console을 사용하기 위해서 적어줬다.

대충 요약하면, csrf를 disable하고 headers에 있는 frameOptions를 disable한다는 거 같다. 뭐가 뭔진 잘 모르겠다.

 

그리고 authorizeRequests().antMatchers("/", "h2-console/**").permitAll()을 적어서

처음 홈 화면과 h2-console화면은 로그인 하지않아도 접근할 수 있도록 해준다.

이렇게 하지 않고 build.gradle에 oauth2.client 의존성이 존재할 때는

localhost:8080들어가자마자 바로 로그인 페이지가 나온다.

 

그리고 아래에는 로그아웃,

그리고 로그인 했을 경우 바로 customeOAuth2UserService가 실행되도록 해준다.

userService에는 이와같이 사용자 정보를 가져온 상태에서 추가로 진행하고자 하는 기능을 명시할 수 있다.

 

index.html

결과화면은 다음과 같다.

유저 정보가 잘 나오는 것을 확인할 수 있다.

'프로젝트 > 잇타' 카테고리의 다른 글

검색 필터링 기능 구현(스프링 + mysql + java)  (0) 2024.01.21
AWS S3를 사용하여 파일업로드  (0) 2022.12.27
리눅스(linux) 실행권한  (0) 2022.12.04
branch 사용법  (0) 2022.11.19