본문 바로가기

Spring

[Spring] Spring Security + 구글 OAuth2 로그인 + Youtube Data V3 API 활용

728x90
반응형
SMALL

 

 

구글 OAuth2 로그인 세팅

 

Google 클라우드 플랫폼

로그인 Google 클라우드 플랫폼으로 이동

accounts.google.com

  • 위 사이트로 이동 후 프로젝트 생성

 

프로젝트 생성 화면

  • 만들기 선택

프로젝트 생성 후 시작 화면

  • API 및 서비스 선택 
  • 메뉴바에서 OAuth 동의 화면 선택

 

동의 화면 페이지

  • 외부 선택
  • 만들기 선택

앱 등록 되어야함

 

개발자 연락처 정보 기입

  • 앱 정보에서 : 앱 이름, 사용자 지원 이메일
  • 승인된 도메인: 만약 배포를 했을 경우 배포된 url을 넣어주면 된다고 함 (localhost:8080 의 경우 안해주어도 된다)
  • 개발자 연락처 정보 기입 후 저장 후 계속

앱 등록 범위 페이지

  • 저장 후 계속
  • 이후로 다 저장 후 계속을 누르고 메뉴바에서 사용자 인증 정보로 이동

API 및 서비스 화면

  • 메뉴 바에서 사용자 인증 정보 선택
  • 사용자 인증 정보 페이지에서 +사용자 인증 정보 만들기 선택

버튼 선택하면 나오는 화면

  • 해당 화면에서 OAuth 클라이언트ID 선택

클라이언트 아이디 만들기 페이지

  • 웹 애플리케이션 선택

웹 애플리케이션을 선택하고 URL 입력

  • 현재 localhost:8080으로 되어있지만 배포를 했을 경우 해당 도메일을 사용해주면 됨
  • 만들기 누르면 

해당 화면에서 클라이언트 ID 와 클라이언트 보안 비밀번호 생성

  • 해당 클라이언트 ID와 보안 비밀번호는 Spring에서 사용

 



구글 OAuth2 To Spring Setting

  • Java: 17
  • Spring Boot: 3.2.0
  • Gradle => oauth2 client + security 추가
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
implementation 'org.springframework.boot:spring-boot-starter-security'

application.yml 파일

해당 사진 처럼 google에서 받은 id 값과 secret값을 넣어줌

 

GoogleUserInfo.java

public class GoogleUserInfo implements OAuth2UserInfo {

    // ↓ loadUser() 로 받아온 OAuth2User.getAttributes() 결과를 담을거다
    private Map<String, Object> attributes;

    public GoogleUserInfo(Map<String, Object> attributes){
        this.attributes = attributes;
    }

    @Override
    public String getProvider() {
        return "google";
    }

    @Override
    public String getProviderId() {
        return (String)attributes.get("sub");
    }

    @Override
    public String getEmail() {
        return (String)attributes.get("email");
    }

    @Override
    public String getName() {
        return (String)attributes.get("name");
    }
}

 

  • 위와 같이 설정 하고 사용 하였음


Youtube API 설정하는 방법

  • 구글 콘솔 클라우드에서 API 및 서비스로 이동

API 및 서비스 페이지

  • 위 검색창에서 Youtube 검색
  • Youtube Data API v3 선택

YouTube Data 를 받을 수 있는 API

  • 사용 선택

API 서비스 세부 정보 페이지

  • 해당 페이지가 보여진다면 성공
  • 사용자 인증 정보 로 이동

사용자 인증 정보 페이지

  • 사용자 인증 정보 만들기 선택

 

사용자 인증 정보 만들기 버튼 눌렀을 때 화면

  • API 키 선택

API키 생성 화면

  • 이제 해당 API키로 Youtube Data를 불러올 수 있다.

 

Youtube Data V3 API

  • 해당 API 관련 공식문서

https://developers.google.com/youtube/v3/getting-started?hl=ko

 

YouTube Data API 개요  |  Google for Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English YouTube Data API 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 소개 이 문서는 YouTube

developers.google.com

 

 

Search: list  |  YouTube Data API  |  Google for Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English Search: list 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. API 요청에 지정된 쿼리 매개변

developers.google.com

HTTP 요청 URL (GET 방식)
필수 매개변수

  • 그 다음 상당히 많은 쿼리 파라메터들이 있지만 본인이 선택한것 만 설명하도록 하겠음
maxResults = 반환하는 최대 항목 수 이며 가능한 값은 0~50, 기본 값은 5
q = 검색할 검색어를 지정하여 보내줌


Youtube API  To Spring

application.yml

application.yml 파일에 apiKey 저장

[도메인] YoutubeDTO.java

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class YoutubeDTO {
    private int id;
    private String keyword;
    private String title;
    private String videoId;
}

 

Service

@Service
public class NaverApiService {

	public void saveYoutube1(){
        RestTemplate restTemplate =new RestTemplate();
        String url = "https://www.googleapis.com/youtube/v3/search?part=snippet&key=" + youtuekey
                + "&maxResults=10&q=개발자채용";
        ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
        String resBody = response.getBody();
        JSONObject jsonObject = new JSONObject(resBody);
        JSONArray items = jsonObject.getJSONArray("items");
        List<YoutubeDTO> YList = new ArrayList<>();

            for (int i = 0; i < items.length(); i++) {
                try {
                JSONObject videoItem = (JSONObject) items.get(i);
                JSONObject snippet = videoItem.getJSONObject("snippet");
                String videoId = videoItem.getJSONObject("id").getString("videoId");
                String title = snippet.getString("title");
                YoutubeDTO youtubeDTO = new YoutubeDTO();
                youtubeDTO.setKeyword("개발자채용");
                youtubeDTO.setTitle(title);
                youtubeDTO.setVideoId(videoId);
                YList.add(youtubeDTO);
                }catch(JSONException e){

                }
            }


        for (YoutubeDTO youtubeDTO : YList) {
            newsRepository.saveYoutue(youtubeDTO);
        }
    }

}
  • 부가 설명
    • URL은 part=snippet으로 key 와 maxResult는 10개 , 검색어는 개발자 채용
    • YoutubeDTO 에 있는 videoId를 통해서 Youtube 영상을 불러 올 수 있음
    • 따라서 어떤 키워드를 통해 받은 데이터인지, 그리고 그 데이터의 videoId만 저장
    • https://jk25.tistory.com/175 이 포스팅에 youtube 관련 Repository 와 MyBatis Mapper 가 있는데 관련 설명은 생략

 

프로젝트에서 사용 된 Youtube API

 

 

728x90
반응형
LIST