분류 전체보기

Refactoring 기존에 Riot API를 호출하는 부분은 LolSearchAdapter라는 네이밍으로 아래와 같이 개발이 되어있었다. @Service public class LolSearchAdapter { @Value("${lol.api.key}") private String apiKey; private final RestTemplate restTemplate; @Autowired LolSearchAdapter(RestTemplate restTemplate) { this.restTemplate = restTemplate; } /** * User의 게임 목록을 가져옴 * @param matchId * @return */ public MatchRecord searchMatch(String matchI..
문제 QueryDSL을 공부하던 중에 QueryDSL을 이용해서 Join 하는 코드를 개발하는 중이었는데, 이 코드가 제대로 동작하지 않았다. 문제가 되는 코드는 다음과 같았다. @Test @DisplayName("조인 Error가 발생함") void searchErrorTest() { Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); em.persist(teamA); em.persist(teamB); Member member1 = new Member("member1", 10, teamA); Member member2 = new Member("member2", 20, teamA); Member member3 = new Member("memb..
개발 일기 챔피언 이름 번역 롤 API 호출시 챔피언 이름이 영어로 나왔고 사이트에서는 한글로 표현이 되야 하는데, 이를 플러터/웹 사이트 각각 처리해주지 말고 백엔드에서 처리해주는게 어떻겠냐는 플러터 개발자님의 의견이 있었다. 합리적인 의견인 것 같아서 그렇게 하기로 했다. 그리고 또한 한글로 번역을 했을 때 이를 데이터 베이스에 저장을 해야할지, 그래서 Entity도 리팩터링을 해야할지에 대한 생각도 들었다. 결론적으로 챔피언이 많지 않기 때문에 (해봐야 게임 당 10건) 변환 작업시 많은 시간을 소요할 것 같다고 생각되지 않아서 데이터 베이스에 저장하지 않고 비즈니스 로직에서 변환하는 작업을 해주기로 했다. https://developer.riotgames.com/docs/lol 위 사이트에서 La..
Riot은 인게임에서 게임 ID를 복사하면 "게임아이디" 이런식으로 복사되게 해놓고는 게임 아이디로 검색을 호출할 때는 "KR_게임아이디" 이런식으로 받는다. 그래서 이 KR이라는 것을 다음과 같이 LolSearchAdapter에 넣어주고 한동안 Controller를 생성하지 않았다. public MatchRecord searchMatch(String matchId) { try { matchId = "KR_" + matchId; MatchRecord result = restTemplate.getForObject( "https://asia.api.riotgames.com/lol/match/v5/matches/" + matchId + "?api_key=" + apiKey, MatchRecord.class )..
서론 public TokenDto signUp(AppleSignUpRequestDto signUpRequest) { AppleUserInfo appleUserInfo = appleIDTokenValidator.extractAppleUserinfoFromIDToken(signUpRequest.getIdentityToken()); if(signUpRequest.getName() == null || signUpRequest.getName().isEmpty()) { throw new ApiException(AppleTokenStatus.INVALID_SIGNUP_FORM); } appleUserInfo.setName(signUpRequest.getName()); MemberEntity member = Membe..
verify 책으로 공부할 때는 무심코 넘겼던 주제 중에서 verify라는 메서드가 있었다. 원하는 메서드가 몇 번 수행했는지를 추적할 수 있는 메서드이다. 지금 프로젝트가 초기단계인데 벌써 쓸 일이 두 번이나 생겼으니 이에 대해서 기록해볼려고 한다. 사용법 Mockito.verifyNoMoreInteractions: 더 이상 메서드 호출이 없음을 검증합니다. Mockito.verifyZeroInteractions: 메서드 호출이 없었음을 검증합니다. Mockito.verifyInOrder: 메서드 호출 순서를 검증합니다. Mockito.verify(mock, Mockito.atLeast(n)).method(arg1, arg2) : method 메서드가 최소 n 번 호출되었는지 검증합니다. 예시 일단 해..
잘 참고하고 있던 사이트에 작성된 코드가 제대로 되지 않아서 새로 써보는 글이다. Spring Boot Server에 HTTPS 설정을 하기 위해서 사용한다. 설치법 ubuntu certbot 설치 apt-get -y install letscript인증서 발급 순서 certbot을 통한 SSL 발급 sudo certbot certonly --standalone PKCS12 파일로 변환 생성된 인증서는 /etc/letsencrypt/live 폴더에 존재할텐데 해당 폴더로 가서 openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore-aws.p12위와 같이 명령어를 치면 PKCS12로 변환이 된다. 나는 keystore-aws.p12..
이 글을 작성하게 된 계기? 🤔 아래와 같은 S3에 업로드, 삭제 테스트를 작성하던 중 삭제를 할 때 삭제할 파일이 미리 올라가있지 않다면 해당 파일을 삭제할 수 없었다. 그렇다고 삭제하는 코드에서 한 번 더 업로드를 하는 것도 싫었고 생성 삭제를 하나의 테스트로 묶기도 싫었다. @Test @DisplayName("S3에 파일 업로드 테스트") void upload() { // given String fileName = "test.mp4"; MultipartFile file; try { byte[] content = Files.readAllBytes(Paths.get("src/test/resources/test.mp4")); file = new MockMultipartFile(fileName, fileN..
🤔 이 게시물을 작성하게 된 계기 새로 시작한 프로젝트에서 동영상 업로드를 구현할 일이 생겨서 구현하는 중에 에러 메시지를 뱉어내지 않고 Unkown Exception이 자꾸 떨어지는 것을 확인했다. 그리고 게시물을 4~5개 정도 서칭하고 지피팅을 30분째 하고 있을 때 로그 레벨을 Debug 까지 낮추고 나서야 Resolved [org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded] 라는 에러가 발생하고 있는 것을 알게 되었다. 그리고 그 에러 검색을 해보고 나서야 이걸 해결하는 방법에 대해서 알게 되었다. 해결 방법은 application.yaml 파일에 max file size를 설정..
Youtube Data API 구글 클라우드 콘솔에서 Youtube Data Api를 사용설정을 해준다. 👇 코드 찾느라 애먹을 것도 없이 youtube 공식 깃허브에 예제 코드가 올라와 있다. 이해가 안가는 부분만 조금 서칭해보고 사용해주면 된다.
rookied
'분류 전체보기' 카테고리의 글 목록