목록PopcornMate (9)
코딩블로그
이미 진행이 된 프로젝트에 합류를 하다 보니 코드 컨벤션 맞추어서 해야하는데 오랜만에 팀 프로젝트로 진행하다 보니 컨벤션 실수도 하고 새로 알게 된 점들도 있다. 그중에서 Spotless이라는 플러그인을 알게 되었는데, 테스트 코드의 컨벤션을 지킬 수 있게 도와준다. 나름 유용할 것 같아서 팝콘메이트에도 적용을 해보았다. (과거에 한창 프론트엔드 할 때 VSCode의 prettier 플러그인을 애용했는데 스프링 부트에서도 비슷한 플러그인을 제공해준다니!!) Spotless란? Junit5에서 컨벤션을 지키고 쉽게 유지보수하기 위해 사용하는 플러그인이다 메인 루트의 Build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.2.1' ..
상영회 생성하는 API가 잘 호출이 되는지 확인하기 위한 테스트를 구성해보아서 간단하게 200뜨는 것 보고 처음에는 "아~ 잘되네~~"하고 넘어갔는데 다른 사람들 코드를 참고해보니까 실제로 API를 호출하고 Body안에 원하는 Response까지 받아와야 되는 것을 깨닫게 되었다. 그래서 Body안에 원하는 값을 받아오기 위해서 트러블슈팅을 해보았다. 나는 Controller를 테스트하기 위해서 @AutoConfigureMockMvc 어노테이션을 사용한다 웹 환경에서는 반드시 서블릿 컨테이너가 구동되고 DispatchServlet 객체가 메모리에 올라가야 한다. 그래서 저 @AutoConfigureMockMvc 어노테이션을 사용해서 서블릿 컨테이너를 Mocking하여 실제로 테스트용 모형 컨테이너를 사용..
이번에 팝콘메이트 하면서 통신할 때 에러 코드나 짤막한 에러 원인을 받아 볼 수 있게 하였는데, 그 정보들만 가지고 원인을 해결하지 못할 때가 있다 보니 리팩토링 할 겸 팀 공용 디스코드에 로그 전체를 볼 수 있는 시스템을 만들어 보려고 한다 먼저 팀이 사용하는 디스코드에서 웹후크를 만들려면 채널 설정 -> 연동 들어가서 웹후크 만들기를 누르면 된다! 간단한 작업이다 본격적으로 코드 구현에 대해 알아보자 (1) FeignClient 이용하는 방식 먼저 DiscordClient 클래스에 Controller 클래스에 메서드 짜주는 것처럼 인터셉터를 위한 메서드를 써준다 @FeignClient( name = "discord-client", url = "웹후크 URL", configuration = Discor..
내가 작성한 ScreeningController에서 멀티 모듈환경에서 테스트 코드를 짜는 것은 흔하게 구글링 하면 나오는 설정들과 달라서 설정하는게 조금 힘들었다 먼저 전체적인 테스트 코드 환경을 확인해보자 📙ApiIntegrateProfileResolver public class ApiIntegrateProfileResolver implements ActiveProfilesResolver { @Override public String[] resolve(Class testClass) { // some code to find out your active profiles return new String[] {"test","infra","domain","core"}; } } 테스트를 실행하면 어떤 profil..
팝콘메이트에서는 상영회를 찜하기를 한다면 상영회 하루 전날 아침 열 시에 본인이 찜한 상영회에 대한 알림을 보내는 기능이 있다. 주변에 인앱 푸쉬 알람을 구현해본 친구들이 별로 없었기에 깃허브 레퍼런스를 찾기도 힘들었고 시작하기 전에는 막막했지만 막상 도전 해보니 공식문서에도 친절하게 나와 있고 깃허브 돌아다니면서 참고도 많이 해보았다 https://firebase.google.com/docs/cloud-messaging/server?hl=ko&_gl=1*gph5n9*_up*MQ..*_ga*MTYwNzk4NTg5MS4xNzEwMTY1MzAz*_ga_CW55HF8NVT*MTcxMDE2NTMwMy4xLjAuMTcxMDE2NTMwMy4wLjAuMA.. Firebase 클라우드 메시징 Google I/O 202..
팝콘메이트에서 프론트 분들과 통신을 진행하면서 갑자기 image를 "Multipart"로 전송을 하면 500에러가 뜬다는 오류를 전달 받았다. 단순한 스크린 샷은 업로드가 수월했지만, 폰의 카메라에서 찍은 사진을 업로드 하려고 할 때 용량 문제로 업로드가 되지 않고 있었다. 이에 대한 해결책을 찾던 도중, image api를 따로 만들어서 S3에 pre-sign된 링크를 발급 받아 그 곳으로 이미지를 PUT하는 방식, 즉 Presigned Url 방식으로 바꿔 문제를 해결하였다. 1. 기존의 Multipart방식 S3에 하나의 대용량 파일을 업로드할 때 하나의 객체를 여러 부분으로 나누어 처리량을 향상 시키고 업로드를 실패한다면 빠른 복구를 한다는 장점이 있다. 나누어 처리를 하여 나누어진 조각들을 S3..
우아한 객체지향 by 우아한형제들 개발실장 조영호님 강연을 보고 정리하신 https://jaehoney.tistory.com/311 패키지 의존성 사이클 검사 및 개선하기! (feat. IntelliJ) 우아한 테크 세미나에서 발표한 우아한 객체지향 by 우아한형제들 개발실장 조영호님 강연을 무척 재밌게 봤다. Link: https://www.youtube.com/watch?v=dJ5C4qRqAgA&t=5217s 해당 영상에는 패키지 의존성 관련 jaehoney.tistory.com 님의 블로그를 보고 팝콘메이트의 패키지 의존성에 대한 검사를 하려고 한다. 서버를 혼자 구축하기도 하였고 분명 패키지 의존성 사이클이 있을 것같아 검사해보기로 하였다 무엇보다 멀티모듈을 사용하여 순환 참조문제에 대해 검토를 ..
팝콘메이트에서는 검색 기능이 있는데, 프론트 분들이 무한 스크롤 형식으로 넘겨달라고 부탁하셔서 Querydsl 적용해보는 겸 구현해 보았다! 💖 Controller @GetMapping("/screenings/search") public SliceResponse searchScreenings( @RequestParam(required = false,value = "title") String title, @RequestParam(required = false,value= "category") Category category, @ParameterObject @PageableDefault(size = 10) Pageable pageable ) { return screeningAdaptor.searchScree..