escape-room 17

[QueryDSL] org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list 에러

문제 상황 @Override public ThemeDetailDTO themeDetail(Long themeId) { return queryFactory .select(new QThemeDetailDTO( theme.id, theme.name, theme.genre, theme.activity, theme.difficult, theme.limitTime, theme.recommendStart, theme.recommendEnd, theme.info, theme.imageUrl, cafe.id, cafe.name, cafe.domain, cafe.location, Expressions.template(Double.class, "ROUND({0}, 2)", review.rating.avg().coalesce..

escape-room 2023.05.25

[Java] java.time.format.DateTimeParseException: Text '2022-05-12' could not be parsed at index 10 에러 (String 날짜만 -> LocalDateTime 변환)

문제 상황 리뷰 작성할 때 입력받은 플레이날짜(playdate) 를 받아오는 과정에서 해당 에러가 발생하였다. java.time.format.DateTimeParseException: Text '2022-05-12' could not be parsed at index 10 요청은 2022-05-12 와 같이 'yyyy-MM-dd'의 날짜 형식으로 보낸다. '2022-05-12' 을 LocalDateTime 으로 바꾸어보자 현재 에러가 발생한 코드는 다음과 같다 : .playdate(LocalDateTime.parse(playdate)) @Data public class ReviewDTO { private Long themeId; private String nickname; private String pa..

escape-room 2023.05.24

[Spring] Page 객체 내의 필드값 변경하기

문제 상황 @Service @RequiredArgsConstructor public class ThemeService { private final ThemeRepository themeRepository; public Page themeAllList(Pageable pageable) { return themeRepository.themeAllListPage(pageable); } } 현재 Service단에서는 Repository단에서 받은 Page 를 그대로 넘겨주고 있다. @Getter public class ThemeListDTO { private Long themeId; private String themeName; private String genre; private Integer recommen..

escape-room 2023.05.24

[QueryDSL] 소수점 반올림하기, ROUND 함수 사용하기 (ex.소수점 n번째 자리까지 반올림하기)

테마 리스트에서 리뷰 평점을 출력하는데 SQL문이 그냥 ~ avg(reviews.rating) ~ 으로 나가기 때문에 저렇게 표시되는 것을 볼 수 있었다. 소수점 둘째짜리까지 나오도록 반올림해서 출력해보자 ! 현재 상태는 select 절 안에 아래와 같이 입력되어 있다. review.rating.avg().coalesce(-1.0) 시도 1. round() 함수 - 실패 review.rating.avg().coalesce(-1.0).round() 이와 같이 소수점 첫째자리에서 반올림된다. round(2) 와 같이 파라미터를 넣어보려고 했지만 불가능했다. SQL문도 round(coalesce(avg(reviews2_.rating), -1.0)) 으로 출력되는 것을 확인 .. 시도 2. Expressions..

escape-room 2023.05.23

[QueryDSL] JOIN 2번 사용하여 테마 전체 리스트 조회하기 (+복잡한 경우의 페이징 처리 방법, 조회 및 정렬에서의 NULL 처리 방법)

만들고자 한 목표 방탈출 테마 리스트. 이를 위한 DTO는 다음과 같다. @Getter public class ThemeListDTO { private Long themeId; private String themeName; private String genre; private Integer recommendStart; private Integer recommendEnd; private String imageUrl; private String cafeName; private String location; private Double ratingAvg; } 테마 리스트에 테마에 대한 정보, 해당 테마가 소속된 방탈출 카페에 대한 정보, 해당 테마에 달린 리뷰들의 평균 점수까지 필요하다. 따라서 Theme, C..

escape-room 2023.05.23

[Ubuntu] Nginx, Let's Encrypt를 사용하여 HTTPS 설정하기 (+에러 해결)

HTTP로 연결하였을 때 위와 같은 경고 문구를 확인할 수 있다. HTTP 프로토콜은 Header, Body 등의 평문 데이터가 서버로 전송될 때 모두 노출되므로 보안에 취약하다는 문제가 있다. 그래서 일반적으로는 보안이 강화된 HTTPS 프로토콜을 사용한다. 이를 적용하기 위해 SSL 인증서를 발급 받고, 웹 서버에서 SSL 프로토콜을 적용해보자 ! (HTTPS는 SSL 프로토콜로 암호화한 HTTP 프로토콜이다.) 0. 기본 정보 Nginx : 웹 서버 중, 하나로 톰캣과 같은 WAS 앞단에 위치하여 리버스 프록시 서버 역할을 할 수 있다. 대표적으로 로드밸런싱, 포트 포워딩, SSL 설정 등이 있다. 이번 프로젝트에서는 Reverse Proxy Server로 활용해서 이 서버에 SSL 인증서를 발급해..

escape-room 2023.05.19

[AWS] DNS 설정하기 : 도메인과 EC2 탄력적 IP 연결 (with. 가비아)

DNS 란 ? 지금은 EC2의 퍼블릭 아이피를 이용하여 터미널 외부에서 스프링과 통신하고 있다. 하지만 외부에 퍼블릭 아이피를 공개하는 것은 위험하고, 숫자로 된 아이피를 기억하기 어렵다. 따라서 아이피를 우리가 보기 쉬운 문자 형태인 도메인으로 바꾸는 것을 선호한다. 이때 아이피를 도메인으로 바꿔 주고, 도메인을 다시 아이피로 변환하는 시스템을 DNS라고 한다. 1. 도메인 발급받기 : 가비아에서 도메인 구매 https://www.gabia.com/ 웹을 넘어 클라우드로. 가비아 그룹웨어부터 멀티클라우드까지 하나의 클라우드 허브 www.gabia.com .shop, .store 은 500원에 .site 는 1900원에 구매할 수 있다. 또한 무료로 도메인을 발급해주는 사이트들도 있으니 편한 방법으로 도..

escape-room 2023.05.19

[QueryDSL/JPA] 동적 쿼리 작성하기 (Join 사용 X)

만들고자 하는 기능 : [GET] 카페 검색 (지역, 키워드 검색 동적 쿼리) API 요청 예시 및 설명 https://{{host}}/cafe/search?loc=홍대&keyword=비밀 : 지역이 홍대이면서 방탈출 카페 이름에 비밀이 포함되는 카페 list 반환 https://{{host}}/cafe/search?loc=홍대&loc=건대&keyword=비밀 : 지역이 홍대 또는 건대이면서 카페 이름에 비밀이 포함되는 list 반환 https://{{host}}/cafe/search : 검색 조건이 없으므로 전체 list 반환 코드 (Github) https://github.com/maemae22/escape-room/pull/23 feat: #19 - [GET] 카페 검색 (지역, 키워드 검색 동적 ..

escape-room 2023.05.19

[Spring] Required request parameter '인자' for method parameter type String is not present 에러

방탈출 카페 검색을 위해 동적 쿼리를 사용하는 api를 테스트 하는 도중 2023-05-19 01:23:48.763 WARN 30972 --- [nio-8080-exec-4] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'loc' for method parameter type List is not present] 2023-05-19 01:24:23.279 WARN 30972 --- [nio-8080-exec-5] .w.s.m.s.DefaultHandlerExceptionResolver..

escape-room 2023.05.19