Taaewoo
Data Engineering Blog
Taaewoo
전체 방문자
오늘
어제
  • 분류 전체보기 (67)
    • Computer Science (16)
      • Algorithm (6)
      • OS (1)
      • Java (2)
      • C++ (6)
      • Python (1)
    • Hadoop Ecosystem (27)
      • Hadoop (6)
      • Spark (5)
      • NiFi (6)
      • Hive (9)
      • Kafka (1)
    • BigData Engineering (14)
      • Jupyter (1)
      • Docker (3)
      • CDH (3)
      • Riot Data Pipeline (7)
    • Back-end 개발 (0)
      • Spring (0)
    • Algorithm 문제 풀이 (9)
      • 백준 (5)
      • LeetCode (4)
    • Conference (1)
      • LINE DEVELOPER DAY 2021 (1)
      • if(kakao) 2021 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • algorithm
  • 빅데이터
  • docker
  • 프로그래밍
  • Coding
  • spark
  • C++
  • Hive
  • 정렬
  • NiFi
  • java
  • metastore
  • CS
  • 코딩
  • sort
  • 알고리즘
  • hdfs
  • kafka
  • hadoop
  • BigData

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Taaewoo

Data Engineering Blog

Riot Data Pipeline 구축하기 #2 - Spring boot 프로젝트 생성 및 Riot API 사용해보기
BigData Engineering/Riot Data Pipeline

Riot Data Pipeline 구축하기 #2 - Spring boot 프로젝트 생성 및 Riot API 사용해보기

2022. 3. 26. 04:58

 지난번 글에서 Riot API를 위한 Product 등록까지 마쳤고 며칠 내로 승인되어 Approved 상태가 되었습니다. 그래서 Java Spring을 이용해서 간단한 API 사용을 해봤습니다.

 

 

Spring boot 시작하기

 

Spring 프로젝트를 만들기 위해서 start.spring.io 사이트에 접속해 아래와 같이 여러가지 설정을 해줬습니다. 이렇게 설정을 해주고 아래에 "Generate" 버튼을 눌러주면 zip 파일 하나가 다운로드되는데, 해당 파일을 압축 해제하면 프로젝트 관련 파일들을 확인할 수 있습니다. 프로젝트 파일을 확인 후 저는 IntelliJ를 사용하여 코딩을 진행했습니다.

 

Riot API 확인하기

 

 Riot Developer 페이지에서 내 Product 페이지에 들어가면 사용할 수 있는 API 목록들을 볼 수 있습니다. 저는 이 중에서 계정이름을 이용한 정보 조회 API를 사용해보려고 했습니다. API 이름은 "/lol/summoner/v4/summoners/by-name/{summonerName}" 입니다.

 

 

Java Spring 프로그래밍

 

 이제부터는 API 호출을 위한 Java Spring 프로그래밍을 하려고 합니다. 간단한 API 호출 예제를 위해 아래의 내용을 프로그래밍했습니다.

    - SummonerController

    - SummonerService

    - SummonerDTO

 

 Riot API는 호출을 위해서 Product 등록을 통해 받은 Key 값이 필요합니다. 하지만 처음에는 이 키값을 Java Spring 프로그래밍을 할 때 어떻게 적용해야 할지 몰랐습니다. 

 결론적으로는 Riot Develpoer 페이지에서 힌트를 얻을 수 있었습니다. 두 가지 방법이 있었는데 Query parameter에 넣는 방법과 Http header에 넣어서 보내는 방법이 있었습니다. 저는 간편하게 Query Param 방식을 이용했습니다. SummonerService에서 API Key 값을 사용하는데 하드코딩으로 키 값을 코드에 적는 것은 바람직하지 못한 방법입니다. 이를 해결하기 위해 "riotApiKey.properties" 라는 파일에 Key 값을 적어놨고 이를 코드에서 참조하도록 했습니다. ( 해당 파일은 .gitignore 에 추가하여 공유되지 않도록 했습니다. )

 그리고 Riot Developer 페이지는 Response 내용과 DTO 이름도 명시해놨습니다. 이에 맞게 똑같은 형식으로 SummonerDTO를 구현했습니다. 이후에 데이터를 사용하는데 있어 여러가지 이유로 DTO를 정의하지 않고 사용했습니다. 

 

 아래 코드들은 처음에 작성한 내용이고 현재는 코드 추가 및 수정이 이루어졌습니다.  전체 코드는 아래의 Github 링크에서 확인할 수 있습니다.

