# 13 QueryDSL 도입하기
·
프로그래밍/A music in a balloon
풍선 여러개를 조회할때 이미 주운 풍선은 보여선 안된다는 조건 때문에, 조금 복잡한 sql이 필요했다. 처음에는 JPQL을 사용하려 했지만 이거 문법이 뭔지도 잘 모르겠고.. 문서도 오래되어서 보기가 어려웠다.그래서 자동완성을 지원하는 QueryDSL을 사용하게 되었다.  ## 적용 방법이 글은 튜토리얼 같은 것이 아니라, 내가 고민한 것과 막힌 부분에 대해서 적는게 목적이기 때문에 적용 방법을 하나하나 설명하지는 않겠다. 개인적으로는 아래 글이 좋은 것 같으니 필요하다면 참고 바란다.https://tecoble.techcourse.co.kr/post/2021-08-08-basic-querydsl/  ## JPA + QueryDSLQueryDSL 자체는 쿼리를 생성해주는 역할만 하는 것 같다.문서도 아주..
# 12 프론트 개발 - 지도와 위치 정보
·
프로그래밍/A music in a balloon
그동안 개발일기를 안썼는데, 대신 프론트 개발에 열중했다.현재는 풍선을 보여주는 맵 페이지 / 유저 등록 페이지 / 풍선을 생성하는 페이지를 생성했는데, 그중에서 기억에 남는 것들을 정리해보고자 한다. ## 지도를 어디서 가져올까?### Google Map 를 쓰자첫번째 후보는 당연 구글 맵이였다. 구글맵은 api를 제공하는데, API_KEY를 생성해서 사용하면 그만이였다.또, 내가 거의 배낀 “행록” 프로젝트에서도 구글맵을 활용했기 때문에 그냥 그대로 가져왔다.하지만 곧이어 문제가 생겼다. 은근히 이 api 무료 제공 횟수가 짜다!월간 200달러 어치는 무료로 사용 가능한데, 맵을 1000번 렌더링 할때 마다 7달러가 부과된다그러니 달마다 2.8만번 호출 가능하고, 일간 1천번 못 미치는 정도 호출 가..
# 11 바람에 날리는 풍선은 어떻게 구현할까?
·
프로그래밍/A music in a balloon
막상 풍선을 실제로 날리는걸 구현하려고 하니까, 어떻게 풍선을 움직이는 매개체; 바람을 구현할지 의문이 들었다. ## 일직선으로 날리기사실 처음 생각한 방법이 이거였다. 근데 이런 건 인공위성 같다는 의견을 받은 뒤로 이런 방식은 왠지 불편해졌다.일직선으로 도는건 계속 같은 장소만 반복하니 좋지 않아보인다. ## 실제 바람을 시뮬레이션 하기그래서 가장 더 그럴 싸한 바람을 생각했다. 실제 바람을 어디선가 제공할 것 같은 기분이 들었기 때문이다.찾아보니 유럽이나 미국에서 지구 바람과 기온을 예측하는 모델을 가지고 있고, 이 데이터를 제공하고 있었다. (GFS 같은것) ….나는 좀 더 단순한 모델이 필요하다. (컴퓨팅 비용때문에) 그래도 얻은 건 있다. 바람은 극지방으로 움직이기보다는 옆으로 도는 것 같다...
# 10 스프링 예외처리
·
프로그래밍/A music in a balloon
스프링에서는 예외를 처리하는 예제를 쉽게 볼 수 있다. 갓갓 우테코 레포에서 많이 참고했다.이번 글에서는 다양한 예외를 정의하는 것, 구분하는 것, 예외를 사용자에게 어떻게 응답으로 대답해줄지를 다룬다.## 내부 에러 코드 관리하기내부 에러코드를 상수로 관리할 필요가 있다. 이 값을 토대로 어떤 예외의 상세 설명을 가능하게 한다.대충 이렇게만 작성했다.public enum ErrorCode { // 404 USER_NOT_FOUND("The user does not exist"), BALLOON_NOT_FOUND("The balloon does not exist"), // 500 INTERNAL_SERVER_ERROR("Internal server has a problem"),..
# 9 프로젝트 수정
·
프로그래밍/A music in a balloon
~결론~병 대신 풍선이란 표현을 쓸거예요~풍선에 실제 좌표(위도, 경도)를 줄거예요~유저는 지도에서 풍선을 습득하고, 노래를 추천받을 수 있어요~ ## 수정하는 이유프로젝트의 기획을 수정하기로 했다.원래 프로젝트의 의도는 누군가 추천해주는 음악을 받아 듣는다는 취지에서 Music in a Bottle이라 했지만,이건 어쩌면 음악 추천 게시판이나 음악 추천 알고리즘을 이용해 해결 할 수 있을 것이다.병을 음악에 담아서 보내고 받아보는게 재밌는 부분인데 이 점을 실제로 살리지 못하는 것 같다. ## 병을 실제로 지구상에 둥둥 떠다니게 할까?차라리 병에 실제 좌표를 부여하고 이를 Google Map를 이용해 화면에 보여주면 더 멋질 것 같다.그리고 배치 작업을 돌려서 병을 조금씩 이동시키면 될것 같다.구글 맵..
# 8 깃허브 엑션 테스트 적용기
·
프로그래밍/A music in a balloon
파이썬과 노드 환경에서의 테스트는 적용해본 경험이 있기 때문에 자바 환경에서도 거부감 없이 시도해봤다. ## test.yml 구성우분투에 자바를 설치하고, gradlew test를 실행하는 것으로 작성했다.name: Teston: pull_request: branches: - main paths: ["backend/**"] push: branches: - main paths: ["backend/**"]jobs: test: runs-on: ubuntu-latest defaults: run: working-directory: ./backend steps: - uses: actions/checkout@v3 ..
# 7 LazyInitializationException을 보았다!
·
프로그래밍/A music in a balloon
테스트를 작성하다가 Lazy Loading 관련 에러를 만나게 되었다.이런 오류가 왜 발생하는지, 어떻게 해결할 수 있을지 정리했다. ## 어디서 발생했지? 오류는 뭐지?병을 생성하는 api를 호출한 뒤, 실제로 데이터베이스에서 병 레코드가 추가되었는지 확인해야 했다.응답받은 병 id를 이용해 데이터베이스에서 조회했고, 병이 있는지 확인했다.그후 연관객체인 음악 정보를 마저 확인하는데.. 이곳에서 예외가 터졌다.Bottle saved = bottleRepository.findById(bottleResponse.id()).orElseThrow();assertEquals(saved.getSpotifyMusic().getTitle(), bottleResponse.title()); // 이 부분!//org.hi..
# 2 업데이트 했음
·
프로그래밍/Github Pokemon Collection
요즘 자바만 하고 있는데, 파이썬 마려워서 이 프로젝트에서 불편한 점을 손보았다. ## 포켓몬 우선순위포켓몬이 점점 많아지면 위치가 서로 겹치는 경우가 많다.그러면 최근에 생성된 포켓몬이 더 앞으로 오게 되는데, 이 때문에 이상한 경우가 생긴다. 왠지 포켓몬 게임 상 아래에 있는 포켓몬이 앞으로 와야 할 것 같지만 위 스크린샷에서는 아래에 있는 롱스톤이 뒤로가있다.이점을 해결하기 위해 포켓몬을 랜더링할때 랜덤한 오프셋 리스트를 만들어 두고 나서 작은 순서대로 부여했다. 그랬더니 또 문제가 생기는데 최신의 포켓몬이 가장 아래에 놓이는 것이다.그래서 모든 포켓몬에 대해 랜더링 정보를 랜덤하게 생성한 뒤 위치로 정렬 하고 랜더링했다. ## 커스텀 화면 크기화면 크기가 고정되어 있다는게 처음부터 굉장히 거슬렸다..
2jun0
'프로그래밍' 카테고리의 글 목록 (2 Page)