본문 바로가기

프로젝트 이야기/MyLeague API

(4)
[MyLeague] Spring HATEOAS 적용한 향상된 REST API 개발 REST API REST API는 자원의 이름과 HTTP Method로 요청을 구분하여 자원의 상태(또는 정보)를 주고 받는 API를 의미합니다. 예를 들어 선수(Player)들의 정보를 받고 싶다면 다음과 같이 요청할것입니다 : GET /players 또는 1번 선수를 받고 싶다면 다음과 같이 하면 되겠죠 : GET /players/1 그렇다면 1번 선수의 team은 어떻게 하면 좋을까요? : GET /players/1/team 이렇듯 REST API는 주고 받을 정보를 Http Method와 자원의 이름으로 구성된 url을 보고 구분하게 됩니다. 위 사진은 제가만든 MyLeague API 문서 중 Player에 관련된 상태,정보를 다루는 파트입니다. 보다시피 Http Method와 자원 정보를 통해 ..
[MyLeague:bug] 자식 컴포넌트 렌더링시 부모의 일부데이터가 props로 넘어오지 않는 문제 문제상황 Standing.vue LeagueShow.vue LeagueShow.vue는 리그에 대한 전체 정보를 보여주는 컴포넌트이다. 이때 리그 전체 순위를 보여주기 위해 Standing.vue 컴포넌트를 import해서 렌더링하게 된다.(순위표를 보여주는 부분만 남기고 나머지는 생략) 이때 Standing은 LeageShow의 data인 participant(리그 참가팀에 대한 정보)를 props로 받게 된다. 그후 mounting시점에 participant 데이터를 파싱해서 record에 저장한다. Bug props로 넘어온 participant의 데이터가 부족한 문제가 발생하였다. 원인 컴포넌트는 자신들의 마운팅 시점의 mounted()를 실행하고, 마운팅이 된 이후에야 페이지가 렌더링되게 된다...
[MyLeague] 대회 방식에 따른 대응을 위한 데이터베이스 구조 개선 간단한 프로젝트 설명 : MyLeague 다양한 스포츠 리그를 생성하고 관리할 수 있는 웹 서비스. 사용자는 다양한 종목의 스포츠 리그/대회를 생성할 수 있고, 팀, 선수, 대회를 관리할 수 있다. 기존의 DB 구조 기본적으로 6개의 엔티티가 디비를 구성하고 있다. 선수(Player), 팀(Team), 대회/리그(League), 참가팀(Participant), 경기(Match), 전적(Record)이다. 이때 참가팀 엔티티는 대회와 팀을 연결하는 연결 엔티티 역할을 함과 동시에 Record엔티티를 통해 각 리그별 팀의 전적을 저장하고 있다. 선수, 팀, 대회, 경기는 이름 그대로 각 주체의 정보를 담고 있다. 서비스의 확장과 디비의 문제점 현재 위의 데이버베이스 구조에서는 전적(승무패)를 기준으로 순위를..
[MyLeague] 도메인 모델 설계 Player(선수) - Team(팀) : 다대일 관계 하나의 팀은 여러 명의 선수를 가집니다. Player.java public class Player { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; //== 연관관계 편의 메서드 ==// //== 비즈니스 로직 ==// /** * 팀 등록 */ public void registerTeam(Team team) { if (this.team != null) { this.team.getPlayers().remove(this); } this.team = team; if (team != null) { team.getPlayers().add(this); } } ..