https://github.com/Taaewoo/Riot_Data_Pipeline

 

GitHub - Taaewoo/Riot_Data_Pipeline

Contribute to Taaewoo/Riot_Data_Pipeline development by creating an account on GitHub.

github.com

 

SummonerController

@Controller
@RequiredArgsConstructor
public class SummonerController {

    private final SummonerService summonerService;

    @PostMapping(value = "/summonerByName")
    @ResponseBody
    public SummonerDTO callSummonerByName(String summonerName){
    
        summonerName = summonerName.replaceAll(" ","%20");

        SummonerDTO apiResult = summonerService.callRiotAPISummonerByName(summonerName);

        return apiResult;
    }
}

 

SummonerService

@Service
@PropertySource(ignoreResourceNotFound = false, value = "classpath:riotApiKey.properties")
public class SummonerService {

    private ObjectMapper objectMapper = new ObjectMapper();

    @Value("${riot.api.key}")
    private String mykey;

    public SummonerDTO callRiotAPISummonerByName(String summonerName){

        SummonerDTO result;

        String serverUrl = "https://kr.api.riotgames.com";

        try {
            HttpClient client = HttpClientBuilder.create().build();
            HttpGet request = new HttpGet(serverUrl + "/lol/summoner/v4/summoners/by-name/" + summonerName + "?api_key=" + mykey);

            HttpResponse response = client.execute(request);

            if(response.getStatusLine().getStatusCode() != 200){
                return null;
            }

            HttpEntity entity = response.getEntity();
            result = objectMapper.readValue(entity.getContent(), SummonerDTO.class);

        } catch (IOException e){
            e.printStackTrace();
            return null;
        }

        return result;
    }
}

 

SummonerDTO

import lombok.Data;

@Data
public class SummonerDTO {
    private String accountId;
    private int profileIconId;
    private long revisionDate;
    private String name;
    private String id;
    private String puuid;
    private long summonerLevel;
}

 

결과 확인

 

 프로그래밍을 마치고 올바른 서비스와 결과 값이 나오는지 확인하기 위해 Postman을 사용했습니다. 결과는 문제없이 성공적으로 나왔습니다.

저작자표시 비영리 (새창열림)

'BigData Engineering > Riot Data Pipeline' 카테고리의 다른 글

Riot Data Pipeline 구축하기 #6 - Spark Streaming으로 Kafka Consumer 구현 및 HDFS에 데이터 저장하기  (1) 2023.02.13
Riot Data Pipeline 구축하기 #5 - Kafka Producer client 구현 및 데이터 전처리 과정  (0) 2022.05.30
Riot Data Pipeline 구축하기 #4 - API response 데이터 저장 타입 변경 및 Kafka 클러스터 생성  (0) 2022.04.11
Riot Data Pipeline 구축하기 #3 - 필요한 Riot API 리스트 정리 & 플랫폼 아키텍처 설계  (0) 2022.04.03
Riot Data Pipeline 구축하기 #1 - Riot API 사용을 위한 Product 등록하기  (0) 2022.03.23
    'BigData Engineering/Riot Data Pipeline' 카테고리의 다른 글
    • Riot Data Pipeline 구축하기 #5 - Kafka Producer client 구현 및 데이터 전처리 과정
    • Riot Data Pipeline 구축하기 #4 - API response 데이터 저장 타입 변경 및 Kafka 클러스터 생성
    • Riot Data Pipeline 구축하기 #3 - 필요한 Riot API 리스트 정리 & 플랫폼 아키텍처 설계
    • Riot Data Pipeline 구축하기 #1 - Riot API 사용을 위한 Product 등록하기
    Taaewoo
    Taaewoo

    티스토리툴바