package project.footballinfo.controller; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import java.io.IOException; import java.util.*; @Controller @RequiredArgsConstructor public class HomeController { /** * 외부 API 를 이용 * 화면에 출력 */ @GetMapping("/") public Str..
PROJECT
package project.footballinfo.controller; import org.springframework.http.RequestEntity; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; import java.util.Map; public class ApiResponse { /** * API 요청 (URL을 통한) * * @param requestURL : API 요청 URL * @return : API 응답값 */ public static ResponseEntity getAPIResponse(String requestURL) { RestTemplate re..
문제1 - 각 리그 국기를 클릭하여, 알맞은 순위표로 변경하기 [문제1 - 해결 방법] : 자바스크립트를 이용하여, "버튼 클릭 이벤트" 와 "AJAX 비동기 통신" 을 이용하여 해결 문제2 - 불필요하게 너무 많은 API 요청으로 인한 오류 발생 "football-data.org" 에서 "free plan" 은 '분당 10회' 로 API 요청이 제한되어있다. [문제2 - 해결 방법] API 요청으로 받은 응답을 Caffeine 캐시를 이용하여 관리한다. 이를 통해 불필요하게 많은 요청을 방지한다. 'build.gradle' dependencies 추가 //Caffeine 캐시 implementation 'org.springframework.boot:spring-boot-starter-cache' imp..
[MatchController.java - 리그 매치 일정 엔드 포인트] //리그 별 매치 일정 검색 (leagueId 기반) //page, pageSize 별로 캐싱 @GetMapping("/matches/league/{leagueId}") @ResponseBody @Cacheable(value = "leagueMatchesCache", key = "#leagueId + '_' + #pageable.pageNumber + '_' + #pageable.pageSize", unless = "#result == null or #result.isEmpty()") public Page getMatchesByLeagueId(@PathVariable Long leagueId, Pageable pageable) th..
1. 프로젝트 스타트 패키지 만들기 [ https://start.spring.io/ ] 2. application.yml 설치 spring: profiles: active: local datasource: url: jdbc:h2:tcp://localhost/~/footballinfo username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: # show_sql: true format_sql: true use_sql_comments: true logging.level: org.hibernate.SQL: debug # org.hibernate.type: trace H2..